| Index: scripts/master/gerrit_poller.py
|
| diff --git a/scripts/master/gerrit_poller.py b/scripts/master/gerrit_poller.py
|
| index 57425fd740afd0da300c1fee9e55b9569cbcf26d..7b40849a2711f6bf018a500cc0e78f9cf9712f04 100644
|
| --- a/scripts/master/gerrit_poller.py
|
| +++ b/scripts/master/gerrit_poller.py
|
| @@ -15,6 +15,8 @@ from common.gerrit_agent import GerritAgent
|
| class GerritPoller(base.PollingChangeSource):
|
| """A poller which queries a gerrit server for new changes and patchsets."""
|
|
|
| + change_category = 'patchset-created'
|
| +
|
| def __init__(self, gerrit_host, gerrit_projects=None, pollInterval=None):
|
| if isinstance(gerrit_projects, basestring):
|
| gerrit_projects = [gerrit_projects]
|
| @@ -34,10 +36,13 @@ class GerritPoller(base.PollingChangeSource):
|
| self.initLastTimeStamp()
|
| base.PollingChangeSource.startService(self)
|
|
|
| + def getChangeQuery(self): # pylint: disable=R0201
|
| + return 'status:open'
|
| +
|
| @deferredLocked('initLock')
|
| def initLastTimeStamp(self):
|
| log.msg('GerritPoller: Getting latest timestamp from gerrit server.')
|
| - path = '/changes/?q=status:open&n=1'
|
| + path = '/changes/?q=%s&n=1' % self.getChangeQuery()
|
| d = self.agent.request('GET', path)
|
| def _get_timestamp(j):
|
| if len(j) == 0:
|
| @@ -48,11 +53,14 @@ class GerritPoller(base.PollingChangeSource):
|
| return d
|
|
|
| def getChanges(self, sortkey=None):
|
| - path = '/changes/?q=status:open&n=10'
|
| + path = '/changes/?q=%s&n=10' % self.getChangeQuery()
|
| if sortkey:
|
| path += '&N=%s' % sortkey
|
| return self.agent.request('GET', path)
|
|
|
| + def _is_interesting_message(self, message): # pylint: disable=R0201
|
| + return message['message'].startswith('Uploaded patch set ')
|
| +
|
| def checkForNewPatchset(self, change, since):
|
| o_params = '&'.join('o=%s' % x for x in (
|
| 'MESSAGES', 'CURRENT_REVISION', 'CURRENT_COMMIT', 'ALL_FILES'))
|
| @@ -64,12 +72,12 @@ class GerritPoller(base.PollingChangeSource):
|
| for m in reversed(j['messages']):
|
| if self._parse_timestamp(m['date']) <= since:
|
| break
|
| - if m['message'].startswith('Uploaded patch set '):
|
| - return j
|
| + if self._is_interesting_message(m):
|
| + return j, m
|
| d.addCallback(_parse_messages)
|
| return d
|
|
|
| - def createBuildbotChange(self, change):
|
| + def addBuildbotChange(self, change, message):
|
| revision = change['revisions'].values()[0]
|
| commit = revision['commit']
|
| properties = {'event.change.number': change['_number']}
|
| @@ -87,7 +95,7 @@ class GerritPoller(base.PollingChangeSource):
|
| 'revision': change['current_revision'],
|
| 'comments': commit['subject'],
|
| 'files': commit['files'].keys() if 'files' in commit else ['UNKNOWN'],
|
| - 'category': 'patchset-created',
|
| + 'category': self.change_category,
|
| 'when_timestamp': self._parse_timestamp(commit['committer']['date']),
|
| 'revlink': '%s://%s/#/c/%s' % (
|
| self.agent.gerrit_protocol, self.agent.gerrit_host,
|
| @@ -95,12 +103,16 @@ class GerritPoller(base.PollingChangeSource):
|
| 'repository': '%s://%s/%s' % (
|
| self.agent.gerrit_protocol, self.agent.gerrit_host,
|
| change['project']),
|
| - 'properties': properties}
|
| + 'properties': properties,
|
| + }
|
| d = self.master.addChange(**chdict)
|
| d.addErrback(log.err, 'GerritPoller: Could not add buildbot change for '
|
| 'gerrit change %s.' % revision['_number'])
|
| return d
|
|
|
| + def addChange(self, change, message):
|
| + return self.addBuildbotChange(change, message)
|
| +
|
| def processChanges(self, j, since):
|
| need_more = bool(j)
|
| for change in j:
|
| @@ -111,7 +123,7 @@ class GerritPoller(base.PollingChangeSource):
|
| if self.gerrit_projects and change['project'] not in self.gerrit_projects:
|
| continue
|
| d = self.checkForNewPatchset(change, since)
|
| - d.addCallback(lambda x: self.createBuildbotChange(x) if x else None)
|
| + d.addCallback(lambda x: self.addChange(*x) if x else None)
|
| if need_more and j[-1].get('_more_changes'):
|
| d = self.getChanges(sortkey=j[-1]['_sortkey'])
|
| d.addCallback(self.processChanges, since=since)
|
|
|