blob: ca23ab3f13078a7a14c51b80139ac05d5908f0f8 [file] [log] [blame]
James Y Knight8986b312019-01-14 22:27:32 +00001.. _phabricator-reviews:
2
Manuel Klimek81eb88f2012-10-11 19:40:46 +00003=============================
4Code Reviews with Phabricator
5=============================
6
7.. contents::
8 :local:
9
Reid Klecknerdd4814e2014-06-25 20:25:21 +000010If you prefer to use a web user interface for code reviews, you can now submit
11your patches for Clang and LLVM at `LLVM's Phabricator`_ instance.
12
13While Phabricator is a useful tool for some, the relevant -commits mailing list
14is the system of record for all LLVM code review. The mailing list should be
Sanjay Patele0dd8fd2014-06-26 18:12:42 +000015added as a subscriber on all reviews, and Phabricator users should be prepared
16to respond to free-form comments in mail sent to the commits list.
Manuel Klimek81eb88f2012-10-11 19:40:46 +000017
18Sign up
19-------
20
James Y Knight8986b312019-01-14 22:27:32 +000021To get started with Phabricator, navigate to `https://reviews.llvm.org`_ and
Reid Klecknerdd4814e2014-06-25 20:25:21 +000022click the power icon in the top right. You can register with a GitHub account,
23a Google account, or you can create your own profile.
24
Sanjay Patele0dd8fd2014-06-26 18:12:42 +000025Make *sure* that the email address registered with Phabricator is subscribed
Reid Kleckner181ebad2015-08-06 16:57:49 +000026to the relevant -commits mailing list. If you are not subscribed to the commit
Reid Klecknerdd4814e2014-06-25 20:25:21 +000027list, all mail sent by Phabricator on your behalf will be held for moderation.
28
Chandler Carruthd62fd652012-10-27 09:47:33 +000029Note that if you use your Subversion user name as Phabricator user name,
30Phabricator will automatically connect your submits to your Phabricator user in
31the `Code Repository Browser`_.
Manuel Klimek81eb88f2012-10-11 19:40:46 +000032
Manuel Klimek81eb88f2012-10-11 19:40:46 +000033Requesting a review via the command line
34----------------------------------------
35
36Phabricator has a tool called *Arcanist* to upload patches from
37the command line. To get you set up, follow the
38`Arcanist Quick Start`_ instructions.
39
40You can learn more about how to use arc to interact with
41Phabricator in the `Arcanist User Guide`_.
42
Florian Hahn98977ed2018-01-04 17:12:21 +000043.. _phabricator-request-review-web:
44
Manuel Klimek81eb88f2012-10-11 19:40:46 +000045Requesting a review via the web interface
46-----------------------------------------
47
48The tool to create and review patches in Phabricator is called
49*Differential*.
50
51Note that you can upload patches created through various diff tools,
52including git and svn. To make reviews easier, please always include
53**as much context as possible** with your diff! Don't worry, Phabricator
54will automatically send a diff with a smaller context in the review
55email, but having the full file in the web interface will help the
56reviewer understand your code.
57
58To get a full diff, use one of the following commands (or just use Arcanist
59to upload your patch):
60
Matthias Braunc82adde2017-06-15 22:09:30 +000061* ``git show HEAD -U999999 > mypatch.patch``
62* ``git format-patch -U999999 @{u}``
Alexey Samsonov4db4a712012-11-06 15:04:37 +000063* ``svn diff --diff-cmd=diff -x -U999999``
Manuel Klimek81eb88f2012-10-11 19:40:46 +000064
65To upload a new patch:
66
67* Click *Differential*.
Scott Douglass7e6843c2015-07-01 13:41:18 +000068* Click *+ Create Diff*.
69* Paste the text diff or browse to the patch file. Click *Create Diff*.
Ben Hamilton379dc272018-01-12 15:44:35 +000070* Leave this first Repository field blank. (We'll fill in the Repository
71 later, when sending the review.)
Manuel Klimek81eb88f2012-10-11 19:40:46 +000072* Leave the drop down on *Create a new Revision...* and click *Continue*.
Scott Douglass94446462015-03-31 15:07:53 +000073* Enter a descriptive title and summary. The title and summary are usually
74 in the form of a :ref:`commit message <commit messages>`.
Ben Hamilton5b07bb02018-01-11 16:30:08 +000075* Add reviewers (see below for advice). (If you set the Repository field
76 correctly, llvm-commits or cfe-commits will be subscribed automatically;
77 otherwise, you will have to manually subscribe them.)
Ben Hamilton379dc272018-01-12 15:44:35 +000078* In the Repository field, enter the name of the project (LLVM, Clang,
79 etc.) to which the review should be sent.
Manuel Klimek81eb88f2012-10-11 19:40:46 +000080* Click *Save*.
81
82To submit an updated patch:
83
84* Click *Differential*.
Scott Douglass7e6843c2015-07-01 13:41:18 +000085* Click *+ Create Diff*.
86* Paste the updated diff or browse to the updated patch file. Click *Create Diff*.
Manuel Klimek81eb88f2012-10-11 19:40:46 +000087* Select the review you want to from the *Attach To* dropdown and click
88 *Continue*.
Ben Hamilton379dc272018-01-12 15:44:35 +000089* Leave the Repository field blank. (We previously filled out the Repository
90 for the review request.)
Scott Douglass7e6843c2015-07-01 13:41:18 +000091* Add comments about the changes in the new diff. Click *Save*.
Manuel Klimek81eb88f2012-10-11 19:40:46 +000092
Paul Robinsonc47dfee2015-12-22 18:59:02 +000093Choosing reviewers: You typically pick one or two people as initial reviewers.
94This choice is not crucial, because you are merely suggesting and not requiring
95them to participate. Many people will see the email notification on cfe-commits
96or llvm-commits, and if the subject line suggests the patch is something they
97should look at, they will.
98
Kristof Beyls1f633af2018-11-07 08:49:36 +000099
100.. _finding-potential-reviewers:
101
102Finding potential reviewers
103---------------------------
104
Paul Robinsonc47dfee2015-12-22 18:59:02 +0000105Here are a couple of ways to pick the initial reviewer(s):
106
107* Use ``svn blame`` and the commit log to find names of people who have
108 recently modified the same area of code that you are modifying.
109* Look in CODE_OWNERS.TXT to see who might be responsible for that area.
110* If you've discussed the change on a dev list, the people who participated
111 might be appropriate reviewers.
112
113Even if you think the code owner is the busiest person in the world, it's still
114okay to put them as a reviewer. Being the code owner means they have accepted
115responsibility for making sure the review happens.
116
Manuel Klimek81eb88f2012-10-11 19:40:46 +0000117Reviewing code with Phabricator
118-------------------------------
119
120Phabricator allows you to add inline comments as well as overall comments
121to a revision. To add an inline comment, select the lines of code you want
122to comment on by clicking and dragging the line numbers in the diff pane.
Paul Robinson769b9352015-03-30 21:27:28 +0000123When you have added all your comments, scroll to the bottom of the page and
124click the Submit button.
Manuel Klimek81eb88f2012-10-11 19:40:46 +0000125
Paul Robinson769b9352015-03-30 21:27:28 +0000126You can add overall comments in the text box at the bottom of the page.
127When you're done, click the Submit button.
Manuel Klimek81eb88f2012-10-11 19:40:46 +0000128
129Phabricator has many useful features, for example allowing you to select
130diffs between different versions of the patch as it was reviewed in the
131*Revision Update History*. Most features are self descriptive - explore, and
132if you have a question, drop by on #llvm in IRC to get help.
133
Manuel Klimekf1dd4942013-02-13 09:07:18 +0000134Note that as e-mail is the system of reference for code reviews, and some
135people prefer it over a web interface, we do not generate automated mail
136when a review changes state, for example by clicking "Accept Revision" in
137the web interface. Thus, please type LGTM into the comment box to accept
138a change from Phabricator.
139
Mark Seaborn440ef852014-02-11 16:58:03 +0000140Committing a change
141-------------------
142
Dan Liew10387d22016-01-14 13:39:29 +0000143Once a patch has been reviewed and approved on Phabricator it can then be
Florian Hahnf4ae3672016-12-30 21:28:30 +0000144committed to trunk. If you do not have commit access, someone has to
145commit the change for you (with attribution). It is sufficient to add
146a comment to the approved review indicating you cannot commit the patch
147yourself. If you have commit access, there are multiple workflows to commit the
Anmol P. Paralkarb1151ef2017-01-05 13:08:14 +0000148change. Whichever method you follow it is recommended that your commit message
Florian Hahnf4ae3672016-12-30 21:28:30 +0000149ends with the line:
Mark Seaborn440ef852014-02-11 16:58:03 +0000150
151::
152
153 Differential Revision: <URL>
154
155where ``<URL>`` is the URL for the code review, starting with
James Y Knight8986b312019-01-14 22:27:32 +0000156``https://reviews.llvm.org/``.
Mark Seaborn440ef852014-02-11 16:58:03 +0000157
Mark Seaborn440ef852014-02-11 16:58:03 +0000158This allows people reading the version history to see the review for
Dan Liew10387d22016-01-14 13:39:29 +0000159context. This also allows Phabricator to detect the commit, close the
Mark Seaborn440ef852014-02-11 16:58:03 +0000160review, and add a link from the review to the commit.
161
Dan Liew10387d22016-01-14 13:39:29 +0000162Note that if you use the Arcanist tool the ``Differential Revision`` line will
163be added automatically. If you don't want to use Arcanist, you can add the
164``Differential Revision`` line (as the last line) to the commit message
165yourself.
166
James Y Knight8986b312019-01-14 22:27:32 +0000167Using the Arcanist tool can simplify the process of committing reviewed code as
168it will retrieve reviewers, the ``Differential Revision``, etc from the review
169and place it in the commit message. You may also commit an accepted change
170directly using ``git llvm push``, per the section in the :ref:`getting started
171guide <commit_from_git>`.
Dan Liew10387d22016-01-14 13:39:29 +0000172
173Note that if you commit the change without using Arcanist and forget to add the
174``Differential Revision`` line to your commit message then it is recommended
175that you close the review manually. In the web UI, under "Leap Into Action" put
176the SVN revision number in the Comment, set the Action to "Close Revision" and
177click Submit. Note the review must have been Accepted first.
178
Dan Liew10387d22016-01-14 13:39:29 +0000179
James Y Knight8986b312019-01-14 22:27:32 +0000180Committing someone's change from Phabricator
181^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dan Liew10387d22016-01-14 13:39:29 +0000182
183On a clean Git repository on an up to date ``master`` branch run the
184following (where ``<Revision>`` is the Phabricator review number):
185
186::
187
188 arc patch D<Revision>
189
190
191This will create a new branch called ``arcpatch-D<Revision>`` based on the
192current ``master`` and will create a commit corresponding to ``D<Revision>`` with a
193commit message derived from information in the Phabricator review.
194
James Y Knight8986b312019-01-14 22:27:32 +0000195Check you are happy with the commit message and amend it if necessary. Then,
196make sure the commit is up-to-date, and commit it. This can be done by running
197the following:
Dan Liew10387d22016-01-14 13:39:29 +0000198
199::
200
James Y Knight8986b312019-01-14 22:27:32 +0000201 git pull --rebase origin master
202 git show # Ensure the patch looks correct.
203 ninja check-$whatever # Rerun the appropriate tests if needed.
204 git llvm push
Dan Liew10387d22016-01-14 13:39:29 +0000205
James Y Knight8986b312019-01-14 22:27:32 +0000206Subversion and Arcanist (deprecated)
207^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dan Liew10387d22016-01-14 13:39:29 +0000208
James Y Knight8986b312019-01-14 22:27:32 +0000209To download a change from Phabricator and commit it with subversion, you should
210first make sure you have a clean working directory. Then run the following
211(where ``<Revision>`` is the Phabricator review number):
212
213::
214
215 arc patch D<Revision>
216 arc commit --revision D<Revision>
217
218The first command will take the latest version of the reviewed patch and apply
219it to the working copy. The second command will commit this revision to trunk.
Paul Robinson604ad962016-01-08 17:05:12 +0000220
Paul Robinson769b9352015-03-30 21:27:28 +0000221Abandoning a change
222-------------------
223
224If you decide you should not commit the patch, you should explicitly abandon
225the review so that reviewers don't think it is still open. In the web UI,
226scroll to the bottom of the page where normally you would enter an overall
227comment. In the drop-down Action list, which defaults to "Comment," you should
228select "Abandon Revision" and then enter a comment explaining why. Click the
229Submit button to finish closing the review.
230
Manuel Klimek81eb88f2012-10-11 19:40:46 +0000231Status
232------
233
Chandler Carruth957830d2015-05-27 07:20:46 +0000234Please let us know whether you like it and what could be improved! We're still
235working on setting up a bug tracker, but you can email klimek-at-google-dot-com
Tanya Lattner377a9842015-08-05 03:51:17 +0000236and chandlerc-at-gmail-dot-com and CC the llvm-dev mailing list with questions
Chandler Carruth957830d2015-05-27 07:20:46 +0000237until then. We also could use help implementing improvements. This sadly is
238really painful and hard because the Phabricator codebase is in PHP and not as
239testable as you might like. However, we've put exactly what we're deploying up
240on an `llvm-reviews GitHub project`_ where folks can hack on it and post pull
241requests. We're looking into what the right long-term hosting for this is, but
242note that it is a derivative of an existing open source project, and so not
243trivially a good fit for an official LLVM project.
Sean Silvab92dfe02012-10-12 01:21:24 +0000244
James Y Knight8986b312019-01-14 22:27:32 +0000245.. _LLVM's Phabricator: https://reviews.llvm.org
246.. _`https://reviews.llvm.org`: https://reviews.llvm.org
247.. _Code Repository Browser: https://reviews.llvm.org/diffusion/
Martell Malonece1116e2015-07-28 11:43:37 +0000248.. _Arcanist Quick Start: https://secure.phabricator.com/book/phabricator/article/arcanist_quick_start/
249.. _Arcanist User Guide: https://secure.phabricator.com/book/phabricator/article/arcanist/
Chandler Carruth957830d2015-05-27 07:20:46 +0000250.. _llvm-reviews GitHub project: https://github.com/r4nt/llvm-reviews/