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

[[assignee-validation]]
== Assignee validation


Plugins implementing the `AssigneeValidationListener` interface can perform
validation of assignees before they are assigned to a change.

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