2016-10-22 4 views
2

大きなオープンソースプロジェクトがあり、これを変更したいと思います。
何千ものプルリクエストがすでに保留中であるため、
誰かが既に同様の変更を行っていないかどうかを知ることは困難です。保留中のプル要求が特定のファイルにどのような影響を与えるかを確認する方法はありますか?

キーワードに基づいて問題を検索しようとすることはできますが、ファイルを変更したプルリクエストは見逃している可能性があります。

ファイル名に基づいてどのようにプルリクエストを変更してファイルを検索すればよいですか?これをgithubから行う方法はないようです。特定のファイルを変更したすべてのプルリクエスト/ブランチを出力するためにgitコマンドを実行できますか?

+1

[この回答](http://stackoverflow.com/questions/40182366/how-to-list-all-pull-request-with-count-of-files-changed/40185298#40185298)をご覧ください。私は別の質問に投稿しました。あなたはまったく同じ技術を使うことができますが、各PRで変更されたファイルをカウントする代わりに、特定のファイルの代わりに 'grep'を使用することもできます。答えの最後に注意書きを書き留めておきます。 – larsks

答えて

0

プルリクエストのすべてのブランチをローカルリポジトリにフェッチし、それぞれのローカルブランチを作成します。

git fetch <remote-in-Nth-pull-request> <branch-in-Nth-pull-request>:prN 

何千という数字がある場合、Nは0から数千になる可能性があります。

メインブランチがmasterであり、分岐されたブランチを含む他のすべてのブランチが、直接または間接的にコミットの一部であるmasterから作成されたとします。

git log $(git merge-base master prN)..prN -- <foo/bar.c> 

このコマンドリストbranch-in-Nth-pull-requestmasterからフォークされた後foo/bar.cを変更するすべてのコミット。出力が空でなければ、prNfoo/bar.cに変更されたと判断できます。

を実行し、すべてのprN、あなたは私が仕事をするためにいくつかのより簡単な方法があるかもしれないと思い

foo/bar.cを変更しているすべてのブランチを得ることができますが、あなたはこの1つの試みを持っている可能性のためのループで、このコマンド。

0

ElpieKayの答えは基本的に私のコメントで示唆していたものです。 this answerには、プロセスを大幅に自動化するシェルスクリプトの例があります。

オープンプルリクエストのリストを取得するのはかなり簡単です。例えば

curl https://api.github.com/repos/<user>/<repo>/pulls 

:あなただけのオープン要求のJSONリストを取得するためにcurlコマンドラインを、次のことができ

curl https://api.github.com/repos/centos-opstools/opstools-ansible/pulls 

あなたは、そのからプル要求番号を抽出することができます(jqのようなものを使用してcurlから-s引数は、ちょうど別のコマンドにカール出力をパイプするときあなたが得るいくつかのステータス出力)を抑制します。

curl -s https://api.github.com/repos/centos-opstools/opstools-ansible/pulls | 
jq '.[]|.number' 

あなたはその後、リクエストを引っ張ると、対象のファイルのためにそれらを点検したものだけを取得するためにループにそれをそのコマンドの出力を取得し、パイプができます

PR 82 
PR 71 
PR 69 
:のような出力が得られるでしょう

curl -s https://api.github.com/repos/centos-opstools/opstools-ansible/pulls | 
jq '.[]|.number' | 
while read pr; do 
    git fetch origin refs/pull/$pr/head > /dev/null 
    if git show --pretty=format:'' --name-only FETCH_HEAD | grep -q $file_i_care_about; then 
    echo "PR $pr" 
    fi 
done 

上記は変数file_i_care_aboutがあなたが興味のあるファイルを含む変数であることを前提としています。

関連する問題