Исключить автора из обзора gerrit
Я хочу запретить автору изменения пересмотреть свои собственные изменения в gerrit. Я знаю этот предлагаемый взлом, но на самом деле это не решает проблему.
Теперь я узнал из проблем gerrit, что жестко закодированные правила gerrit могут быть изменены пользовательский код прогона, поэтому потенциально возможно изменить рабочий процесс, как я хочу. Тем не менее, я никогда не изменял рабочий процесс gerrit раньше, и я не знаю много prolog.
У кого-нибудь есть небольшой рабочий пример пользовательских правил для 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)),
!.
Ответ 3
Если вы еще этого не нашли, вот официальное описание того, как это сделать с помощью пролога:
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
Ответ 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)