Example #1
0
 def B_dominate(self, force_domination):
     """Second step in publishing: domination."""
     self.log.debug("* Step B: dominating packages")
     judgejudy = Dominator(self.log, self.archive)
     for distroseries in self.distro.series:
         for pocket in self.archive.getPockets():
             if not self.isAllowed(distroseries, pocket):
                 continue
             if not force_domination:
                 if not self.isDirty(distroseries, pocket):
                     self.log.debug("Skipping domination for %s/%s" %
                                (distroseries.name, pocket.name))
                     continue
                 self.checkDirtySuiteBeforePublishing(distroseries, pocket)
             judgejudy.judgeAndDominate(distroseries, pocket)
Example #2
0
def dominate_imported_source_packages(txn, logger, distro_name, series_name,
                                      pocket, packages_map):
    """Perform domination."""
    series = getUtility(IDistributionSet)[distro_name].getSeries(series_name)
    dominator = Dominator(logger, series.main_archive)

    # Dominate all packages published in the series.  This includes all
    # packages listed in the Sources file we imported, but also packages
    # that have been recently deleted.
    package_counts = dominator.findPublishedSourcePackageNames(series, pocket)
    for package_name, pub_count in package_counts:
        entries = packages_map.src_map.get(package_name, [])
        live_versions = [
            entry['Version'] for entry in entries if 'Version' in entry]

        # Gina import just ensured that any live version in the Sources
        # file has a Published publication.  So there should be at least
        # as many Published publications as live versions.
        if pub_count < len(live_versions):
            logger.warn(
                "Package %s has fewer live source publications (%s) than "
                "live versions (%s).  The archive may be broken in some "
                "way.",
                package_name, pub_count, len(live_versions))

        # Domination can only turn Published publications into
        # non-Published ones, and ensures that we end up with one
        # Published publication per live version.  Thus, if there are as
        # many Published publications as live versions, there is no
        # domination to do.  We skip these as an optimization.  Without
        # it, dominating a single Debian series takes hours.
        # Relax the immutability check, since Debian release suites don't
        # become immutable on release as Launchpad normally expects.
        if pub_count != len(live_versions):
            logger.debug("Dominating %s.", package_name)
            dominator.dominateSourceVersions(
                series, pocket, package_name, live_versions,
                immutable_check=False)
            txn.commit()
        else:
            logger.debug2(
                "Skipping domination for %s: %d live version(s) and "
                "publication(s).", package_name, pub_count)
Example #3
0
def dominate_imported_source_packages(txn, logger, distro_name, series_name,
                                      pocket, packages_map):
    """Perform domination."""
    series = getUtility(IDistributionSet)[distro_name].getSeries(series_name)
    dominator = Dominator(logger, series.main_archive)

    # Dominate all packages published in the series.  This includes all
    # packages listed in the Sources file we imported, but also packages
    # that have been recently deleted.
    package_counts = dominator.findPublishedSourcePackageNames(series, pocket)
    for package_name, pub_count in package_counts:
        entries = packages_map.src_map.get(package_name, [])
        live_versions = [
            entry['Version'] for entry in entries if 'Version' in entry]

        # Gina import just ensured that any live version in the Sources
        # file has a Published publication.  So there should be at least
        # as many Published publications as live versions.
        if pub_count < len(live_versions):
            logger.warn(
                "Package %s has fewer live source publications (%s) than "
                "live versions (%s).  The archive may be broken in some "
                "way.",
                package_name, pub_count, len(live_versions))

        # Domination can only turn Published publications into
        # non-Published ones, and ensures that we end up with one
        # Published publication per live version.  Thus, if there are as
        # many Published publications as live versions, there is no
        # domination to do.  We skip these as an optimization.  Without
        # it, dominating a single Debian series takes hours.
        if pub_count != len(live_versions):
            logger.debug("Dominating %s.", package_name)
            dominator.dominateSourceVersions(
                series, pocket, package_name, live_versions)
            txn.commit()
        else:
            logger.debug2(
                "Skipping domination for %s: %d live version(s) and "
                "publication(s).", package_name, pub_count)