После обновления gerrit'a с версии 2.8.1 на 2.9, исчесзла кнопочка submit для разработчиков даже если количество голосов было больше +2.
В логах геррита при этом появилась ошибка:
ERROR com.google.gerrit.server.project.ChangeControl : Submit rule :(user,submit_rule) for change 3368 of test_repository output invalid result: submit(label(Code-Review,ok(_1F935754))). Reason: A label with the status Code-Review: OK must contain a user.
Как оказалось, перестали работать правила отправки изменений, причем даже те, которые есть в примерах.
Вот тут народ завел баг репорт:
И чтобы не ходить по ссылке, рабочий пример правила 1+1=2, любезно предоставленный неким benjamin...@gmail.com:
sum_list([], 0).
sum_list([H | Rest], Sum) :- sum_list(Rest,Tmp), Sum is H + Tmp.
first_list([], _).
first_list([F], F).
first_list([F | Rest], F).
score(Category, Score, User) :-
gerrit:commit_label(label(Category, Score), User).
add_category_min_score(In, Category, Min, P) :-
findall(Score, score(Category, Score, User), Scores),
findall(User, score(Category, Score, User), Users),
sum_list(Scores, Sum),
Sum >= Min, !,
first_list(Users, FirstUser),
P = [label(Category, ok(FirstUser)) | In].
add_category_min_score(In, Category, Min, P) :-
P = [label(Category, need(Min)) | In].
submit_rule(S) :-
gerrit:default_submit(X),
X =.. [submit | Ls],
gerrit:remove_label(Ls, label('Code-Review', _), NoCR),
add_category_min_score(NoCR, 'Code-Review', 2, Labels),
S =.. [submit | Labels].
До сих пор не понимаю, почему авторы gerrit'a выбрали prolog.
sum_list([], 0).
sum_list([H | Rest], Sum) :- sum_list(Rest,Tmp), Sum is H + Tmp.
first_list([], _).
first_list([F], F).
first_list([F | Rest], F).
score(Category, Score, User) :-
gerrit:commit_label(label(Category, Score), User).
add_category_min_score(In, Category, Min, P) :-
findall(Score, score(Category, Score, User), Scores),
findall(User, score(Category, Score, User), Users),
sum_list(Scores, Sum),
Sum >= Min, !,
first_list(Users, FirstUser),
P = [label(Category, ok(FirstUser)) | In].
add_category_min_score(In, Category, Min, P) :-
P = [label(Category, need(Min)) | In].
submit_rule(S) :-
gerrit:default_submit(X),
X =.. [submit | Ls],
gerrit:remove_label(Ls, label('Code-Review', _), NoCR),
add_category_min_score(NoCR, 'Code-Review', 2, Labels),
S =.. [submit | Labels].
До сих пор не понимаю, почему авторы gerrit'a выбрали prolog.