Fix commit message editing in >= 2.11

Detect the gerrit version on startup and on any reconnection.
When submitting commit message edits, use the change edit API
in 2.11 or greater as the old API has been removed.

Change-Id: Idcba9fc6d424311658b0470410c820015bac9590
This commit is contained in:
James E. Blair 2015-12-17 12:24:56 -08:00
parent 540c8dd7cc
commit 861ef82a8f
1 changed files with 40 additions and 3 deletions

View File

@ -186,6 +186,19 @@ class SyncOwnAccountTask(Task):
remote.get('username'), remote.get('username'),
remote.get('email')) remote.get('email'))
class GetVersionTask(Task):
def __repr__(self):
return '<GetVersionTask>'
def __eq__(self, other):
if other.__class__ == self.__class__:
return True
return False
def run(self, sync):
version = sync.get('config/server/version')
sync.setRemoteVersion(version)
class SyncProjectListTask(Task): class SyncProjectListTask(Task):
def __repr__(self): def __repr__(self):
return '<SyncProjectListTask>' return '<SyncProjectListTask>'
@ -1080,9 +1093,17 @@ class ChangeCommitMessageTask(Task):
revision.pending_message = False revision.pending_message = False
data = dict(message=revision.message) data = dict(message=revision.message)
# Inside db session for rollback # Inside db session for rollback
sync.post('changes/%s/revisions/%s/message' % if sync.version < (2,11,0):
(revision.change.id, revision.commit), sync.post('changes/%s/revisions/%s/message' %
data) (revision.change.id, revision.commit),
data)
else:
edit = sync.get('changes/%s/edit' % revision.change.id)
if edit is not None:
raise Exception("Edit already in progress on change %s" %
(revision.change.number,))
sync.put('changes/%s/edit:message' % (revision.change.id,), data)
sync.post('changes/%s/edit:publish' % (revision.change.id,), {})
change_id = revision.change.id change_id = revision.change.id
sync.submitTask(SyncChangeTask(change_id, priority=self.priority)) sync.submitTask(SyncChangeTask(change_id, priority=self.priority))
@ -1251,6 +1272,7 @@ class Sync(object):
def __init__(self, app): def __init__(self, app):
self.user_agent = 'Gertty/%s %s' % (gertty.version.version_info.release_string(), self.user_agent = 'Gertty/%s %s' % (gertty.version.version_info.release_string(),
requests.utils.default_user_agent()) requests.utils.default_user_agent())
self.version = (0, 0, 0)
self.offline = False self.offline = False
self.account_id = None self.account_id = None
self.app = app self.app = app
@ -1264,6 +1286,7 @@ class Sync(object):
authclass = requests.auth.HTTPDigestAuth authclass = requests.auth.HTTPDigestAuth
self.auth = authclass( self.auth = authclass(
self.app.config.username, self.app.config.password) self.app.config.username, self.app.config.password)
self.submitTask(GetVersionTask(HIGH_PRIORITY))
self.submitTask(SyncOwnAccountTask(HIGH_PRIORITY)) self.submitTask(SyncOwnAccountTask(HIGH_PRIORITY))
self.submitTask(CheckReposTask(HIGH_PRIORITY)) self.submitTask(CheckReposTask(HIGH_PRIORITY))
self.submitTask(UploadReviewsTask(HIGH_PRIORITY)) self.submitTask(UploadReviewsTask(HIGH_PRIORITY))
@ -1310,6 +1333,7 @@ class Sync(object):
except requests.ConnectionError, e: except requests.ConnectionError, e:
self.log.warning("Offline due to: %s" % (e,)) self.log.warning("Offline due to: %s" % (e,))
if not self.offline: if not self.offline:
self.submitTask(GetVersionTask(HIGH_PRIORITY))
self.submitTask(UploadReviewsTask(HIGH_PRIORITY)) self.submitTask(UploadReviewsTask(HIGH_PRIORITY))
self.offline = True self.offline = True
self.app.status.update(offline=True, refresh=False) self.app.status.update(offline=True, refresh=False)
@ -1415,3 +1439,16 @@ class Sync(object):
return return
task = SyncChangesByCommitsTask([commit], priority) task = SyncChangesByCommitsTask([commit], priority)
self.submitTask(task) self.submitTask(task)
def setRemoteVersion(self, version):
base = version.split('-')[0]
parts = base.split('.')
major = minor = micro = 0
if len(parts) > 0:
major = int(parts[0])
if len(parts) > 1:
minor = int(parts[1])
if len(parts) > 2:
micro = int(parts[2])
self.version = (major, minor, micro)
self.log.info("Remote version is: %s (parsed as %s)" % (version, self.version))