def removeOld(cls, distro, archive, log): """Delete any cache records for removed packages. Also purges all existing cache records for disabled archives. :param archive: target `IArchive`. :param log: the context logger object able to print DEBUG level messages. """ # Get the set of source package names to deal with. spns = set(SourcePackageName.select(""" SourcePackagePublishingHistory.distroseries = DistroSeries.id AND DistroSeries.distribution = %s AND Archive.id = %s AND SourcePackagePublishingHistory.archive = Archive.id AND SourcePackagePublishingHistory.sourcepackagename = SourcePackageName.id AND SourcePackagePublishingHistory.dateremoved is NULL AND Archive.enabled = TRUE """ % sqlvalues(distro, archive), distinct=True, clauseTables=[ 'Archive', 'DistroSeries', 'SourcePackagePublishingHistory'])) # Remove the cache entries for packages we no longer publish. for cache in cls._find(distro, archive): if cache.sourcepackagename not in spns: log.debug( "Removing source cache for '%s' (%s)" % (cache.name, cache.id)) cache.destroySelf()
def checkSource(self, source, version, distroseries): """Check if a sourcepackagerelease is already on lp db. Returns the sourcepackagerelease if exists or none if not. """ try: spname = SourcePackageName.byName(source) except SQLObjectNotFound: return None # Check if this sourcepackagerelease already exists using name and # version return self._getSource(spname, version, distroseries)
def updateAll(cls, distro, archive, log, ztm, commit_chunk=500): """Update the source package cache. Consider every non-REMOVED sourcepackage and entirely skips updates for disabled archives. :param archive: target `IArchive`; :param log: logger object for printing debug level information; :param ztm: transaction used for partial commits, every chunk of 'commit_chunk' updates is committed; :param commit_chunk: number of updates before commit, defaults to 500. :return the number packages updated done """ # Do not create cache entries for disabled archives. if not archive.enabled: return # Get the set of source package names to deal with. spns = list(SourcePackageName.select(""" SourcePackagePublishingHistory.distroseries = DistroSeries.id AND DistroSeries.distribution = %s AND SourcePackagePublishingHistory.archive = %s AND SourcePackagePublishingHistory.sourcepackagename = SourcePackageName.id AND SourcePackagePublishingHistory.dateremoved is NULL """ % sqlvalues(distro, archive), distinct=True, orderBy="name", clauseTables=['SourcePackagePublishingHistory', 'DistroSeries'])) number_of_updates = 0 chunk_size = 0 for spn in spns: log.debug("Considering source '%s'" % spn.name) cls._update(distro, spn, archive, log) chunk_size += 1 number_of_updates += 1 if chunk_size == commit_chunk: chunk_size = 0 log.debug("Committing") ztm.commit() return number_of_updates
def ensureSourcePackageName(self, name): return SourcePackageName.ensure(name)
def sourcepackagename(self): return SourcePackageName.get(self.metadata['sourcepackagename'])