blob: 0cd18a634b766fd947b88c5be78f0bc7e92fe875 [file] [log] [blame]
Robert Ly35f2fda2013-01-29 16:27:05 -08001page.title=Submitting Patches
2@jd:body
3
4<!--
Clay Murphyb840b6f2015-03-12 16:57:41 -07005 Copyright 2015 The Android Open Source Project
Robert Ly35f2fda2013-01-29 16:27:05 -08006
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
10
11 http://www.apache.org/licenses/LICENSE-2.0
12
13 Unless required by applicable law or agreed to in writing, software
14 distributed under the License is distributed on an "AS IS" BASIS,
15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 See the License for the specific language governing permissions and
17 limitations under the License.
18-->
19<div id="qv-wrapper">
20
21 <div id="qv">
22 <h2>In this document</h2>
23 <ol id="auto-toc">
24 </ol>
25 </div>
26</div>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -070027<p>This page describes the full process of submitting a patch to the AOSP,
28including
29reviewing and tracking changes with <a
30href="https://android-review.googlesource.com/">Gerrit</a>.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080031<h2 id="prerequisites">Prerequisites</h2>
32<ul>
33<li>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -070034<p>Before you follow the instructions on this page, you need to <a
35href="{@docRoot}source/initializing.html">
Clay Murphy4a98dc42014-11-21 13:30:05 -080036initialize your build environment</a>, <a
37href="{@docRoot}source/downloading.html">download the source</a>, <a
38href="https://android.googlesource.com/new-password">create a
39password</a>, and follow the instructions on the password generator page.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080040</li>
41<li>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -070042<p>For details about Repo and Git, see the <a
43href="{@docRoot}source/developing.html">Developing</a> section.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080044</li>
45<li>
46<p>For information about the different roles you can play within the Android
Mark Hecomovich27cc4e42016-07-21 15:08:53 -070047Open Source community, see <a href="{@docRoot}source/roles.html">Project
48roles</a>.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080049</li>
50<li>
51<p>If you plan to contribute code to the Android platform, be sure to read
Mark Hecomovich27cc4e42016-07-21 15:08:53 -070052the <a href="{@docRoot}source/licenses.html">AOSP's licensing
53information</a>.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080054</li>
55<li>
56<p>Note that changes to some of the upstream projects used by Android should be
Mark Hecomovich27cc4e42016-07-21 15:08:53 -070057made directly to that project, as described in <a
58href="#upstream-projects">Upstream Projects</a>.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080059</li>
60</ul>
61<h1 id="for-contributors">For contributors</h1>
62<h2 id="authenticate-with-the-server">Authenticate with the server</h2>
Clay Murphy4a98dc42014-11-21 13:30:05 -080063<p>Before you can upload to Gerrit, you need to <a
64href="https://android.googlesource.com/new-password">establish a password</a>
65that will identify you with the server. Follow the instructions on the password
66generator page. You need to do this only once. See <a
67href="{@docRoot}source/downloading.html#using-authentication">Using
68Authentication</a> for additional details.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080069<h2 id="start-a-repo-branch">Start a repo branch</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -070070<p>For each change you intend to make, start a new branch within the relevant
71git repository:</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080072<pre><code>$ repo start NAME .
73</code></pre>
Clay Murphyf7935f92014-03-12 10:34:37 -070074<p>You can start several independent branches at the same time in the same
75repository. The branch NAME is local to your workspace and will not be included
76on gerrit or the final source tree.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080077<h2 id="make-your-change">Make your change</h2>
Clay Murphyf7935f92014-03-12 10:34:37 -070078<p>Once you have modified the source files (and validated them, please) commit
79the changes to your local repository:</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080080<pre><code>$ git add -A
81$ git commit -s
82</code></pre>
Clay Murphyf7935f92014-03-12 10:34:37 -070083<p>Provide a detailed description of the change in your commit message. This
84description will be pushed to the public AOSP repository, so please follow our
85guidelines for writing changelist descriptions: </p>
Robert Ly35f2fda2013-01-29 16:27:05 -080086<ul>
Robert Ly35f2fda2013-01-29 16:27:05 -080087
Robert Ly35f2fda2013-01-29 16:27:05 -080088<li>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -070089<p>Start with a one-line summary (50 characters maximum), followed by a
90blank line.
Mark Hecomovichc859b342016-07-20 16:32:00 -070091This format is used by git and gerrit for various displays.</p>
92</li>
93
94<li>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -070095<p>Starting on the third line, enter a longer description, which must
96hard-wrap at 72 characters maximum. This description should focus on what
97issue the change solves, and how it solves it. The second part is somewhat
98optional when implementing new features, though desirable.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080099</li>
100<li>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700101<p>Include a brief note of any assumptions or background information that
102may be important when another contributor works on this feature next year.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800103</li>
104</ul>
Mark Hecomovichc859b342016-07-20 16:32:00 -0700105
106<p>Here is an example commit message:</p>
107<pre><code>short description on first line
108
109more detailed description of your patch,
110which is likely to take up multiple lines.
111</code></pre>
112
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700113<p>A unique change ID and your name and email as provided during <code>repo
114init</code> will be automatically added to your commit message. </p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800115<h2 id="upload-to-gerrit">Upload to gerrit</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700116<p>Once you have committed your change to your personal history, upload it
117to gerrit with</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800118<pre><code>$ repo upload
119</code></pre>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700120<p>If you have started multiple branches in the same repository, you will
121be prompted to select which one(s) to upload.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800122<p>After a successful upload, repo will provide you the URL of a new page on
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700123<a href="https://android-review.googlesource.com/">Gerrit</a>. Visit this
124link to view
Robert Ly35f2fda2013-01-29 16:27:05 -0800125your patch on the review server, add comments, or request specific reviewers
126for your patch.</p>
127<h2 id="uploading-a-replacement-patch">Uploading a replacement patch</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700128<p>Suppose a reviewer has looked at your patch and requested a small
129modification. You can amend your commit within git, which will result in a
130new patch on gerrit with the same change ID as the original.</p>
131<p><em>Note that if you have made other commits since uploading this patch,
132you will need to manually move your git HEAD.</em></p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800133<pre><code>$ git add -A
134$ git commit --amend
135</code></pre>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700136<p>When you upload the amended patch, it will replace the original on gerrit
137and in your local git history.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800138<h2 id="resolving-sync-conflicts">Resolving sync conflicts</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700139<p>If other patches are submitted to the source tree that conflict with
140yours, you will need to rebase your patch on top of the new HEAD of the
141source repository. The easy way to do this is to run</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800142<pre><code>$ repo sync
143</code></pre>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700144<p>This command first fetches the updates from the source server, then
145attempts to automatically rebase your HEAD onto the new remote HEAD.</p>
146<p>If the automatic rebase is unsuccessful, you will have to perform a
147manual rebase.</p>
Clay Murphyb840b6f2015-03-12 16:57:41 -0700148<pre><code>$ repo rebase
Robert Ly35f2fda2013-01-29 16:27:05 -0800149</code></pre>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700150<p>Using <code>git mergetool</code> may help you deal with the rebase
151conflict. Once you have successfully merged the conflicting files,</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800152<pre><code>$ git rebase --continue
153</code></pre>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700154<p>After either automatic or manual rebase is complete, run <code>repo
155upload</code> to submit your rebased patch.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800156<h2 id="after-a-submission-is-approved">After a submission is approved</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700157<p>After a submission makes it through the review and verification process,
158Gerrit automatically merges the change into the public repository. Other
159users will be able to run <code>repo sync</code> to pull the update into
160their local client.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800161<h1 id="for-reviewers-and-verifiers">For reviewers and verifiers</h1>
162<h2 id="reviewing-a-change">Reviewing a change</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700163<p>If you are assigned to be the Approver for a change, you need to determine
164the following:</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800165<ul>
166<li>
167<p>Does this change fit within this project's stated purpose?</p>
168</li>
169<li>
170<p>Is this change valid within the project's existing architecture?</p>
171</li>
172<li>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700173<p>Does this change introduce design flaws that will cause problems in
174the future?</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800175</li>
176<li>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700177<p>Does this change follow the best practices that have been established
178for this project?</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800179</li>
180<li>
181<p>Is this change a good way to perform the described function?</p>
182</li>
183<li>
184<p>Does this change introduce any security or instability risks?</p>
185</li>
186</ul>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700187<p>If you approve of the change, mark it with LGTM ("Looks Good to Me")
188within Gerrit.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800189<h2 id="verifying-a-change">Verifying a change</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700190<p>If you are assigned to be the Verifier for a change, you need to do the
191following:</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800192<ul>
193<li>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700194<p>Patch the change into your local client using one of the Download
195commands.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800196</li>
197<li>
198<p>Build and test the change.</p>
199</li>
200<li>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700201<p>Within Gerrit use Publish Comments to mark the commit as "Verified" or
202"Fails," and add a message explaining what problems were identified.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800203</li>
204</ul>
205<h2 id="downloading-changes-from-gerrit">Downloading changes from Gerrit</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700206<p>A submission that has been verified and merged will be downloaded with
207the next <code>repo sync</code>. If you wish to download a specific change
208that has not yet been approved, run</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800209<pre><code>$ repo download TARGET CHANGE
210</code></pre>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700211<p>where TARGET is the local directory into which the change should be
212downloaded and CHANGE is the
213change number as listed in <a
214href="https://android-review.googlesource.com/">Gerrit</a>. For more
215information,
Clay Murphyf7935f92014-03-12 10:34:37 -0700216see the <a href="{@docRoot}source/using-repo.html">Repo reference</a>.</p>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700217<h2 id="how-do-i-become-a-verifier-or-approver">How do I become a Verifier
218or Approver?</h2>
219<p>In short, contribute high-quality code to one or more of the Android
220projects.
Robert Ly35f2fda2013-01-29 16:27:05 -0800221For details about the different roles in the Android Open Source community and
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700222who plays them, see <a href="{@docRoot}source/roles.html">Project
223Roles</a>.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800224<h2 id="diffs-and-comments">Diffs and comments</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700225<p>To open the details of the change within Gerrit, click on the "Id number"
226or "Subject" of a change. To compare the established code with the updated
227code, click the file name under "Side-by-side diffs."</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800228<h2 id="adding-comments">Adding comments</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700229<p>Anyone in the community can use Gerrit to add inline comments to code
230submissions. A good comment will be relevant to the line or section of code
231to which it is attached in Gerrit. It might be a short and constructive
232suggestion about how a line of code could be improved, or it might be an
233explanation from the author about why the code makes sense the way it is.</p>
234<p>To add an inline comment, double-click the relevant line of the code
235and write your comment in the text box that opens. When you click Save,
236only you can see your comment.</p>
237<p>To publish your comments so that others using Gerrit will be able to see
238them, click the Publish Comments button. Your comments will be emailed to
239all relevant parties for this change, including the change owner, the patch
240set uploader (if different from the owner), and all current reviewers.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800241<p><a name="upstream-projects"></a></p>
242<h1 id="upstream-projects">Upstream Projects</h1>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700243<p>Android makes use of a number of other open source projects, such as the
244Linux kernel and WebKit, as described in
245<a href="{@docRoot}source/code-lines.html">Codelines, Branches, and
246Releases</a>. For most projects under <code>external/</code>, changes should
247be made upstream and then the Android maintainers informed of the new upstream
248release containing these changes. It may also be useful to upload patches
249that move us to track a new upstream release, though these can be difficult
250changes to make if the project is widely used within Android like most of the
251larger ones mentioned below, where we tend to upgrade with every release.</p>
252<p>One interesting special case is bionic. Much of the code there is from BSD,
253so unless the change is to code that's new to bionic, we'd much rather see an
254upstream fix and then pull a whole new file from the appropriate BSD. (Sadly
255we have quite a mix of different BSDs at the moment, but we hope to address
256that in future, and get into a position where we track upstream much more
257closely.)</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800258<h2 id="icu4c">ICU4C</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700259<p>All changes to the ICU4C project at <code>external/icu4c</code> should
260be made upstream at
Robert Ly35f2fda2013-01-29 16:27:05 -0800261<a href="http://site.icu-project.org/">icu-project.org/</a>.
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700262See <a href="http://site.icu-project.org/bugs">Submitting ICU Bugs and
263Feature Requests</a> for more.</p>
Robert Ly40e3b6d2013-04-17 18:12:10 -0700264
265<h2 id="llvmclangcompiler-rt">LLVM/Clang/Compiler-rt</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700266<p>All changes to LLVM-related projects (<code>external/clang</code>,
267<code>external/compiler-rt</code>,
Robert Ly40e3b6d2013-04-17 18:12:10 -0700268<code>external/llvm</code>) should be made upstream at
269<a href="http://llvm.org/">llvm.org/</a>.</p>
270
Clay Murphyc5355f82014-01-13 11:15:35 -0800271<h2 id="mksh">mksh</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700272<p>All changes to the MirBSD Korn Shell project at <code>external/mksh</code>
273should be made upstream
274either by sending an email to miros-mksh on the mirbsd.org domain (no
275subscription
276required to submit there) or (optionally) at <a
277href="https://launchpad.net/mksh">Launchpad</a>.
Robert Ly40e3b6d2013-04-17 18:12:10 -0700278</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800279<h2 id="openssl">OpenSSL</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700280<p>All changes to the OpenSSL project at <code>external/openssl</code>
281should be made upstream at
Robert Ly35f2fda2013-01-29 16:27:05 -0800282<a href="http://www.openssl.org">openssl.org</a>.</p>
283<h2 id="v8">V8</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700284<p>All changes to the V8 project at <code>external/v8</code> should be
285submitted upstream at
286<a href="https://code.google.com/p/v8">code.google.com/p/v8</a>. See <a
287href="https://code.google.com/p/v8/wiki/Contributing">Contributing to V8</a>
Robert Ly35f2fda2013-01-29 16:27:05 -0800288for details.</p>
289<h2 id="webkit">WebKit</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700290<p>All changes to the WebKit project at <code>external/webkit</code> should
291be made
292upstream at <a href="http://www.webkit.org">webkit.org</a>. The process
293begins by filing a WebKit bug.
294This bug should use <code>Android</code> for the <code>Platform</code>
295and <code>OS</code>
296fields only if the bug is specific to Android. Bugs are far more likely to
297receive the reviewers'
Robert Ly35f2fda2013-01-29 16:27:05 -0800298attention once a proposed fix is added and tests are included. See
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700299<a href="http://webkit.org/coding/contributing.html">Contributing Code to
300WebKit</a> for details.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800301<h2 id="zlib">zlib</h2>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700302<p>All changes to the zlib project at <code>external/zlib</code> should be
303made upstream at
Robert Ly35f2fda2013-01-29 16:27:05 -0800304<a href="http://zlib.net">zlib.net</a>.</p>
Mark Hecomovich27cc4e42016-07-21 15:08:53 -0700305