# How to use

## Intro

The `@PLUGIN@` plugin allows defining owners (individual accounts or groups)
of directories, sub-directories and files that require approval when changes
modify them.

The rules defining which user/group needs to approve which file are specified
in the `OWNERS` file and are covered in the
[@PLUGIN@ configuration](config.html) guide.

## Context

The owners plugin can be used in two different modes:
1. With plugin-provided submit requirements.
2. With user defined custom submit requirements.

> **NOTE**: Previous to 3.6 it was also possible to use the plugin with Prolog rules,
> while this has not yet completely stopped working, the functionalities of Prolog
> rules are now strongly limited and only applied on a best effort basis. It's
> highly advised to completely remove them from your system as a matter of
> priority.
> To add, when using Prolog rules there are no UI features.

> On top of providing significantly better and more predictable performances,
> using the plugin in either mode 1. or 2. provides extra capabilities like:
> - A REST-api that exposes the owners approval status with single file granularity.
> - Enhanced UI experience with much clearer explanation of who owns what files,
>  as explained below.

> **NOTE**: The owners plugin uses multiple subsystems of Gerrit for determining
> the status of the submit requirement predicates or Prolog functions.
> When running a Gerrit off-line reindex using the `java -jar $GERRIT_SITE/bin/gerrit.war reindex`
> command, the Gerrit daemon is not active and therefore the owners plugin will not
> be able to expose its predicates and functions.
> To perform a full reindexing of Gerrit projects using owners' submit requirements or
> Prolog rules with owners' functions, the changes need to be reindex online using
> the SSH command `gerrit index changes-in-project` command when Gerrit daemon is active.

## Owner status on change page

### Owners status for submit requirements

When either `has:approval_owners` predicate is used in a submit requirement or
[enableSubmitRequirement](config.html#owners.enableSubmitRequirement) is enabled for a
project or any of its parents and, if applicable, owners status is displayed in two ways:

* As an icon prepending the submit requirement and as a text next to it
\
![submit requirement](./submit-requirement.png "Submit requirement")

Which then displays more detail information in a tooltip when hovered over.

![submit requirement hover](./submit-requirement-hover.png "Submit requirement hover")

* Next to all owned files, even if they are owned by someone else, (when the
newest patchset is selected)
\
![files owners status](./files-owners-status.png "Files owners status")

#### Per file owners statuses

The @PLUGIN@ plugin also shows the owners statuses per file in the file list.
For each file, the owners status is shown as an icon. One can **hover over
the icon** to get additional information displayed as a tooltip.

- **Needs Owners' Approval**\
  A file owner either has not voted or voted negatively or not with sufficient
  score.
\
![status not ready hover](./files-owners-status-not-ready-hover.png "Status not ready hover")

    > **Notes:**
    >
    > The dialog contains up to **5** first file owners returned by the
    > @PLUGIN@ plugin's REST API.
    >
    > Apart from the owner's name, their votes (if cast) and
    > `Copy owner's email to clipboard` button are shown.
    >
    > Hovering over the owner's name results in their details being displayed


    ![owner details hover](./owner-details.png "Owner details hover")

- **Approved by Owners**\
  A file owner has approved the change.
\
![status ready hover](./files-owners-status-ready-hover.png "Status ready hover")


    > Note that again, apart from the owner's name, their vote and
    > `Copy owner's email to clipboard` button are shown, and owner's details are
    > displayed when one hovers over the name.

### Owners status for submit rule

`OWNERS` file can still be evaluated (without a need for the Prolog
predicate being added to the project) by enabling the
[default submit requirements](config.html#owners.enableSubmitRequirement).
In this way, results of the `OWNERS` file evaluation are provided to
Gerrit's change through submit rule (as
[submit record](/Documentation/rest-api-changes.html#submit-record)) and, if
applicable, owners status is displayed:

* As an icon prepending the `Code Review from owners` submit requirement
\
![submit rule](./submit-rule.png "Submit rule")


    > Note that when default submit requirements are enabled, owner's votes are
    > displayed next to the `Code Review from owners` submit requirement instead
    > of its status. It is a Gerrit's core representation of submit rule.

* Next to all owned files (when the newest patchset is selected)
\
![files owners status](./files-owners-status.png "Files owners status")


    > There is no difference in this aspect between modes.

#### `Code Review from owners` submit requirement

The `Code Review from owners` (i.e. the
[default submit requirement](config.html#owners.enableSubmitRequirement)) submit
requirement provides general information if all owned files were approved
(requirement is satisfied). When hovered, a detailed description is shown

![submit rule hover](./submit-rule-hover.png "Submit rule hover")

#### Per file owners statuses

The owners status per file when [default submit
requirements](config.html#owners.enableSubmitRequirement) are enabled doesn't
differ from [submit requirements mode](#ownersStatus.submitRequirement.files).

### Files that are assigned to the current user based on the OWNERS

When the current user is mentioned directly or indirectly via a group
ownership as the owner of one or more files, the change screen displays
an additional tab called _Owned Files_.

![owned_files](./owned-files.png "Owned Files")

The tab indicates whether the current user has review duties  based on the
icon displayed on the right side of the tab. If the icon is an orange
clock, the current user is required to review the files indicated in the
tab; otherwise, if the icon is a green tick, then the current user review
input is not strictly required for the change to be merged.

The list of files included in the _Owned Files_ tab, a subset of the full
list displayed in the _Files_ tab, are the ones assigned to the
current user through the OWNERS file.

> **NOTE**: When the `owners.config` has `owners.expandGroups = false`
> then the association between files and the current user may not be
> accurate or not available because of the lack of group expansion and
> account resolution service on the backend. In this case, the
> _Owned Files_ tab may be absent even if the current user is effectively
> owner of one or more files in the change.
