blob: 640e1611da6c442d395dc9de9304ab6c85c1460a [file] [log] [blame]
Manuel Klimek83981262012-10-11 19:40:46 +00001=============================
2Code Reviews with Phabricator
3=============================
4
5.. contents::
6 :local:
7
Reid Kleckner8b91d362014-06-25 20:25:21 +00008If you prefer to use a web user interface for code reviews, you can now submit
9your patches for Clang and LLVM at `LLVM's Phabricator`_ instance.
10
11While Phabricator is a useful tool for some, the relevant -commits mailing list
12is the system of record for all LLVM code review. The mailing list should be
Sanjay Patelec0c53d2014-06-26 18:12:42 +000013added as a subscriber on all reviews, and Phabricator users should be prepared
14to respond to free-form comments in mail sent to the commits list.
Manuel Klimek83981262012-10-11 19:40:46 +000015
16Sign up
17-------
18
Reid Kleckner8b91d362014-06-25 20:25:21 +000019To get started with Phabricator, navigate to `http://reviews.llvm.org`_ and
20click the power icon in the top right. You can register with a GitHub account,
21a Google account, or you can create your own profile.
22
Sanjay Patelec0c53d2014-06-26 18:12:42 +000023Make *sure* that the email address registered with Phabricator is subscribed
Reid Kleckner23195182015-08-06 16:57:49 +000024to the relevant -commits mailing list. If you are not subscribed to the commit
Reid Kleckner8b91d362014-06-25 20:25:21 +000025list, all mail sent by Phabricator on your behalf will be held for moderation.
26
Chandler Carruth34e34772012-10-27 09:47:33 +000027Note that if you use your Subversion user name as Phabricator user name,
28Phabricator will automatically connect your submits to your Phabricator user in
29the `Code Repository Browser`_.
Manuel Klimek83981262012-10-11 19:40:46 +000030
Manuel Klimek83981262012-10-11 19:40:46 +000031Requesting a review via the command line
32----------------------------------------
33
34Phabricator has a tool called *Arcanist* to upload patches from
35the command line. To get you set up, follow the
36`Arcanist Quick Start`_ instructions.
37
38You can learn more about how to use arc to interact with
39Phabricator in the `Arcanist User Guide`_.
40
Florian Hahn57edaa42018-01-04 17:12:21 +000041.. _phabricator-request-review-web:
42
Manuel Klimek83981262012-10-11 19:40:46 +000043Requesting a review via the web interface
44-----------------------------------------
45
46The tool to create and review patches in Phabricator is called
47*Differential*.
48
49Note that you can upload patches created through various diff tools,
50including git and svn. To make reviews easier, please always include
51**as much context as possible** with your diff! Don't worry, Phabricator
52will automatically send a diff with a smaller context in the review
53email, but having the full file in the web interface will help the
54reviewer understand your code.
55
56To get a full diff, use one of the following commands (or just use Arcanist
57to upload your patch):
58
Matthias Braundaa55002017-06-15 22:09:30 +000059* ``git show HEAD -U999999 > mypatch.patch``
60* ``git format-patch -U999999 @{u}``
Alexey Samsonovbdb25942012-11-06 15:04:37 +000061* ``svn diff --diff-cmd=diff -x -U999999``
Manuel Klimek83981262012-10-11 19:40:46 +000062
63To upload a new patch:
64
65* Click *Differential*.
Scott Douglassa0cda9b2015-07-01 13:41:18 +000066* Click *+ Create Diff*.
67* Paste the text diff or browse to the patch file. Click *Create Diff*.
Ben Hamiltone0d2f762018-01-12 15:44:35 +000068* Leave this first Repository field blank. (We'll fill in the Repository
69 later, when sending the review.)
Manuel Klimek83981262012-10-11 19:40:46 +000070* Leave the drop down on *Create a new Revision...* and click *Continue*.
Scott Douglassdb322772015-03-31 15:07:53 +000071* Enter a descriptive title and summary. The title and summary are usually
72 in the form of a :ref:`commit message <commit messages>`.
Ben Hamilton9bcc9572018-01-11 16:30:08 +000073* Add reviewers (see below for advice). (If you set the Repository field
74 correctly, llvm-commits or cfe-commits will be subscribed automatically;
75 otherwise, you will have to manually subscribe them.)
Ben Hamiltone0d2f762018-01-12 15:44:35 +000076* In the Repository field, enter the name of the project (LLVM, Clang,
77 etc.) to which the review should be sent.
Manuel Klimek83981262012-10-11 19:40:46 +000078* Click *Save*.
79
80To submit an updated patch:
81
82* Click *Differential*.
Scott Douglassa0cda9b2015-07-01 13:41:18 +000083* Click *+ Create Diff*.
84* Paste the updated diff or browse to the updated patch file. Click *Create Diff*.
Manuel Klimek83981262012-10-11 19:40:46 +000085* Select the review you want to from the *Attach To* dropdown and click
86 *Continue*.
Ben Hamiltone0d2f762018-01-12 15:44:35 +000087* Leave the Repository field blank. (We previously filled out the Repository
88 for the review request.)
Scott Douglassa0cda9b2015-07-01 13:41:18 +000089* Add comments about the changes in the new diff. Click *Save*.
Manuel Klimek83981262012-10-11 19:40:46 +000090
Paul Robinson0ee3f252015-12-22 18:59:02 +000091Choosing reviewers: You typically pick one or two people as initial reviewers.
92This choice is not crucial, because you are merely suggesting and not requiring
93them to participate. Many people will see the email notification on cfe-commits
94or llvm-commits, and if the subject line suggests the patch is something they
95should look at, they will.
96
Kristof Beylsa8ffa522018-11-07 08:49:36 +000097
98.. _finding-potential-reviewers:
99
100Finding potential reviewers
101---------------------------
102
Paul Robinson0ee3f252015-12-22 18:59:02 +0000103Here are a couple of ways to pick the initial reviewer(s):
104
105* Use ``svn blame`` and the commit log to find names of people who have
106 recently modified the same area of code that you are modifying.
107* Look in CODE_OWNERS.TXT to see who might be responsible for that area.
108* If you've discussed the change on a dev list, the people who participated
109 might be appropriate reviewers.
110
111Even if you think the code owner is the busiest person in the world, it's still
112okay to put them as a reviewer. Being the code owner means they have accepted
113responsibility for making sure the review happens.
114
Manuel Klimek83981262012-10-11 19:40:46 +0000115Reviewing code with Phabricator
116-------------------------------
117
118Phabricator allows you to add inline comments as well as overall comments
119to a revision. To add an inline comment, select the lines of code you want
120to comment on by clicking and dragging the line numbers in the diff pane.
Paul Robinsonc02e8582015-03-30 21:27:28 +0000121When you have added all your comments, scroll to the bottom of the page and
122click the Submit button.
Manuel Klimek83981262012-10-11 19:40:46 +0000123
Paul Robinsonc02e8582015-03-30 21:27:28 +0000124You can add overall comments in the text box at the bottom of the page.
125When you're done, click the Submit button.
Manuel Klimek83981262012-10-11 19:40:46 +0000126
127Phabricator has many useful features, for example allowing you to select
128diffs between different versions of the patch as it was reviewed in the
129*Revision Update History*. Most features are self descriptive - explore, and
130if you have a question, drop by on #llvm in IRC to get help.
131
Manuel Klimek51e31d22013-02-13 09:07:18 +0000132Note that as e-mail is the system of reference for code reviews, and some
133people prefer it over a web interface, we do not generate automated mail
134when a review changes state, for example by clicking "Accept Revision" in
135the web interface. Thus, please type LGTM into the comment box to accept
136a change from Phabricator.
137
Mark Seaborn6e15ee82014-02-11 16:58:03 +0000138Committing a change
139-------------------
140
Dan Liewee419be2016-01-14 13:39:29 +0000141Once a patch has been reviewed and approved on Phabricator it can then be
Florian Hahne7407ba2016-12-30 21:28:30 +0000142committed to trunk. If you do not have commit access, someone has to
143commit the change for you (with attribution). It is sufficient to add
144a comment to the approved review indicating you cannot commit the patch
145yourself. If you have commit access, there are multiple workflows to commit the
Anmol P. Paralkar3480e832017-01-05 13:08:14 +0000146change. Whichever method you follow it is recommended that your commit message
Florian Hahne7407ba2016-12-30 21:28:30 +0000147ends with the line:
Mark Seaborn6e15ee82014-02-11 16:58:03 +0000148
149::
150
151 Differential Revision: <URL>
152
153where ``<URL>`` is the URL for the code review, starting with
Manuel Klimek234b86b2014-04-07 10:21:33 +0000154``http://reviews.llvm.org/``.
Mark Seaborn6e15ee82014-02-11 16:58:03 +0000155
Mark Seaborn6e15ee82014-02-11 16:58:03 +0000156This allows people reading the version history to see the review for
Dan Liewee419be2016-01-14 13:39:29 +0000157context. This also allows Phabricator to detect the commit, close the
Mark Seaborn6e15ee82014-02-11 16:58:03 +0000158review, and add a link from the review to the commit.
159
Dan Liewee419be2016-01-14 13:39:29 +0000160Note that if you use the Arcanist tool the ``Differential Revision`` line will
161be added automatically. If you don't want to use Arcanist, you can add the
162``Differential Revision`` line (as the last line) to the commit message
163yourself.
164
165Using the Arcanist tool can simplify the process of committing reviewed code
166as it will retrieve reviewers, the ``Differential Revision``, etc from the review
167and place it in the commit message. Several methods of using Arcanist to commit
168code are given below. If you do not wish to use Arcanist then simply commit
169the reviewed patch as you would normally.
170
171Note that if you commit the change without using Arcanist and forget to add the
172``Differential Revision`` line to your commit message then it is recommended
173that you close the review manually. In the web UI, under "Leap Into Action" put
174the SVN revision number in the Comment, set the Action to "Close Revision" and
175click Submit. Note the review must have been Accepted first.
176
177Subversion and Arcanist
178^^^^^^^^^^^^^^^^^^^^^^^
179
180On a clean Subversion working copy run the following (where ``<Revision>`` is
181the Phabricator review number):
182
183::
184
185 arc patch D<Revision>
186 arc commit --revision D<Revision>
187
188The first command will take the latest version of the reviewed patch and apply it to the working
189copy. The second command will commit this revision to trunk.
190
191git-svn and Arcanist
192^^^^^^^^^^^^^^^^^^^^
193
194This presumes that the git repository has been configured as described in :ref:`developers-work-with-git-svn`.
195
196On a clean Git repository on an up to date ``master`` branch run the
197following (where ``<Revision>`` is the Phabricator review number):
198
199::
200
201 arc patch D<Revision>
202
203
204This will create a new branch called ``arcpatch-D<Revision>`` based on the
205current ``master`` and will create a commit corresponding to ``D<Revision>`` with a
206commit message derived from information in the Phabricator review.
207
208Check you are happy with the commit message and amend it if necessary. Now switch to
209the ``master`` branch and add the new commit to it and commit it to trunk. This
210can be done by running the following:
211
212::
213
214 git checkout master
215 git merge --ff-only arcpatch-D<Revision>
216 git svn dcommit
217
218
Paul Robinsond4db9482016-01-08 17:05:12 +0000219
Paul Robinsonc02e8582015-03-30 21:27:28 +0000220Abandoning a change
221-------------------
222
223If you decide you should not commit the patch, you should explicitly abandon
224the review so that reviewers don't think it is still open. In the web UI,
225scroll to the bottom of the page where normally you would enter an overall
226comment. In the drop-down Action list, which defaults to "Comment," you should
227select "Abandon Revision" and then enter a comment explaining why. Click the
228Submit button to finish closing the review.
229
Manuel Klimek83981262012-10-11 19:40:46 +0000230Status
231------
232
Chandler Carruth792b94c2015-05-27 07:20:46 +0000233Please let us know whether you like it and what could be improved! We're still
234working on setting up a bug tracker, but you can email klimek-at-google-dot-com
Tanya Lattner0d28f802015-08-05 03:51:17 +0000235and chandlerc-at-gmail-dot-com and CC the llvm-dev mailing list with questions
Chandler Carruth792b94c2015-05-27 07:20:46 +0000236until then. We also could use help implementing improvements. This sadly is
237really painful and hard because the Phabricator codebase is in PHP and not as
238testable as you might like. However, we've put exactly what we're deploying up
239on an `llvm-reviews GitHub project`_ where folks can hack on it and post pull
240requests. We're looking into what the right long-term hosting for this is, but
241note that it is a derivative of an existing open source project, and so not
242trivially a good fit for an official LLVM project.
Sean Silvab39f47b2012-10-12 01:21:24 +0000243
Manuel Klimek234b86b2014-04-07 10:21:33 +0000244.. _LLVM's Phabricator: http://reviews.llvm.org
Reid Kleckner8b91d362014-06-25 20:25:21 +0000245.. _`http://reviews.llvm.org`: http://reviews.llvm.org
Manuel Klimek234b86b2014-04-07 10:21:33 +0000246.. _Code Repository Browser: http://reviews.llvm.org/diffusion/
Martell Malone182b4bb2015-07-28 11:43:37 +0000247.. _Arcanist Quick Start: https://secure.phabricator.com/book/phabricator/article/arcanist_quick_start/
248.. _Arcanist User Guide: https://secure.phabricator.com/book/phabricator/article/arcanist/
Chandler Carruth792b94c2015-05-27 07:20:46 +0000249.. _llvm-reviews GitHub project: https://github.com/r4nt/llvm-reviews/