mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-17 21:41:30 +00:00
Add more verdicts to provide more detailed excuses
Signed-off-by: Niels Thykier <niels@thykier.net>
This commit is contained in:
parent
d7a676d074
commit
9ca5f7e24e
@ -1358,7 +1358,7 @@ class Britney(object):
|
|||||||
else:
|
else:
|
||||||
excuse.addhtml("NEEDS APPROVAL BY RM")
|
excuse.addhtml("NEEDS APPROVAL BY RM")
|
||||||
excuse.addreason("block")
|
excuse.addreason("block")
|
||||||
excuse.policy_verdict = PolicyVerdict.REJECTED_PERMANENTLY
|
excuse.policy_verdict = PolicyVerdict.REJECTED_NEEDS_APPROVAL
|
||||||
|
|
||||||
# at this point, we check the status of the builds on all the supported architectures
|
# at this point, we check the status of the builds on all the supported architectures
|
||||||
# to catch the out-of-date ones
|
# to catch the out-of-date ones
|
||||||
@ -1436,7 +1436,7 @@ class Britney(object):
|
|||||||
else:
|
else:
|
||||||
excuse.policy_verdict = PolicyVerdict.REJECTED_PERMANENTLY
|
excuse.policy_verdict = PolicyVerdict.REJECTED_PERMANENTLY
|
||||||
else:
|
else:
|
||||||
excuse.policy_verdict = PolicyVerdict.REJECTED_PERMANENTLY
|
excuse.policy_verdict = PolicyVerdict.REJECTED_CANNOT_DETERMINE_IF_PERMANENT
|
||||||
excuse.missing_build_on_arch(arch)
|
excuse.missing_build_on_arch(arch)
|
||||||
|
|
||||||
excuse.addhtml(text)
|
excuse.addhtml(text)
|
||||||
@ -1489,7 +1489,7 @@ class Britney(object):
|
|||||||
text = text + " (but %s isn't keeping up, so never mind)" % (arch)
|
text = text + " (but %s isn't keeping up, so never mind)" % (arch)
|
||||||
excuse.missing_build_on_ood_arch(arch)
|
excuse.missing_build_on_ood_arch(arch)
|
||||||
else:
|
else:
|
||||||
excuse.policy_verdict = PolicyVerdict.REJECTED_PERMANENTLY
|
excuse.policy_verdict = PolicyVerdict.REJECTED_CANNOT_DETERMINE_IF_PERMANENT
|
||||||
excuse.missing_build_on_arch(arch)
|
excuse.missing_build_on_arch(arch)
|
||||||
|
|
||||||
excuse.addhtml(text)
|
excuse.addhtml(text)
|
||||||
|
@ -19,6 +19,26 @@ import re
|
|||||||
|
|
||||||
from britney2.policies.policy import PolicyVerdict
|
from britney2.policies.policy import PolicyVerdict
|
||||||
|
|
||||||
|
VERDICT2DESC = {
|
||||||
|
PolicyVerdict.PASS:
|
||||||
|
'OK: Will attempt migration (Any information below is purely informational)',
|
||||||
|
PolicyVerdict.PASS_HINTED:
|
||||||
|
'OK: Will attempt migration due to a hint (Any information below is purely informational)',
|
||||||
|
PolicyVerdict.REJECTED_TEMPORARILY:
|
||||||
|
'WAITING: Waiting for test results, another package or too young (no action required now - check later)',
|
||||||
|
PolicyVerdict.REJECTED_WAITING_FOR_ANOTHER_ITEM:
|
||||||
|
'WAITING: Waiting for another item to be ready to migrate (no action required now - check later)',
|
||||||
|
PolicyVerdict.REJECTED_BLOCKED_BY_ANOTHER_ITEM:
|
||||||
|
'BLOCKED: Cannot migrate due to another item, which is blocked (please check which dependencies are stuck)',
|
||||||
|
PolicyVerdict.REJECTED_NEEDS_APPROVAL:
|
||||||
|
'BLOCKED: Needs an approval (either due to a freeze or due to the source suite)',
|
||||||
|
PolicyVerdict.REJECTED_CANNOT_DETERMINE_IF_PERMANENT:
|
||||||
|
'BLOCKED: Maybe temporary, maybe blocked but Britney is missing information (check below or the buildds)',
|
||||||
|
PolicyVerdict.REJECTED_PERMANENTLY:
|
||||||
|
'BLOCKED: Rejected/introduces a regression (please see below)'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class Excuse(object):
|
class Excuse(object):
|
||||||
"""Excuse class
|
"""Excuse class
|
||||||
|
|
||||||
@ -154,16 +174,9 @@ class Excuse(object):
|
|||||||
|
|
||||||
def _format_verdict_summary(self):
|
def _format_verdict_summary(self):
|
||||||
verdict = self._policy_verdict
|
verdict = self._policy_verdict
|
||||||
if not verdict.is_rejected:
|
if verdict in VERDICT2DESC:
|
||||||
msg = 'OK: Will attempt migration'
|
return VERDICT2DESC[verdict]
|
||||||
if verdict == PolicyVerdict.PASS_HINTED:
|
return "UNKNOWN: Missing description for {0} - Please file a bug against Britney".format(verdict.name)
|
||||||
msg = 'OK: Will attempt migration due to a hint'
|
|
||||||
msg += " (Any information below is purely informational)"
|
|
||||||
return msg
|
|
||||||
if verdict == PolicyVerdict.REJECTED_PERMANENTLY:
|
|
||||||
msg = "BLOCKED: Will not migrate (Please review if it introduces a regression or needs approval/unblock)"
|
|
||||||
return msg
|
|
||||||
return "TEMP-BLOCKED: Waiting for test results, another package or too young (no action required at this time)"
|
|
||||||
|
|
||||||
def html(self):
|
def html(self):
|
||||||
"""Render the excuse in HTML"""
|
"""Render the excuse in HTML"""
|
||||||
|
@ -27,15 +27,41 @@ class PolicyVerdict(Enum):
|
|||||||
"""
|
"""
|
||||||
REJECTED_TEMPORARILY = 3
|
REJECTED_TEMPORARILY = 3
|
||||||
"""
|
"""
|
||||||
|
The migration item is temporarily unable to migrate due to another item. The other item is temporarily blocked.
|
||||||
|
"""
|
||||||
|
REJECTED_WAITING_FOR_ANOTHER_ITEM = 4
|
||||||
|
"""
|
||||||
|
The migration item is permanently unable to migrate due to another item. The other item is permanently blocked.
|
||||||
|
"""
|
||||||
|
REJECTED_BLOCKED_BY_ANOTHER_ITEM = 5
|
||||||
|
"""
|
||||||
|
The migration item needs approval to migrate
|
||||||
|
"""
|
||||||
|
REJECTED_NEEDS_APPROVAL = 6
|
||||||
|
"""
|
||||||
|
The migration item is blocked, but there is not enough information to determine
|
||||||
|
if this issue is permanent or temporary
|
||||||
|
"""
|
||||||
|
REJECTED_CANNOT_DETERMINE_IF_PERMANENT = 7
|
||||||
|
"""
|
||||||
The migration item did not pass the policy and the failure is believed
|
The migration item did not pass the policy and the failure is believed
|
||||||
to be uncorrectable (i.e. a hint or a new version is needed)
|
to be uncorrectable (i.e. a hint or a new version is needed)
|
||||||
"""
|
"""
|
||||||
REJECTED_PERMANENTLY = 4
|
REJECTED_PERMANENTLY = 8
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_rejected(self):
|
def is_rejected(self):
|
||||||
return True if self.name.startswith('REJECTED') else False
|
return True if self.name.startswith('REJECTED') else False
|
||||||
|
|
||||||
|
def is_blocked(self):
|
||||||
|
"""Whether the item (probably) needs a fix or manual assistance to migrate"""
|
||||||
|
return self in {
|
||||||
|
PolicyVerdict.REJECTED_BLOCKED_BY_ANOTHER_ITEM,
|
||||||
|
PolicyVerdict.REJECTED_NEEDS_APPROVAL,
|
||||||
|
PolicyVerdict.REJECTED_CANNOT_DETERMINE_IF_PERMANENT, # Assuming the worst
|
||||||
|
PolicyVerdict.REJECTED_PERMANENTLY,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class BasePolicy(object):
|
class BasePolicy(object):
|
||||||
|
|
||||||
|
@ -801,6 +801,11 @@ def invalidate_excuses(excuses, valid, invalid):
|
|||||||
# if the dependency can be satisfied by a testing-proposed-updates excuse, skip the item
|
# if the dependency can be satisfied by a testing-proposed-updates excuse, skip the item
|
||||||
if (ename + "_tpu") in valid:
|
if (ename + "_tpu") in valid:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
rdep_verdict = PolicyVerdict.REJECTED_WAITING_FOR_ANOTHER_ITEM
|
||||||
|
if excuses[ename].policy_verdict.is_blocked:
|
||||||
|
rdep_verdict = PolicyVerdict.REJECTED_BLOCKED_BY_ANOTHER_ITEM
|
||||||
|
|
||||||
# loop on the reverse dependencies
|
# loop on the reverse dependencies
|
||||||
for x in revdeps[ename]:
|
for x in revdeps[ename]:
|
||||||
if x in valid:
|
if x in valid:
|
||||||
@ -815,8 +820,8 @@ def invalidate_excuses(excuses, valid, invalid):
|
|||||||
invalid.append(valid.pop(p))
|
invalid.append(valid.pop(p))
|
||||||
excuses[x].addhtml("Invalidated by dependency")
|
excuses[x].addhtml("Invalidated by dependency")
|
||||||
excuses[x].addreason("depends")
|
excuses[x].addreason("depends")
|
||||||
if excuses[x].policy_verdict.value < PolicyVerdict.REJECTED_TEMPORARILY.value:
|
if excuses[x].policy_verdict.value < rdep_verdict.value:
|
||||||
excuses[x].policy_verdict = PolicyVerdict.REJECTED_TEMPORARILY
|
excuses[x].policy_verdict = rdep_verdict
|
||||||
|
|
||||||
|
|
||||||
def compile_nuninst(binaries_t, inst_tester, architectures, nobreakall_arches):
|
def compile_nuninst(binaries_t, inst_tester, architectures, nobreakall_arches):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user