gerrit ls-projects
==================

NAME
----
gerrit ls-projects - List projects visible to caller

SYNOPSIS
--------
--
'ssh' -p <port> <host> 'gerrit ls-projects'
  [--show-branch <BRANCH> ...]
  [--description | -d]
  [--tree | -t]
  [--type {code | permissions | all}]
  [--format {text | json | json_compact}]
  [--all]
  [--limit <N>]
  [--has-acl-for GROUP]
--

DESCRIPTION
-----------
Displays the list of project names, one per line, that the
calling user account has been granted 'READ' access to.

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

ACCESS
------
Any user who has configured an SSH key, or by an user over HTTP.

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

OPTIONS
-------
--show-branch::
-b::
	Branch for which the command will display the sha of each project.
	The command may have multiple --show-branch parameters, in this case
	sha will be shown for each of the branches.
	If the user does not have READ access to some branch or the branch does not
	exist then stub (40 `-` symbols) is shown.
	If the user does not have access to any branch in the project then the
	whole project is not shown.

--description::
-d::
	Allows listing of projects together with their respective
	description.
+
For text format output, 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.

--tree::
-t::
	Displays project inheritance in a tree-like format.
	This option does not work together with the show-branch option.

--type::
	Display only projects of the specified type.  If not
	specified, defaults to `code`. Supported types:
+
--
`code`:: Any project likely to contain user files.
`permissions`:: Projects created with the `--permissions-only` flag.
`all`:: Any type of project.
--

--format::
	What output format to display the results in.
+
--
`text`:: Simple text based format.
`json`:: Map of JSON objects describing each project.
`json_compact`:: Minimized JSON output.
--

--all::
	Display all projects that are accessible by the calling user
	account. Besides the projects that the calling user account has
	been granted 'READ' access to, this includes all projects that
	are owned by the calling user account (even if for these projects
	the 'READ' access right is not assigned to the calling user
	account).

--limit::
	Cap the number of results to the first N matches.

--has-acl-for::
	Display only projects on which access rights for this group are
	directly assigned. Projects which only inherit access rights for
	this group are not listed.
+
With this option you can find out on which projects a group is used.

HTTP
----
This command is also available over HTTP, as `/projects/` for
anonymous access and `/a/projects/` for authenticated access.
Named options are available as query parameters. Results can
be limited to projects matching a prefix by supplying the prefix
as part of the URL, for example `/projects/external/` lists only
projects whose name start with the string `external/`.

Over HTTP the `json_compact` output format is assumed if the client
explicitly asks for JSON using HTTP header `Accept: application/json`.
When any JSON output format is used on HTTP, readers must skip the
first line produced. The first line is a garbage JSON string crafted
to prevent a browser from executing the response in a script tag.

Output will be gzip compressed if `Accept-Encoding: gzip` was used
by the client in the request headers.

EXAMPLES
--------

List visible projects:
=====
	$ ssh -p 29418 review.example.com gerrit ls-projects
	platform/manifest
	tools/gerrit
	tools/gwtorm

	$ curl http://review.example.com/projects/
	platform/manifest
	tools/gerrit
	tools/gwtorm

	$ curl http://review.example.com/projects/tools/
	tools/gerrit
	tools/gwtorm
=====

Clone any project visible to the user:
====
	for p in `ssh -p 29418 review.example.com gerrit ls-projects`
	do
	  mkdir -p `dirname "$p"`
	  git clone --bare "ssh://review.example.com:29418/$p.git" "$p.git"
	done
====

SEE ALSO
--------

* link:access-control.html[Access Controls]

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

SEARCHBOX
---------
