blob: b2608d11812b49d71039d4e5afae1f35ce0035ed [file] [log] [blame]
John DeNisco06dcd452018-07-26 12:45:10 -04001.. _gitreview:
2
andrewbcddab22018-08-06 17:40:31 -04003*******************************
John DeNisco758dc462018-08-13 17:00:06 -04004Getting a Patch Reviewed
andrewbcddab22018-08-06 17:40:31 -04005*******************************
John DeNisco06dcd452018-07-26 12:45:10 -04006
John DeNisco758dc462018-08-13 17:00:06 -04007This section describes how to get FD.io VPP sources reviewed and merged.
John DeNisco06dcd452018-07-26 12:45:10 -04008
andrewbcddab22018-08-06 17:40:31 -04009Setup
10========
John DeNisco06dcd452018-07-26 12:45:10 -040011
andrewbcddab22018-08-06 17:40:31 -040012If you don't have a Linux Foundation ID, `create one here. <https://identity.linuxfoundation.org/>`_
John DeNisco06dcd452018-07-26 12:45:10 -040013
andrewbcddab22018-08-06 17:40:31 -040014With your Linux Foundation ID credentials sign into `Gerrit Code Review at gerrit.fd.io <https://gerrit.fd.io/r/login/%23%2Fq%2Fstatus%3Aopen>`_
John DeNisco06dcd452018-07-26 12:45:10 -040015
andrewbcddab22018-08-06 17:40:31 -040016`Install git-review, <https://www.mediawiki.org/wiki/Gerrit/git-review>`_ which is a "command-line tool for Git / Gerrit to submit a change or to fetch an existing one."
John DeNisco06dcd452018-07-26 12:45:10 -040017
andrewbcddab22018-08-06 17:40:31 -040018If you're on Ubuntu, install keychain:
19
20.. code-block:: console
21
22 $ sudo apt-get install keychain
23
24ssh keys
25-------------
26
27To get FD.io VPP documents reviewed the VPP repository should be cloned with ssh. You should be logged into Gerrit Code Review as noted above.
28
29Create your public and private ssh key with:
John DeNisco06dcd452018-07-26 12:45:10 -040030
31.. code-block:: console
32
33 $ ssh-keygen -t rsa
34 $ keychain
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +020035 $ cat ~/.ssh/id_rsa.pub
John DeNisco06dcd452018-07-26 12:45:10 -040036
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +020037Copy **all** the contents of the public key (id_rsa.pub) output by the above **cat** command. Then go to your `SSH Public keys settings page <https://gerrit.fd.io/r/#/settings/ssh-keys>`_, click **Add Key ...**, paste your public key, and finally click **Add**.
andrewbcddab22018-08-06 17:40:31 -040038
39.. _clone-ssh:
40
41Clone with ssh
42==============
43
44Clone the repo with:
John DeNisco06dcd452018-07-26 12:45:10 -040045
46.. code-block:: console
47
48 $ git clone ssh://gerrit.fd.io:29418/vpp
49 $ cd vpp
50
andrewbcddab22018-08-06 17:40:31 -040051This will only work if the name of the user on your system matches your Gerrit username.
John DeNisco06dcd452018-07-26 12:45:10 -040052
andrewbcddab22018-08-06 17:40:31 -040053Otherwise, clone with:
54
55.. code-block:: console
56
John DeNisco2ba9dcf2018-08-23 14:04:22 -040057 $ git clone ssh://<YOUR_GERRIT_USERNAME>@gerrit.fd.io:29418/vpp
andrewbcddab22018-08-06 17:40:31 -040058 $ cd vpp
59
John DeNiscoce96dda2018-08-14 16:04:09 -040060When attempting to clone the repo Git will prompt you asking if you want to add the Server Host Key to the list of known hosts. Enter **yes** and press the **Enter** key.
andrewbcddab22018-08-06 17:40:31 -040061
62Git Review
63===========
64
John DeNiscoce96dda2018-08-14 16:04:09 -040065The VPP documents use the gerrit server, and git review for submitting and fetching patches.
andrewbcddab22018-08-06 17:40:31 -040066
67
68New patch
69-----------------
70
John DeNiscoce96dda2018-08-14 16:04:09 -040071When working with a new patch, use the following commands to get your patch reviewed.
andrewbcddab22018-08-06 17:40:31 -040072
John DeNiscoce96dda2018-08-14 16:04:09 -040073Make sure you have modified the correct files by issuing the following commands:
John DeNisco06dcd452018-07-26 12:45:10 -040074
75.. code-block:: console
76
John DeNisco2d1a0432018-07-26 16:21:31 -040077 $ git status
andrewbcddab22018-08-06 17:40:31 -040078 $ git diff
79
John DeNisco758dc462018-08-13 17:00:06 -040080Then add and commit the patch. You may want to add a tag to the commit comments.
John DeNisco2ba9dcf2018-08-23 14:04:22 -040081For example for a document with only patches you should add the tag **docs:**.
andrewbcddab22018-08-06 17:40:31 -040082
83.. code-block:: console
84
John DeNisco2d1a0432018-07-26 16:21:31 -040085 $ git add <filename>
John DeNisco742000a2020-07-06 12:27:58 -040086 $ git commit -s
87
88The commit comment should have something like the following comment:
89
90.. code-block:: console
91
92 docs: A brief description of the commit
93
94 Type: Improvement (The type of commit this could be: Improvement, Fix or Feature)
95
96 A detailed description of the commit could go here.
97
98Push the patch for review.
99
100.. code-block:: console
101
John DeNisco2d1a0432018-07-26 16:21:31 -0400102 $ git review
John DeNisco06dcd452018-07-26 12:45:10 -0400103
andrewbcddab22018-08-06 17:40:31 -0400104If you are creating a draft, meaning you do not want your changes reviewed yet, do the following:
John DeNisco06dcd452018-07-26 12:45:10 -0400105
andrewbcddab22018-08-06 17:40:31 -0400106.. code-block:: console
John DeNisco06dcd452018-07-26 12:45:10 -0400107
John DeNisco2d1a0432018-07-26 16:21:31 -0400108 $ git review -D
John DeNisco06dcd452018-07-26 12:45:10 -0400109
andrewbcddab22018-08-06 17:40:31 -0400110After submitting a review, reset where the HEAD is pointing to with:
John DeNisco06dcd452018-07-26 12:45:10 -0400111
andrewbcddab22018-08-06 17:40:31 -0400112.. code-block:: console
113
114 $ git reset --hard origin/master
115
116Existing patch
117-----------------------
118
119The "change number" used below is in the URL of the review.
120
John DeNisco758dc462018-08-13 17:00:06 -0400121After clicking an individual review, the change number can be found in the URL at "https://gerrit.fd.io/r/#/c/<*CHANGE_NUMBER*>/"
andrewbcddab22018-08-06 17:40:31 -0400122
123To view an existing patch:
124
125.. code-block:: console
126
127 $ git review -d <change number>
128 $ git status
129 $ git diff
130
131.. caution::
132
133 If you have made changes and do "git review -d <change number>", your current
134 changes will try to be stashed so that the working tree can change to the review branch
135 you specified. If you want to make sure you don't lose your changes, clone another Gerrit
136 repo into a new directory using the cloning steps shown in :ref:`clone-ssh`, and perform
137 "git review -d <change number>" in this new directory.
138
139To modify an existing patch, make sure you modified the correct files, and apply the patch with:
140
141.. code-block:: console
142
143 $ git review -d <change number>
144 $ git status
145 $ git diff
146
147 $ git add <filename>
148 $ git commit --amend
149 $ git review
150
John DeNisco2ba9dcf2018-08-23 14:04:22 -0400151When you're done viewing or modifying a branch, get back to the master branch by entering:
John DeNisco06dcd452018-07-26 12:45:10 -0400152
153.. code-block:: console
154
John DeNisco2d1a0432018-07-26 16:21:31 -0400155 $ git reset --hard origin/master
156 $ git checkout master
John DeNisco758dc462018-08-13 17:00:06 -0400157
Dave Barach8a692892018-10-24 09:23:23 -0400158Patch Conflict Resolution
159-------------------------
John DeNisco758dc462018-08-13 17:00:06 -0400160
Dave Barach8a692892018-10-24 09:23:23 -0400161Two different patch conflict scenarios arise from time to
162time. Sometime after uploading a patch to https://gerrit.fd.io, the
163gerrit UI may show a patch status of "Merge Conflict."
164
165Or, you may attempt to upload a new patch-set via "git review," only to
166discover that the gerrit server won't allow the upload due to an upstream
167merge conflict.
168
169In both cases, it's [usually] fairly simple to fix the problem. You
170need to rebase the patch onto master/latest. Details vary from case to
171case.
172
173Here's how to rebase a patch previously uploaded to the Gerrit server
174which now has a merge conflict. In a fresh workspace cloned from
175master/latest, do the following:
John DeNisco758dc462018-08-13 17:00:06 -0400176
177.. code-block:: console
178
John DeNisco2ba9dcf2018-08-23 14:04:22 -0400179 $ git-review -d <*Gerrit change #*>
John DeNisco758dc462018-08-13 17:00:06 -0400180 $ git rebase origin/master
181 while (conflicts)
182 <fix conflicts>
183 $ git rebase --continue
184 $ git review
185
Dave Barach8a692892018-10-24 09:23:23 -0400186In the upload-failure case, use caution: carefully **save your work**
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +0200187before you do anything else!
John DeNisco758dc462018-08-13 17:00:06 -0400188
Dave Barach8a692892018-10-24 09:23:23 -0400189Rebase your patch and try again. Please **do not** re-download ["git
190review -d"] the patch from the gerrit server...:
191
192.. code-block:: console
193
194 $ git rebase origin/master
195 while (conflicts)
196 <fix conflicts>
197 $ git rebase --continue
198 $ git review
John DeNisco758dc462018-08-13 17:00:06 -0400199