Add Suites to keep track of all suites

At the moment, it is just a glorified dict.  However, we will
eventually use it to get rid of the hardcoded references to "testing"
etc. all over the code.

Signed-off-by: Niels Thykier <niels@thykier.net>
ubuntu/rebased
Niels Thykier 7 years ago
parent 37f02d611c
commit e63aa05708

@ -192,7 +192,7 @@ from urllib.parse import quote
import apt_pkg
# Check the "check_field_name" reflection before removing an import here.
from britney2 import SuiteInfo, SourcePackage, BinaryPackageId, BinaryPackage
from britney2 import Suites, SuiteInfo, SourcePackage, BinaryPackageId, BinaryPackage
from britney2.consts import (SOURCE, SOURCEVER, ARCHITECTURE, CONFLICTS, DEPENDS, PROVIDES, MULTIARCH)
from britney2.excuse import Excuse
from britney2.hints import HintParser
@ -292,7 +292,7 @@ class Britney(object):
# parse the command line arguments
self.policies = []
self._hint_parser = HintParser()
self.suite_info = {}
self.suite_info = None # Initialized during __parse_arguments
self.__parse_arguments()
MigrationItem.set_architectures(self.options.architectures)
@ -501,19 +501,22 @@ class Britney(object):
not getattr(self.options, k.lower()):
setattr(self.options, k.lower(), v)
suites = []
for suite in ('testing', 'unstable', 'pu', 'tpu'):
suffix = suite if suite in {'pu', 'tpu'} else ''
if hasattr(self.options, suite):
suite_path = getattr(self.options, suite)
self.suite_info[suite] = SuiteInfo(name=suite, path=suite_path, excuses_suffix=suffix)
suites.append(SuiteInfo(name=suite, path=suite_path, excuses_suffix=suffix))
else:
if suite in {'testing', 'unstable'}: # pragma: no cover
self.logger.error("Mandatory configuration %s is not set in the config", suite.upper())
sys.exit(1)
self.logger.info("Optional suite %s is not defined (config option: %s) ", suite, suite.upper())
self.suite_info = Suites(suites[0], suites[1:])
try:
release_file = read_release_file(self.suite_info['testing'].path)
release_file = read_release_file(self.suite_info.target_suite.path)
self.logger.info("Found a Release file in testing - using that for defaults")
except FileNotFoundError:
self.logger.info("Testing does not have a Release file.")
@ -547,7 +550,8 @@ class Britney(object):
else:
if not release_file: # pragma: no cover
self.logger.error("No configured architectures and there is no release file for testing")
self.logger.error("Please check if there is a \"Release\" file in %s", self.suite_info['testing'].path)
self.logger.error("Please check if there is a \"Release\" file in %s",
self.suite_info.target_suite.path)
self.logger.error("or if the config file contains a non-empty \"ARCHITECTURES\" field")
sys.exit(1)
allarches = sorted(release_file['Architectures'].split())

@ -7,6 +7,41 @@ SuiteInfo = namedtuple('SuiteInfo', [
])
class Suites(object):
def __init__(self, target_suite, source_suites):
self._suites = {}
self._by_name_or_alias = {}
self.target_suite = target_suite
self.source_suites = source_suites
self._suites[target_suite.name] = target_suite
self._by_name_or_alias[target_suite.name] = target_suite
if target_suite.excuses_suffix:
self._by_name_or_alias[target_suite.excuses_suffix] = target_suite
for suite in source_suites:
self._suites[suite.name] = suite
self._by_name_or_alias[suite.name] = suite
if suite.excuses_suffix:
self._by_name_or_alias[suite.excuses_suffix] = suite
@property
def primary_source_suite(self):
return self.source_suites[0]
@property
def by_name_or_alias(self):
return self._by_name_or_alias
def __getitem__(self, item):
return self._suites[item]
def __len__(self):
return len(self.source_suites) + 1
def __iter__(self):
yield from self._suites
class SourcePackage(object):
__slots__ = ['version', 'section', 'binaries', 'maintainer', 'is_fakesrc', 'build_deps_arch', 'testsuite', 'testsuite_triggers']
@ -24,6 +59,7 @@ class SourcePackage(object):
def __getitem__(self, item):
return getattr(self, self.__slots__[item])
BinaryPackageId = namedtuple('BinaryPackageId', [
'package_name',
'version',

@ -1,7 +1,7 @@
import unittest
import os
from britney2 import SuiteInfo, SourcePackage
from britney2 import Suites, SuiteInfo, SourcePackage
from britney2.excuse import Excuse
from britney2.hints import HintParser
from britney2.policies.policy import AgePolicy, RCBugPolicy, PiupartsPolicy, PolicyVerdict
@ -18,10 +18,10 @@ def initialize_policy(test_name, policy_class, *args, **kwargs):
hints = kwargs['hints']
del kwargs['hints']
options = MockObject(state_dir=test_dir, verbose=0, default_urgency=DEFAULT_URGENCY, **kwargs)
suite_info = {
'testing': SuiteInfo('testing', os.path.join(test_dir, 'testing'), ''),
'unstable': SuiteInfo('unstable', os.path.join(test_dir, 'unstable'), ''),
}
suite_info = Suites(
SuiteInfo('testing', os.path.join(test_dir, 'testing'), ''),
[SuiteInfo('unstable', os.path.join(test_dir, 'unstable'), '')],
)
policy = policy_class(options, suite_info, *args)
fake_britney = MockObject(log=lambda x, y='I': None)
hint_parser = HintParser()

Loading…
Cancel
Save