【问题标题】:Get List of GitHub Closed Issues for Given Commit Range获取给定提交范围的 GitHub 已关闭问题列表
【发布时间】:2020-06-25 18:50:15
【问题描述】:

给定一个提交范围,比如说:

https://github.com/microsoft/msquic/compare/3fb2c1145be48cf5acbca72a4e42d8702e3afbd6...2be77cd39ce39528b00ea698645e369b12187502

是否可以获得这些提交关闭的问题列表?

我能说的唯一方法是手动去每个提交,找到对应的 PR,然后看看是否有任何相关的问题。有什么方法可以自动化吗?

【问题讨论】:

  • 你可以看看 Github 的 Pull Requests API。 developer.github.com/v3/pulls/#link-relations我相信你可以得到与该 PR 对应的问题列表。因此,您可以遍历历史检查以查看所述提交是否为 PR,如果是,请检查是否存在附加问题。

标签: github github-issues


【解决方案1】:

看起来提交顶部的漂亮链接表明它们关联的 PR 来自不向公众公开的内部 API。据我所知,这样做的方法(使用官方 API,而不是对任何内部端点进行逆向工程)是列出拉取请求(https://developer.github.com/v3/pulls/#list-pull-requests),过滤具有链接问题的请求,然后获取合并提交(看起来就像您的仓库使用合并提交一样)来确定哪些 PR 在所需范围内提交。 这是一个如何做到这一点的例子。我没有包括如何获取范围的提交,只是想演示所需的 github api 片段。此脚本打印出合并提交以及给定 repo 的相关问题以及链接问题。

#!/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

【讨论】:

    【解决方案2】:

    正如评论中提到的@Eric_Wang; Github 的“问题”不会(必然)关联特定的提交或分支,除非手动标记。合并的 Github 拉取请求 会,但同样,除非它们手动与问题相关联。但是(考虑到赏金的时间限制)您可以使用Preview v3 Commit Search API 对匹配或引用您给定请求的问题和 PR 进行文本 grep。如果时间延长,我会给你举个例子,但它是不言自明的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2010-11-05
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 2018-06-25
      相关资源
      最近更新 更多