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

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

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


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


SEARCHBOX
---------
