#grab all the PRs and sort them so the newest ones are first in the list:
git ls-remote origin 'pull/*/head' | awk '{print $2}' | grep -oE '[0-9]+' | sort -n | tail -r |
#read each PR and filter for any that have changed file in question
while read pr; do
echo "Searching $pr"
if gh pr view $pr --json files --jq '.files.[].path' | grep -q "yourFileNameHere"; then
echo "Found in PR $pr - $(gh pr view $pr --json state --jq '.state')"
fi
done
3条答案
按热度按时间b1uwtaje1#
ElpieKay的回答基本上就是我在评论中所建议的;这个答案有一个示例shell脚本,它将在很大程度上自动化该过程。
事实证明,获取打开的拉取请求列表相当容易;你可以使用下面的
curl
命令行来获取打开请求的JSON列表:举例来说:
然后,您可以使用类似
jq
的东西从中提取pull请求编号(curl
的-s
参数只是在将curl输出管道传输到另一个命令时抑制了一些状态输出):然后,您可以获取该命令的输出并将其导入一个循环,以获取这些pull请求并检查它们是否有兴趣的文件:
这将产生如下输出:
上面假设变量
file_i_care_about
是一个包含您感兴趣的文件的变量。9nvpjoqh2#
将pull-request中的所有分支提取到本地仓库中,并为每个分支创建一个本地分支。
如果有数千个,
N
可以从0到数千个。假设你的主分支是
master
,所有其他分支包括forked分支都是直接或间接从master
的一些提交创建的。此命令列出了在从
master
派生branch-in-Nth-pull-request
之后更改foo/bar.c
的所有提交。如果输出不为空,我们可以断定prN
已经改变了foo/bar.c
。对每个
prN
循环运行此命令,您可以获得所有更改了foo/bar.c
的分支我想可能有一些更简单的方法来做这项工作,但你可以试试这个。
jmp7cifd3#
这里有一个小脚本,我拼凑在一起,以解决类似的问题:
(btw你需要github cli工具gh -https://cli.github.com/)