2012-07-19 10 views
14

Ich möchte dem Autor einer Änderung verbieten, seine eigenen Änderungen in zu überprüfen. Ich bin mir bewusst, this suggested hack, aber das löst nicht wirklich das Problem.Autor von Gerrit-Rezension ausschließen

Jetzt kann ich learned from the gerrit issues, dass gerrit fest codierte Regeln von custom prolog code geändert werden können, so dass es möglich sein könnte, den Workflow zu ändern, wie ich will. Allerdings habe ich noch nie den Arbeitsablauf von Gerrit geändert und ich weiß nicht viel .

Hat jemand eine kleine funktionierende Beispiel für benutzerdefinierte Regeln für Gerrit mit dieser Prolog-Engine?

Ich werde gerne andere Alternativen akzeptieren, wie man Autoren, die eine Selbstüberprüfung durchführen, verbieten kann, da sie nicht verlangen, dass mein Team den aktuellen Workflow ändert.

Antwort

2

Ich habe eine sehr einfache Antwort in dieser Gruppe google gefunden ersetzen: groups.google.com/disable-self-review

In einem übergeordneten Projekt (Standard ist das All-Projekte Projekt) Fügen Sie dies dem Projekt hinzu.config-Datei in refs/meta/config Zweig:

[access "refs/*"] 
label-Code-Review = block -2..+2 group Change Owner 

und in den Gruppen in der gleichen Branche Datei fügen Sie diese Zeile

global:Change-Owner Change Owner 

Dann die Aussage nehmen, die das Recht in die Child-Projekt des Projekts ermöglicht. config:

label-Code-Review = -2..+2 group Developers 

Achten Sie auf die Blockanweisung in der übergeordneten Projekt tun schreiben und die Rechte in dem Kind Projekt geben. Wenn "allow" und "block" in derselben Datei enthalten sind, wird die Genehmigung die überschreiben (siehe this). Dies blockiert den Besitzer einer Änderung, um -2 oder +2 zu geben. Dadurch bleiben die Optionen -1 und +1 intakt. Sie können eine ähnliche Anweisung für andere benutzerdefinierte Labels hinzufügen, die Sie möglicherweise verwenden.

3

Ich bin mir nicht sicher, dass dies das, was Sie suchen, aber es könnte Ihnen etwas Inspiration geben. Gemäß this discussion genehmigt das folgende Fragment Änderungen nur, wenn der Prüfer und der Änderungsbesitzer nicht dieselbe Person sind.

% If a reviewer approved the change, its OK. 
    submit_rule(submit(CR)) :- 
    change_owner(Owner), 
    max_with_block('Code-Review', -2, 2, ok(Reviewer)), 
    not_same(Owner, Reviewer), 
    CR = label('Code-Review', ok(Reviewer)), 
    !. 
3
+0

Ich habe Gerrit nicht mit Git eingerichtet. Ich habe diesen Leitfaden mehr oder weniger verfolgt [https://www.digitalcean.com/community/tutorials/how-to-install-gerrit-on-an-ubuntu-cloud-server]. Wo finde ich rules.pl in diesem Fall? Wo würde rules.pl in diesem Fall gehen? – Harshdeep

0

ich this answer auf die Frage gestellt, die Sie verbunden ist, aber Es kann Sie in die richtige Richtung führen:

Ich schrieb diesen Prolog-Filter für unsere Gerrit-Installation. Ich habe es als ein submit_filter im übergeordneten Projekt getan, weil ich wollte, dass es für alle Projekte in unserem System gilt.

%filter to require all projects to have a code-reviewer other than the owner 
submit_filter(In, Out) :- 
    %unpack the submit rule into a list of code reviews 
    In =.. [submit | Ls], 
    %add the non-owner code review requiremet 
    reject_self_review(Ls, R), 
    %pack the list back up and return it (kinda) 
    Out =.. [submit | R]. 

reject_self_review(S1, S2) :- 
    %set O to be the change owner 
    gerrit:change_owner(O), 
    %find a +2 code review, if it exists, and set R to be the reviewer 
    gerrit:commit_label(label('Code-Review', 2), R), 
    %if there is a +2 review from someone other than the owner, then the filter has no work to do, assign S2 to S1 
    R \= O, !, 
    %the cut (!) predicate prevents further rules from being consulted 
    S2 = S1. 
reject_self_review(S1, S2) :- 
    %set O to be the change owner 
    gerrit:change_owner(O), 
    find a +2 code review, if it exists, and set R to be the reviewer 
    gerrit:commit_label(label('Code-Review', 2), R), 
    R = O, !, 
    %if there isn't a +2 from someone else (above rule), and there is a +2 from the owner, reject with a self-reviewed label 
    S2 = [label('Self-Reviewed', reject(O))|S1]. 
%if the above two rules didn't make it to the ! predicate, there aren't any +2s so let the default rules through unfiltered 
reject_self_review(S1, S1). 

Die Vorteile (IMO) von dieser Regel über rule #8 from the cookbook sind:

  • Das Self-Reviewed Label wird nur dann angezeigt, wenn die die Änderung blockiert wird, anstatt das Hinzufügen eines Non-Author-Code-Review Label jede Änderung
  • Durch reject(O) der Regel unter Verwendung bewirkt, dass die Self-Reviewed Label buchstäblich eine rote Fahne
  • Alsseinanstelle eines submit_rule wird diese Regel in einem übergeordneten Projekt installiert und gilt für alle Teilprojekte

Bitte beachten Sie: Diese Regel verfasst wird, um die Owner von Selbst Überprüfung einer Änderung, während das Beispiel zu verhindern, aus dem Kochbuch vergleicht gegen die Author. Je nach Ihrem Workflow, mögen Sie vielleicht die 2 gerrit:change_owner(O) Prädikate mit gerrit:commit_author(O) oder gerrit:commit_committer(O)