如何通过github API获取repo的所有pull请求列表?

时间:2013-07-02 10:48:26

标签: github-api pull-request

我想通过github API获取repo上所有pull请求的列表。我已按照http://developer.github.com/v3/pulls/的说明进行操作,但当我查询'/ repos /:owner /:repo / pulls'时,它始终返回的拉取请求数量少于网站上显示的数量。

例如,当我查询torvalds / linux repo时,我得到9个开放拉取请求(网站上有14个)。如果我添加'?state = closed',我会得到一组不同的11个关闭拉请求(网站显示大约20个)。

有没有人知道这种差异出现的地方,以及是否有办法通过API获取回购请求的完整列表?

8 个答案:

答案 0 :(得分:9)

您可以通过变量state获取所有拉取请求(关闭,打开,合并)。

只需在GET查询中设置state=all,例如this->

https://api.github.com/repos/:owner/:repo/pulls?state=all

有关详细信息:请查看https://developer.github.com/v3/pulls/#list-pull-requests

上的参数表

编辑:根据TomášVotruba的评论:

  

“per_page = 30”的默认值。最大值为per_page = 100。要获得超过100个结果,您需要将其称为多个主题:“& page = 1”,“& page = 2”......

答案 1 :(得分:5)

PyGithub(https://github.com/PyGithub/PyGithub)是一个访问GitHub API v3的Python库,可以让你获得分页资源。

例如,

g = Github(login_or_token=$YOUR_TOKEN, per_page=100)
r = g.get_repo($REPO_NUMBER)

for pull in r.get_pulls('all'):
    # You can access pulls

请参阅文档(http://pygithub.readthedocs.io/en/latest/index.html)。

答案 2 :(得分:3)

  1. 如果要检索所有拉取请求(提交,注释,问题等),则必须使用分页。 https://developer.github.com/v3/#pagination

  2. GET请求"拉动"只会返回打开拉取请求。

  3. 如果您想获取所有拉取请求,您可以将参数状态设置为all,或者使用问题。

  4. 额外信息

    如果您需要来自Github的其他数据,例如问题,那么您可以识别问题的拉取请求,然后您可以检索每个拉取请求,无论它是关闭还是打开。它还将为您提供更多属性(可合并,合并,merge-commit-sha,提交nr等) 如果问题是拉取请求,那么它将包含该属性。否则,这只是一个问题。

    来自API: https://developer.github.com/v3/pulls/#labels-assignees-and-milestones

    "每个拉取请求都是一个问题,但不是每个问题都是拉取请求。出于这个原因,在问题API中提供了这两个功能的“共享”操作,如操纵受理人,标签和里程碑。"

    编辑我刚发现问题与拉请求的行为类似,因此需要通过将state参数设置为all来检索所有问题

答案 3 :(得分:2)

有一种方法可以获得完整的清单而且你正在这样做。你用什么来与API沟通?我怀疑你可能没有正确地做某事。例如(当前只有13个开放拉取请求)使用我的API包装器(github3.py)我得到了所有的开放拉取请求。如果没有python中的包装器,如何做到这一点的一个例子是:

import requests
r = requests.get('https://api.github.com/repos/torvalds/linux/pulls')
len(r.json()) == 13

我也可以通过自己计算结果({1}}来获得cURL中的结果(含糊地)。

但是,如果您遇到超过25(或30)次拉取请求的存储库,这是一个完全不同的问题,但肯定不是您现在遇到的问题。

答案 4 :(得分:1)

搜索API应该提供帮助:https://help.github.com/enterprise/2.2/user/articles/searching-issues/

q = repo:org / name is:pr ...

答案 5 :(得分:1)

您还可以使用GraphQL API v4来请求所有回购请求。如果您未指定states字段,则默认情况下它将请求所有拉取请求:

{
  repository(name: "material-ui", owner: "mui-org") {
    pullRequests(first: 100, orderBy: {field: CREATED_AT, direction: DESC}) {
      totalCount
      nodes {
        title
        state
        author {
          login
        }
        createdAt
      }
    }
  }
}

Try it in the explorer

答案 6 :(得分:0)

GitHub提供了一个“链接”标头,该标头指定了上一个,下一个和最后一个URL来获取值。例如,“链接标头”响应, <https://api.github.com/repos/:owner/:repo/pulls?state=all&page=2>; rel="next", <https://api.github.com/repos/:owner/:repo/pulls?state=all&page=15>; rel="last" rel =“ next” 建议下一组值。

答案 7 :(得分:0)

使用Github的新官方CLI(命令行界面):

gh pr list --repo OWNER/REPO

会产生类似的内容

Showing 2 of 2 pull requests in OWNER/REPO

#62  Doing something    that-weird-branch-name
#58  My PR title        wasnt-inspired-branch

另见details and optionsinstallation instructions