Fix syncing messages attached to draft revisions

If a revision is a draft, we will not be able to sync it.  Strangely,
the Gerrit API will still return review messages attached to that
draft (including "Foo uploaded patch set 1").  The gerrit webui doesn't
display those, so let's not bother storing/displaying them either.
The current code crashes when trying to save the message because the
revision doesn't exist.

Change-Id: I51617249c7240b199f0104c66b136922e36d6b7f
Story: 2000155
This commit is contained in:
James E. Blair 2015-03-02 08:03:57 -08:00
parent 76ad79278b
commit 121df156cd

View File

@ -417,7 +417,7 @@ class SyncChangeTask(Task):
remote_revision['commit']['message'], remote_commit,
remote_revision['commit']['parents'][0]['commit'],
auth, ref)
self.log.info("Created new revision %s for change %s in local DB.", revision.key, self.change_id)
self.log.info("Created new revision %s for change %s revision %s in local DB.", revision.key, self.change_id, remote_revision['_number'])
new_revision = True
revision.message = remote_revision['commit']['message']
# TODO: handle multiple parents
@ -467,11 +467,14 @@ class SyncChangeTask(Task):
message = session.getMessageByID(remote_message['id'])
if not message:
revision = session.getRevisionByNumber(change, remote_message.get('_revision_number', 1))
# Normalize date -> created
created = dateutil.parser.parse(remote_message['date'])
message = revision.createMessage(remote_message['id'], account, created,
if revision:
# Normalize date -> created
created = dateutil.parser.parse(remote_message['date'])
message = revision.createMessage(remote_message['id'], account, created,
remote_message['message'])
self.log.info("Created new review message %s for revision %s in local DB.", message.key, revision.key)
self.log.info("Created new review message %s for revision %s in local DB.", message.key, revision.key)
else:
self.log.info("Unable to create new review message for revision %s because it is not in local DB (draft?).", remote_message.get('_revision_number'))
else:
if message.author != account:
message.author = account