从gerrit审查中排除作者

时间:2012-07-19 12:22:44

标签: prolog gerrit

我想禁止改变的作者在中审核他/她自己的更改。我知道this suggested hack,但这并没有真正解决问题。

现在我learned from the gerrit issues可以通过custom prolog code修改gerrit的硬编码规则,因此应该可以根据需要修改工作流程。但是,我之前从未修改过gerrit的工作流程,我不太了解

有没有人使用这个prolog引擎有一个小的 gerrit自定义规则的例子

我很乐意接受其他替代方案,如果他们不要求我的团队改变当前的工作流程,他们会禁止作者进行自我评估。

4 个答案:

答案 0 :(得分:4)

我在这个google群组中找到了一个非常简单的答案:groups.google.com/disable-self-review

在父项目中(默认为All-Projects项目)将其添加到refs / meta / config分支中的project.config文件中:

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

并在同一分支的groups文件中添加此行

global:Change-Owner Change Owner

然后将允许右边的语句带入子项目的project.config:

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

确保在父项目中编写块语句并在子项目中授予权限。如果allow和block在同一个文件中,则allow将取代(参见this)。 这将阻止更改的所有者给-2或+2。它会保留-1和+1选项。您可以为可能使用的任何其他自定义标签添加类似的语句。

答案 1 :(得分:3)

我不确定这是你在找什么,但它可能会给你一些灵感。根据{{​​3}},只有审核人和变更所有者不是同一个人时,以下片段才会批准更改。

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

答案 2 :(得分:3)

答案 3 :(得分:0)

我已将this answer发布到您关联的问题,但它可能会引导您朝着正确的方向发展:

我为Gerrit安装编写了这个prolog过滤器。我在父项目中将其作为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
    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).

此规则相对于rule #8 from the cookbook的好处(IMO)是:

  • 仅在阻止更改时显示Self-Reviewed标签,而不是在每次更改时向添加Non-Author-Code-Review标签
  • 使用reject(O)规则会导致Self-Reviewed标签字面上成为红旗
  • 作为submit_filter而不是submit_rule,此规则安装在父项目中并适用于所有子项目

请注意:此规则是为防止Owner自我审核更改而创作的,而菜谱中的示例则与Author进行比较。根据您的工作流程,您可能希望将gerrit:change_owner(O)谓词替换为gerrit:commit_author(O)gerrit:commit_committer(O)