| page.title=Submitting Patches |
| @jd:body |
| |
| <!-- |
| Copyright 2015 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <div id="qv-wrapper"> |
| |
| <div id="qv"> |
| <h2>In this document</h2> |
| <ol id="auto-toc"> |
| </ol> |
| </div> |
| </div> |
| <p>This page describes the full process of submitting a patch to the AOSP, |
| including |
| reviewing and tracking changes with <a |
| href="https://android-review.googlesource.com/">Gerrit</a>.</p> |
| <h2 id="prerequisites">Prerequisites</h2> |
| <ul> |
| <li> |
| <p>Before you follow the instructions on this page, you need to <a |
| href="{@docRoot}source/initializing.html"> |
| initialize your build environment</a>, <a |
| href="{@docRoot}source/downloading.html">download the source</a>, <a |
| href="https://android.googlesource.com/new-password">create a |
| password</a>, and follow the instructions on the password generator page.</p> |
| </li> |
| <li> |
| <p>For details about Repo and Git, see the <a |
| href="{@docRoot}source/developing.html">Developing</a> section.</p> |
| </li> |
| <li> |
| <p>For information about the different roles you can play within the Android |
| Open Source community, see <a href="{@docRoot}source/roles.html">Project |
| roles</a>.</p> |
| </li> |
| <li> |
| <p>If you plan to contribute code to the Android platform, be sure to read |
| the <a href="{@docRoot}source/licenses.html">AOSP's licensing |
| information</a>.</p> |
| </li> |
| <li> |
| <p>Note that changes to some of the upstream projects used by Android should be |
| made directly to that project, as described in <a |
| href="#upstream-projects">Upstream Projects</a>.</p> |
| </li> |
| </ul> |
| <h1 id="for-contributors">For contributors</h1> |
| <h2 id="authenticate-with-the-server">Authenticate with the server</h2> |
| <p>Before you can upload to Gerrit, you need to <a |
| href="https://android.googlesource.com/new-password">establish a password</a> |
| that will identify you with the server. Follow the instructions on the password |
| generator page. You need to do this only once. See <a |
| href="{@docRoot}source/downloading.html#using-authentication">Using |
| Authentication</a> for additional details.</p> |
| <h2 id="start-a-repo-branch">Start a repo branch</h2> |
| <p>For each change you intend to make, start a new branch within the relevant |
| git repository:</p> |
| <pre><code>$ repo start NAME . |
| </code></pre> |
| <p>You can start several independent branches at the same time in the same |
| repository. The branch NAME is local to your workspace and will not be included |
| on gerrit or the final source tree.</p> |
| <h2 id="make-your-change">Make your change</h2> |
| <p>Once you have modified the source files (and validated them, please) commit |
| the changes to your local repository:</p> |
| <pre><code>$ git add -A |
| $ git commit -s |
| </code></pre> |
| <p>Provide a detailed description of the change in your commit message. This |
| description will be pushed to the public AOSP repository, so please follow our |
| guidelines for writing changelist descriptions: </p> |
| <ul> |
| |
| <li> |
| <p>Start with a one-line summary (50 characters maximum), followed by a |
| blank line. |
| This format is used by git and gerrit for various displays.</p> |
| </li> |
| |
| <li> |
| <p>Starting on the third line, enter a longer description, which must |
| hard-wrap at 72 characters maximum. This description should focus on what |
| issue the change solves, and how it solves it. The second part is somewhat |
| optional when implementing new features, though desirable.</p> |
| </li> |
| <li> |
| <p>Include a brief note of any assumptions or background information that |
| may be important when another contributor works on this feature next year.</p> |
| </li> |
| </ul> |
| |
| <p>Here is an example commit message:</p> |
| <pre><code>short description on first line |
| |
| more detailed description of your patch, |
| which is likely to take up multiple lines. |
| </code></pre> |
| |
| <p>A unique change ID and your name and email as provided during <code>repo |
| init</code> will be automatically added to your commit message. </p> |
| <h2 id="upload-to-gerrit">Upload to gerrit</h2> |
| <p>Once you have committed your change to your personal history, upload it |
| to gerrit with</p> |
| <pre><code>$ repo upload |
| </code></pre> |
| <p>If you have started multiple branches in the same repository, you will |
| be prompted to select which one(s) to upload.</p> |
| <p>After a successful upload, repo will provide you the URL of a new page on |
| <a href="https://android-review.googlesource.com/">Gerrit</a>. Visit this |
| link to view |
| your patch on the review server, add comments, or request specific reviewers |
| for your patch.</p> |
| <h2 id="uploading-a-replacement-patch">Uploading a replacement patch</h2> |
| <p>Suppose a reviewer has looked at your patch and requested a small |
| modification. You can amend your commit within git, which will result in a |
| new patch on gerrit with the same change ID as the original.</p> |
| <p><em>Note that if you have made other commits since uploading this patch, |
| you will need to manually move your git HEAD.</em></p> |
| <pre><code>$ git add -A |
| $ git commit --amend |
| </code></pre> |
| <p>When you upload the amended patch, it will replace the original on gerrit |
| and in your local git history.</p> |
| <h2 id="resolving-sync-conflicts">Resolving sync conflicts</h2> |
| <p>If other patches are submitted to the source tree that conflict with |
| yours, you will need to rebase your patch on top of the new HEAD of the |
| source repository. The easy way to do this is to run</p> |
| <pre><code>$ repo sync |
| </code></pre> |
| <p>This command first fetches the updates from the source server, then |
| attempts to automatically rebase your HEAD onto the new remote HEAD.</p> |
| <p>If the automatic rebase is unsuccessful, you will have to perform a |
| manual rebase.</p> |
| <pre><code>$ repo rebase |
| </code></pre> |
| <p>Using <code>git mergetool</code> may help you deal with the rebase |
| conflict. Once you have successfully merged the conflicting files,</p> |
| <pre><code>$ git rebase --continue |
| </code></pre> |
| <p>After either automatic or manual rebase is complete, run <code>repo |
| upload</code> to submit your rebased patch.</p> |
| <h2 id="after-a-submission-is-approved">After a submission is approved</h2> |
| <p>After a submission makes it through the review and verification process, |
| Gerrit automatically merges the change into the public repository. Other |
| users will be able to run <code>repo sync</code> to pull the update into |
| their local client.</p> |
| <h1 id="for-reviewers-and-verifiers">For reviewers and verifiers</h1> |
| <h2 id="reviewing-a-change">Reviewing a change</h2> |
| <p>If you are assigned to be the Approver for a change, you need to determine |
| the following:</p> |
| <ul> |
| <li> |
| <p>Does this change fit within this project's stated purpose?</p> |
| </li> |
| <li> |
| <p>Is this change valid within the project's existing architecture?</p> |
| </li> |
| <li> |
| <p>Does this change introduce design flaws that will cause problems in |
| the future?</p> |
| </li> |
| <li> |
| <p>Does this change follow the best practices that have been established |
| for this project?</p> |
| </li> |
| <li> |
| <p>Is this change a good way to perform the described function?</p> |
| </li> |
| <li> |
| <p>Does this change introduce any security or instability risks?</p> |
| </li> |
| </ul> |
| <p>If you approve of the change, mark it with LGTM ("Looks Good to Me") |
| within Gerrit.</p> |
| <h2 id="verifying-a-change">Verifying a change</h2> |
| <p>If you are assigned to be the Verifier for a change, you need to do the |
| following:</p> |
| <ul> |
| <li> |
| <p>Patch the change into your local client using one of the Download |
| commands.</p> |
| </li> |
| <li> |
| <p>Build and test the change.</p> |
| </li> |
| <li> |
| <p>Within Gerrit use Publish Comments to mark the commit as "Verified" or |
| "Fails," and add a message explaining what problems were identified.</p> |
| </li> |
| </ul> |
| <h2 id="downloading-changes-from-gerrit">Downloading changes from Gerrit</h2> |
| <p>A submission that has been verified and merged will be downloaded with |
| the next <code>repo sync</code>. If you wish to download a specific change |
| that has not yet been approved, run</p> |
| <pre><code>$ repo download TARGET CHANGE |
| </code></pre> |
| <p>where TARGET is the local directory into which the change should be |
| downloaded and CHANGE is the |
| change number as listed in <a |
| href="https://android-review.googlesource.com/">Gerrit</a>. For more |
| information, |
| see the <a href="{@docRoot}source/using-repo.html">Repo reference</a>.</p> |
| <h2 id="how-do-i-become-a-verifier-or-approver">How do I become a Verifier |
| or Approver?</h2> |
| <p>In short, contribute high-quality code to one or more of the Android |
| projects. |
| For details about the different roles in the Android Open Source community and |
| who plays them, see <a href="{@docRoot}source/roles.html">Project |
| Roles</a>.</p> |
| <h2 id="diffs-and-comments">Diffs and comments</h2> |
| <p>To open the details of the change within Gerrit, click on the "Id number" |
| or "Subject" of a change. To compare the established code with the updated |
| code, click the file name under "Side-by-side diffs."</p> |
| <h2 id="adding-comments">Adding comments</h2> |
| <p>Anyone in the community can use Gerrit to add inline comments to code |
| submissions. A good comment will be relevant to the line or section of code |
| to which it is attached in Gerrit. It might be a short and constructive |
| suggestion about how a line of code could be improved, or it might be an |
| explanation from the author about why the code makes sense the way it is.</p> |
| <p>To add an inline comment, double-click the relevant line of the code |
| and write your comment in the text box that opens. When you click Save, |
| only you can see your comment.</p> |
| <p>To publish your comments so that others using Gerrit will be able to see |
| them, click the Publish Comments button. Your comments will be emailed to |
| all relevant parties for this change, including the change owner, the patch |
| set uploader (if different from the owner), and all current reviewers.</p> |
| <p><a name="upstream-projects"></a></p> |
| <h1 id="upstream-projects">Upstream Projects</h1> |
| <p>Android makes use of a number of other open source projects, such as the |
| Linux kernel and WebKit, as described in |
| <a href="{@docRoot}source/code-lines.html">Codelines, Branches, and |
| Releases</a>. For most projects under <code>external/</code>, changes should |
| be made upstream and then the Android maintainers informed of the new upstream |
| release containing these changes. It may also be useful to upload patches |
| that move us to track a new upstream release, though these can be difficult |
| changes to make if the project is widely used within Android like most of the |
| larger ones mentioned below, where we tend to upgrade with every release.</p> |
| <p>One interesting special case is bionic. Much of the code there is from BSD, |
| so unless the change is to code that's new to bionic, we'd much rather see an |
| upstream fix and then pull a whole new file from the appropriate BSD. (Sadly |
| we have quite a mix of different BSDs at the moment, but we hope to address |
| that in future, and get into a position where we track upstream much more |
| closely.)</p> |
| <h2 id="icu4c">ICU4C</h2> |
| <p>All changes to the ICU4C project at <code>external/icu4c</code> should |
| be made upstream at |
| <a href="http://site.icu-project.org/">icu-project.org/</a>. |
| See <a href="http://site.icu-project.org/bugs">Submitting ICU Bugs and |
| Feature Requests</a> for more.</p> |
| |
| <h2 id="llvmclangcompiler-rt">LLVM/Clang/Compiler-rt</h2> |
| <p>All changes to LLVM-related projects (<code>external/clang</code>, |
| <code>external/compiler-rt</code>, |
| <code>external/llvm</code>) should be made upstream at |
| <a href="http://llvm.org/">llvm.org/</a>.</p> |
| |
| <h2 id="mksh">mksh</h2> |
| <p>All changes to the MirBSD Korn Shell project at <code>external/mksh</code> |
| should be made upstream |
| either by sending an email to miros-mksh on the mirbsd.org domain (no |
| subscription |
| required to submit there) or (optionally) at <a |
| href="https://launchpad.net/mksh">Launchpad</a>. |
| </p> |
| <h2 id="openssl">OpenSSL</h2> |
| <p>All changes to the OpenSSL project at <code>external/openssl</code> |
| should be made upstream at |
| <a href="http://www.openssl.org">openssl.org</a>.</p> |
| <h2 id="v8">V8</h2> |
| <p>All changes to the V8 project at <code>external/v8</code> should be |
| submitted upstream at |
| <a href="https://code.google.com/p/v8">code.google.com/p/v8</a>. See <a |
| href="https://code.google.com/p/v8/wiki/Contributing">Contributing to V8</a> |
| for details.</p> |
| <h2 id="webkit">WebKit</h2> |
| <p>All changes to the WebKit project at <code>external/webkit</code> should |
| be made |
| upstream at <a href="http://www.webkit.org">webkit.org</a>. The process |
| begins by filing a WebKit bug. |
| This bug should use <code>Android</code> for the <code>Platform</code> |
| and <code>OS</code> |
| fields only if the bug is specific to Android. Bugs are far more likely to |
| receive the reviewers' |
| attention once a proposed fix is added and tests are included. See |
| <a href="http://webkit.org/coding/contributing.html">Contributing Code to |
| WebKit</a> for details.</p> |
| <h2 id="zlib">zlib</h2> |
| <p>All changes to the zlib project at <code>external/zlib</code> should be |
| made upstream at |
| <a href="http://zlib.net">zlib.net</a>.</p> |
| |