gerrit query
============

NAME
----
gerrit query - Query the change database

SYNOPSIS
--------
[verse]
'ssh' -p <port> <host> 'gerrit query'
  [--format {TEXT | JSON}]
  [--current-patch-set]
  [--patch-sets | --all-approvals]
  [--files]
  [--comments]
  [--commit-message]
  [--dependencies]
  [--submit-records]
  [--]
  <query>
  [limit:<n>]
  [resume_sortkey:<sortKey>]

DESCRIPTION
-----------

Queries the change database and returns results describing changes
that match the input query.  More recently updated changes appear
before older changes, which is the same order presented in the
web interface.

A query may be limited on the number of results it returns with the
'limit:' operator.  If no limit is supplied an internal default
limit is used to prevent explosion of the result set.  To obtain
results beyond the limit, the 'resume_sortkey:' operator can be used
to resume the query at the change that follows the last change of
the prior result set.

Non-option arguments to this command are joined with spaces and
then parsed as a query. This simplifies calling conventions over
SSH by permitting operators to appear in different arguments.

Query operators may quote values using matched curly braches
(e.g. `reviewerin:{Developer Group}`) to sidestep issues with 2
levels of shell quoting (caller shell invoking SSH, and the SSH
command line parser in the server).

OPTIONS
-------
--format::
	Formatting method for the results. TEXT is the default,
	presenting a human readable display. JSON creates one line
	per matching record, with embedded LFs escaped.

--current-patch-set::
	Include information about the current patch set in the results.

--patch-sets::
	Include information about all patch sets.  If combined with
	the --current-patch-set flag then the current patch set
	information will be output twice, once in each field.

--all-approvals::
	Include information about all patch sets along with the
	approval information for each patch set.  If combined with
	the --current-patch-set flag then the current patch set
	information will be output twice, once in each field.

--files::
	Support for listing files with patch sets and their
	attributes (ADDED, MODIFIED, DELETED, RENAMED, COPIED)
	and size information (number of insertions and deletions).
	Note that this option requires either the --current-patch-set
	or the --patch-sets option in order to give any file information.

--comments::
	Include comments for all changes. If combined with the
	--patch-sets flag then all inline/file comments are included for
	each patch set.

--commit-message::
	Include the full commit message in the change description.

--dependencies::
	Show information about patch sets which depend on, or are needed by,
	each patch set.

--submit-records::
	Show submit record information about the change, which
	includes whether the change meets the criteria for submission
	(including information for each review label).

limit:<n>::
	Maximum number of results to return.  This is actually a
	query operator, and not a command line option.	If more
	than one limit: operator is provided, the smallest limit
	will be used to cut the result set.

resume_sortkey:<sortKey>::
	Resume results from this sort key.  Callers should pass
	the sortKey of the last change of the prior result set to
	resume a prior query.  This is actually a query operator,
	and not a command line option.

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

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

EXAMPLES
--------

Find the 2 most recent open changes in the tools/gerrit project:
====
  $ ssh -p 29418 review.example.com gerrit query --format=JSON status:open project:tools/gerrit limit:2
  {"project":"tools/gerrit", ...}
  {"project":"tools/gerrit", ..., sortKey:"000e6aee00003e26", ...}
  {"type":"stats","rowCount":2,"runningTimeMilliseconds:15}
====

Resume the same query and obtain the final results:
====
  $ ssh -p 29418 review.example.com gerrit query --format=JSON status:open project:tools/gerrit limit:2 resume_sortkey:000e6aee00003e26
  {"project":"tools/gerrit", ...}
  {"project":"tools/gerrit", ...}
  {"type":"stats","rowCount":1,"runningTimeMilliseconds:15}
====


SCHEMA
------
The JSON messages consist of nested objects referencing the
link:json.html#change[change],
link:json.html#patchSet[patchset],
link:json.html#[account]
involved, and other attributes as appropriate.

Note that any field may be missing in the JSON messages, so consumers
of this JSON stream should deal with that appropriately.

SEE ALSO
--------

* link:user-search.html[Query Operators]
* link:json.html[JSON Data Formats]
* link:access-control.html[Access Controls]

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