Skip to content

Commit d8d9b3d

Browse files
committed
list-groups: Support listing only unused groups
1 parent 5a0e2d6 commit d8d9b3d

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

gerrit/list-groups.rb

+29-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
require_relative '../bundle/bundler/setup'
44

55
require 'gerry'
6+
require 'set'
67

7-
uri_str, flag = ARGV
8+
uri_str, *flags = ARGV
89
if uri_str.nil?
910
script = File.basename(__FILE__)
10-
puts "Usage : #{script} <uri>"
11+
puts "Usage : #{script} <uri> [-u]"
1112
puts "Example : #{script} [user:password@]host[:port]"
13+
puts
14+
puts " -u List only unused groups (those that have no associated permissions)."
1215
exit
1316
end
1417

@@ -21,6 +24,28 @@
2124
Gerry::Client.default_options.update(verify: false)
2225
client = Gerry.new("#{uri.scheme}://#{uri.host}", uri.user, uri.password)
2326

24-
client.groups.keys.each do |name|
25-
puts name
27+
if flags.include?('-u')
28+
used_groups = Set.new
29+
30+
client.projects.keys.each_slice(100) do |projects|
31+
client.access(projects).values.each do |info|
32+
info['local'].values.each do |permissions|
33+
permissions['permissions'].values.each do |info|
34+
info['rules'].keys.each do |group|
35+
used_groups.add(group)
36+
end
37+
end
38+
end
39+
end
40+
end
41+
42+
client.groups.each do |name, info|
43+
if !used_groups.include?(info['id'])
44+
puts name
45+
end
46+
end
47+
else
48+
client.groups.keys.each do |name|
49+
puts name
50+
end
2651
end

0 commit comments

Comments
 (0)