获取给定提交范围的GitHub已关闭问题列表

5

你可以查看Github的Pull Requests API。https://developer.github.com/v3/pulls/#link-relations 我相信你可以获得与该PR对应的问题列表。因此,您可以遍历历史记录,检查所述提交是否为PR,如果是,则检查是否附有问题。 - Eric Wang
2个回答

1
看起来顶部提交记录中指示与之相关的PR的漂亮链接来自于一个内部API,该API未向公众公开。据我所知,使用官方API而不是反向工程任何内部端点的方法是列出拉取请求(https://developer.github.com/v3/pulls/#list-pull-requests),过滤具有链接问题的请求,然后获取合并提交(看起来您的存储库使用合并提交)以确定哪些PR具有所需范围内的提交。以下是如何执行此操作的示例。我没有包括如何获取一系列提交,只想演示所需的Github API组件。此脚本打印出给定存储库的合并提交及其关联问题以及链接问题。
#!/bin/bash


echo "[" > allResults

i=1
numResults=1
firstRun=1
while [[ $numResults -gt 0 ]]
do
  curl -X GET -u ${GITHUB_USERNAME}:${HOMEBREW_GITHUB_API_TOKEN} "https://api.github.com/repos/microsoft/msquic/pulls?state=closed&page=$i" > page

  numResults=`cat page | jq '. | length'`
  i=$[$i + 1]

  if [[ $numResults -gt 0 ]]
  then
    # bit of nonsense to deal with trailing comma problem
    if [[ $firstRun -ne 1 ]]
    then
      echo "," >> allResults
    fi
    if [[ $firstRun -eq 1 ]]
    then
      firstRun=0
    fi

    cat page | awk 'NR != 1 { print buffer; buffer = $0 }' >> allResults
  fi
done

echo "]" >> allResults

echo "[" > prsWithIssues
# select only PRs with issues then use the crazy awk business to put 
# back the commas in the array
cat allResults | jq '.[] | select(.has_issues == true)' | awk '/^{/ { if (endsWithBrace) {print","$0} else {print} ; endsWithBrace=0} !/^{/ {endsWithBrace=1; print}   /.*\}$/ { endsWithBrace = 1 }' >> prsWithIssues
echo "]" >> prsWithIssues

cat prsWithIssues | jq '.[] | "\(.merge_commit_sha) \(._links.issue.href)"' > mergeCommitToIssueLink
# just printing here, you'll probably want 
# to do a grep for commits in the range you want
cat mergeCommitToIssueLink

0

正如@Eric_Wang在评论中提到的那样;Github的“问题”不会(必须)关联特定的提交或分支,除非手动标记为这样。合并的Github 拉取请求将会关联,但同样地,除非它们手动与问题关联。然而(考虑到赏金的时间限制),您可以使用Preview v3 Commit Search API来对匹配或引用您给出的请求的问题和PR进行文本grep。如果时间得以延长,我会给您展示一个例子,但它相当易于理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接