def test_dominate_imported_source_packages_dominates_deletions(self): # dominate_imported_source_packages dominates the source # packages that have been deleted from the Sources lists that # Gina imports. series = self.factory.makeDistroSeries() pocket = PackagePublishingPocket.RELEASE package = self.factory.makeSourcePackageName() pubs = [ self.factory.makeSourcePackagePublishingHistory( archive=series.main_archive, distroseries=series, pocket=pocket, status=PackagePublishingStatus.PUBLISHED, sourcepackagerelease=self.factory.makeSourcePackageRelease(sourcepackagename=package, version=version), ) for version in ["1.0", "1.1", "1.1a"] ] # In this scenario, 1.0 is a superseded release. pubs[0].supersede() logger = DevNullLogger() txn = FakeTransaction() dominate_imported_source_packages( txn, logger, series.distribution.name, series.name, pocket, FakePackagesMap({}) ) # The older, superseded release stays superseded; but the # releases that dropped out of the imported Sources list without # known successors are marked deleted. self.assertEqual( [PackagePublishingStatus.SUPERSEDED, PackagePublishingStatus.DELETED, PackagePublishingStatus.DELETED], [pub.status for pub in pubs], )
def test_dominate_imported_source_packages_dominates_deletions(self): # dominate_imported_source_packages dominates the source # packages that have been deleted from the Sources lists that # Gina imports. series = self.factory.makeDistroSeries() pocket = PackagePublishingPocket.RELEASE package = self.factory.makeSourcePackageName() pubs = [ self.factory.makeSourcePackagePublishingHistory( archive=series.main_archive, distroseries=series, pocket=pocket, status=PackagePublishingStatus.PUBLISHED, sourcepackagerelease=self.factory.makeSourcePackageRelease( sourcepackagename=package, version=version)) for version in ['1.0', '1.1', '1.1a']] # In this scenario, 1.0 is a superseded release. pubs[0].supersede() logger = DevNullLogger() txn = FakeTransaction() dominate_imported_source_packages( txn, logger, series.distribution.name, series.name, pocket, FakePackagesMap({})) # The older, superseded release stays superseded; but the # releases that dropped out of the imported Sources list without # known successors are marked deleted. self.assertPublishingStates( pubs, [PackagePublishingStatus.SUPERSEDED, PackagePublishingStatus.DELETED, PackagePublishingStatus.DELETED])
def test_dominate_imported_source_packages_dominates_imports(self): # dominate_imported_source_packages dominates the source # packages that Gina imports. logger = DevNullLogger() txn = FakeTransaction() series = self.factory.makeDistroSeries() pocket = PackagePublishingPocket.RELEASE package = self.factory.makeSourcePackageName() # Realistic situation: there's an older, superseded publication; # a series of active ones; and a newer, pending publication # that's not in the Sources lists yet. # Gina dominates the Published ones and leaves the rest alone. old_spph = self.factory.makeSourcePackagePublishingHistory( distroseries=series, archive=series.main_archive, pocket=pocket, status=PackagePublishingStatus.SUPERSEDED, sourcepackagerelease=self.factory.makeSourcePackageRelease( sourcepackagename=package, version='1.0')) active_spphs = [ self.factory.makeSourcePackagePublishingHistory( distroseries=series, archive=series.main_archive, pocket=pocket, status=PackagePublishingStatus.PUBLISHED, sourcepackagerelease=self.factory.makeSourcePackageRelease( sourcepackagename=package, version=version)) for version in ['1.1', '1.1.1', '1.1.1.1'] ] new_spph = self.factory.makeSourcePackagePublishingHistory( distroseries=series, archive=series.main_archive, pocket=pocket, status=PackagePublishingStatus.PENDING, sourcepackagerelease=self.factory.makeSourcePackageRelease( sourcepackagename=package, version='1.2')) spphs = [old_spph] + active_spphs + [new_spph] # Of the active publications, in this scenario, only one version # matches what Gina finds in the Sources list. It stays # published; older active publications are superseded, newer # ones deleted. dominate_imported_source_packages( txn, logger, series.distribution.name, series.name, pocket, FakePackagesMap({package.name: [{ 'Version': '1.1.1' }]})) self.assertEqual([ PackagePublishingStatus.SUPERSEDED, PackagePublishingStatus.SUPERSEDED, PackagePublishingStatus.PUBLISHED, PackagePublishingStatus.DELETED, PackagePublishingStatus.PENDING, ], [pub.status for pub in spphs])
def test_dominate_imported_sources_dominates_supported_series(self): series = self.factory.makeDistroSeries() pocket = PackagePublishingPocket.RELEASE package = self.factory.makeSourcePackageName() pubs = [ self.factory.makeSourcePackagePublishingHistory( archive=series.main_archive, distroseries=series, pocket=pocket, status=PackagePublishingStatus.PUBLISHED, sourcepackagerelease=self.factory.makeSourcePackageRelease( sourcepackagename=package, version=version)) for version in ['1.0', '1.1', '1.1a']] # In this scenario, 1.0 is a superseded release. pubs[0].supersede() # Now set the series to SUPPORTED. series.status = SeriesStatus.SUPPORTED logger = DevNullLogger() txn = FakeTransaction() dominate_imported_source_packages( txn, logger, series.distribution.name, series.name, pocket, FakePackagesMap({})) self.assertPublishingStates( pubs, [PackagePublishingStatus.SUPERSEDED, PackagePublishingStatus.DELETED, PackagePublishingStatus.DELETED])
def test_dominate_imported_source_packages_dominates_imports(self): # dominate_imported_source_packages dominates the source # packages that Gina imports. logger = DevNullLogger() txn = FakeTransaction() series = self.factory.makeDistroSeries() pocket = PackagePublishingPocket.RELEASE package = self.factory.makeSourcePackageName() # Realistic situation: there's an older, superseded publication; # a series of active ones; and a newer, pending publication # that's not in the Sources lists yet. # Gina dominates the Published ones and leaves the rest alone. old_spph = self.factory.makeSourcePackagePublishingHistory( distroseries=series, archive=series.main_archive, pocket=pocket, status=PackagePublishingStatus.SUPERSEDED, sourcepackagerelease=self.factory.makeSourcePackageRelease(sourcepackagename=package, version="1.0"), ) active_spphs = [ self.factory.makeSourcePackagePublishingHistory( distroseries=series, archive=series.main_archive, pocket=pocket, status=PackagePublishingStatus.PUBLISHED, sourcepackagerelease=self.factory.makeSourcePackageRelease(sourcepackagename=package, version=version), ) for version in ["1.1", "1.1.1", "1.1.1.1"] ] new_spph = self.factory.makeSourcePackagePublishingHistory( distroseries=series, archive=series.main_archive, pocket=pocket, status=PackagePublishingStatus.PENDING, sourcepackagerelease=self.factory.makeSourcePackageRelease(sourcepackagename=package, version="1.2"), ) spphs = [old_spph] + active_spphs + [new_spph] # Of the active publications, in this scenario, only one version # matches what Gina finds in the Sources list. It stays # published; older active publications are superseded, newer # ones deleted. dominate_imported_source_packages( txn, logger, series.distribution.name, series.name, pocket, FakePackagesMap({package.name: [{"Version": "1.1.1"}]}), ) self.assertEqual( [ PackagePublishingStatus.SUPERSEDED, PackagePublishingStatus.SUPERSEDED, PackagePublishingStatus.PUBLISHED, PackagePublishingStatus.DELETED, PackagePublishingStatus.PENDING, ], [pub.status for pub in spphs], )
def run_gina(options, ztm, target_section): # Avoid circular imports. from lp.registry.interfaces.pocket import PackagePublishingPocket package_root = target_section.root distro = target_section.distro pocket_distroseries = target_section.pocketrelease distroseries = target_section.distroseries components = [c.strip() for c in target_section.components.split(",")] archs = [a.strip() for a in target_section.architectures.split(",")] pocket = target_section.pocket component_override = target_section.componentoverride source_only = target_section.source_only spnames_only = target_section.sourcepackagenames_only LIBRHOST = config.librarian.upload_host LIBRPORT = config.librarian.upload_port log.info("") log.info("=== Processing %s/%s/%s ===", distro, distroseries, pocket) log.debug("Packages read from: %s", package_root) log.info("Components to import: %s", ", ".join(components)) if component_override is not None: log.info("Override components to: %s", component_override) log.info("Architectures to import: %s", ", ".join(archs)) log.debug("Launchpad database: %s", config.database.rw_main_master) log.info("SourcePackage Only: %s", source_only) log.info("SourcePackageName Only: %s", spnames_only) log.debug("Librarian: %s:%s", LIBRHOST, LIBRPORT) log.info("") if not hasattr(PackagePublishingPocket, pocket.upper()): log.error("Could not find a pocket schema for %s", pocket) sys.exit(1) pocket = getattr(PackagePublishingPocket, pocket.upper()) if component_override: valid_components = [component.name for component in getUtility(IComponentSet)] if component_override not in valid_components: log.error("Could not find component %s", component_override) sys.exit(1) try: arch_component_items = ArchiveComponentItems(package_root, pocket_distroseries, components, archs, source_only) except MangledArchiveError: log.exception("Failed to analyze archive for %s", pocket_distroseries) sys.exit(1) packages_map = PackagesMap(arch_component_items) importer_handler = ImporterHandler(ztm, distro, distroseries, package_root, pocket, component_override) import_sourcepackages(distro, packages_map, package_root, importer_handler) importer_handler.commit() # XXX JeroenVermeulen 2011-09-07 bug=843728: Dominate binaries as well. dominate_imported_source_packages(ztm, log, distro, distroseries, pocket, packages_map) ztm.commit() if source_only: log.info("Source only mode... done") return for archtag in archs: try: importer_handler.ensure_archinfo(archtag) except DataSetupError: log.exception("Database setup required for run on %s", archtag) sys.exit(1) import_binarypackages(distro, packages_map, package_root, importer_handler) importer_handler.commit()
def run_gina(options, ztm, target_section): package_root = target_section.root distro = target_section.distro pocket_distroseries = target_section.pocketrelease distroseries = target_section.distroseries components = [c.strip() for c in target_section.components.split(",")] archs = [a.strip() for a in target_section.architectures.split(",")] pocket = target_section.pocket component_override = target_section.componentoverride source_only = target_section.source_only spnames_only = target_section.sourcepackagenames_only LIBRHOST = config.librarian.upload_host LIBRPORT = config.librarian.upload_port log.info("") log.info("=== Processing %s/%s/%s ===", distro, distroseries, pocket) log.debug("Packages read from: %s", package_root) log.info("Components to import: %s", ", ".join(components)) if component_override is not None: log.info("Override components to: %s", component_override) log.info("Architectures to import: %s", ", ".join(archs)) log.debug("Launchpad database: %s", config.database.rw_main_master) log.info("SourcePackage Only: %s", source_only) log.info("SourcePackageName Only: %s", spnames_only) log.debug("Librarian: %s:%s", LIBRHOST, LIBRPORT) log.info("") if not hasattr(PackagePublishingPocket, pocket.upper()): log.error("Could not find a pocket schema for %s", pocket) sys.exit(1) pocket = getattr(PackagePublishingPocket, pocket.upper()) if component_override: valid_components = [ component.name for component in getUtility(IComponentSet) ] if component_override not in valid_components: log.error("Could not find component %s", component_override) sys.exit(1) try: arch_component_items = ArchiveComponentItems(package_root, pocket_distroseries, components, archs, source_only) except MangledArchiveError: log.exception("Failed to analyze archive for %s", pocket_distroseries) sys.exit(1) packages_map = PackagesMap(arch_component_items) importer_handler = ImporterHandler(ztm, distro, distroseries, package_root, pocket, component_override) import_sourcepackages(distro, packages_map, package_root, importer_handler) importer_handler.commit() # XXX JeroenVermeulen 2011-09-07 bug=843728: Dominate binaries as well. dominate_imported_source_packages(ztm, log, distro, distroseries, pocket, packages_map) ztm.commit() if source_only: log.info('Source only mode... done') return for archtag in archs: try: importer_handler.ensure_arch(archtag) except DataSetupError: log.exception("Database setup required for run on %s", archtag) sys.exit(1) import_binarypackages(distro, packages_map, package_root, importer_handler) importer_handler.commit()