Merge "implement gerrit pagination in simplequery"
diff --git a/zuul/lib/gerrit.py b/zuul/lib/gerrit.py
index 52e6057..799459d 100644
--- a/zuul/lib/gerrit.py
+++ b/zuul/lib/gerrit.py
@@ -145,21 +145,33 @@
         return data
 
     def simpleQuery(self, query):
-        args = '--current-patch-set'
-        cmd = 'gerrit query --format json %s %s' % (
-            args, query)
-        out, err = self._ssh(cmd)
-        if not out:
-            return False
-        lines = out.split('\n')
-        if not lines:
-            return False
-        data = [json.loads(line) for line in lines[:-1]]
-        if not data:
-            return False
-        self.log.debug("Received data from Gerrit query: \n%s" %
-                       (pprint.pformat(data)))
-        return data
+        def _query_chunk(query):
+            args = '--current-patch-set'
+
+            cmd = 'gerrit query --format json %s %s' % (
+                args, query)
+            out, err = self._ssh(cmd)
+            if not out:
+                return False
+            lines = out.split('\n')
+            if not lines:
+                return False
+            data = [json.loads(line) for line in lines[:-1]]
+            if not data:
+                return False
+            self.log.debug("Received data from Gerrit query: \n%s" %
+                           (pprint.pformat(data)))
+            return data
+
+        # gerrit returns 500 results by default, so implement paging
+        # for large projects like nova
+        alldata = []
+        chunk = _query_chunk(query)
+        while(chunk):
+            alldata.extend(chunk)
+            sortkey = "resume_sortkey:'%s'" % chunk[-1]["sortKey"]
+            chunk = _query_chunk("%s %s" % (query, sortkey))
+        return alldata
 
     def _open(self):
         client = paramiko.SSHClient()
diff --git a/zuul/trigger/gerrit.py b/zuul/trigger/gerrit.py
index 368e37d..0c0a376 100644
--- a/zuul/trigger/gerrit.py
+++ b/zuul/trigger/gerrit.py
@@ -331,7 +331,7 @@
         self.log.debug("Running query %s to get project open changes" % (query,))
         data = self.gerrit.simpleQuery(query)
         changes = []
-        for record in data[:-1]:
+        for record in data:
             try:
                 changes.append(self._getChange(record['number'],
                                                record['currentPatchSet']['number']))