summaryrefslogtreecommitdiff
path: root/zuul/driver/gerrit
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-06-30 06:45:30 +0000
committerGerrit Code Review <review@openstack.org>2022-06-30 06:45:30 +0000
commit9438b47e1e069f92a2bebf0c9f3370e1ed884ceb (patch)
tree66359dd939132f0f8ea45ca2c5f0abf4b91c372c /zuul/driver/gerrit
parent6b167dd2f17d49dafec1a9756b04494ea77eea7d (diff)
parent39aded45178520fba6190f81660025573951a6e4 (diff)
downloadzuul-9438b47e1e069f92a2bebf0c9f3370e1ed884ceb.tar.gz
Merge "Fix merging with submitWholeTopic"
Diffstat (limited to 'zuul/driver/gerrit')
-rw-r--r--zuul/driver/gerrit/gerritconnection.py139
-rw-r--r--zuul/driver/gerrit/gerritreporter.py5
2 files changed, 75 insertions, 69 deletions
diff --git a/zuul/driver/gerrit/gerritconnection.py b/zuul/driver/gerrit/gerritconnection.py
index e3adfefb5..885b428aa 100644
--- a/zuul/driver/gerrit/gerritconnection.py
+++ b/zuul/driver/gerrit/gerritconnection.py
@@ -1205,16 +1205,17 @@ class GerritConnection(ZKChangeCacheMixin, ZKBranchCacheMixin, BaseConnection):
self.event_queue.put(event)
def review(self, item, message, submit, labels, checks_api,
- file_comments, zuul_event_id=None):
+ file_comments, phase1, phase2, zuul_event_id=None):
if self.session:
meth = self.review_http
else:
meth = self.review_ssh
return meth(item, message, submit, labels, checks_api,
- file_comments, zuul_event_id=zuul_event_id)
+ file_comments, phase1, phase2,
+ zuul_event_id=zuul_event_id)
def review_ssh(self, item, message, submit, labels, checks_api,
- file_comments, zuul_event_id=None):
+ file_comments, phase1, phase2, zuul_event_id=None):
log = get_annotated_logger(self.log, zuul_event_id)
if checks_api:
log.error("Zuul is configured to report to the checks API, "
@@ -1223,23 +1224,24 @@ class GerritConnection(ZKChangeCacheMixin, ZKBranchCacheMixin, BaseConnection):
change = item.change
project = change.project.name
cmd = 'gerrit review --project %s' % project
- if message:
- b_len = len(message.encode('utf-8'))
- if b_len >= GERRIT_HUMAN_MESSAGE_LIMIT:
- log.info("Message truncated %d > %d" %
- (b_len, GERRIT_HUMAN_MESSAGE_LIMIT))
- message = ("%s... (truncated)" %
- message[:GERRIT_HUMAN_MESSAGE_LIMIT - 20])
- cmd += ' --message %s' % shlex.quote(message)
- if submit:
+ if phase1:
+ if message:
+ b_len = len(message.encode('utf-8'))
+ if b_len >= GERRIT_HUMAN_MESSAGE_LIMIT:
+ log.info("Message truncated %d > %d" %
+ (b_len, GERRIT_HUMAN_MESSAGE_LIMIT))
+ message = ("%s... (truncated)" %
+ message[:GERRIT_HUMAN_MESSAGE_LIMIT - 20])
+ cmd += ' --message %s' % shlex.quote(message)
+ for key, val in labels.items():
+ if val is True:
+ cmd += ' --%s' % key
+ else:
+ cmd += ' --label %s=%s' % (key, val)
+ if self.version >= (2, 13, 0):
+ cmd += ' --tag autogenerated:zuul:%s' % (item.pipeline.name)
+ if phase2 and submit:
cmd += ' --submit'
- for key, val in labels.items():
- if val is True:
- cmd += ' --%s' % key
- else:
- cmd += ' --label %s=%s' % (key, val)
- if self.version >= (2, 13, 0):
- cmd += ' --tag autogenerated:zuul:%s' % (item.pipeline.name)
changeid = '%s,%s' % (change.number, change.patchset)
cmd += ' %s' % changeid
out, err = self._ssh(cmd, zuul_event_id=zuul_event_id)
@@ -1292,8 +1294,13 @@ class GerritConnection(ZKChangeCacheMixin, ZKBranchCacheMixin, BaseConnection):
time.sleep(x * 10)
def review_http(self, item, message, submit, labels,
- checks_api, file_comments, zuul_event_id=None):
+ checks_api, file_comments, phase1, phase2,
+ zuul_event_id=None):
change = item.change
+ changeid = "%s~%s~%s" % (
+ urllib.parse.quote(str(change.project), safe=''),
+ urllib.parse.quote(str(change.branch), safe=''),
+ change.id)
log = get_annotated_logger(self.log, zuul_event_id)
b_len = len(message.encode('utf-8'))
if b_len >= GERRIT_HUMAN_MESSAGE_LIMIT:
@@ -1301,53 +1308,51 @@ class GerritConnection(ZKChangeCacheMixin, ZKBranchCacheMixin, BaseConnection):
(b_len, GERRIT_HUMAN_MESSAGE_LIMIT))
message = ("%s... (truncated)" %
message[:GERRIT_HUMAN_MESSAGE_LIMIT - 20])
- data = dict(message=message,
- strict_labels=False)
- if change.is_current_patchset:
- if labels:
- data['labels'] = labels
- if file_comments:
- if self.version >= (2, 15, 0):
- file_comments = copy.deepcopy(file_comments)
- url = item.formatStatusUrl()
- for comments in itertools.chain(file_comments.values()):
- for comment in comments:
- comment['robot_id'] = 'zuul'
- comment['robot_run_id'] = \
- item.current_build_set.uuid
- if url:
- comment['url'] = url
- data['robot_comments'] = file_comments
- else:
- data['comments'] = file_comments
- if self.version >= (2, 13, 0):
- 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=''),
- change.id)
- if checks_api:
- self.report_checks(log, item, changeid, checks_api)
- if (message or data.get('labels') or data.get('comments')
- or data.get('robot_comments')):
- for x in range(1, 4):
- try:
- self.post('changes/%s/revisions/%s/review' %
- (changeid, change.commit),
- data)
- break
- except HTTPConflictException:
- log.exception("Conflict submitting data to gerrit.")
- break
- except HTTPBadRequestException:
- log.exception(
- "Bad request submitting check data to gerrit.")
- break
- except Exception:
- log.exception(
- "Error submitting data to gerrit, attempt %s", x)
- time.sleep(x * 10)
- if change.is_current_patchset and submit:
+ data = dict(strict_labels=False)
+ if phase1:
+ data['message'] = message
+ if change.is_current_patchset:
+ if labels:
+ data['labels'] = labels
+ if file_comments:
+ if self.version >= (2, 15, 0):
+ file_comments = copy.deepcopy(file_comments)
+ url = item.formatStatusUrl()
+ for comments in itertools.chain(
+ file_comments.values()):
+ for comment in comments:
+ comment['robot_id'] = 'zuul'
+ comment['robot_run_id'] = \
+ item.current_build_set.uuid
+ if url:
+ comment['url'] = url
+ data['robot_comments'] = file_comments
+ else:
+ data['comments'] = file_comments
+ if self.version >= (2, 13, 0):
+ data['tag'] = 'autogenerated:zuul:%s' % (item.pipeline.name)
+ if checks_api:
+ self.report_checks(log, item, changeid, checks_api)
+ if (message or data.get('labels') or data.get('comments')
+ or data.get('robot_comments')):
+ for x in range(1, 4):
+ try:
+ self.post('changes/%s/revisions/%s/review' %
+ (changeid, change.commit),
+ data)
+ break
+ except HTTPConflictException:
+ log.exception("Conflict submitting data to gerrit.")
+ break
+ except HTTPBadRequestException:
+ log.exception(
+ "Bad request submitting check data to gerrit.")
+ break
+ except Exception:
+ log.exception(
+ "Error submitting data to gerrit, attempt %s", x)
+ time.sleep(x * 10)
+ if phase2 and change.is_current_patchset and submit:
for x in range(1, 4):
try:
self.post('changes/%s/submit' % (changeid,), {})
diff --git a/zuul/driver/gerrit/gerritreporter.py b/zuul/driver/gerrit/gerritreporter.py
index fbee0e0ec..984b8742a 100644
--- a/zuul/driver/gerrit/gerritreporter.py
+++ b/zuul/driver/gerrit/gerritreporter.py
@@ -35,7 +35,7 @@ class GerritReporter(BaseReporter):
self._checks_api = action.pop('checks-api', None)
self._labels = action
- def report(self, item):
+ def report(self, item, phase1=True, phase2=True):
"""Send a message to gerrit."""
log = get_annotated_logger(self.log, item.event)
@@ -70,7 +70,8 @@ class GerritReporter(BaseReporter):
return self.connection.review(item, message, self._submit,
self._labels, self._checks_api,
- comments, zuul_event_id=item.event)
+ comments, phase1, phase2,
+ zuul_event_id=item.event)
def getSubmitAllowNeeds(self):
"""Get a list of code review labels that are allowed to be