Iterate over binary packages from a source package before iterating over hints

The existing code attempts to "short circuit" processing of binaries in
unstable by first checking if the package is subject to a removal hint.

This is invalid in Ubuntu for two reasons:
- we do not use removal hints for removing packages from the release pocket
- there are 11,000 hints in Ubuntu (due to force-reset-test) - searching all
  hints is time-consuming and not a short-circuit at all.

Reorder the code so we only scan the hints if there's otherwise an
indication of something to do.
less-recipients
Steve Langasek 3 years ago
parent 32c3f288b0
commit 1f520269de

@ -97,18 +97,6 @@ class ExcuseFinder(object):
source_u.section and excuse.set_section(source_u.section)
excuse.set_distribution(self.options.distribution)
# if there is a `remove' hint and the requested version is the same as the
# version in testing, then stop here and return False
# (as a side effect, a removal may generate such excuses for both the source
# package and its binary packages on each architecture)
for hint in self.hints.search('remove', package=src, version=source_t.version):
excuse.add_hint(hint)
excuse.policy_verdict = PolicyVerdict.REJECTED_PERMANENTLY
excuse.add_verdict_info(excuse.policy_verdict, "Removal request by %s" % (hint.user))
excuse.add_verdict_info(excuse.policy_verdict, "Trying to remove package, not update it")
self.excuses[excuse.name] = excuse
return False
# the starting point is that there is nothing wrong and nothing worth doing
anywrongver = False
anyworthdoing = False
@ -249,6 +237,19 @@ class ExcuseFinder(object):
# nothing worth doing, we don't add an excuse to the list, we just return false
return False
# if there is a `remove' hint and the requested version is the same as the
# version in testing, then stop here and return False
# (as a side effect, a removal may generate such excuses for both the source
# package and its binary packages on each architecture)
for hint in self.hints.search('remove', package=src, version=source_t.version):
excuse = Excuse(item)
excuse.add_hint(hint)
excuse.policy_verdict = PolicyVerdict.REJECTED_PERMANENTLY
excuse.add_verdict_info(excuse.policy_verdict, "Removal request by %s" % (hint.user))
excuse.add_verdict_info(excuse.policy_verdict, "Trying to remove package, not update it")
self.excuses[excuse.name] = excuse
return False
# there is something worth doing
# we assume that this package will be ok, if not invalidated below
excuse.policy_verdict = PolicyVerdict.PASS

Loading…
Cancel
Save