From 070d33ca343653f03500de32b06abd090d17a73c Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Mon, 16 Sep 2019 12:56:33 -0700 Subject: [PATCH] Add autogenerated tag to Gerrit reviews When reporting a Gerrit review, add a tag to the ReviewInput structure so that review messages and approvals carry the a tag with the prefix "autogenerated:". The UI (especially in later versions of Gerrit) can support handling automated messages specially (this is used by the "Only comments" switch in polygerrit). This is available as far back as 2.13 (possibly older, I haven't checked). Change-Id: I8c693d7bcd38be4ac0301fcc9a3e97748ead6d4d --- tests/base.py | 21 ++++++++++++++------- tests/unit/test_gerrit.py | 2 ++ zuul/driver/gerrit/gerritconnection.py | 1 + 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/tests/base.py b/tests/base.py index d51161a09e..e93501d0c2 100644 --- a/tests/base.py +++ b/tests/base.py @@ -419,7 +419,7 @@ class FakeGerritChange(object): return event def addApproval(self, category, value, username='reviewer_john', - granted_on=None, message=''): + granted_on=None, message='', tag=None): if not granted_on: granted_on = time.time() approval = { @@ -430,7 +430,8 @@ class FakeGerritChange(object): 'username': username, 'email': username + '@example.com', }, - 'grantedOn': int(granted_on) + 'grantedOn': int(granted_on), + '__tag': tag, # Not available in ssh api } for i, x in enumerate(self.patchsets[-1]['approvals'][:]): if x['by']['username'] == username and x['type'] == category: @@ -530,12 +531,15 @@ class FakeGerritChange(object): _, label_min, label_max = self.categories[app['type']] val = int(app['value']) label_all = label.setdefault('all', []) - label_all.append({ + approval = { "value": val, "username": app['by']['username'], "email": app['by']['email'], "date": str(datetime.datetime.fromtimestamp(app['grantedOn'])), - }) + } + if app.get('__tag') is not None: + approval['tag'] = app['__tag'] + label_all.append(approval) if val == label_min: label['blocking'] = True if 'rejected' not in label: @@ -716,8 +720,10 @@ class GerritWebServer(object): message = data['message'] action = data.get('labels', {}) comments = data.get('comments', {}) + tag = data.get('tag', None) fake_gerrit._test_handle_review( - int(change.data['number']), message, action, comments) + int(change.data['number']), message, action, comments, + tag=tag) self.send_response(200) self.end_headers() @@ -962,7 +968,7 @@ class FakeGerritConnection(gerritconnection.GerritConnection): self._test_handle_review(int(item.change.number), message, action) def _test_handle_review(self, change_number, message, action, - file_comments=None): + file_comments=None, tag=None): # Handle a review action from a test change = self.changes[change_number] @@ -978,7 +984,8 @@ class FakeGerritConnection(gerritconnection.GerritConnection): for cat in action: if cat != 'submit': - change.addApproval(cat, action[cat], username=self.user) + change.addApproval(cat, action[cat], username=self.user, + tag=tag) if message: change.messages.append(message) diff --git a/tests/unit/test_gerrit.py b/tests/unit/test_gerrit.py index 92ce1c6688..f784cdfcc9 100644 --- a/tests/unit/test_gerrit.py +++ b/tests/unit/test_gerrit.py @@ -148,6 +148,8 @@ class TestGerritWeb(ZuulTestCase): self.waitUntilSettled() self.assertEqual(A.patchsets[0]['approvals'][0]['value'], "-1") + self.assertEqual(A.patchsets[0]['approvals'][0]['__tag'], + "autogenerated:zuul:check") self.assertIn('Zuul encountered a syntax error', A.messages[0]) comments = sorted(A.comments, key=lambda x: x['line']) diff --git a/zuul/driver/gerrit/gerritconnection.py b/zuul/driver/gerrit/gerritconnection.py index 40efb42d84..3af893f7a4 100644 --- a/zuul/driver/gerrit/gerritconnection.py +++ b/zuul/driver/gerrit/gerritconnection.py @@ -1018,6 +1018,7 @@ class GerritConnection(BaseConnection): data['labels'] = labels if file_comments: data['comments'] = file_comments + data['tag'] = 'autogenerated:zuul:%s' % (item.pipeline.name) changeid = "%s~%s~%s" % ( urllib.parse.quote(str(change.project), safe=''), urllib.parse.quote(str(change.branch), safe=''),