2014-07-04 13 views
6

Czy można dodać recenzentów w Gerrit za pomocą komunikatu zatwierdzenia? Rozważmy tę wiadomość popełniania:Dodawanie recenzentów za pomocą komunikatu zatwierdzenia

component: make foo more bar 

Foo was not bar enough, this change adds more bar to make foo fit better 
in baz. 

Change-Id: I4724e283214e0bfbb85a8e3d8db4971618e2609a 
Cc: [email protected] 
Cc: [email protected] 

Tutaj [email protected] i [email protected] należy dodać jako recenzentów podczas pchania Gerrit.

Jestem świadomy special branch specifier dodawania recenzentów, ale chciałbym mieć coś bardziej zautomatyzowanego podczas tworzenia commitów. Zmiany są niezależne, ale byłoby miło, gdybym mógł je pogrupować w branżę tematyczną, ponieważ są ze sobą powiązane.

+0

myślę, że można stworzyć hak pre-push do tego, aby stworzyć specjalny specyfikator gałęzi z zatwierdzenia msg – HiB

+0

@jthill został dodany znacznik git, ponieważ mogą tu również działać hooki commit, co wymaga znajomości git. Wycofuję się, jeśli nie masz nic przeciwko? – Lekensteyn

+0

Nie mam nic przeciwko. Powiedziałem swój kawałek, nie musiałeś nawet mówić swojego, to twoja poczta. Mógłbym się mylić, by sądzić, że duża liczba użytkowników gerrit również zna git na tyle dobrze, by odpowiedzieć, na tyle, że przeszkadza to znacznie większej liczbie użytkowników git-only śledzących ten tag, ale nie wiedzą, że gerrit nie był tego wart. – jthill

Odpowiedz

7

Istnieje kilka innych sposobów robienia tego.

  1. Wystarczy dodać te linie do .git/config

    [zdalny "test"]

    pushurl = ssh: // user @ gerrit: 29418/projektu

    push = HEAD: refs/for/master

    receivepack = git receive-pack --reviewer reviewer1 --reviewer reviewer2

    Teraz, gdy chcemy pchnąć przeglądu, po prostu zrobić: git Push ocena i „reviewer1” i „reviewer2” zostanie dodany do zestawu poprawek.

  2. Myślę, że można również napisać skrypt/hak, aby zautomatyzować to. Po zatwierdzeniu tylko grep Zmień identyfikator zatwierdzenia i użyj go z poniższą komendą gerrit:

    Zestaw ustawień ssh -p gerrit [- project (PROJEKT) | -p (PROJEKT)] [--add (RECENZATOR) ... | -a (RECENZENTA) ...] [-] {COMMIT | ZMIANA ID}

    przykład: ssh -p 29418 gerrit.example.com Gerrit set-recenzenci -a [email protected] Iac6b2ac2

Mam nadzieję, że to pomoże :)

+0

(1) nie nadaje się do użytku, ponieważ chcę dodać różnych recenzentów do zatwierdzenia. (2) może być czymś do obejrzenia. – Lekensteyn

+1

Jak mogę dodać grupę recenzentów zamiast jednego recenzenta? –

+0

@SazzadHissainKhan, widocznie nie. Przynajmniej otrzymałem słowo "fatal: user", część "nie znaleziono" jako odpowiedź, gdy próbowałem naciskać. – Martin

5

Nie można ustawić recenzentów per-commit, są one stosowane za naciśnięciem przycisku (patrz gerrit's git-receive-pack manual). Zamiast wykonywania git push origin HEAD lub git review (zakładając origin być zdalny Gerrit i HEAD gałąź, którą chcesz przesunąć), można uruchomić następujące dodanie dwóch recenzentów dla wszystkich nowych zatwierdzeń:

git push origin HEAD:refs/for/master%[email protected],[email protected] 

że dostaje stosowane do wszystkie zatwierdzenia, które nie jest to, co chcesz. Ze względu na powyższe ograniczenia zmienmy przepływ pracy, aby najpierw wprowadzić zmiany, a następnie ustawić niektórych recenzentów.


Od Gerrit rozróżnia Cc (wystarczy wysłać zgłoszenie mailem) i recenzenci (wyślij e-mail, ale również oznaczyć użytkownika jako recenzenta), będę modyfikować wiadomość popełnienia następująco:

component: make foo more bar 

Foo was not bar enough, this change adds more bar to make foo fit better 
in baz. 

[email protected] 
[email protected] 

Change-Id: I4724e283214e0bfbb85a8e3d8db4971618e2609a 

Biorąc pod uwagę szereg zatwierdzeń, można wykonać następujące czynności, aby dodać recenzentów oddzielne dla każdego popełnić:

  1. Zbierz listę identyfikatorów (lub zobowiązuje Change-Id s). Przykład, który zakłada gałąź główną jako bazę: git rev-list --reverse origin/master..
  2. Dla każdego identyfikatora zatwierdzenia, skanuj dla R=... (recenzentów) w komunikacie zatwierdzenia. Komunikat popełnić za dany popełnić można znaleźć z git show --no-patch --format=%b COMMIT_ID
  3. Jeśli recenzenci istnieć na komunikat zatwierdzenia, dodaj je za pomocą polecenia ssh -p 29418 [email protected] 'gerrit set-reviewers -a [email protected] COMMIT_ID' (zamiast COMMIT_ID, można również użyć Change-Id który jest I4724e283214e0bfbb85a8e3d8db4971618e2609a na przykład).

Aby wykonać powyższe czynności (wraz z automatycznego wykrywania użytkownika, hosta i ustawienia portu), napisałem skrypt bash https://git.lekensteyn.nl/scripts/tree/git/gerrit-add-reviewers

zaleca się, aby mieć plik .gitreview w repo z remote, który wskazuje na instancję Gerrit. Następnie wykonaj ~/scripts/gerrit-add-reviews origin/master.. z repozytorium git, aby skanować wiadomości zatwierdzenia i dodawać recenzentów.

0

Połącz strumienie wydarzeń i zestawów sprawdzających gerrit, możesz to zrobić.

Właściwie, musisz najpierw uzyskać status CL (utwórz, zaktualizuj & ...), a następnie wykonaj odpowiednią akcję, np. Dodaj recenzentów, a nawet prześlij CL.

  1. uzyskać zdarzenia gerrit z polecenia "gerrit stream-events".

  2. analizować zdarzenie formatu JSON jako każdą linię. W zdarzeniu JSON możemy uzyskać projekt, gałąź, identyfikator zmiany, numer CL, temat Commit (nie całe zatwierdzenie) i wiele informacji.

Jeśli naprawdę potrzebujesz całego komunikatu zatwierdzenia, "gerrit query" jest przydatny.

filtrować "utworzony zestaw patchsetów", numer patchSet ma wartość 1 (jeśli tylko chcesz to zrobić dla nowego zestawu poprawek), przeanalizuj temat zatwierdzenia i uzyskaj recenzentów zgodnie z wcześniejszymi ustaleniami.

  1. użyj komendy "gerrit set-reviewers", aby dodać opinię.

jak w mojej praktyce, używaj pytona, wszystko to jest łatwe.

Jego przepływ jest jak maleńki Jenkins.

1

Przygotowałem scenariusz, w którym możesz podać adresy e-mail recenzentów, których chcesz dodać, a on zajmie się resztą. Możesz nawet znaleźć fuzzy-find w istniejących aplikacjach (e-mail i nazwisko), dzięki czemu nie musisz pisać dużo.

https://gist.github.com/andersonvom/924fdc5f92aefa5eca9c

Wystarczy zadzwonić go za pomocą:

$ greview [<rev1> [<rev2> [...]]] 
+0

Ten skrypt używa schludnej sztuczki do ustawienia recenzentów po naciśnięciu: 'git push --receivepack =" git-receive-pack --reviewer [email protected] --reviewer [email protected] "origin HEAD: refs/for/master/topic' – Lekensteyn

0

Wyślij opinię o zmianę na gałęzi głównej do [email protected]:

git push ssh://review.example.com:29418/project HEAD:refs/for/master%[email protected] 

Wyślij opinie, ale tagging im z nazwą "bug42":

git push ssh://review.example.com:29418/project HEAD:refs/for/master%[email protected],topic=bug42 

Również CC dwie inne partie:

git push ssh://review.example.com:29418/project HEAD:refs/for/master%[email protected],[email protected],[email protected] 

Konfiguracja push makro, aby wykonać ostatnią czynność:

git config remote.charlie.url ssh://review.example.com:29418/project 
git config remote.charlie.push HEAD:refs/for/master%[email protected],[email protected],[email protected] 

potem .git/config zawiera następujące elementy:

[remote "charlie"] 
    url = ssh://review.example.com:29418/project 
    push = HEAD:refs/for/master%[email protected],[email protected],[email protected] 

i teraz przesyłam nową zmianę do recenzji Charlie, CC'ing zarówno alicja jak i bob jest znacznie łatwiejszy:

git push charlie 
0

Poniżej rozwiązanie działa

ssh -p Gerrit konfiguracji recenzentów [--project (projekt) | -p (PROJEKT)] [--add (RECENZATOR) ... | -a (RECENZENTA) ...] [-] {COMMIT | ZMIANA ID}

przykład: ssh -p 29418 gerrit.example.com Gerrit set-recenzenci -a [email protected] Iac6b2ac2

Powiązane problemy