brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 1 | # Code Reviews |
| 2 | |
| 3 | Code reviews are a central part of developing high-quality code for Chromium. |
Lei Zhang | 3b32caa | 2021-03-22 17:24:19 | [diff] [blame] | 4 | All change lists (CLs) must be reviewed. |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 5 | |
Daniel Cheng | 6bffde0 | 2020-06-12 19:10:45 | [diff] [blame] | 6 | The general patch, upload, and land process is covered in more detail in the |
Jason D. Clinton | c38b61d8 | 2021-04-20 20:02:14 | [diff] [blame] | 7 | [contributing code](contributing.md) page. To learn about the code review changes |
| 8 | and OWNERS policy changes launched on March 24, 2021, see |
| 9 | [Mandatory Code Review and Native OWNERS](code_review_owners.md). |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 10 | |
| 11 | # Code review policies |
| 12 | |
| 13 | Ideally the reviewer is someone who is familiar with the area of code you are |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 14 | touching. Any committer can review code, but an owner must provide a review |
Lei Zhang | 3b32caa | 2021-03-22 17:24:19 | [diff] [blame] | 15 | for each directory you are touching. If you have doubts, look at the `git blame` |
| 16 | for the file and the `OWNERS` files ([more info](#owners-files)). |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 17 | |
John Abd-El-Malek | dfd1edc | 2021-02-24 22:22:40 | [diff] [blame] | 18 | To indicate a positive review, the reviewer provides a `Code-Review +1` in |
Michael Giuffrida | af36705 | 2018-03-22 20:22:34 | [diff] [blame] | 19 | Gerrit, also known as an LGTM ("Looks Good To Me"). A score of "-1" indicates |
| 20 | the change should not be submitted as-is. |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 21 | |
Michael Giuffrida | af36705 | 2018-03-22 20:22:34 | [diff] [blame] | 22 | If you have multiple reviewers, provide a message indicating what you expect |
| 23 | from each reviewer. Otherwise people might assume their input is not required |
| 24 | or waste time with redundant reviews. |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 25 | |
Annie Sullivan | d04212e7 | 2017-10-19 21:11:32 | [diff] [blame] | 26 | Please also read [Respectful Changes](cl_respect.md) and |
| 27 | [Respectful Code Reviews](cr_respect.md). |
| 28 | |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 29 | #### Expectations for all reviewers |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 30 | |
| 31 | * Aim to provide some kind of actionable response within 24 hours of receipt |
Michael Giuffrida | af36705 | 2018-03-22 20:22:34 | [diff] [blame] | 32 | (not counting weekends and holidays). This doesn't mean you have to do a |
| 33 | complete review, but you should be able to give some initial feedback, |
| 34 | request more time, or suggest another reviewer. |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 35 | |
Michael Giuffrida | af36705 | 2018-03-22 20:22:34 | [diff] [blame] | 36 | * Use the status field in Gerrit settings to indicate if you're away and when |
Mike Frysinger | 7b15bde | 2018-05-15 09:28:05 | [diff] [blame] | 37 | you'll be back. |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 38 | |
| 39 | * Don't generally discourage people from sending you code reviews. This |
Michael Giuffrida | af36705 | 2018-03-22 20:22:34 | [diff] [blame] | 40 | includes using a blanket "slow" in your status field. |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 41 | |
| 42 | ## OWNERS files |
| 43 | |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 44 | In various directories there are files named `OWNERS` that list the email |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 45 | addresses of people qualified to review changes in that directory. You must |
| 46 | get a positive review from an owner of each directory your change touches. |
| 47 | |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 48 | Owners files are recursive, so each file also applies to its subdirectories. |
| 49 | It's generally best to pick more specific owners. People listed in higher-level |
thestig | 9208d8ba | 2017-06-09 22:05:32 | [diff] [blame] | 50 | directories may have less experience with the code in question. For example, |
| 51 | the reviewers in the `//chrome/browser/component_name/OWNERS` file will likely |
| 52 | be more familiar with code in `//chrome/browser/component_name/sub_component` |
| 53 | than reviewers in the higher-level `//chrome/OWNERS` file. |
| 54 | |
Lei Zhang | 3b32caa | 2021-03-22 17:24:19 | [diff] [blame] | 55 | More detail on the owners file format is provided [here](#owners-file-details). |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 56 | |
Lei Zhang | 3b32caa | 2021-03-22 17:24:19 | [diff] [blame] | 57 | *Tip:* The `git cl owners` command can help find owners. Gerrit also provides |
Jason D. Clinton | c38b61d8 | 2021-04-20 20:02:14 | [diff] [blame] | 58 | this functionality in the Reviewers field of CLs. |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 59 | |
| 60 | While owners must approve all patches, any committer can contribute to the |
| 61 | review. In some directories the owners can be overloaded or there might be |
| 62 | people not listed as owners who are more familiar with the low-level code in |
| 63 | question. In these cases it's common to request a low-level review from an |
| 64 | appropriate person, and then request a high-level owner review once that's |
| 65 | complete. As always, be clear what you expect of each reviewer to avoid |
| 66 | duplicated work. |
| 67 | |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 68 | Owners do not have to pick other owners for reviews. Since they should already |
| 69 | be familiar with the code in question, a thorough review from any appropriate |
| 70 | committer is sufficient. |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 71 | |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 72 | #### Expectations of owners |
| 73 | |
| 74 | The existing owners of a directory approve additions to the list. It is |
Wei-Yin Chen (陳威尹) | 681bc32 | 2017-07-20 01:55:11 | [diff] [blame] | 75 | preferable to have many directories, each with a smaller number of specific |
Dirk Pranke | 4f9740c | 2018-10-17 03:01:06 | [diff] [blame] | 76 | owners rather than large directories with many owners. Owners should: |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 77 | |
Dirk Pranke | 3042ec9 | 2022-01-12 16:53:40 | [diff] [blame] | 78 | * Demonstrate excellent judgment, teamwork and ability to uphold |
| 79 | [Chromium development principles](contributing.md). |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 80 | |
| 81 | * Be already acting as an owner, providing high-quality reviews and design |
Dirk Pranke | 4f9740c | 2018-10-17 03:01:06 | [diff] [blame] | 82 | feedback. |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 83 | |
Dirk Pranke | 4f9740c | 2018-10-17 03:01:06 | [diff] [blame] | 84 | * Be a Chromium project member with full commit access of at least three |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 85 | months tenure. |
| 86 | |
| 87 | * Have submitted a substantial number of non-trivial changes to the affected |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 88 | directory. |
| 89 | |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 90 | * Have committed or reviewed substantial work to the affected directory |
Dirk Pranke | 4f9740c | 2018-10-17 03:01:06 | [diff] [blame] | 91 | within the last ninety days. |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 92 | |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 93 | * Have the bandwidth to contribute to reviews in a timely manner. If the load |
| 94 | is unsustainable, work to expand the number of owners. Don't try to |
| 95 | discourage people from sending reviews, including writing "slow" or |
| 96 | "emeritus" after your name. |
| 97 | |
Dirk Pranke | 3042ec9 | 2022-01-12 16:53:40 | [diff] [blame] | 98 | Seldom-updated directories may have exceptions to the "substantiality" and |
| 99 | "recency" requirements. |
| 100 | |
| 101 | Directories in `//third_party` should list those most familiar with the |
| 102 | library, regardless of how often the code is updated. |
| 103 | |
| 104 | #### Removal of owners |
| 105 | |
| 106 | If a code owner is not meeting the [expectations of |
| 107 | owners](#expectations-of-owners) listed above for more than one quarter (and |
| 108 | they are not on a leave during that time), then they may be removed by any |
| 109 | co-owner or an owner from the parent directory after a 4-week notice, using |
| 110 | the following process: |
| 111 | |
| 112 | * Upload a change removing the owner and copy all owners in that directory, |
| 113 | including the owner in question. |
| 114 | * If the affected owner approves the change, it may be landed immediately. |
| 115 | * Otherwise, the change author must wait five working days for feedback from |
| 116 | the other owners. |
| 117 | * After that time has elapsed, if the change has received 3 approvals |
| 118 | with no objections from anyone else, the change may be landed. |
| 119 | * If the directory does not have 4 owners, then the decision should |
| 120 | be escalated to the owners of the parent directory (or directories) |
| 121 | as necessary to provide enough of votes. |
| 122 | * If there are objections, then the decision should be escalated to |
| 123 | the [../CHROME_ENG_REVIEW](//CHROME_ENG_REVIEW) for resolution. |
brettw | 40e953e | 2017-02-08 17:49:28 | [diff] [blame] | 124 | |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 125 | ### OWNERS file details |
| 126 | |
Anthony Polito | 9ce2a48 | 2022-02-10 18:39:49 | [diff] [blame] | 127 | Refer to the [owners plugin](https://github.com/GerritCodeReview/plugins_code-owners/blob/master/resources/Documentation/backend-find-owners.md) |
thestig | 9208d8ba | 2017-06-09 22:05:32 | [diff] [blame] | 128 | for all details on the file format. |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 129 | |
| 130 | This example indicates that two people are owners, in addition to any owners |
| 131 | from the parent directory. `git cl owners` will list the comment after an |
| 132 | owner address, so this is a good place to include restrictions or special |
| 133 | instructions. |
| 134 | ``` |
| 135 | # You can include comments like this. |
| 136 | [email protected] |
| 137 | [email protected] # Only for the frobinator. |
| 138 | ``` |
| 139 | |
| 140 | A `*` indicates that all committers are owners: |
| 141 | ``` |
| 142 | * |
| 143 | ``` |
| 144 | |
brettw | d040b0be | 2017-02-09 19:11:33 | [diff] [blame] | 145 | The text `set noparent` will stop owner propagation from parent directories. |
Jochen Eisinger | ea8f92d8 | 2017-08-02 17:40:14 | [diff] [blame] | 146 | This should be rarely used. If you want to use `set noparent` except for IPC |
| 147 | related files, please first reach out to chrome-eng-review@google.com. |
| 148 | |
Jochen Eisinger | 8f0c8d8 | 2019-10-25 18:28:27 | [diff] [blame] | 149 | You have to use `set noparent` together with a reference to a file that lists |
| 150 | the owners for the given use case. Approved use cases are listed in |
| 151 | `//build/OWNERS.setnoparent`. Owners listed in those files are expected to |
| 152 | execute special governance functions such as eng review or ipc security review. |
| 153 | Every set of owners should implement their own means of auditing membership. The |
| 154 | minimum expectation is that membership in those files is reevaluated on |
| 155 | project, or affiliation changes. |
| 156 | |
| 157 | In this example, only the eng reviewers are owners: |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 158 | ``` |
| 159 | set noparent |
Jochen Eisinger | 8f0c8d8 | 2019-10-25 18:28:27 | [diff] [blame] | 160 | file://ENG_REVIEW_OWNERS |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] | 161 | ``` |
| 162 | |
| 163 | The `per-file` directive allows owners to be added that apply only to files |
Wei-Yin Chen (陳威尹) | 681bc32 | 2017-07-20 01:55:11 | [diff] [blame] | 164 | matching a pattern. In this example, owners from the parent directory |
brettw | 2019b9e | 2017-02-09 06:40:20 | [diff] [blame] |
|