Make owners requirements explicit
Amend the notification on the change-screen making explicit
what is needed from who.
Example:
Needs Code-Review from owners
John Doe owns MyClass.java
Change-Id: Iafbb251d59779c9f081b0ee0f75b6a4cc4081faa
diff --git a/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java b/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java
index f62c446..6fd2459 100644
--- a/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java
+++ b/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java
@@ -34,6 +34,7 @@
import java.io.File;
import java.util.Map;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -84,11 +85,12 @@
public Term createFormattedList(Prolog engine, Term key) {
String path = key.toString();
PathOwners owners = OwnersStoredValues.PATH_OWNERS.get(engine);
- String userNames =
- iteratorStream(owners.getFileOwners().get(path).iterator())
- .map(id -> getFullNameFromId(engine, id))
- .collect(Collectors.joining(" "));
- return SymbolTerm.create((new File(path)).getName()+" "+userNames);
+ Set<String> ownersNames =
+ iteratorStream(owners.getFileOwners().get(path).iterator()).map(
+ id -> getFullNameFromId(engine, id)).collect(Collectors.toSet());
+ String ownVerb = ownersNames.size() > 1 ? " own " : " owns ";
+ String userNames = ownersNames.stream().collect(Collectors.joining(", "));
+ return SymbolTerm.create(userNames + ownVerb + (new File(path)).getName());
}
private static IdentifiedUser.GenericFactory userFactory(Prolog engine) {
diff --git a/owners/src/main/prolog/gerrit_owners.pl b/owners/src/main/prolog/gerrit_owners.pl
index 89c0aec..8bec1fa 100644
--- a/owners/src/main/prolog/gerrit_owners.pl
+++ b/owners/src/main/prolog/gerrit_owners.pl
@@ -8,7 +8,7 @@
add_owner_approval(In, Out) :-
owner_path(Path),
\+ owner_approved(Path),
- Out = [label('Owner-Approval', need(_)) | In],
+ Out = [label('Code-Review from owners', need(_)) | In],
!.
add_owner_approval(In, Out) :- In = Out.
@@ -16,7 +16,7 @@
add_owner_approval(Users, In, Out) :-
owner_path(Path),
\+ owner_approved(Users, Path),
- Out = [label('Owner-Approval', need(_)) | In],
+ Out = [label('Code-Review from owners', need(_)) | In],
!.
add_owner_approval(_, In, Out) :- In = Out.
@@ -38,20 +38,20 @@
findall_match_file_user(FileAndUser) :-
matcher_path(F),
findall(US,code_review_user(US),Approvers),
- gerrit_owners:matcher_needed(Approvers,F,FileAndUser).
+ matcher_needed(Approvers,F,FileAndUser).
code_review_user(U) :-
gerrit:commit_label(label('Code-Review', 2), user(U)).
% this loops over all the paths and if for any
% we have some labels generated then add a single
-% Owner-Approval need to block submit button
+% Owner-Code-Review need to block submit button
add_match_owner_approval(In,Out) :-
matcher_path(P),
findall(US,code_review_user(US),Approvers),
matcher_needed(Approvers,P,W),
\+ W == [],
- Out = [label('Owner-Approval', need(_)) | In], !.
+ Out = [label('Code-Review from owners', need(_)) | In], !.
add_match_owner_approval(In,Out) :- Out = In.