blob: ea306cfdfe84b2e46e1f022f59a090fda3d98ac4 [file] [log] [blame] [view]
# Path Expressions
Path expressions are used to restrict access grants in code owner config files
to only apply to a subset of files in a directory (e.g. see
[per-file](backend-find-owners.html#perFile) rule for the
[find-owners](backend-find-owners.html) backend).
The following path expression syntaxes are supported:
* `GLOB`:
Uses [globs](#globs) to match paths.
* `FIND_OWNERS_GLOB`:
Uses [globs](#globs) to match paths, but each glob is automatically prefixed
with `{**/,}` so that subfolders are always matched, e.g. `*.md` matches all
md files in all subfolders, rather then only md files in the current folder
(also see the [caveat](#findOwnersCaveat) section below).
* `SIMPLE`:
Uses [simple path expressions](#simplePathExpressions) to match paths.
Which syntax is used by default depends on the used code owner backend:
* [find-owners](backend-find-owners.html) backend:
Uses `FIND_OWNERS_GLOB` as path expression syntax.
* [proto](backend-proto.html) backend:
Uses `SIMPLE` as path expression syntax.
The default path expression syntax that is derived from the backend can be
overriden by [global configuration](config.html#pluginCodeOwnersPathExpressions),
on [project-level](config.html#codeOwnersPathExpressions) or on
[branch-level](config.html#codeOwnersBranchPathExpressions).
## <a id="globs">Globs
Globs support the following wildcards:
* `*`: matches any string that does not include slashes
* `**`: matches any string, including slashes
* `?`: matches any character
* `[abc]`: matches one character given in the bracket
* `[a-c]`: matches one character from the range given in the bracket
* `{html,htm}`: matches either of the 2 expressions, `html` or `htm`
See [below](#examples) for examples.
## <a id="simplePathExpressions">Simple path expressions
Simple path expressions use the following wildcards:
* `*`: matches any string that does not include slashes
* `...`: matches any string, including slashes
See [below](#examples) for examples.
## <a id="examples">Examples
| To Match | Glob | find-owners | Simple Path Expression |
| -------- | ---- | ----------- | ---------------------- |
| Concrete file in current folder | `BUILD` | [not possible](#findOwnersCaveatMatchingAFile) | `BUILD` |
| File type in current folder | `*.md` | [not possible](#findOwnersCaveatMatchingFilesByType) | `*.md` |
| Concrete file in the current folder and in all subfolders | `{**/,}BUILD` | `BUILD` | needs 2 expressions: `BUILD` + `.../BUILD` |
| File type in the current folder and in all subfolders | `**.md` | `*.md` or `**.md` | `....md` |
| All files in a subfolder | `my-folder/**` | [not possible](#findOwnersCaveatMatchingFilesInSubfolder), but you can add a `my-folder/OWNERS` file instead of using a glob | `my-folder/...` |
| All foo-<1-digit-number>.txt files in all subfolders | `{**/,}foo-[0-9].txt` | `foo-[0-9].txt` |not possible |
| All foo-<n-digit-number>.txt files in all subfolders | not possible | not possible | not possible
## <a id="findOwnersCaveat">Caveat with find-owners path expressions
To be compatible with the `find-owners` plugin find-owners path expressions
are prefixes with `{**/,}` which matches any folder (see
[above](path-expressions.html)). This means if path expressions like `BUILD`,
`*.md` or `my-folder/**` are used in `OWNERS` files the effective path
expression are `{**/,}BUILD`, `{**/,}*.md` and `{**/,}my-folder/**`. These path
expression do not only match `BUILD`, `*.md` and `my-folder/**` directly in the
folder that contains the `OWNERS` file but also `BUILD`, `*.md` and
`my-folder/**` in any subfolder (e.g. `foo/bar/BUILD`, `foo/bar/baz.md` and
`foo/bar/my-folder/`).
### Examples
#### <a id="findOwnersCaveatMatchingAFile">Matching a file
If you have the following `/foo/OWNERS` file:
```
per-file BUILD=john.doe@example.com
```
\
John Doe owns the `/foo/BUILD` file, but also all `BUILD` files in
subfolders of `/foo/`, e.g. `/foo/bar/baz/BUILD`.
#### <a id="findOwnersCaveatMatchingFilesByType">Matching files by type
If you have the following `/foo/OWNERS` file:
```
per-file *.md=john.doe@example.com
```
\
John Doe owns all `*.md` files in `/foo/`, but also all `*.md` files in
subfolders of `/foo/`, e.g. `/foo/bar/baz.md`.
#### <a id="findOwnersCaveatMatchingFilesInSubfolder">Matching files in subfolder
If you have the following `/foo/OWNERS` file:
```
per-file my-folder/*=john.doe@example.com
```
\
John Doe owns all files in the `/foo/my-folder/` folder, but also all files in
any `my-folder/` subfolder, e.g. all files in `/foo/bar/baz/my-folder/`.
---
Back to [@PLUGIN@ documentation index](index.html)
Part of [Gerrit Code Review](../../../Documentation/index.html)