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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user