~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/archivepublisher/scripts/publish_ftpmaster.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-05-09 14:37:34 UTC
  • mfrom: (13000.1.3 bug-779701)
  • Revision ID: launchpad@pqm.canonical.com-20110509143734-ilncp28vyugifjbq
[r=henninge][bug=779701] Create distroseries indexes per suite.

Show diffs side-by-side

added added

removed removed

Lines of Context:
228
228
            (archive.purpose, getPubConfig(archive))
229
229
            for archive in self.archives)
230
230
 
231
 
    def locateIndexesMarker(self, distroseries):
 
231
    def locateIndexesMarker(self, suite):
232
232
        """Give path for marker file whose presence marks index creation.
233
233
 
234
 
        The file will be created once the archive indexes for
235
 
        `distroseries` have been created.  This is how future runs will
236
 
        know that this work is done.
 
234
        The file will be created once the archive indexes for `suite`
 
235
        have been created.  This is how future runs will know that this
 
236
        work is done.
237
237
        """
238
238
        archive_root = self.configs[ArchivePurpose.PRIMARY].archiveroot
239
 
        return os.path.join(
240
 
            archive_root, ".created-indexes-for-%s" % distroseries.name)
 
239
        return os.path.join(archive_root, ".created-indexes-for-%s" % suite)
241
240
 
242
 
    def needsIndexesCreated(self, distroseries):
243
 
        """Does `distroseries` still need its archive indexes created?
 
241
    def listSuitesNeedingIndexes(self, distroseries):
 
242
        """Find suites in `distroseries` that need indexes created.
244
243
 
245
244
        Checks for the marker left by `markIndexCreationComplete`.
246
245
        """
249
248
            # is in any other state yet has not been marked as having
250
249
            # its indexes created, that's because it predates automatic
251
250
            # index creation.
252
 
            return False
 
251
            return []
253
252
        distro = distroseries.distribution
254
253
        publisher_config_set = getUtility(IPublisherConfigSet)
255
254
        if publisher_config_set.getByDistribution(distro) is None:
256
255
            # We won't be able to do a thing without a publisher config,
257
256
            # but that's alright: we have those for all distributions
258
257
            # that we want to publish.
259
 
            return False
260
 
        return not file_exists(self.locateIndexesMarker(distroseries))
261
 
 
262
 
    def markIndexCreationComplete(self, distroseries):
263
 
        """Note that archive indexes for `distroseries` have been created.
264
 
 
265
 
        This tells `needsIndexesCreated` that no, this series no longer needs
266
 
        archive indexes to be set up.
 
258
            return []
 
259
 
 
260
        # May need indexes for this series.
 
261
        suites = [
 
262
            distroseries.getSuite(pocket)
 
263
            for pocket in pocketsuffix.iterkeys()]
 
264
        return [
 
265
            suite for suite in suites
 
266
                if not file_exists(self.locateIndexesMarker(suite))]
 
267
 
 
268
    def markIndexCreationComplete(self, suite):
 
269
        """Note that archive indexes for `suite` have been created.
 
270
 
 
271
        This tells `listSuitesNeedingIndexes` that no, this suite no
 
272
        longer needs archive indexes to be set up.
267
273
        """
268
 
        with file(self.locateIndexesMarker(distroseries), "w") as marker:
 
274
        with file(self.locateIndexesMarker(suite), "w") as marker:
269
275
            marker.write(
270
276
                "Indexes for %s were created on %s.\n"
271
 
                % (distroseries, datetime.now(utc)))
 
277
                % (suite, datetime.now(utc)))
272
278
 
273
 
    def createIndexes(self, distroseries):
 
279
    def createIndexes(self, suite):
274
280
        """Create archive indexes for `distroseries`."""
275
 
        self.logger.info(
276
 
            "Creating archive indexes for series %s.", distroseries)
277
 
        suites = [
278
 
            distroseries.getSuite(pocket)
279
 
            for pocket in pocketsuffix.iterkeys()]
280
 
        self.runPublishDistro(args=['-A'], suites=suites)
281
 
        self.markIndexCreationComplete(distroseries)
 
281
        self.logger.info("Creating archive indexes for %s.", suite)
 
282
        self.runPublishDistro(args=['-A'], suites=[suite])
 
283
        self.markIndexCreationComplete(suite)
282
284
 
283
285
    def processAccepted(self):
284
286
        """Run the process-accepted script."""
556
558
        self.recoverWorkingDists()
557
559
 
558
560
        for series in self.distribution.series:
559
 
            if self.needsIndexesCreated(series):
560
 
                self.createIndexes(series)
 
561
            suites_needing_indexes = self.listSuitesNeedingIndexes(series)
 
562
            if len(suites_needing_indexes) > 0:
 
563
                for suite in suites_needing_indexes:
 
564
                    self.createIndexes(suite)
561
565
                # Don't try to do too much in one run.  Leave the rest
562
566
                # of the work for next time.
563
567
                return