diff --git a/gerrit_util.py b/gerrit_util.py index cd2102ccb..07218f011 100755 --- a/gerrit_util.py +++ b/gerrit_util.py @@ -602,35 +602,46 @@ def DeletePendingChangeEdit(host, change): def SetCommitMessage(host, change, description, notify='ALL'): """Updates a commit message.""" - assert notify in ('ALL', 'NONE') - # 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) + assert notify in ('ALL', 'NONE') + # 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={'notify': notify}) - 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) + # And then publish it. + path = 'changes/%s/edit:publish' % change + conn = CreateHttpConn(host, path, reqtype='POST', body={'notify': notify}) + 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) + except (GerritError, KeyboardInterrupt) as e: + # Something went wrong with one of the two calls, so we want to clean up + # after ourselves before returning. + try: + DeletePendingChangeEdit(host, change) + except GerritError: + LOGGER.error('Encountered error while cleaning up after failed attempt ' + 'to set the CL description. You may have to delete the ' + 'pending change edit yourself in the web UI.') + raise e def GetReviewers(host, change):