summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClark Boylan <clark.boylan@gmail.com>2022-02-10 10:31:52 -0800
committerClark Boylan <clark.boylan@gmail.com>2022-02-14 08:43:03 -0800
commit9f50c7e84a6f774db779552c922c4e5824b0a408 (patch)
tree7503cdb35fc425716347b5a21945fb2f7251f17c
parentc1c091d0269c4916b6b4b33e51f4d76fab34b8e7 (diff)
Fix gerrit ls-members --recursive
Id3ec26677 introduced a regression to the ls-members SSH command that caused it to ignore the --recursive flag. This was caused by replacing apply() with getDirectMembers() which only looks at direct membership and not transitive membership. To fix this we update the parent restapi class to include a getMembers() method that inspects the recursive flag and applies the correct memerbship lookup method. Release-Notes: Honor --recursive option on ls-members command Change-Id: I7379be1a99b58e32da0e1fc518c774ea65ae8e88
-rw-r--r--java/com/google/gerrit/server/restapi/group/ListMembers.java19
-rw-r--r--java/com/google/gerrit/sshd/commands/ListMembersCommand.java2
2 files changed, 17 insertions, 4 deletions
diff --git a/java/com/google/gerrit/server/restapi/group/ListMembers.java b/java/com/google/gerrit/server/restapi/group/ListMembers.java
index 5b3e8dc42c..87b00c17d5 100644
--- a/java/com/google/gerrit/server/restapi/group/ListMembers.java
+++ b/java/com/google/gerrit/server/restapi/group/ListMembers.java
@@ -80,13 +80,18 @@ public class ListMembers implements RestReadView<GroupResource> {
throws PermissionBackendException {
Optional<InternalGroup> group = groupCache.get(groupUuid);
if (group.isPresent()) {
- InternalGroupDescription internalGroup = new InternalGroupDescription(group.get());
- GroupControl groupControl = groupControlFactory.controlFor(internalGroup);
- return getTransitiveMembers(internalGroup, groupControl);
+ return getTransitiveMembers(group.get());
}
return ImmutableList.of();
}
+ public List<AccountInfo> getTransitiveMembers(InternalGroup group)
+ throws PermissionBackendException {
+ InternalGroupDescription internalGroup = new InternalGroupDescription(group);
+ GroupControl groupControl = groupControlFactory.controlFor(internalGroup);
+ return getTransitiveMembers(internalGroup, groupControl);
+ }
+
private List<AccountInfo> getTransitiveMembers(
GroupDescription.Internal group, GroupControl groupControl)
throws PermissionBackendException {
@@ -110,6 +115,14 @@ public class ListMembers implements RestReadView<GroupResource> {
return toAccountInfos(directMembers);
}
+ protected List<AccountInfo> getMembers(InternalGroup group) throws PermissionBackendException {
+ if (recursive) {
+ return getTransitiveMembers(group);
+ } else {
+ return getDirectMembers(group);
+ }
+ }
+
private List<AccountInfo> toAccountInfos(Set<Account.Id> members)
throws PermissionBackendException {
AccountLoader accountLoader = accountLoaderFactory.create(true);
diff --git a/java/com/google/gerrit/sshd/commands/ListMembersCommand.java b/java/com/google/gerrit/sshd/commands/ListMembersCommand.java
index 3269c2b0c4..37f4245b1a 100644
--- a/java/com/google/gerrit/sshd/commands/ListMembersCommand.java
+++ b/java/com/google/gerrit/sshd/commands/ListMembersCommand.java
@@ -79,7 +79,7 @@ public class ListMembersCommand extends SshCommand {
return;
}
- List<AccountInfo> members = getDirectMembers(group.get());
+ List<AccountInfo> members = getMembers(group.get());
ColumnFormatter formatter = new ColumnFormatter(writer, '\t');
formatter.addColumn("id");
formatter.addColumn("username");