blob: be0bfb015208f92e00e6955a80ee2bf9f9f1d5fc [file] [log] [blame] [view]
# Config FAQ's
* [How to update the code-owners.config file for a project](#updateCodeOwnersConfig)
* [How to check if the code owners functionality is enabled for a project or branch](#checkIfEnabled)
* [How to avoid issues with code owner config files](#avoidIssuesWithCodeOwnerConfigs)
* [How to investigate issues with code owner config files](#investigateIssuesWithCodeOwnerConfigs)
* [How to investigate issues with the code owner suggestion](#investigateIssuesWithCodeOwnerSuggestion)
* [What should be done when creating a branch fails due to invalid code owner
config files?](#branchCreationFailsDueInvalidCodeOwnerConfigFiles)
* [How to define default code owners](#defineDefaultCodeOwners)
* [How to setup code owner overrides](#setupOverrides)
* [What's the best place to keep the global plugin
configuration](#globalPluginConfiguration)
* [How to make unicode characters in file paths work?](#unicodeCharsInFilePaths)
## <a id="updateCodeOwnersConfig">How to update the code-owners.config file for a project
The project-level configuration of the `code-owners` plugin is done in the
`code-owners.config` file that is stored in the `refs/meta/config` branch of a
project. If it is not present, all configuration parameters are inherited from
the parent projects or the global configuration.
The `code-owners.config` file has the format of a Git config file (same as the
`project.config` file).
To update the `code-owners.config` file do (requires to be a project owner):
* clone the repository
* fetch and checkout the `refs/meta/config` branch (e.g. `git fetch origin
refs/meta/config && git checkout FETCH_HEAD`)
* create or edit the `code-owners.config` file
* commit the changes
* push the newly created commit back to the `refs/meta/config` branch (e.g. `git
push origin HEAD:refs/meta/config`)
Some of the configuration parameters can also be set via the [Update Code Owner
Project Config REST endpoint](rest-api.html#update-code-owner-project-config).
## <a id="checkIfEnabled">How to check if the code owners functionality is enabled for a project or branch
To check if the code owners functionality is enabled for a single branch, use
the [Get Code Owner Branch Config](rest-api.html#get-code-owner-branch-config)
REST endpoint and inspect the
[disabled](rest-api.html#code-owner-branch-config-info) field in the response
(if it is not present, the code owners functionality is enabled).
To check if the code owners functionality is enabled for a project or for
multiple branches, use the [Get Code Owner Project
Config](rest-api.html#get-code-owner-project-config) REST endpoint and inspect
the [status](rest-api.html#code-owners-status-info) in the response (an empty
status means that the code owners functionality is enabled for all branches of
the project).
You can invoke the REST endpoints via `curl` from the command-line or
alternatively open the following URLs in a browser:\
`https://<host>/projects/<project-name>/branches/<branch-name>/code_owners.branch_config`\
`https://<host>/projects/<project-name>/code_owners.project_config`\
(remember to URL-encode the project-name and branch-name)
## <a id="avoidIssuesWithCodeOwnerConfigs">How to avoid issues with code owner config files
To avoid issues with code owner config files it's highly recommended to keep the
[validation](validation.html) of code owner config files that is performed on
receive commits and submit enabled, as it prevents that issues are newly
introduced to code owner config files. Whether this validation is enabled and
whether code owner config files with new issues are rejected is controlled by
the following configuration parameters:
* [plugin.@PLUGIN@.enableValidationOnCommitReceived](config.html#pluginCodeOwnersEnableValidationOnCommitReceived)
* [plugin.@PLUGIN@.enableValidationOnSubmit](config.html#pluginCodeOwnersEnableValidationOnSubmit)
* [plugin.@PLUGIN@.rejectNonResolvableCodeOwners](config.html#pluginCodeOwnersRejectNonResolvableCodeOwners)
* [plugin.@PLUGIN@.rejectNonResolvableImports](config.html#pluginCodeOwnersRejectNonResolvableImports)
Since code owner config files can also get
[issues](validation.html#howCodeOwnerConfigsCanGetIssuesAfterSubmit) after they
have been submitted, host administrators and project owners are also recommended
to regularly check the existing code owner config files for issues by calling
the [Check Code Owner Config File REST
endpoint](rest-api.html#check-code-owner-config-files) (e.g. from a cronjob) and
then fix the reported issues.
## <a id="investigateIssuesWithCodeOwnerConfigs">How to investigate issues with code owner config files
If code owners config files are not working as expected, this is either caused
by:
* issues in the code owner config files
* a bug in the @PLUGIN@ plugin
Since code owner config files are part of the source code, any issues with them
should be investigated and fixed by the project owners and host administrators.
To do this they can:
* Check the code owner config files for issues by calling the [Check Code Owner
Config File REST endpoint](rest-api.html#check-code-owner-config-files)
* Check the code ownership of a user for a certain path by calling the [Check
Code Owner REST endpoint](rest-api.html#check-code-owner) (requires the caller
to be host administrator or have the [Check Code Owner
capability](rest-api.html#checkCodeOwner)).
Bugs with the @PLUGIN@ plugin should be filed as issues for the Gerrit team, but
only after issues with the code owner config files have been excluded.
Also see [above](#avoidIssuesWithCodeOwnerConfigs) how to avoid issues with code
owner config files in the first place.
## <a id="investigateIssuesWithCodeOwnerSuggestion">How to investigate issues with the code owner suggestion
If the code owners config suggestion is not working as expected, this is either
caused by:
* issues in the code owner config files
* user permissions
* account visibility
* account states
* a bug in the @PLUGIN@ plugin
Issues with code owner config files, user permissions, account visibility and
account states should be investigated and fixed by the project owners and host
administrators.
To do this they can:
* Use the `--debug` option of the [List Code
Owners](rest-api.html#list-code-owners-for-path-in-branch) REST endpoints to
get debug logs included into the response (requires the caller
to be host administrator or have the [Check Code Owner
capability](rest-api.html#checkCodeOwner)).
* Check the code owner config files for issues by calling the [Check Code Owner
Config File REST endpoint](rest-api.html#check-code-owner-config-files).
* Check the code ownership of a user for a certain path by calling the [Check
Code Owner REST endpoint](rest-api.html#check-code-owner) (requires the caller
to be host administrator or have the [Check Code Owner
capability](rest-api.html#checkCodeOwner)).
Bugs with the @PLUGIN@ plugin should be filed as issues for the Gerrit team, but
only after other causes have been excluded.
Also see [above](#avoidIssuesWithCodeOwnerConfigs) how to avoid issues with code
owner config files in the first place.
## <a id="branchCreationFailsDueInvalidCodeOwnerConfigFiles">What should be done when creating a branch fails due to invalid code owner config files?
When creating a new branch, all code owner config files that are contained in
the initial commit are newly [validated](validation.html#codeOwnerConfigValidationOnBranchCreation), even if the branch is created for a
commit that already exists in the repository.
If creating a branch fails due to this validation, it is recommended to:
1. Use the [code-owners~skip-validation
validation](validation.html#skipCodeOwnerConfigValidationOnDemand) option to
skip the validation of code owner config files when creating the branch.
2. Use the
[Check Code Owner Config Files](rest-api.html#check-code-owner-config-files)
REST endpoint to validate the code owner files in the new branch (specify
the branch in the `branches` field in the
[CheckCodeOwnerConfigFilesInput](rest-api.html#check-code-owner-config-files-input))
to see which code owner config files have issues.
3. Fix the reported issues and push them as a change for code review. If
needed, get the change submitted with a [code owner
override](user-guide.html#codeOwnerOverride).
4. Repeat step 2. to verify that all issues have been fixed.
It's also possible to switch of the code owner config validation on branch
creation by [configuration](config.html#pluginCodeOwnersEnableValidationOnBranchCreation).
## <a id="defineDefaultCodeOwners">How to define default code owners
[Default code owners](backend-find-owners.html#defaultCodeOwnerConfiguration)
that apply to all branches can be defined in an `OWNERS` file in the root
directory of the `refs/meta/config` branch.
To add an `OWNERS` file in the `refs/meta/config` branch do (requires to be a
project owner):
* clone the repository
* fetch and checkout the `refs/meta/config` branch (e.g. `git fetch origin
refs/meta/config && git checkout FETCH_HEAD`)
* create or edit the `OWNERS` file
* commit the changes
* push the newly created commit back to the `refs/meta/config` branch (e.g. `git
push origin HEAD:refs/meta/config`)
## <a id="setupOverrides">How to setup code owner overrides
To setup code owner overrides do:
### 1. Define a label that should count as code owner override:
Create a [review label](../../../Documentation/config-labels.html)
via the [Create Label REST
endpoint](../../../Documentation/rest-api-projects.html#create-label):
```
curl -X PUT -d '{"commit_message": "Create Owners-Override Label", "values": {" 0": "No Override", "+1": "Override"}}' --header "Content-Type: application/json" https://<gerrit-host>/a/projects/<project-name>/labels/Owners-Override
```
### 2. Configure this label as override approval:
Configure the override label via the [Update Code Owner Project Config REST
endpoint](rest-api.html#update-code-owner-project-config):
```
curl -X PUT -d '{"override_approvals": ["Owners-Override+1"]}' --header "Content-Type: application/json" https://<gerrit-host>/a/projects/<project-name>/code_owners.project_config
```
\
Also see the description of the
[override_approval](config.html#codeOwnersOverrideApproval) configuration
parameter.
### 3. Assign permissions to vote on the override approval:
Go to the access screen of your project in the Gerrit web UI and assign
permissions to vote on the override label.
Alternatively the permissions can also be assigned via the [Set Access REST
endpoint](../../../Documentation/rest-api-projects.html#set-access).
## <a id="globalPluginConfiguration">What's the best place to keep the global plugin configuration
The global plugin configuration can either be maintained in the
[gerrit.config](config.html) file or in the
[code-owners.config](config.html#projectLevelConfigFile) file in the
`refs/meta/config` branch of the `All-Projects` project. From the perspective of
the code-owners plugin both places are equally good. However which place is
preferred can depend on the system setup, e.g. changes to `gerrit.config` may be
harder to do and require a multi-day rollout, whereas changes of the
`All-Projects` configuration can be done through the [REST
API](rest-api.html#update-code-owner-project-config) and are always instant
(this can also be a disadvantage as it means that also bad config changes are
effective immediately).
**NOTE:** Any configuration that is done in `All-Projects` overrides the
corresponding configuration that is inherited from `gerrit.config`.
**NOTE:** There are a few configuration parameters (e.g. for [allowed email
domains](config.html#pluginCodeOwnersAllowedEmailDomain)) that cannot be set on
project level and hence must be set in `gerrit.config`.
## <a id="unicodeCharsInFilePaths">How to make unicode characters in file paths work?
The @PLUGIN@ plugin uses the Java NIO API which reads the default character
encoding from the system language settings. On Unix this means the `LANG` and
`LC_CTYPE` environment variables (setting one of them is sufficent). To enable
unicode characters in file paths e.g. set: `LANG=en_US.UTF-8`
If paths are used that are not valid according to the system language setting
(e.g. if a path contains unicode characters but `LANG` is `en_US.iso88591`)
the Java NIO API throws a `java.nio.file.InvalidPathException` with the message
`Malformed input or input contains unmappable characters`. If such an exception
occurs code-owner requests return `409 Conflict`, telling the user about the
invalid path.
---
Back to [@PLUGIN@ documentation index](index.html)
Part of [Gerrit Code Review](../../../Documentation/index.html)