diff options
author | Clark Boylan <clark.boylan@gmail.com> | 2022-02-10 10:31:52 -0800 |
---|---|---|
committer | Clark Boylan <clark.boylan@gmail.com> | 2022-02-14 08:43:03 -0800 |
commit | 9f50c7e84a6f774db779552c922c4e5824b0a408 (patch) | |
tree | 7503cdb35fc425716347b5a21945fb2f7251f17c | |
parent | c1c091d0269c4916b6b4b33e51f4d76fab34b8e7 (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.java | 19 | ||||
-rw-r--r-- | java/com/google/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<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"); |