blob: a42add2663ca8ece8d42e338ab1f0f22cb19dd41 [file] [log] [blame] [view]
brettw40e953e2017-02-08 17:49:281# Code Reviews
2
3Code reviews are a central part of developing high-quality code for Chromium.
4All changes must be reviewed.
5
Daniel Cheng6bffde02020-06-12 19:10:456The general patch, upload, and land process is covered in more detail in the
Yulan Lin55ae6a32020-07-31 17:58:297[contributing code](contributing.md) page. To learn about upcoming code review
8and OWNERS policy changes, see
9[Mandatory code review and OWNERS](code_review_owners.md).
brettw40e953e2017-02-08 17:49:2810
11# Code review policies
12
13Ideally the reviewer is someone who is familiar with the area of code you are
brettw2019b9e2017-02-09 06:40:2014touching. Any committer can review code, but an owner must provide a review
15for each directory you are touching. If you have doubts, look at the git blame
16for the file and the `OWNERS` files (see below).
brettw40e953e2017-02-08 17:49:2817
Michael Giuffridaaf367052018-03-22 20:22:3418To indicate a positive review, the reviewer provides a "Code-Review +1" in
19Gerrit, also known as an LGTM ("Looks Good To Me"). A score of "-1" indicates
20the change should not be submitted as-is.
brettw40e953e2017-02-08 17:49:2821
Michael Giuffridaaf367052018-03-22 20:22:3422If you have multiple reviewers, provide a message indicating what you expect
23from each reviewer. Otherwise people might assume their input is not required
24or waste time with redundant reviews.
brettw2019b9e2017-02-09 06:40:2025
Annie Sullivand04212e72017-10-19 21:11:3226Please also read [Respectful Changes](cl_respect.md) and
27[Respectful Code Reviews](cr_respect.md).
28
brettw2019b9e2017-02-09 06:40:2029#### Expectations for all reviewers
brettw40e953e2017-02-08 17:49:2830
31 * Aim to provide some kind of actionable response within 24 hours of receipt
Michael Giuffridaaf367052018-03-22 20:22:3432 (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.
brettw40e953e2017-02-08 17:49:2835
Michael Giuffridaaf367052018-03-22 20:22:3436 * Use the status field in Gerrit settings to indicate if you're away and when
Mike Frysinger7b15bde2018-05-15 09:28:0537 you'll be back.
brettw40e953e2017-02-08 17:49:2838
39 * Don't generally discourage people from sending you code reviews. This
Michael Giuffridaaf367052018-03-22 20:22:3440 includes using a blanket "slow" in your status field.
brettw40e953e2017-02-08 17:49:2841
42## OWNERS files
43
brettw2019b9e2017-02-09 06:40:2044In various directories there are files named `OWNERS` that list the email
brettw40e953e2017-02-08 17:49:2845addresses of people qualified to review changes in that directory. You must
46get a positive review from an owner of each directory your change touches.
47
brettw2019b9e2017-02-09 06:40:2048Owners files are recursive, so each file also applies to its subdirectories.
49It's generally best to pick more specific owners. People listed in higher-level
thestig9208d8ba2017-06-09 22:05:3250directories may have less experience with the code in question. For example,
51the reviewers in the `//chrome/browser/component_name/OWNERS` file will likely
52be more familiar with code in `//chrome/browser/component_name/sub_component`
53than reviewers in the higher-level `//chrome/OWNERS` file.
54
55More detail on the owners file format is provided in the "More information"
56section below.
brettw40e953e2017-02-08 17:49:2857
brettw2019b9e2017-02-09 06:40:2058*Tip:* The `git cl owners` command can help find owners.
brettw40e953e2017-02-08 17:49:2859
60While owners must approve all patches, any committer can contribute to the
61review. In some directories the owners can be overloaded or there might be
62people not listed as owners who are more familiar with the low-level code in
63question. In these cases it's common to request a low-level review from an
64appropriate person, and then request a high-level owner review once that's
65complete. As always, be clear what you expect of each reviewer to avoid
66duplicated work.
67
brettw2019b9e2017-02-09 06:40:2068Owners do not have to pick other owners for reviews. Since they should already
69be familiar with the code in question, a thorough review from any appropriate
70committer is sufficient.
brettw40e953e2017-02-08 17:49:2871
brettw2019b9e2017-02-09 06:40:2072#### Expectations of owners
73
74The existing owners of a directory approve additions to the list. It is
Wei-Yin Chen (陳威尹)681bc322017-07-20 01:55:1175preferable to have many directories, each with a smaller number of specific
Dirk Pranke4f9740c2018-10-17 03:01:0676owners rather than large directories with many owners. Owners should:
brettw2019b9e2017-02-09 06:40:2077
78 * Demonstrate excellent judgment, teamwork and ability to uphold Chrome
79 development principles.
80
81 * Be already acting as an owner, providing high-quality reviews and design
Dirk Pranke4f9740c2018-10-17 03:01:0682 feedback.
brettw2019b9e2017-02-09 06:40:2083
Dirk Pranke4f9740c2018-10-17 03:01:0684 * Be a Chromium project member with full commit access of at least three
brettw2019b9e2017-02-09 06:40:2085 months tenure.
86
87 * Have submitted a substantial number of non-trivial changes to the affected
brettw40e953e2017-02-08 17:49:2888 directory.
89
brettw2019b9e2017-02-09 06:40:2090 * Have committed or reviewed substantial work to the affected directory
Dirk Pranke4f9740c2018-10-17 03:01:0691 within the last ninety days.
brettw40e953e2017-02-08 17:49:2892
brettw2019b9e2017-02-09 06:40:2093 * 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 Pranke4f9740c2018-10-17 03:01:0698The above are guidelines more than they are hard rules, and exceptions are
99okay as long as there is a consensus by the existing owners for them.
100For example, seldom-updated directories may have exceptions to the
101"substantiality" and "recency" requirements. Directories in `third_party`
102should list those most familiar with the library, regardless of how often
103the code is updated.
brettw40e953e2017-02-08 17:49:28104
brettw2019b9e2017-02-09 06:40:20105### OWNERS file details
106
107Refer to the [source code](https://chromium.googlesource.com/chromium/tools/depot_tools/+/master/owners.py)
thestig9208d8ba2017-06-09 22:05:32108for all details on the file format.
brettw2019b9e2017-02-09 06:40:20109
110This example indicates that two people are owners, in addition to any owners
111from the parent directory. `git cl owners` will list the comment after an
112owner address, so this is a good place to include restrictions or special
113instructions.
114```
115# You can include comments like this.
116[email protected]
117[email protected] # Only for the frobinator.
118```
119
120A `*` indicates that all committers are owners:
121```
122*
123```
124
brettwd040b0be2017-02-09 19:11:33125The text `set noparent` will stop owner propagation from parent directories.
Jochen Eisingerea8f92d82017-08-02 17:40:14126This should be rarely used. If you want to use `set noparent` except for IPC
127related files, please first reach out to [email protected].
128
Jochen Eisinger8f0c8d82019-10-25 18:28:27129You have to use `set noparent` together with a reference to a file that lists
130the owners for the given use case. Approved use cases are listed in
131`//build/OWNERS.setnoparent`. Owners listed in those files are expected to
132execute special governance functions such as eng review or ipc security review.
133Every set of owners should implement their own means of auditing membership. The
134minimum expectation is that membership in those files is reevaluated on
135project, or affiliation changes.
136
137In this example, only the eng reviewers are owners:
brettw2019b9e2017-02-09 06:40:20138```
139set noparent
Jochen Eisinger8f0c8d82019-10-25 18:28:27140file://ENG_REVIEW_OWNERS
brettw2019b9e2017-02-09 06:40:20141```
142
143The `per-file` directive allows owners to be added that apply only to files
Wei-Yin Chen (陳威尹)681bc322017-07-20 01:55:11144matching a pattern. In this example, owners from the parent directory
brettw2019b9e2017-02-09 06:40:20145apply, plus one person for some classes of files, and all committers are
146owners for the readme:
147```
148per-file [email protected]
149per-file foo.*[email protected]
150
151per-file readme.txt=*
152```
153
George Burgess IV1ef04932018-01-27 07:04:04154Note that `per-file` directives cannot directly specify subdirectories, e.g:
155```
156per-file foo/[email protected]
157```
158
159is not OK; instead, place a `per-file` directive in `foo/OWNERS`.
160
brettw2019b9e2017-02-09 06:40:20161Other `OWNERS` files can be included by reference by listing the path to the
162file with `file://...`. This example indicates that only the people listed in
163`//ipc/SECURITY_OWNERS` can review the messages files:
164```
165per-file *_messages*.h=set noparent
166per-file *_messages*.h=file://ipc/SECURITY_OWNERS
167```
Steve Kobesf885edf2018-09-11 13:41:11168
169## TBR ("To Be Reviewed")
170
171"TBR" is our mechanism for post-commit review. It should be used rarely and
172only in cases where a normal review is unnecessary, as described under
173"When to TBR", below.
174
175TBR does not mean "no review." A reviewer TBR-ed on a change should still
176review the change. If there are comments after landing, the author is obligated
177to address them in a followup patch.
178
179Do not use TBR just because a change is urgent or the reviewer is being slow.
180Contact the reviewer directly or find somebody else to review your change.
181
182### How to TBR
183
184To send a change TBR, annotate the description and send email like normal.
185Otherwise the reviewer won't know to review the patch.
186
187 * Add the reviewer's email address in the code review tool's reviewer field
188 like normal.
189
Lei Zhang3fd577db2020-05-21 21:33:19190 * Add a line "Tbr: <reviewer's email>" to the bottom of the change list
191 description. e.g. `Tbr: [email protected],[email protected]`
Steve Kobesf885edf2018-09-11 13:41:11192
193 * Type a message so that the owners in the TBR list can understand who is
194 responsible for reviewing what, as part of their post-commit review
195 responsibility. e.g.
196 ```
197 TBRing reviewers:
198 reviewer1: Please review changes to foo/
199 reviewer2: Please review changes to bar/
200 ```
201
202### When to TBR
203
204#### Reverts and relands
205
206The most common use of TBR is to revert patches that broke the build. Clean
207reverts of recent patches may be submitted TBR. However, TBR should not be used
208if the revert required non-trivial conflict resolution, or if the patch being
209reverted is older than a few days.
210
211A developer relanding a patch can TBR the OWNERS for changes which are identical
212to the original (reverted) patch. If the reland patch contains any new changes
213(such as bug fixes) on top of the original, those changes should go through the
214normal review process.
215
216When creating a reland patch, you should first upload an up-to-date patchset
217with the exact content of the original (reverted) patch, and then upload the
218patchset to be relanded. This is important for the reviewers to understand what
219the fix for relanding was.
220
221#### Mechanical changes
222
223You can use TBR with certain mechanical changes that affect many callers in
224different directories. For example, adding a parameter to a common function in
225`//base`, with callers in `//chrome/browser/foo`, `//net/bar`, and many other
226directories. If the updates to the callers is mechanical, you can:
227
Gabriel Charette064574c2018-11-17 01:36:32228 1. Get a normal owner of the lower-level code you're changing (in this
229 example, the function in `//base`) to do a proper review of those changes.
Steve Kobesf885edf2018-09-11 13:41:11230
Gabriel Charette064574c2018-11-17 01:36:32231 2. Get _somebody_ to review the downstream changes made to the callers as a
232 result of the `//base` change. This is often the same person from the
233 previous step but could be somebody else.
Steve Kobesf885edf2018-09-11 13:41:11234
Gabriel Charette064574c2018-11-17 01:36:32235 3. TBR the owner of the lower-level code you're changing (in this example,
236 `//base`), after they've LGTM'ed the API change, to bypass owners review of
237 the API consumers incurring trivial side-effects.
Steve Kobesf885edf2018-09-11 13:41:11238
239This process ensures that all code is reviewed prior to checkin and that the
Gabriel Charette064574c2018-11-17 01:36:32240concept of the change is reviewed by a qualified person, without having to ping
241many owners with little say in the trivial side-effects they incur.
242
243**Note:** The above policy is only viable for strictly mechanical changes. For
244large-scale scripted changes you should:
245
246 1. Have an owner of the core change review the script.
247
248 2. Use `git cl split` to shard the large change into many small CLs with a
249 clear description of what each reviewer is expected to verify
250 ([example](https://chromium-review.googlesource.com/1191225)).
Steve Kobesf885edf2018-09-11 13:41:11251
252#### Documentation updates
253
254You can TBR documentation updates. Documentation means markdown files, text
255documents, and high-level comments in code. At finer levels of detail, comments
256in source files become more like code and should be reviewed normally (not
257using TBR). Non-TBR-able stuff includes things like function contracts and most
258comments inside functions.
259
260 * Use good judgement. If you're changing something very important, tricky,
261 or something you may not be very familiar with, ask for the code review
262 up-front.
263
264 * Don't TBR changes to policy documents like the style guide or this document.
265
266 * Don't mix unrelated documentation updates with code changes.
267
268 * Be sure to actually send out the email for the code review. If you get one,
269 please actually read the changes.
270