diff --git a/britney2/policies/policy.py b/britney2/policies/policy.py index a81db75..9cddd33 100644 --- a/britney2/policies/policy.py +++ b/britney2/policies/policy.py @@ -2,6 +2,7 @@ import json import os import time from abc import abstractmethod +from collections import defaultdict from urllib.parse import quote import apt_pkg @@ -699,6 +700,7 @@ class LPBlockBugPolicy(BasePolicy): return PolicyVerdict.REJECTED_PERMANENTLY + class LPExcuseBugsPolicy(BasePolicy): """update-excuse Launchpad bug policy to link to a bug report, does not prevent migration @@ -716,26 +718,25 @@ class LPExcuseBugsPolicy(BasePolicy): def initialise(self, britney): super().initialise(britney) - self.excuse_bugs = {} # srcpkg -> [(bug, date), ...] + self.excuse_bugs = defaultdict(list) # srcpkg -> [(bug, date), ...] filename = os.path.join(self.options.unstable, "ExcuseBugs") self.log("Loading user-supplied excuse bug data from %s" % filename) - for line in open(filename): - l = line.split() - if len(l) != 3: - self.log("ExcuseBugs, ignoring malformed line %s" % line, type='W') - continue - try: - self.excuse_bugs.setdefault(l[0], []) - self.excuse_bugs[l[0]].append((l[1], int(l[2]))) - except ValueError: - self.log("ExcuseBugs, unable to parse \"%s\"" % line, type='E') + try: + for line in open(filename): + l = line.split() + if len(l) != 3: + self.log("ExcuseBugs, ignoring malformed line %s" % line, type='W') + continue + try: + self.excuse_bugs[l[0]].append((l[1], int(l[2]))) + except ValueError: + self.log("ExcuseBugs, unable to parse \"%s\"" % line, type='E') + except FileNotFoundError: + self.log("ExcuseBugs, data file not found, no bugs will be recorded" % filename) def apply_policy_impl(self, excuse_bugs_info, suite, source_name, source_data_tdist, source_data_srcdist, excuse): - try: - excuse_bug = self.excuse_bugs[source_name] - except KeyError: - return PolicyVerdict.PASS + excuse_bug = self.excuse_bugs[source_name] for bug, date in excuse_bug: excuse_bugs_info[bug] = date diff --git a/tests/test_autopkgtest.py b/tests/test_autopkgtest.py index 3fbba9d..3152270 100755 --- a/tests/test_autopkgtest.py +++ b/tests/test_autopkgtest.py @@ -171,7 +171,14 @@ class T(TestBase): try: with open(self.fake_amqp) as f: for line in f: - self.amqp_requests.add(line.strip()) + # debci-series-amd64:darkgreen {"triggers": ["darkgreen/2"], "submit-time": "2020-01-16 09:47:12"} + # strip the submit time from the requests we're testing; it + # is only for info for people reading the queue + (queuepkg, data) = line.split(' ', 1) + data_json = json.loads(data) + del data_json["submit-time"] + self.amqp_requests.add("{} {}".format(queuepkg, + json.dumps(data_json))) os.unlink(self.fake_amqp) except IOError: pass