2016-10-22 1 views
2

Es gibt ein großes Open-Source-Projekt, an dem ich Änderungen vornehmen möchte.
Mit Tausenden von Pull-Anfragen bereits ausstehend,
ist es schwer zu wissen, ob jemand nicht bereits ähnliche Änderungen vorgenommen hat.Gibt es eine Möglichkeit zu sehen, welche ausstehenden Pull-Anfragen eine bestimmte Datei betreffen?

Ich kann versuchen, nach Problemen basierend auf einem Schlüsselwort zu suchen, aber ich werde wahrscheinlich Pull-Anforderungen übersehen, die Änderungen an der Datei vorgenommen haben.

Wie kann ich basierend auf einem Dateinamen suchen, welche Pull-Anforderungen Änderungen an der Datei vornehmen? Es scheint keinen Weg zu geben, dies von GitHub aus zu tun. Gibt es einen Git-Befehl, den ich ausführen kann, um alle Pull-Requests/Zweige zu drucken, die eine bestimmte Datei geändert haben?

+1

Werfen Sie einen Blick auf [diese Antwort] (http://stackoverflow.com/questions/40182366/how-to-list-all-pull-request-with-count-of-files-changed/40185298#40185298) Ich habe eine andere Frage gestellt. Sie könnten ziemlich genau die gleiche Technik verwenden, aber statt die Dateien zu zählen, die in jedem PR geändert wurden, 'grep' für eine bestimmte Datei. Beachten Sie die Vorbehalte am Ende der Antwort. – larsks

Antwort

0

Alle Zweige in den Pull-Requests in den lokalen Repo holen und für jeden einen lokalen Zweig erstellen.

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

Wenn es Tausende sind, N könnte von 0 bis einigen Tausend sein.

Angenommen, Ihr Hauptzweig ist master und alle anderen Zweige einschließlich verzweigter Verzweigungen werden direkt oder indirekt aus einigen Commits von master erstellt.

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

Dieser Befehl listet alle Commits, die foo/bar.c nach branch-in-Nth-pull-request von master gegabelt wurde ändern. Wenn die Ausgabe nicht leer ist, können wir schließen prN hat sich geändert foo/bar.c.

Führen Sie diesen Befehl in einer Schleife für jeden prN und man konnte alle Zweige erhalten, die

foo/bar.c

Ich denke, es kann einige einfachere Methoden, um die Arbeit zu erledigen haben sich geändert, aber man konnte einen Versuch dieses einen haben .

0

ElpieKays Antwort ist im Grunde, was ich in meinem Kommentar vorgeschlagen habe; this answer hat ein Beispiel Shell-Skript, das den Prozess weitgehend automatisiert.

Es stellt sich heraus, dass es ziemlich einfach ist, eine Liste von offenen Pull-Anfragen zu erhalten; Sie können die folgenden curl Befehlszeile nur eine JSON-Liste der offenen Anfragen zu erhalten:

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

Zum Beispiel:

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

Sie können dann die Pull-Anforderung Zahlen extrahieren aus, dass mit so etwas wie jq (die -s Argument curl unterdrückt nur einigen Statusausgang, die Sie erhalten, wenn curl Ausgang an einem anderen Befehl kochend):

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

Sie könnten die Ausgabe dieses Befehls und Rohr in eine Schleife dann nehmen Sie nur diejenigen ziehen Anfragen zu holen und sie für eine Datei von Interesse prüfen:

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 

Welche Ausgabe wie ergeben würde:

PR 82 
PR 71 
PR 69 

Das obige setzt voraus, dass die Variable file_i_care_about eine Variable ist, die die Datei enthält, an der Sie interessiert sind.

Verwandte Themen