mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-23 16:31:32 +00:00
Fix apply_src_policies when policy is applied on multiple archs
Move the logic of apply_src_policy and apply_srcarch_policy into PolicyEngine. This fixes an issue with the excuses.yaml output introduced in commit 15e5228669: only the last verdict was added to the excuse info for that policy. Signed-off-by: Ivo De Decker <ivodd@debian.org>
This commit is contained in:
parent
22610d86a0
commit
35ae8848b4
@ -38,34 +38,47 @@ class PolicyEngine(object):
|
|||||||
policy.save_state(britney)
|
policy.save_state(britney)
|
||||||
|
|
||||||
def apply_src_policies(self, source_suite, src, source_t, source_u, excuse):
|
def apply_src_policies(self, source_suite, src, source_t, source_u, excuse):
|
||||||
policy_verdict = excuse.policy_verdict
|
excuse_verdict = excuse.policy_verdict
|
||||||
policy_info = excuse.policy_info
|
|
||||||
suite_name = source_suite.name
|
suite_name = source_suite.name
|
||||||
suite_class = source_suite.suite_class
|
suite_class = source_suite.suite_class
|
||||||
for policy in self._policies:
|
for policy in self._policies:
|
||||||
|
pinfo = {}
|
||||||
|
policy_verdict = PolicyVerdict.NOT_APPLICABLE
|
||||||
if suite_class in policy.applicable_suites:
|
if suite_class in policy.applicable_suites:
|
||||||
if policy.src_policy.run_arch:
|
if policy.src_policy.run_arch:
|
||||||
for arch in policy.options.architectures:
|
for arch in policy.options.architectures:
|
||||||
v = policy.apply_srcarch_policy(policy_info, suite_name, src, arch, source_t, source_u, excuse)
|
v = policy.apply_srcarch_policy_impl(pinfo, suite_name, src, arch, source_t, source_u, excuse)
|
||||||
if v.value > policy_verdict.value:
|
if v.value > policy_verdict.value:
|
||||||
policy_verdict = v
|
policy_verdict = v
|
||||||
if policy.src_policy.run_src:
|
if policy.src_policy.run_src:
|
||||||
v = policy.apply_src_policy(policy_info, suite_name, src, source_t, source_u, excuse)
|
v = policy.apply_src_policy_impl(pinfo, suite_name, src, source_t, source_u, excuse)
|
||||||
if v.value > policy_verdict.value:
|
if v.value > policy_verdict.value:
|
||||||
policy_verdict = v
|
policy_verdict = v
|
||||||
excuse.policy_verdict = policy_verdict
|
# The base policy provides this field, so the subclass should leave it blank
|
||||||
|
assert 'verdict' not in pinfo
|
||||||
|
if policy_verdict != PolicyVerdict.NOT_APPLICABLE:
|
||||||
|
excuse.policy_info[policy.policy_id] = pinfo
|
||||||
|
pinfo['verdict'] = policy_verdict.name
|
||||||
|
if policy_verdict.value > excuse_verdict.value:
|
||||||
|
excuse_verdict = policy_verdict
|
||||||
|
excuse.policy_verdict = excuse_verdict
|
||||||
|
|
||||||
def apply_srcarch_policies(self, source_suite, src, arch, source_t, source_u, excuse):
|
def apply_srcarch_policies(self, source_suite, src, arch, source_t, source_u, excuse):
|
||||||
policy_verdict = excuse.policy_verdict
|
excuse_verdict = excuse.policy_verdict
|
||||||
policy_info = excuse.policy_info
|
|
||||||
suite_name = source_suite.name
|
suite_name = source_suite.name
|
||||||
suite_class = source_suite.suite_class
|
suite_class = source_suite.suite_class
|
||||||
for policy in self._policies:
|
for policy in self._policies:
|
||||||
|
pinfo = {}
|
||||||
if suite_class in policy.applicable_suites:
|
if suite_class in policy.applicable_suites:
|
||||||
v = policy.apply_srcarch_policy(policy_info, suite_name, src, arch, source_t, source_u, excuse)
|
policy_verdict = policy.apply_srcarch_policy_impl(pinfo, suite_name, src, arch, source_t, source_u, excuse)
|
||||||
if v.value > policy_verdict.value:
|
if policy_verdict.value > excuse_verdict.value:
|
||||||
policy_verdict = v
|
excuse_verdict = policy_verdict
|
||||||
excuse.policy_verdict = policy_verdict
|
# The base policy provides this field, so the subclass should leave it blank
|
||||||
|
assert 'verdict' not in pinfo
|
||||||
|
if policy_verdict != PolicyVerdict.NOT_APPLICABLE:
|
||||||
|
excuse.policy_info[policy.policy_id] = pinfo
|
||||||
|
pinfo['verdict'] = policy_verdict.name
|
||||||
|
excuse.policy_verdict = excuse_verdict
|
||||||
|
|
||||||
|
|
||||||
class BasePolicy(object):
|
class BasePolicy(object):
|
||||||
@ -121,16 +134,6 @@ class BasePolicy(object):
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def apply_src_policy(self, general_policy_info, suite, source_name, source_data_tdist, source_data_srcdist, excuse):
|
|
||||||
pinfo = {}
|
|
||||||
verdict = self.apply_src_policy_impl(pinfo, suite, source_name, source_data_tdist, source_data_srcdist, excuse)
|
|
||||||
# The base policy provides this field, so the subclass should leave it blank
|
|
||||||
assert 'verdict' not in pinfo
|
|
||||||
if verdict != PolicyVerdict.NOT_APPLICABLE:
|
|
||||||
general_policy_info[self.policy_id] = pinfo
|
|
||||||
pinfo['verdict'] = verdict.name
|
|
||||||
return verdict
|
|
||||||
|
|
||||||
def apply_src_policy_impl(self, policy_info, suite, source_name, source_data_tdist, source_data_srcdist, excuse): # pragma: no cover
|
def apply_src_policy_impl(self, policy_info, suite, source_name, source_data_tdist, source_data_srcdist, excuse): # pragma: no cover
|
||||||
"""Apply a policy on a given source migration
|
"""Apply a policy on a given source migration
|
||||||
|
|
||||||
@ -159,16 +162,6 @@ class BasePolicy(object):
|
|||||||
"""
|
"""
|
||||||
return PolicyVerdict.NOT_APPLICABLE
|
return PolicyVerdict.NOT_APPLICABLE
|
||||||
|
|
||||||
def apply_srcarch_policy(self, general_policy_info, suite, source_name, arch, source_data_tdist, source_data_srcdist, excuse):
|
|
||||||
pinfo = {}
|
|
||||||
verdict = self.apply_srcarch_policy_impl(pinfo, suite, source_name, arch, source_data_tdist, source_data_srcdist, excuse)
|
|
||||||
# The base policy provides this field, so the subclass should leave it blank
|
|
||||||
assert 'verdict' not in pinfo
|
|
||||||
if verdict != PolicyVerdict.NOT_APPLICABLE:
|
|
||||||
general_policy_info[self.policy_id] = pinfo
|
|
||||||
pinfo['verdict'] = verdict.name
|
|
||||||
return verdict
|
|
||||||
|
|
||||||
def apply_srcarch_policy_impl(self, policy_info, suite, source_name, arch, source_data_tdist, source_data_srcdist, excuse):
|
def apply_srcarch_policy_impl(self, policy_info, suite, source_name, arch, source_data_tdist, source_data_srcdist, excuse):
|
||||||
"""Apply a policy on a given binary migration
|
"""Apply a policy on a given binary migration
|
||||||
|
|
||||||
|
@ -99,15 +99,14 @@ def apply_src_policy(policy, expected_verdict, src_name, *, suite='unstable', ta
|
|||||||
if src_name in suite_info[suite].sources:
|
if src_name in suite_info[suite].sources:
|
||||||
src_u = suite_info[suite].sources[src_name]
|
src_u = suite_info[suite].sources[src_name]
|
||||||
src_t = suite_info.target_suite.sources.get(src_name)
|
src_t = suite_info.target_suite.sources.get(src_name)
|
||||||
_, _, excuse, policy_info = create_policy_objects(src_name)
|
_, _, excuse, _ = create_policy_objects(src_name)
|
||||||
else:
|
else:
|
||||||
src_t, src_u, excuse, policy_info = create_policy_objects(src_name, target_version, source_version)
|
src_t, src_u, excuse, policy_info = create_policy_objects(src_name, target_version, source_version)
|
||||||
suite_info.target_suite.sources[src_name] = src_t
|
suite_info.target_suite.sources[src_name] = src_t
|
||||||
suite_info[suite].sources[src_name] = src_u
|
suite_info[suite].sources[src_name] = src_u
|
||||||
verdict = policy.apply_src_policy(policy_info, suite, src_name, src_t, src_u, excuse)
|
pinfo = {}
|
||||||
pinfo = policy_info[policy.policy_id]
|
verdict = policy.apply_src_policy_impl(pinfo, suite, src_name, src_t, src_u, excuse)
|
||||||
assert verdict == expected_verdict
|
assert verdict == expected_verdict
|
||||||
assert pinfo['verdict'] == expected_verdict.name
|
|
||||||
return pinfo
|
return pinfo
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user