Gerrit Code Review - Hooks
==========================

Gerrit does not run any of the standard git hooks in the
repositories it works with, but it does have its own hook mechanism
included. Gerrit looks in `'$site_path'/hooks` for executables with
names listed below.

The environment will have GIT_DIR set to the full path of the
affected git repository so that git commands can be easily run.

Make sure your hook scripts are executable if running on *nix.

With the exception of the ref-update hook, hooks are run in the background
after the relevant change has taken place so are unable to affect
the outcome of any given change. Because of the fact the hooks are
run in the background after the activity, a hook might not be notified
about an event if the server is shutdown before the hook can be invoked.

Supported Hooks
---------------

ref-update
~~~~~~~~~~

This is called when a push request is received by Gerrit. It allows
a push to be rejected before it is committed to the Gerrit repository.
If the script exits with non-zero return code the push will be rejected.
Any output from the script will be returned to the user, regardless of the
return code.

This hook is called synchronously so it is recommended that
it not block.  A default timeout on the hook is set to 30 seconds to avoid
"runaway" hooks using up server threads.  See link:config-gerrit.html#hooks.syncHookTimeout[hooks.syncHookTimeout]
for configuration details.

====
  ref-update --project <project name> --refname <refname> --uploader <uploader> --oldrev <sha1> --newrev <sha1>
====

patchset-created
~~~~~~~~~~~~~~~~

This is called whenever a patchset is created (this includes new
changes and drafts).

====
  patchset-created --change <change id> --is-draft <boolean> --change-url <change url> --project <project name> --branch <branch> --topic <topic> --uploader <uploader> --commit <sha1> --patchset <patchset id>
====

draft-published
~~~~~~~~~~~~~~~

This is called whenever a draft change is published.

====
  draft-published --change <change id> --change-url <change url> --project <project name> --branch <branch> --topic <topic> --uploader <uploader> --commit <sha1> --patchset <patchset id>
====

comment-added
~~~~~~~~~~~~~

This is called whenever a comment is added to a change.

====
  comment-added --change <change id> --is-draft <boolean> --change-url <change url> --project <project name> --branch <branch> --topic <topic> --author <comment author> --commit <commit> --comment <comment> [--<approval category id> <score> --<approval category id> <score> ...]
====

change-merged
~~~~~~~~~~~~~

Called whenever a change has been merged.

====
  change-merged --change <change id> --change-url <change url> --project <project name> --branch <branch> --topic <topic> --submitter <submitter> --commit <sha1>
====

merge-failed
~~~~~~~~~~~~

Called whenever a change has failed to merge.

====
  merge-failed --change <change id> --change-url <change url> --project <project name> --branch <branch> --topic <topic> --submitter <submitter> --commit <sha1> --reason <reason>
====

change-abandoned
~~~~~~~~~~~~~~~~

Called whenever a change has been abandoned.

====
  change-abandoned --change <change id> --change-url <change url> --project <project name> --branch <branch> --topic <topic> --abandoner <abandoner> --reason <reason>
====

change-restored
~~~~~~~~~~~~~~~

Called whenever a change has been restored.

====
  change-restored --change <change id> --change-url <change url> --project <project name> --branch <branch> --topic <topic> --restorer <restorer> --reason <reason>
====

ref-updated
~~~~~~~~~~~

Called whenever a ref has been updated.

====
  ref-updated --oldrev <old rev> --newrev <new rev> --refname <ref name> --project <project name> --submitter <submitter>
====

reviewer-added
~~~~~~~~~~~~~~

Called whenever a reviewer is added to a change.

====
  reviewer-added --change <change id> --change-url <change url> --project <project name> --branch <branch> --reviewer <reviewer>
====

cla-signed
~~~~~~~~~~

Called whenever a user signs a contributor license agreement.

====
  cla-signed --submitter <submitter> --user-id <user_id> --cla-id <cla_id>
====


Configuration Settings
----------------------

It is possible to change where Gerrit looks for hooks, and what
filenames it looks for, by adding a [hooks] section in gerrit.config.

Gerrit will use the value of hooks.path for the hooks directory.

For the hook filenames, Gerrit will use the values of hooks.patchsetCreatedHook,
hooks.draftPublishedHook, hooks.commentAddedHook, hooks.changeMergedHook,
hooks.changeAbandonedHook, hooks.changeRestoredHook, hooks.refUpdatedHook,
hooks.refUpdateHook, hooks.reviewerAddedHook and hooks.claSignedHook.

Missing Change URLs
-------------------

If link:config-gerrit.html#gerrit.canonicalWebUrl[gerrit.canonicalWebUrl]
is not set in `gerrit.config` the `--change-url` flag may not be
passed to all hooks.  Hooks started out of an SSH context (for example
the patchset-created hook) don't know the server's web URL, unless
this variable is configured.

See Also
--------

* link:config-gerrit.html#hooks[Section hooks]

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