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

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

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

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

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


person Bananeweizen    schedule 19.07.2012    source источник


Ответы (4)


Я нашел очень простой ответ в этой группе 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

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

person very    schedule 19.12.2017
comment
Где должен присутствовать оператор label-Code-Review = -2..+2 group Developers в дочернем проекте.config? Под каким заголовком? - person Shashi Ranjan; 24.05.2018
comment
просто добавьте отрицание -2 +2 для изменения владельца в метке Code Review, которая работает для меня. - person TerrenceSun; 04.03.2019
comment
Меня устраивает. Есть ли у вас какие-либо идеи, как настроить, если я хочу разрешить одному или нескольким владельцам просматривать свои изменения? - person ElpieKay; 18.12.2019
comment
@ElpieKay Должен работать, добавляя имя label-Code-Review = -2..+2 в родительский проект. Но имейте в виду, что это хорошая практика, когда кто-то еще проверяет ваш код, независимо от того, насколько вы опытны. - person very; 18.12.2019
comment
@большое спасибо! Я заменяю имя группой, которая содержит список исключенных пользователей, и это работает. И спасибо за ваш совет. Исключенные пользователи являются пользователями-ботами для специальных задач. - person ElpieKay; 18.12.2019

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

  % 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)),
    !.
person Alexander Serebrenik    schedule 22.07.2012

Если вы еще не нашли его, вот официальное описание того, как это сделать с помощью пролога:

https://gerrit-review.googlesource.com/Documentation/prolog-cookbook.html#_example_8_make_change_submittable_only_if_tt_code_review_2_tt_is_given_by_a_non_author

person Jonas Bang Christensen    schedule 07.06.2013
comment
Я не устанавливал gerrit с помощью git. Я более или менее следовал этому руководству [digitalocean.com/community/tutorials/. Где мне найти rules.pl в таком случае? Куда пойдет rules.pl в таком случае? - person Harshdeep; 12.05.2016

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

Я написал этот пролог-фильтр для нашей установки 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).

person hair raisin    schedule 16.06.2016
comment
В каком месте я должен хранить это rule.pl? - person Shashi Ranjan; 24.05.2018
comment
@ShashiRanjan правило находится в ветке refs/meta/config для любого проекта, к которому вы хотите его применить (дополнительная информация в документы). Поскольку я хотел, чтобы он применялся ко всем проектам в моем экземпляре Gerrit, я поместил его в ветку refs/meta/config проекта All-Projects. - person hair raisin; 29.05.2018
comment
@hairraisin, есть идеи, как я могу объединить 2 submit_filter в 1 файл rules.pl? - person shlomi33; 01.06.2020