在Gerrit REST API中查询超过500限制

时间:2017-07-13 15:17:05

标签: java gerrit

我正在尝试使用Java中的Gerrit REST API从具有查询请求的特定分支获取2000更改结果。问题是,无论我添加到查询搜索中,我只获得500个结果。

我已经尝试了here列出的选项,但我没有得到我需要的2000个结果。我还读到了an admin can increase this limit,但更喜欢一种不需要绕道而行的方法 所以我想知道的是:

  1. 是否可以在不需要联系管理员的情况下增加限制?
  2. 如果没有。是否可以继续/重复查询以获得我想要的剩余1500个结果,使用循环对上一个查询的以下500个结果执行查询,直到我最终得到2000个结果?

4 个答案:

答案 0 :(得分:1)

使用list changes REST API时,结果将作为ChangeInfo Elements的列表返回。如果结果多于返回的结果,则该列表中的最后一个条目将包含值为_more_changes的{​​{1}}字段。然后,您可以再次查询并设置true选项以跳过您已收到的选项。

答案 1 :(得分:0)

我想为David's great answer添加一个小的解决方法。

如果您要抓取托管在Google服务器上的Gerrit实例(例如Android,Chromium,Golang),您会发现它们会阻止超过10000个结果的查询。你可以检查一下,例如与

curl "https://android-review.googlesource.com/changes/?q=status:closed&S=10000"

我以这种方式解决了问题,我在查询字符串中用before: and until:拆分了这些更改列表,例如谎言

_url_/changes/?q=after:{2018-01-01 00:00:00.000} AND before:{2018-01-01 00:59:99.999}
_url_/changes/?q=after:{2018-01-01 01:00:00.000} AND before:{2018-01-01 01:59:99.999}
_url_/changes/?q=after:{2018-01-01 02:00:00.000} AND before:{2018-01-01 02:59:99.999}

等等。我想你应该已经明白了。 ;-)请注意,两个限制(before:after:)都包含在内!每天我都使用David描述的分页。

一个很好的副作用是,您可以跟踪爬网的进度。

我写了一个小Python tool named "Gerry"来抓取开源实例。随意使用,采用它并发送拉请求!

答案 2 :(得分:-2)

我差点遇到同样的问题。但是你没有办法提到你不希望管理员增加查询限制,而且你也不想在计数器的循环中激活其余的查询。我建议你按照第二种方法在带有计数器集的循环中触发查询。这就是我用Java实现其余客户端的方式。

答案 3 :(得分:-3)

第一种方式,您可以请求管理员增加响应中返回的最大值。

第二种方法,你可以在循环之前创建一个计数器,并在计数器低于2000时进行迭代

示例:

int count = 0;

while(count < 2000){

    //Here do whatever you need

    count += result.length();
}

此致