mirror of
				https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
				synced 2025-11-04 10:34:05 +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