= 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.

[[push-options-validation]]
== Push options validation

Plugins implementing the `PushOptionsValidator` interface can validate push
options. For example, they can reject options (or a combination of options) or
emit a warning when a deprecated option is being used.

[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
---------
