Исключить автора из обзора gerrit

Я хочу запретить автору изменения пересмотреть свои собственные изменения в . Я знаю этот предлагаемый взлом, но на самом деле это не решает проблему.

Теперь я узнал из проблем gerrit, что жестко закодированные правила gerrit могут быть изменены пользовательский код прогона, поэтому потенциально возможно изменить рабочий процесс, как я хочу. Тем не менее, я никогда не изменял рабочий процесс gerrit раньше, и я не знаю много .

У кого-нибудь есть небольшой рабочий пример пользовательских правил для gerrit с помощью этого прологового движка?

Я с радостью соглашусь с другими альтернативами того, как запретить авторам делать самооценку, учитывая, что они не требуют, чтобы моя команда меняла текущий рабочий процесс.

Ответы

Ответ 1

Я нашел очень простой ответ в этой группе google: groups.google.com/disable-self-review

В родительском проекте (по умолчанию это проект All-Projects) добавьте его в файл project.config в ветке refs/meta/config:

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

а в файле групп в той же ветке добавьте эту строку

global:Change-Owner Change Owner

Затем возьмите инструкцию, которая позволяет право в дочерний проект project.config:

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

Обязательно напишите оператор блока в родительском проекте и дайте права в дочернем проекте. Если разрешить и заблокировать в одном файле, разрешение будет отменено (см. this). Это заблокирует владельца изменения, чтобы дать -2 или +2. Он оставит параметры -1 и +1 неповрежденными. Вы можете добавить аналогичный оператор для любых других пользовательских ярлыков, которые вы можете использовать.

Ответ 2

Я не уверен, что это то, что вы ищете, но это может дать вам некоторое вдохновение. Согласно это обсуждение, следующий фрагмент утверждает изменения только в том случае, если рецензент и владелец изменения не являются тем же человеком.

  % 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)),
    !.

Ответ 4

Я разместил этот ответ на вопрос, на который вы ссылались, но он может привести вас в правильном направлении:

Я написал этот пролог фильтр для нашей установки Gerrit. Я сделал это как submit_filter в родительском проекте, потому что хотел, чтобы он применялся ко всем проектам в нашей системе.

%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 - comment sign was missing
    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).

Преимущества (IMO) этого правила по сравнению с правилом № 8 из поваренной книги :

  • Метка Self-Reviewed отображается только тогда, когда изменение блокируется, вместо добавления метки Non-Author-Code-Review к каждому изменению
  • При использовании reject(O) правило заставляет метку Self-Reviewed буквально быть красным флажком
  • В качестве submit_filter вместо submit_rule это правило устанавливается в родительском проекте и применяется ко всем подпроектам

Обратите внимание: Это правило создано для предотвращения самопроверки изменений Owner, в то время как пример из кулинарной книги сравнивается с Author. В зависимости от вашего рабочего процесса, вы можете заменить 2 предиката gerrit:change_owner(O) на gerrit:commit_author(O) или gerrit:commit_committer(O)