| .. include:: ../substitutions.rst |
| |
| Submitting a Patch Via Gerrit |
| ############################# |
| |
| |
| Follow this instructions to collaborate on the |project| project using |
| the infrastructure within Intel’s Open Source site, 01.org_. First, let |
| us answer a couple of common questions regarding the use of Gerrit |
| within |project|. |
| |
| #. Who has access to the Gerrit infrastructure? |
| |
| Intel, WindRiver and other partners who have agreed to collaborate |
| in this project. |
| |
| #. How long will this infrastructure be used? |
| |
| Until the project is transferred to the Linux Foundation. |
| |
| Make sure to subscribe to the `mailing list`_ by filling out the |
| `registration form`_. |
| |
| .. _registration form: https://lists.01.org/mailman/listinfo/foss-rtos-collab |
| |
| .. _mailing list: foss-rtos-collab@lists.01.org |
| |
| .. contents:: Table of Contents |
| :depth: 2 |
| |
| Configuring Gerrit Access |
| ************************* |
| |
| Gerrit access requires some basic user setup. The following process has |
| been defined as a simple walk-through to enable quick access to the |
| Gerrit services. |
| |
| Accessing Gerrit |
| ================ |
| |
| #. `Create`_ or `update`_ a 01.org_ account. |
| |
| #. Submit your your 01.org_ account and corporate email address to |
| |PM| `<mailto:hirally.santiago.rodriguez@intel.com>`_. |
| |
| #. Once access is granted, `access Gerrit`_. |
| |
| #. Log in using your 01.org account credentials. |
| |
| .. _Create: https://01.org/user/register |
| |
| .. _update: https://01.org/user/login |
| |
| .. _access Gerrit: https://oic-review.01.org/gerrit/ |
| |
| .. _01.org: https://01.org/ |
| |
| Configuring SSH to Use Gerrit |
| ============================= |
| |
| Gerrit uses SSH to interact with your GIT client. A SSH private key |
| needs to be generated on the development machine with a matching public |
| key on the Gerrit server. |
| |
| If you already have a SSH key-pair you would like to use, please skip |
| down to step. |
| |
| Please follow the steps below to get started. |
| |
| 1. Create a key-pair in your Linux machine, type: |
| |
| .. code-block:: bash |
| |
| $ ssh-keygen -t rsa -C "John Doe john.doe@example.com" |
| |
| .. note:: This will ask you for a password to protect the private key as it |
| generates a unique key. Please keep this password private, and DO |
| NOT enter a blank password. |
| |
| The generated key-pair is found at: |
| :file:`~/.ssh/id_rsa and ~/.ssh/id_rsa.pub`. |
| |
| 2. Add the the private key in the :file:`id_rsa` file in your key ring, |
| type: |
| |
| .. code-block:: bash |
| |
| $ ssh-add ~/.ssh/id_rsa |
| |
| 3. Add your the public key :file:`id_rsa.pub` to the Gerrit account: |
| |
| a. Go to `access Gerrit`_. |
| |
| b. Click on your account name in the upper right corner. |
| |
| c. From the pop-up menu, select :guilabel:`Settings`. |
| |
| d. On the left hand menu select, click on |
| :guilabel:`SSH Public Keys`. |
| |
| e. Click Add key and paste the contents of your public key |
| :file:`~/.id/id_rsa.pub`. |
| |
| .. note:: To obtain the contents of your public key |
| on a Linux machine type: |
| :command:`$ cat ~/.ssh/id_rsa.pub` |
| The output is the contents of :file:`~/.id/id_rsa.pub`. |
| Paste it into the Add SSH key window in Gerrit. |
| .. warning:: Potential Security Risk |
| Do not copy your private key :file:`~/.ssh/id_rsa` Use the public |
| :file:`~/.id/id_rsa.pub` instead. |
| |
| |
| Coding with Gerrit |
| ****************** |
| |
| Gerrit is a review system, and as such, assigns the following roles to |
| users: |
| |
| * Submitter: Submit changes for consideration, review other code |
| changes and make recommendations for acceptance or rejection voting |
| +1 or -1, respectively. |
| * Maintainers: Approve or reject changes based upon the feedback of |
| the reviewers voting +2 or -2, respectively. |
| * Builder: Used for the build automation infrastructure. |
| |
| A comprehensive walkthrough of Gerrit is beyond the scope of this |
| document. There are plenty of resources available on the Internet. A |
| good summaries can be found here: |
| `<https://wiki.iotivity.org/how_to_use_gerrit>`_ |
| `<https://gerrit-review.googlesource.com/Documentation/user-review-ui.html>`_ |
| |
| For more detailed information visit: |
| `<http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/intro-quick.html>`_ |
| |
| |
| Checking the Code Out |
| ===================== |
| |
| #. Ensure that SSH has been set up porperly. See |
| `Configuring SSH to Use Gerrit`_ for details. |
| |
| #. Clone the repository, type: |
| |
| :command:`$ git clone ssh://01ORGUSERNAME@oic-review.01.org:29418/forto-collab` |
| |
| #. You have checked out a local copy of the source code. Develop |
| freely, issuing as many commits and rebases as needed. |
| |
| |
| Submitting a Patch |
| ------------------ |
| |
| Currently, there is only one method to submit a patch for review: |
| |
| **Gerrit** |
| |
| Before you submit, please ensure each of your commits conform with the |
| coding and contribution guidelines of the project. Directions for |
| building the source code are out of the scope of this document. Please |
| refer to the :ref:`Install`. |
| |
| When a patch set is ready for submission, Gerrit requires that the |
| changes be pushed to a special branch. The name of this special branch |
| contains a reference to the final branch where the code should reside |
| once accepted. |
| |
| For |project|, the special branch is called refs/for/master . |
| |
| 1. Push the current local development branch to the gerrit server, type: |
| |
| .. code-block:: bash |
| |
| $ git push origin HEAD:refs/for/master |
| |
| If the command is executed correctly,the output should look similar to |
| this: |
| |
| .. code-block:: bash |
| |
| Counting objects: 4, done. Compressing objects: 100% (2/2), done. |
| Writing objects: 100% (3/3), 325 bytes | 0 bytes/s, done. Total 3 |
| (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1) |
| remote: Processing changes: new: 1, refs: 1, done remote: remote: |
| New Changes: remote: https://oic-review.01.org/gerrit/1045 This is |
| test #1 remote: To ssh://oic-review.01.org:29418/forto-collab |
| * [new branch] HEAD -> refs/for/master |
| |
| The gerrit server generates a |
| `link <https://oic-review.01.org/gerrit/1045>`_ where the change can be |
| tracked. |
| |
| 2. Add reviewers to your patch. |
| |
| a. To Define the list of reviewers via the command line at code |
| submission time. Add *%r=reviewer@project.org* to the command. For |
| example: |
| |
| .. code-block:: bash |
| |
| $ git push origin |
| HEAD:refs/for/master%r=rev1@email.com,rev2@notemail.com` |
| |
| |
| b. Autoconfigure GIT to add a set of reviewers if your commits will |
| have the same reviewers all at the time. |
| |
| i. In the cloned repo, open the :file:`.git/config` file. |
| |
| ii. Add the following line in the |
| :literal:`[ branch “master” ]` section: |
| |
| .. code-block:: bash |
| |
| [branch "master"] #.... push = |
| HEAD:refs/for/master%r=rev1@email.com,rev2@notemail.com` |
| |
| .. note:: |
| In the examples, actual email addresses should be used instead of the |
| :literal:`@email.com and @notemail.com` addressses. |
| |
| Reviewing Using Gerrit |
| ********************** |
| |
| An example of a gerrit patch review page: |
| |
| .. figure:: figures/gs_collaboration_gerrit01.png |
| :scale: 75 % |
| :alt: Gerrit Review Page |
| |
| An example of a Gerrit change review page. |
| |
| The fields highlighted in yellow are of interest and require a |
| little more explanation. |
| |
| * Add: This button allows the patch submitter to manually add names of |
| people who should review this changeset; type a name and the system |
| will auto-complete based on the list of people registered and with |
| access to the system. They will be notified by email that you are |
| requesting their input. |
| * Abandon: This button is only available to the submitter, allowing |
| the committer to abandon this changeset and get no more work done on |
| it. |
| * Change-ID: This is an ID generated by Gerrit (or system). This is |
| useful when the review process determines that your commit(s) have to |
| be redone. You can upload a new version and if the same Change-ID |
| header (and value) are present, Gerrit will remember it and present |
| it as another version of the same change. |
| |
| * Status: Currently, the patch is in review status, as indicated by |
| the “Needs Code-Review” in the upper left corner. The list of |
| Reviewers will all emit their opinion voting +1 if they agree to the |
| merge, -1 if they disagree. Gerrit users with a Maintainer role can |
| agree to the merge or refuse it by voting +2 or -2 respectively. |
| |
| |
| Notifications are sent to the email address in your commit message’s |
| Signed-off-by line. Visit |
| `your gerrit page <https://oic-review.01.org/gerrit/#/dashboard/self>`_, |
| to check the progress of your requests. |
| |
| Click on a request and the history tab shows you the feedback. |
| |
| .. figure:: figures/gs_collaboration_gerrit02.png |
| :scale: 75 % |
| :alt: Gerrit Feedback Page |
| |
| An example of how feedback is displayed on Gerrit. |
| |
| Viewing Pending Patches |
| ======================= |
| |
| 1. Find all the pending patches by clicking on the |
| :menuselection:`All --> Changes` link in the upper left corner or |
| directly at: |
| `<https://oic-review.01.org/gerrit/#/q/project:forto-collab>`_ |
| |
| If you collaborate in multiple projects, you may wish to limit the |
| branch through the search bar in the upper right side. |
| |
| Add the filter *project:forto-collab* to limit the visible patches only |
| to those of the forto-collab project. |
| |
| 2. List all current patches you submitted or those patches in need of |
| your input by clicking on :menuselection:`My --> Changes` or going to: |
| `<https://oic-review.01.org/gerrit/#/dashboard/self>`_ |
| |
| Reviewing a Patch |
| ----------------- |
| |
| 1. Click on a the link for incoming or outgoing review, such as |
| *“This is test #1”* shown in this figure: |
| |
| .. figure:: figures/gs_collaboration_gerrit03.png |
| :scale: 75 % |
| :alt: Incoming and Outgoing Reviews |
| |
| An example of incoming and outgoing items in review. |
| |
| 2. The details of the patch and its current status are loaded: |
| |
| |
| .. figure:: figures/gs_collaboration_gerrit04.png |
| :scale: 75 % |
| :alt: Detailed View of a Patch in Gerrit |
| |
| An example of the detailed view of a patch in Gerrit. |
| |
| The highlighted items require further explanation. |
| |
| From left to right: |
| |
| * **The state:** Displays the current status of the patch. In the |
| example the status reads: +l Needs Code-Review. |
| |
| * **Reply:** Click on this button after reviewing to add a final |
| review message and a score, -1, 0 or +1. |
| |
| * **Patch Sets:** If multiple revisions of a patch exist, this button |
| allows navigation between the revisions to see the changes. By |
| default, the most recent revision is presented. |
| |
| * **Download:** This button brings up another window with multiple |
| options to download or checkout the current changeset. The button on |
| the right copies the line to your clipboard. You can easily paste it |
| into your git interface to work with the patch as you prefer. |
| |
| 3. Underneath the commit information, a list shows the files that have |
| been changed by this patch: |
| |
| .. figure:: figures/gs_collaboration_gerrit05.png |
| :scale: 75 % |
| :alt: Changed Files Example |
| |
| Observe the list of the files changed by the patch at the bottom. |
| |
| 4. Click on a filename to start reviewing it. Select the code base to |
| differentiate against. The default is Base and it will generally be |
| what is needed. |
| |
| .. figure:: figures/gs_collaboration_gerrit06.png |
| :scale: 75 % |
| :alt: Code Base Location |
| |
| Shows where to change the comparison base version on the review page. |
| |
| 5. The review page presents the changes made to the file. At the top of |
| the review, the presentation shows some general navigation options. |
| Navigate through the patch set using the highlighted arrows on the top |
| right corner. It is possible to go to the previous or next file in the |
| set or to return to the main change screen. Click on the yellow sticky |
| pad to add comments to the whole file. |
| |
| .. figure:: figures/gs_collaboration_gerrit07.png |
| :scale: 75 % |
| :alt: Review Page Navigation Highlights |
| |
| Highlights the navigation options of the review page. |
| |
| |
| 6. The focus of the page is on the comparison window. The changes made |
| are presented in pink on the left versus the base version on the right. |
| Double click to highlight the text within the actual change to provide |
| feedback on a specific section of the code. Press *c* once the code is |
| highlighted to add comments to that section. |
| |
| .. figure:: figures/gs_collaboration_gerrit08.png |
| :scale: 75 % |
| :alt: Commenting on a Code Section |
| |
| Shows how to add a comment in the comparison window. |
| |
| 7. After adding the comment it is saved as a draft. |
| |
| .. figure:: figures/gs_collaboration_gerrit09.png |
| :scale: 75 % |
| :alt: Saved Comment as Draft |
| |
| Shows a comment saved as a draft. |
| |
| 8. Once you are done commenting all the files of the patch, click the |
| green up arrow at the top right to return to the main patch page. Click |
| the reply button, write some final comments and submit your score for |
| the patch set. Click post to submit the review of each reviewed file as |
| well as your final comment and score. Gerrit sends an email to the |
| patch submitter and all listed reviewers. Finally, it logs the review |
| for future reference. All individual comments are saved as Draft until |
| the post button is clicked. |
| |
| .. figure:: figures/gs_collaboration_gerrit10.png |
| :scale: 75 % |
| :alt: Submitting the Final Comment and Review |
| |
| Shows the dialog box for submitting the final comment and the review |
| score of a patch. |