mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-15 20:41:31 +00:00
Move handling of policies to PolicyEngine
Signed-off-by: Ivo De Decker <ivodd@debian.org>
This commit is contained in:
parent
b16ae8046a
commit
0d80bad65c
34
britney.py
34
britney.py
@ -202,7 +202,7 @@ from britney2.installability.solver import InstallabilitySolver
|
|||||||
from britney2.migration import MigrationManager
|
from britney2.migration import MigrationManager
|
||||||
from britney2.migrationitem import MigrationItem, MigrationItemFactory
|
from britney2.migrationitem import MigrationItem, MigrationItemFactory
|
||||||
from britney2.policies import PolicyVerdict
|
from britney2.policies import PolicyVerdict
|
||||||
from britney2.policies.policy import AgePolicy, RCBugPolicy, PiupartsPolicy, BuildDependsPolicy
|
from britney2.policies.policy import AgePolicy, RCBugPolicy, PiupartsPolicy, BuildDependsPolicy, PolicyEngine
|
||||||
from britney2.policies.autopkgtest import AutopkgtestPolicy
|
from britney2.policies.autopkgtest import AutopkgtestPolicy
|
||||||
from britney2.utils import (log_and_format_old_libraries, get_dependency_solvers,
|
from britney2.utils import (log_and_format_old_libraries, get_dependency_solvers,
|
||||||
read_nuninst, write_nuninst, write_heidi,
|
read_nuninst, write_nuninst, write_heidi,
|
||||||
@ -282,7 +282,7 @@ class Britney(object):
|
|||||||
apt_pkg.init()
|
apt_pkg.init()
|
||||||
|
|
||||||
# parse the command line arguments
|
# parse the command line arguments
|
||||||
self.policies = []
|
self._policy_engine = PolicyEngine()
|
||||||
self.suite_info = None # Initialized during __parse_arguments
|
self.suite_info = None # Initialized during __parse_arguments
|
||||||
self.__parse_arguments()
|
self.__parse_arguments()
|
||||||
|
|
||||||
@ -365,17 +365,14 @@ class Britney(object):
|
|||||||
# nuninst_orig may get updated during the upgrade process
|
# nuninst_orig may get updated during the upgrade process
|
||||||
self.nuninst_orig_save = clone_nuninst(self.nuninst_orig, architectures=self.options.architectures)
|
self.nuninst_orig_save = clone_nuninst(self.nuninst_orig, architectures=self.options.architectures)
|
||||||
|
|
||||||
for policy in self.policies:
|
self._policy_engine.register_policy_hints(self._hint_parser)
|
||||||
policy.register_hints(self._hint_parser)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.read_hints(self.options.hintsdir)
|
self.read_hints(self.options.hintsdir)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
self.read_hints(os.path.join(self.suite_info['unstable'].path, 'Hints'))
|
self.read_hints(os.path.join(self.suite_info['unstable'].path, 'Hints'))
|
||||||
|
|
||||||
for policy in self.policies:
|
self._policy_engine.initialise(self, self.hints)
|
||||||
policy.hints = self.hints
|
|
||||||
policy.initialise(self)
|
|
||||||
|
|
||||||
def __parse_arguments(self):
|
def __parse_arguments(self):
|
||||||
"""Parse the command line arguments
|
"""Parse the command line arguments
|
||||||
@ -491,12 +488,12 @@ class Britney(object):
|
|||||||
if not hasattr(self.options, 'adt_retry_url_mech'):
|
if not hasattr(self.options, 'adt_retry_url_mech'):
|
||||||
self.options.adt_retry_url_mech = ''
|
self.options.adt_retry_url_mech = ''
|
||||||
|
|
||||||
self.policies.append(RCBugPolicy(self.options, self.suite_info))
|
self._policy_engine.add_policy(RCBugPolicy(self.options, self.suite_info))
|
||||||
self.policies.append(PiupartsPolicy(self.options, self.suite_info))
|
self._policy_engine.add_policy(PiupartsPolicy(self.options, self.suite_info))
|
||||||
if getattr(self.options, 'adt_enable') == 'yes':
|
if getattr(self.options, 'adt_enable') == 'yes':
|
||||||
self.policies.append(AutopkgtestPolicy(self.options, self.suite_info))
|
self._policy_engine.add_policy(AutopkgtestPolicy(self.options, self.suite_info))
|
||||||
self.policies.append(AgePolicy(self.options, self.suite_info, MINDAYS))
|
self._policy_engine.add_policy(AgePolicy(self.options, self.suite_info, MINDAYS))
|
||||||
self.policies.append(BuildDependsPolicy(self.options, self.suite_info))
|
self._policy_engine.add_policy(BuildDependsPolicy(self.options, self.suite_info))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def hints(self):
|
def hints(self):
|
||||||
@ -1245,15 +1242,7 @@ class Britney(object):
|
|||||||
excuse.addreason("no-binaries")
|
excuse.addreason("no-binaries")
|
||||||
excuse.policy_verdict = PolicyVerdict.REJECTED_PERMANENTLY
|
excuse.policy_verdict = PolicyVerdict.REJECTED_PERMANENTLY
|
||||||
|
|
||||||
policy_verdict = excuse.policy_verdict
|
self._policy_engine.apply_src_policies(source_suite, src, source_t, source_u, excuse)
|
||||||
policy_info = excuse.policy_info
|
|
||||||
suite_class = source_suite.suite_class
|
|
||||||
for policy in self.policies:
|
|
||||||
if suite_class in policy.applicable_suites:
|
|
||||||
v = policy.apply_policy(policy_info, suite_name, src, source_t, source_u, excuse)
|
|
||||||
if v.value > policy_verdict.value:
|
|
||||||
policy_verdict = v
|
|
||||||
excuse.policy_verdict = policy_verdict
|
|
||||||
|
|
||||||
if source_suite.suite_class.is_additional_source and source_t:
|
if source_suite.suite_class.is_additional_source and source_t:
|
||||||
# o-o-d(ish) checks for (t-)p-u
|
# o-o-d(ish) checks for (t-)p-u
|
||||||
@ -1887,8 +1876,7 @@ class Britney(object):
|
|||||||
target_suite.path)
|
target_suite.path)
|
||||||
write_controlfiles(target_suite)
|
write_controlfiles(target_suite)
|
||||||
|
|
||||||
for policy in self.policies:
|
self._policy_engine.save_state(self)
|
||||||
policy.save_state(self)
|
|
||||||
|
|
||||||
# write HeidiResult
|
# write HeidiResult
|
||||||
self.logger.info("Writing Heidi results to %s", self.options.heidi_output)
|
self.logger.info("Writing Heidi results to %s", self.options.heidi_output)
|
||||||
|
@ -14,6 +14,39 @@ from britney2.utils import get_dependency_solvers
|
|||||||
from britney2 import DependencyType
|
from britney2 import DependencyType
|
||||||
|
|
||||||
|
|
||||||
|
class PolicyEngine(object):
|
||||||
|
def __init__(self):
|
||||||
|
self._policies = []
|
||||||
|
|
||||||
|
def add_policy(self, policy):
|
||||||
|
self._policies.append(policy)
|
||||||
|
|
||||||
|
def register_policy_hints(self, hint_parser):
|
||||||
|
for policy in self._policies:
|
||||||
|
policy.register_hints(hint_parser)
|
||||||
|
|
||||||
|
def initialise(self, britney, hints):
|
||||||
|
for policy in self._policies:
|
||||||
|
policy.hints = hints
|
||||||
|
policy.initialise(britney)
|
||||||
|
|
||||||
|
def save_state(self, britney):
|
||||||
|
for policy in self._policies:
|
||||||
|
policy.save_state(britney)
|
||||||
|
|
||||||
|
def apply_src_policies(self, source_suite, src, source_t, source_u, excuse):
|
||||||
|
policy_verdict = excuse.policy_verdict
|
||||||
|
policy_info = excuse.policy_info
|
||||||
|
suite_name = source_suite.name
|
||||||
|
suite_class = source_suite.suite_class
|
||||||
|
for policy in self._policies:
|
||||||
|
if suite_class in policy.applicable_suites:
|
||||||
|
v = policy.apply_policy(policy_info, suite_name, src, source_t, source_u, excuse)
|
||||||
|
if v.value > policy_verdict.value:
|
||||||
|
policy_verdict = v
|
||||||
|
excuse.policy_verdict = policy_verdict
|
||||||
|
|
||||||
|
|
||||||
class BasePolicy(object):
|
class BasePolicy(object):
|
||||||
|
|
||||||
def __init__(self, policy_id, options, suite_info, applicable_suites):
|
def __init__(self, policy_id, options, suite_info, applicable_suites):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user