使用Github Api V4从Github repo获取最后x次提交

时间:2017-07-30 07:15:33

标签: github graphql github-api

我试图使用新的Github GraphQL api(v4),我似乎无法弄清楚如何获得 master 的最后x次提交。我使用了存储库参考,但他们仍然没有给我我需要的东西。

下面的查询几乎可以为我提供所需内容:

query{
  repository(owner: "typelevel", name: "cats") {
    refs(refPrefix:"refs/heads/", last: 5) {
      edges{
        node {
          associatedPullRequests(states: MERGED, last: 5) {
            edges{
              node {
                title
                baseRef {
                  name
                  prefix
                }
                baseRefName
                commits(last: 10) {
                  edges {
                    node {
                      commit {
                        abbreviatedOid
                        message

                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

但:

  1. 似乎与repo中的内容完全匹配
  2. 仅限PRs
  3. 似乎太笨重了
  4. 我也尝试过使用 defaultBranchRef ,但这也不起作用:

    query{
      repository(owner: "typelevel", name: "cats") {
        defaultBranchRef {
          name
          prefix
          associatedPullRequests(states: [MERGED], last: 5) {
            edges {
              node {
                title
              }
            }
          }
        }
      }
    }
    

    我一直在使用Github api页面上的explorer app测试查询。

    有什么想法吗?

2 个答案:

答案 0 :(得分:8)

我能够解决这个问题:

query {
  repository(owner: "typelevel", name: "cats") {
    ref(qualifiedName: "master") {
      target {
        ... on Commit {
          history(first: 10) {
            pageInfo {
              hasNextPage
              endCursor
            }
            edges {
              node {
                oid
                messageHeadline
              }
            }
          }
        }
      }
    }
  }
}

修改this上链接的Github Platform Community查询。

答案 1 :(得分:1)

在这种情况下,使用history会更好吗?

请参阅this thread

  

ref”(参考的简称)是指向git提交的任何内容。这可以是本地分支,标签,远程分支等。例如,master将被视为参考。

     

在这种情况下,您可以使用ref类型上的Repository字段来获取针对提交的引用。
  从该提交中,您可以获得所有提交的父项。如果您定位master,则可以获取git存储库的主history

query {
  node(id: "MDEwOlJlcG9zaXRvcnk4NDM5MTQ3") {
    ... on Repository {
      ref(qualifiedName: "master") {
        target {
          ... on Commit {
            id
            history(first: 30) {
              totalCount
              pageInfo {
                hasNextPage
              }

              edges {
                node {
                  oid
                  message
                  author {
                    name
                    email
                    date
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}