From 4d038b43344946851ef713351f467c0ebfc294ad Mon Sep 17 00:00:00 2001 From: "scottmg@chromium.org" Date: Mon, 25 Apr 2016 20:10:05 +0000 Subject: [PATCH] Make `git cl description` work for Gerrit This works in that it actually changes the description, but after multiple changes, there's multiple footers added. I'm not sure if they should be stripped in setting the description? Or is the problem in FetchDescription() where it shouldn't be returning 'commit_with_footers', but rather something else? Example change at https://chromium-review.googlesource.com/c/340430/. R=tandrii@chromium.org BUG=603207 Review URL: https://codereview.chromium.org/1917473002 . git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@300169 0039d316-1c4b-4281-b951-d872f2087c98 --- gerrit_util.py | 32 ++++++++++++++++++++++++++++++++ git_cl.py | 4 ++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/gerrit_util.py b/gerrit_util.py index 049c1c2892..9b3d616951 100755 --- a/gerrit_util.py +++ b/gerrit_util.py @@ -541,6 +541,38 @@ def SubmitChange(host, change, wait_for_merge=True): return ReadHttpJsonResponse(conn, ignore_404=False) +def SetCommitMessage(host, change, description): + """Updates a commit message.""" + # First, edit the commit message in a draft. + path = 'changes/%s/edit:message' % change + body = {'message': description} + conn = CreateHttpConn(host, path, reqtype='PUT', body=body) + try: + ReadHttpResponse(conn, ignore_404=False) + except GerritError as e: + # On success, gerrit returns status 204; anything else is an error. + if e.http_status != 204: + raise + else: + raise GerritError( + 'Unexpectedly received a 200 http status while editing message in ' + 'change %s' % change) + + # And then publish it. + path = 'changes/%s/edit:publish' % change + conn = CreateHttpConn(host, path, reqtype='POST', body={}) + try: + ReadHttpResponse(conn, ignore_404=False) + except GerritError as e: + # On success, gerrit returns status 204; anything else is an error. + if e.http_status != 204: + raise + else: + raise GerritError( + 'Unexpectedly received a 200 http status while publishing message ' + 'change in %s' % change) + + def GetReviewers(host, change): """Get information about all reviewers attached to a change.""" path = 'changes/%s/reviewers' % change diff --git a/git_cl.py b/git_cl.py index 45dace5f29..870996587b 100755 --- a/git_cl.py +++ b/git_cl.py @@ -2169,8 +2169,8 @@ class _GerritChangelistImpl(_ChangelistCodereviewBase): return gerrit_util.GetChangeDescriptionFromGitiles(url, current_rev) def UpdateDescriptionRemote(self, description): - # TODO(tandrii) - raise NotImplementedError() + gerrit_util.SetCommitMessage(self._GetGerritHost(), self.GetIssue(), + description) def CloseIssue(self): gerrit_util.AbandonChange(self._GetGerritHost(), self.GetIssue(), msg='')