= gerrit ls-groups

== NAME
gerrit ls-groups - List groups visible to caller

== SYNOPSIS
--
'ssh' -p <port> <host> 'gerrit ls-groups'
  [--project <NAME> | -p <NAME>]
  [--user <NAME> | -u <NAME>]
  [--owned]
  [--visible-to-all]
  [-q <GROUP>]
  [--verbose | -v]
--

== DESCRIPTION
Displays the list of group names, one per line, that are visible to
the account of the calling user.

If the caller is a member of the privileged 'Administrators' group,
all groups are listed.

== ACCESS
Any user who has configured an SSH key.

== SCRIPTING
This command is intended to be used in scripts.

All non-printable characters (ASCII value 31 or less) are escaped
according to the conventions used in languages like C, Python, and Perl,
employing standard sequences like `\n` and `\t`, and `\xNN` for all
others. In shell scripts, the `printf` command can be used to unescape
the output.

== OPTIONS
--project::
-p::
	Name of the project for which the groups should be listed. Only
	groups are listed for which any permission is set on this project
	(or for which a permission is inherited from a parent project).
	Multiple --project options may be specified to specify additional
	projects. In this case all groups are listed that have a
	permission for any of the specified projects.
+
This option can't be used together with the '--user' option.

--user::
-u::
	User for which the groups should be listed. Only groups are
	listed that contain this user as a member.
+
The calling user can list the groups for the own user or must be a
member of the privileged 'Administrators' group to list the groups
for other users.
+
This option can't be used together with the '--project' option.

--owned::
	Lists only the groups that are owned by the user that was specified
	by the `--user` option or if no user was specified the groups that
	are owned by the calling user.

--visible-to-all::
	Displays only groups that are visible to all registered users
	(groups that are explicitly marked as visible to all registered
	users).

-q::
	Group that should be inspected. The `-q` option can be specified
	multiple times to define several groups to be inspected. If
	specified the listed groups will only contain groups that were
	specified to be inspected. This is e.g. useful in combination with
	the `--owned` and `--user` options to check whether a group is
	owned by a user.

--verbose::
-v::
	Enable verbose output with tab-separated columns for the
	group name, UUID, description, owner group name, owner group UUID
	and whether the group is visible to all (`true` or `false`).
+
If a group has been "orphaned", i.e. its owner group UUID refers to a
nonexistent group, the owner group name field will read `n/a`.

== EXAMPLES

List visible groups:
=====
	$ ssh -p 29418 review.example.com gerrit ls-groups
	Administrators
	Anonymous Users
	MyProject_Committers
	Project Owners
	Registered Users
=====

List all groups for which any permission is set for the project
"MyProject":
=====
	$ ssh -p 29418 review.example.com gerrit ls-groups --project MyProject
	MyProject_Committers
	Project Owners
	Registered Users
=====

List all groups which are owned by the calling user:
=====
	$ ssh -p 29418 review.example.com gerrit ls-groups --owned
	MyProject_Committers
	MyProject_Verifiers
=====

Check if the calling user owns the group `MyProject_Committers`. If
`MyProject_Committers` is returned the calling user owns this group.
If the result is empty, the calling user doesn't own the group.
=====
	$ ssh -p 29418 review.example.com gerrit ls-groups --owned -q MyProject_Committers
	MyProject_Committers
=====

Extract the UUID of the 'Administrators' group:

=====
	$ ssh -p 29418 review.example.com gerrit ls-groups -v | awk '-F\t' '$1 == "Administrators" {print $2}'
	ad463411db3eec4e1efb0d73f55183c1db2fd82a
=====

Extract and expand the multi-line description of the 'Administrators'
group:

=====
	$ printf "$(ssh -p 29418 review.example.com gerrit ls-groups -v | awk '-F\t' '$1 == "Administrators" {print $3}')\n"
	This is a
	multi-line
	description.
=====

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
