gpt4 book ai didi

github - 使用 GitHub GraphQL API v4 查询单个存储库中的所有提交

转载 作者:行者123 更新时间:2023-12-02 20:03:00 24 4
gpt4 key购买 nike

我正在尝试通过 GitHub 的 GraphQL API v4 查询 GitHub 上指定存储库的所有提交。

我只想提取它们的提交日期,以估计为该存储库贡献的总时间(类似于 git-hours )

这是我的初始查询:(注意:您可以尝试在 Explorer 中运行它)

{
repository(owner: "facebook", name: "react") {
object(expression: "master") {
... on Commit {
history {
nodes {
committedDate
}
}
}
}
}
}

不幸的是,由于 API 的 resource limitations,它仅返回最新的 100 个提交。 :

Node Limit

To pass schema validation, all GraphQL API v4 calls must meet these standards:

  • Clients must supply a first or last argument on any connection.
  • Values of first and last must be within 1-100.
  • Individual calls cannot request more than 500,000 total nodes.

因此,由于我没有提供 firstlast 参数,API 假定我正在查询 history(first: 100)。而且我无法在单个连接中查询超过 100 个节点。

但是,总节点限制要高得多(500,000),我应该能够以 100 个为一组查询提交,直到拥有所有提交。

我能够使用此查询查询最新 200 个提交:

{
repository(owner: "facebook", name: "react") {
object(expression: "master") {
... on Commit {
total: history {
totalCount
}
first100: history(first: 100) {
edges {
cursor
node {
committedDate
}
}
}
second100: history(after: "700f17be6752a13a8ead86458e343d2d637ee3ee 99") {
edges {
cursor
node {
committedDate
}
}
}
}
}
}
}

但是,我必须手动输入在第二个连接中传递的光标字符串:second100: History(after: "cursor-string") {}

如何递归运行此连接,直到查询存储库中所有提交的 comfilledDate

最佳答案

虽然可能有一种方法可以递归查询存储库上的所有提交,但我找不到可行的解决方案。

这是我的解决方案

我的需求是:

I only want to pull the dates they were committed at, in order to estimate the total time that was contributed to that repository (something along the lines of git-hours)

由于我无法查询完整的提交历史记录,因此我必须假设最近 100 次提交的贡献时间与任何 100 次提交的贡献时间相同。

从 GitHub GraphQL API 查询数据

  • 提交历史记录的totalCount
  • 最近 100 次提交的 comfilledDate
{
repository(owner: "facebook", name: "react") {
object(expression: "master") {
... on Commit {
history {
totalCount
nodes {
committedDate
}
}
}
}
}
}

今天运行,查询返回:

{
"data": {
"repository": {
"object": {
"history": {
"totalCount": 10807,
"nodes": [
{
"committedDate": "2019-04-04T01:15:33Z"
},
{
"committedDate": "2019-04-03T22:07:09Z"
},
{
"committedDate": "2019-04-03T20:21:27Z"
},
// 97 other committed dates
]
}
}
}
}
}

估计总贡献时间

我使用类似于 git-hours's README 上解释的算法估计了最近 100 次提交中贡献的时间。 .

然后我将其缩放到 totalCount:

const timeContributedTotal = timeContributedLatest100 * totalCount / 100;

我估计截至今天 Twitter 的 Bootstrap 上已放置了 13152 小时,而 7 个月前 git-hours 估计已放置了 9959 小时。听起来还不错。

对于 React,我总共获得了 15097 小时,即 629 天。

这个估计非常粗略,但已经尽可能接近我的需要了。如果您发现任何可能的改进,请随时发表评论或回答。

关于github - 使用 GitHub GraphQL API v4 查询单个存储库中的所有提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55419229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com