mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-02-24 03:41:12 +00:00
Expand the Suite interface and create a TargetSuite sub-class
Signed-off-by: Niels Thykier <niels@thykier.net>
This commit is contained in:
parent
0b4f58315f
commit
03df891b7e
@ -193,7 +193,7 @@ from urllib.parse import quote
|
||||
import apt_pkg
|
||||
|
||||
# Check the "check_field_name" reflection before removing an import here.
|
||||
from britney2 import Suites, Suite, SuiteClass, SourcePackage, BinaryPackageId, BinaryPackage
|
||||
from britney2 import Suites, Suite, SuiteClass, TargetSuite, SourcePackage, BinaryPackageId, BinaryPackage
|
||||
from britney2.consts import (SOURCE, SOURCEVER, ARCHITECTURE, CONFLICTS, DEPENDS, PROVIDES, MULTIARCH)
|
||||
from britney2.excuse import Excuse
|
||||
from britney2.hints import HintParser
|
||||
@ -354,6 +354,8 @@ class Britney(object):
|
||||
|
||||
self.logger.info("Compiling Installability tester")
|
||||
self.pkg_universe, self._inst_tester = build_installability_tester(self.suite_info, self.options.architectures)
|
||||
target_suite = self.suite_info.target_suite
|
||||
target_suite.inst_tester = self._inst_tester
|
||||
|
||||
if not self.options.nuninst_cache:
|
||||
self.logger.info("Building the list of non-installable packages for the full archive")
|
||||
@ -496,7 +498,9 @@ class Britney(object):
|
||||
suite_class = SuiteClass.TARGET_SUITE
|
||||
if suite != 'testing':
|
||||
suite_class = SuiteClass.ADDITIONAL_SOURCE_SUITE if suffix else SuiteClass.PRIMARY_SOURCE_SUITE
|
||||
suites.append(Suite(suite_class, suite, suite_path, suite_short_name=suffix))
|
||||
suites.append(Suite(suite_class, suite, suite_path, suite_short_name=suffix))
|
||||
else:
|
||||
suites.append(TargetSuite(suite_class, suite, suite_path, suite_short_name=suffix))
|
||||
else:
|
||||
if suite in {'testing', 'unstable'}: # pragma: no cover
|
||||
self.logger.error("Mandatory configuration %s is not set in the config", suite.upper())
|
||||
|
@ -34,13 +34,74 @@ class Suite(object):
|
||||
self.path = path
|
||||
self.suite_short_name = suite_short_name if suite_short_name else ''
|
||||
self.sources = {}
|
||||
self.binaries = {}
|
||||
self._binaries = {}
|
||||
self.provides_table = {}
|
||||
self._all_binaries_in_suite = None
|
||||
|
||||
@property
|
||||
def excuses_suffix(self):
|
||||
return self.suite_short_name
|
||||
|
||||
@property
|
||||
def binaries(self):
|
||||
return self._binaries
|
||||
|
||||
@binaries.setter
|
||||
def binaries(self, binaries):
|
||||
self._binaries = binaries
|
||||
self._all_binaries_in_suite = {x.pkg_id: x for a in binaries for x in binaries[a].values()}
|
||||
|
||||
def any_of_these_are_in_the_suite(self, pkgs):
|
||||
"""Test if at least one package of a given set is in the suite
|
||||
|
||||
:param pkgs: A set of BinaryPackageId
|
||||
:return: True if any of the packages in pkgs are currently in the suite
|
||||
"""
|
||||
return not self._all_binaries_in_suite.isdisjoint(pkgs)
|
||||
|
||||
def is_pkg_in_the_suite(self, pkg_id):
|
||||
"""Test if the package of is in testing
|
||||
|
||||
:param pkg_id: A BinaryPackageId
|
||||
:return: True if the pkg is currently in the suite
|
||||
"""
|
||||
return pkg_id in self._all_binaries_in_suite
|
||||
|
||||
|
||||
class TargetSuite(Suite):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.inst_tester = None
|
||||
|
||||
# FIXME: Make this independent of the inst_tester once _all_binaries_in_suite
|
||||
# is kept in sync
|
||||
def any_of_these_are_in_the_suite(self, pkg_ids):
|
||||
"""Test if at least one package of a given set is in the suite
|
||||
|
||||
:param pkg_ids: A set of BinaryPackageId
|
||||
:return: True if any of the packages in pkgs are currently in the suite
|
||||
"""
|
||||
return self.inst_tester.any_of_these_are_in_testing(pkg_ids)
|
||||
|
||||
# FIXME: Make this independent of the inst_tester once _all_binaries_in_suite
|
||||
# is kept in sync
|
||||
def is_pkg_in_the_suite(self, pkg_id):
|
||||
"""Test if the package of is in testing
|
||||
|
||||
:param pkg_id: A BinaryPackageId
|
||||
:return: True if the pkg is currently in the suite
|
||||
"""
|
||||
return self.inst_tester.is_pkg_in_testing(pkg_id)
|
||||
|
||||
def is_installable(self, pkg_id):
|
||||
"""Determine whether the given package can be installed in the suite
|
||||
|
||||
:param pkg_id: A BinaryPackageId
|
||||
:return: True if the pkg is currently installable in the suite
|
||||
"""
|
||||
return self.inst_tester.is_installable(pkg_id)
|
||||
|
||||
|
||||
class Suites(object):
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user