= Gerrit Code Review - Plugin-based Validation

Gerrit provides interfaces to allow link:dev-plugins.html[plugins] to
perform validation on certain operations.

[[new-commit-validation]]
== New commit validation


Plugins implementing the `CommitValidationListener` interface can
perform additional validation checks against new commits.

If the commit fails the validation, the plugin can either provide a
message that will be sent back to the git client, or throw an exception
which will cause the commit to be rejected.

Validation applies to both commits uploaded via `git push`, and new
commits generated via Gerrit's Web UI features such as the rebase, revert
and cherry-pick buttons.

Out of the box, Gerrit includes a plugin that checks the length of the
subject and body lines of commit messages on uploaded commits.

[plugin-push-options]]
=== Plugin push options

Plugins can register push options by implementing the `PluginPushOption`
interface. If a plugin push option was specified it is available from
the `CommitReceivedEvent` that is passed into `CommitValidationListener`.
This way the plugin commit validation can be controlled by push options.

[[user-ref-operations-validation]]
== User ref operations validation


Plugins implementing the `RefOperationValidationListener` interface can
perform additional validation checks against user ref operations (resulting
from either push or corresponding Gerrit REST/SSH endpoints call e.g.
create branch etc.). Namely including ref creation, deletion and update
(also non-fast-forward) before they are applied to the git repository.

The plugin can throw an exception which will cause the operation to fail,
and prevent the ref update from being applied.

[[pre-merge-validation]]
== Pre-merge validation


Plugins implementing the `MergeValidationListener` interface can
perform additional validation checks against commits before they
are merged to the git repository.

If the commit fails the validation, the plugin can throw an exception
which will cause the merge to fail.

[[on-submit-validation]]
== On submit validation


Plugins implementing the `OnSubmitValidationListener` interface can
perform additional validation checks against ref operations resulting
from execution of submit operation before they are applied to any git
repositories (there could be more than one in case of topic submits).

Plugin can throw an exception which will cause submit operation to be
aborted.

[[pre-upload-validation]]
== Pre-upload validation


Plugins implementing the `UploadValidationListener` interface can
perform additional validation checks before any upload operations
(clone, fetch, pull). The validation is executed right before Gerrit
begins to send a pack back to the git client.

If upload fails the validation, the plugin can throw an exception
which will cause the upload to fail and the exception's message text
will be reported to the git client.

[[new-project-validation]]
== New project validation


Plugins implementing the `ProjectCreationValidationListener` interface
can perform additional validation on project creation based on the
input arguments.

E.g. a plugin could use this to enforce a certain name scheme for
project names.

[[new-group-validation]]
== New group validation


Plugins implementing the `GroupCreationValidationListener` interface
can perform additional validation on group creation based on the
input arguments.

E.g. a plugin could use this to enforce a certain name scheme for
group names.

[[hashtag-validation]]
== Hashtag validation


Plugins implementing the `HashtagValidationListener` interface can perform
validation of hashtags before they are added to or removed from changes.

[[outgoing-email-validation]]
== Outgoing e-mail validation


This interface provides a low-level e-mail filtering API for plugins.
Plugins implementing the `OutgoingEmailValidationListener` interface can perform
filtering of outgoing e-mails just before they are sent.

[[account-activation-validation]]
== Account activation validation


Plugins implementing the `AccountActivationValidationListener` interface can
perform validation when an account is activated or deactivated via the Gerrit
REST API or the Java extension API.

[[review-comment-validation]]
== Review comment validation


The `CommentValidator` interface allows plugins to validate all review comments,
i.e. inline comments, file comments and the review message. This works for the
REST API, for `git push` when `--publish-comments` is used and for comments sent
via email.


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


SEARCHBOX
---------
