我正在尝试通过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次提交:
节点限制
要通过架构验证,所有GraphQL API v4调用都必须满足以下标准:
- 客户端必须在任何连接上提供第一个或最后一个参数。
- first和last的值必须在1-100之间。
- 单个呼叫最多只能请求500,000个节点。
因此,由于我没有提供first
或last
参数,因此该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
}
}
}
}
}
}
}
但是,我必须手动输入在第二个连接中传递的游标String:second100: history(after: "cursor-string") {}
。
在查询存储库中所有committedDate
个提交之前,如何递归运行此连接?
答案 0 :(得分:0)
尽管可以通过某种方式递归查询存储库上的所有提交,但我找不到可行的解决方案。
我的需要是
我只想提取它们的提交日期,以估算贡献给该存储库的总时间(大约为git-hours)
由于我无法查询完整的提交历史记录,因此我不得不假设最近100次提交的贡献时间与任何100次提交的贡献时间相同。
src
totalCount
committedDate
今天运行,查询返回:
{
repository(owner: "facebook", name: "react") {
object(expression: "master") {
... on Commit {
history {
totalCount
nodes {
committedDate
}
}
}
}
}
}
我使用与git-hours
's README上解释的算法相似的算法,估算了最近100次提交所花费的时间。
然后我将其缩放到{
"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
]
}
}
}
}
}
:
totalCount
我估计截至今天为止,Twitter的Bootstrap上有13152小时,其中const timeContributedTotal = timeContributedLatest100 * totalCount / 100;
估计7个月前为9959小时。听起来还不错。
至于React,我总共有15097小时(或629天)。
这个估算值很粗略,但与我所能达到的要求差不多。如果发现任何可能的改进,请随时发表评论或回答。