From 9f50c7e84a6f774db779552c922c4e5824b0a408 Mon Sep 17 00:00:00 2001 From: Clark Boylan Date: Thu, 10 Feb 2022 10:31:52 -0800 Subject: 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 --- .../gerrit/server/restapi/group/ListMembers.java | 19 ++++++++++++++++--- .../gerrit/sshd/commands/ListMembersCommand.java | 2 +- 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 { throws PermissionBackendException { Optional 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 getTransitiveMembers(InternalGroup group) + throws PermissionBackendException { + InternalGroupDescription internalGroup = new InternalGroupDescription(group); + GroupControl groupControl = groupControlFactory.controlFor(internalGroup); + return getTransitiveMembers(internalGroup, groupControl); + } + private List getTransitiveMembers( GroupDescription.Internal group, GroupControl groupControl) throws PermissionBackendException { @@ -110,6 +115,14 @@ public class ListMembers implements RestReadView { return toAccountInfos(directMembers); } + protected List getMembers(InternalGroup group) throws PermissionBackendException { + if (recursive) { + return getTransitiveMembers(group); + } else { + return getDirectMembers(group); + } + } + private List toAccountInfos(Set 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 members = getDirectMembers(group.get()); + List members = getMembers(group.get()); ColumnFormatter formatter = new ColumnFormatter(writer, '\t'); formatter.addColumn("id"); formatter.addColumn("username"); -- cgit v1.2.3