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