2012-07-19 8 views
14

Quiero rechazar que el autor de un cambio revise sus propios cambios en . Soy consciente de this suggested hack, pero eso realmente no resuelve el problema.Excluir autor de revisión de gerrit

Ahora yo learned from the gerrit issues que las reglas codificadas de gerrit se pueden modificar por custom prolog code, por lo que debería ser posible modificar el flujo de trabajo como yo quiera. Sin embargo, nunca he modificado el flujo de trabajo de Gerrit antes y no sé mucho .

¿Alguien tiene un pequeño ejemplo de de reglas personalizadas para gerrit usando este motor de prólogo?

Aceptaré felizmente otras alternativas de cómo prohibir a los autores hacer una auto-revisión, dado que no requieren que mi equipo cambie el flujo de trabajo actual.

Respuesta

2

he encontrado una respuesta muy fácil en este grupo de Google: groups.google.com/disable-self-review

En un proyecto principal (por defecto es el proyecto All-Proyectos) agregar esto al proyecto.archivo de configuración en la rama de árbitros/meta/config:

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

y en los grupos de archivos en la misma rama añadir esta línea

global:Change-Owner Change Owner 

Luego tomar la declaración que permite que la derecha en el proyecto del proyecto secundario. config:

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

Asegúrese de hacer escribir el bloque de sentencias en el proyecto principal y dar a los derechos en el proyecto secundario. Si allow y block están en el mismo archivo, el permiso invalidará (Consulte this). Esto bloqueará al propietario de un cambio para dar -2 o +2. Dejará intactas las opciones -1 y +1. Puede agregar una declaración similar para cualquier otra etiqueta personalizada que pueda usar.

3

No estoy seguro de que esto sea lo que estás buscando, pero podría darte algo de inspiración. De acuerdo con this discussion, el siguiente fragmento aprueba los cambios solo si el revisor y el propietario del cambio no son la misma persona.

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

he publicado this answer a la pregunta que se ha vinculado a, pero puede conducirlo en la dirección correcta:

Escribí este filtro de prólogo para nuestra instalación de Gerrit. Lo hice como un submit_filter en el proyecto principal porque quería que se aplicara a todos los proyectos en nuestro sistema.

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

Los beneficios (IMO) de esta regla sobre rule #8 from the cookbook son:

  • La etiqueta Self-Reviewed sólo se muestra cuando el cambio está siendo bloqueado, en lugar de añadir una etiqueta Non-Author-Code-Review-cada cambio
  • mediante el uso de reject(O) la regla hace que la etiqueta Self-Reviewed a ser, literalmente, una bandera roja
  • Como submit_filter en lugar de un submit_rule, esta regla se instala en un proyecto principal y se aplica a todos los sub-proyectos

Por favor, tenga en cuenta: Esta regla es de autoría para evitar que el Owner de auto-revisión de un cambio, mientras que el ejemplo del libro de cocina se compara con el Author. Dependiendo de su flujo de trabajo, es posible que desee reemplazar los 2 gerrit:change_owner(O) predicados con gerrit:commit_author(O) o gerrit:commit_committer(O)