gerrit: cast change and patchset numbers to str

This is a follow-up to https://review.openstack.org/433748
where we need to cast all json access to change and patchset number
as str. At least the refresh_deps logic relies on python eq check,
and Zuul doesn't dequeue child changes when parent change get
updated in Gerrit-2.14.

Here is diagnostic DEBUG informations
(2 depends-on 1, patchset 1,13 doesn't dequeue change 2):

Change <Change 1,13> is a new version of <Change 1,12>,
  removing <QueueItem for <Change 1,12> in check>
Canceling builds behind change: <Change 1,12> because it is being removed.
Cancel jobs for change <Change 1,12>
Removing change <Change 1,12> from queue
[snip]
Starting queue processor: check
Checking for changes needed by <Change 2,5>:
  Change <Change 2,5> needs change <Change 1,12>:
  Needed change is already ahead in the queue

Change-Id: Id73a479d155fa6d9b2c562869cae6c82dd065911
This commit is contained in:
Tristan Cacqueray
2018-06-21 23:00:38 +00:00
parent a5c6c31043
commit dab1dde3fe
2 changed files with 15 additions and 11 deletions
+13 -10
View File
@@ -81,7 +81,7 @@ class GerritEventConnector(threading.Thread):
event.change_url = change.get('url')
patchset = data.get('patchSet')
if patchset:
event.patch_number = patchset.get('number')
event.patch_number = str(patchset.get('number'))
event.ref = patchset.get('ref')
event.approvals = data.get('approvals', [])
event.comment = data.get('comment')
@@ -382,6 +382,9 @@ class GerritConnection(BaseConnection):
return change
def _getChange(self, number, patchset, refresh=False, history=None):
# Ensure number and patchset are str
number = str(number)
patchset = str(patchset)
change = self._change_cache.get(number, {}).get(patchset)
if change and not refresh:
return change
@@ -430,7 +433,8 @@ class GerritConnection(BaseConnection):
result['commitMessage']):
if match != change_id:
continue
key = (result['number'], result['currentPatchSet']['number'])
key = (str(result['number']),
str(result['currentPatchSet']['number']))
if key in seen:
continue
self.log.debug("Updating %s: Found change %s,%s "
@@ -468,8 +472,7 @@ class GerritConnection(BaseConnection):
change._data = data
if change.patchset is None:
change.patchset = data['currentPatchSet']['number']
change.patchset = str(data['currentPatchSet']['number'])
if 'project' not in data:
raise exceptions.ChangeNotFound(change.number, change.patchset)
change.project = self.source.getProject(data['project'])
@@ -483,12 +486,12 @@ class GerritConnection(BaseConnection):
max_ps = 0
files = []
for ps in data['patchSets']:
if ps['number'] == change.patchset:
if str(ps['number']) == change.patchset:
change.ref = ps['ref']
for f in ps.get('files', []):
files.append(f['file'])
if int(ps['number']) > int(max_ps):
max_ps = ps['number']
max_ps = str(ps['number'])
if max_ps == change.patchset:
change.is_current_patchset = True
else:
@@ -533,8 +536,8 @@ class GerritConnection(BaseConnection):
compat_needs_changes = []
for record in self._getDependsOnFromCommit(data['commitMessage'],
change):
dep_num = record['number']
dep_ps = record['currentPatchSet']['number']
dep_num = str(record['number'])
dep_ps = str(record['currentPatchSet']['number'])
self.log.debug("Updating %s: Getting commit-dependent "
"change %s,%s" %
(change, dep_num, dep_ps))
@@ -561,8 +564,8 @@ class GerritConnection(BaseConnection):
compat_needed_by_changes = []
for record in self._getNeededByFromCommit(data['id'], change):
dep_num = record['number']
dep_ps = record['currentPatchSet']['number']
dep_num = str(record['number'])
dep_ps = str(record['currentPatchSet']['number'])
self.log.debug("Updating %s: Getting commit-needed change %s,%s" %
(change, dep_num, dep_ps))
# Because a commit needed-by may be a cross-repo
+2 -1
View File
@@ -97,7 +97,8 @@ class GerritSource(BaseSource):
break
if not found:
continue
key = (result['number'], result['currentPatchSet']['number'])
key = (str(result['number']),
str(result['currentPatchSet']['number']))
if key in seen:
continue
seen.add(key)