| 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> --commit <sha1> --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> --commit <sha1> --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> | 
 | ==== | 
 |  | 
 | topic-changed | 
 | ~~~~~~~~~~~~~ | 
 |  | 
 | Called whenever a change's topic is changed from the Web UI or via the REST API. | 
 |  | 
 | ==== | 
 |   topic-changed --change <change id> --project <project name> --branch <branch> --changer <changer> --old-topic <old topic> --new-topic <new topic> | 
 | ==== | 
 |  | 
 | 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] |