Signed-off-by: Martin Roth <gaumless@gmail.com> Change-Id: I4f0a07b4ab729aafdb4a1149a7617cd34392cf12 Reviewed-on: https://review.coreboot.org/c/coreboot/+/64967 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Elyes Haouas <ehaouas@noos.fr>
		
			
				
	
	
		
			318 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			318 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Tutorial, part 2: Submitting a patch to coreboot.org
 | 
						|
 | 
						|
## Step 1: Set up an account at coreboot.org
 | 
						|
 | 
						|
If you already have an account, skip to Step 2.
 | 
						|
 | 
						|
Otherwise, go to <https://review.coreboot.org> in your preferred web
 | 
						|
browser.  Select **Sign in** in the upper right corner.
 | 
						|
 | 
						|
Select the appropriate sign-in. For example, if you have a Google
 | 
						|
account, select **Google OAuth2** (gerrit-oauth-provider plugin).
 | 
						|
**Note:** Your username for the account will be the username of the
 | 
						|
account you used to sign-in with. (ex. your Google username).
 | 
						|
 | 
						|
## Step 2a: Set up SSH keys
 | 
						|
 | 
						|
If you prefer to use an HTTP password instead, skip to Step 2b.
 | 
						|
 | 
						|
If you do not have an SSH key set up on your account already (as is the
 | 
						|
case with a newly created account), follow the instructions below;
 | 
						|
otherwise, doing so could overwrite an existing key.
 | 
						|
 | 
						|
In a terminal, run `ssh-keygen -t ed25519` and confirm the default path
 | 
						|
`.ssh/id_ed25519`.
 | 
						|
 | 
						|
Make a passphrase -- remember this phrase. It will be needed whenever
 | 
						|
you use this public key. **Note:** You might want to use a short
 | 
						|
password, or forego the password altogether as you will be using it very
 | 
						|
often.
 | 
						|
 | 
						|
Copy the content of `.ssh/id_ed25519.pub` (notice the ".pub" suffix
 | 
						|
as you need to send the public key) into the textbox "New SSH Key" at
 | 
						|
https://review.coreboot.org/settings/#SSHKeys and save it.
 | 
						|
 | 
						|
## Step 2b: Set up an HTTP Password
 | 
						|
 | 
						|
Alternatively, instead of using SSH keys, you can use an HTTP password.
 | 
						|
To do so, after you select your name and click on **Settings** on the
 | 
						|
left-hand side, rather than selecting **SSH Public Keys**, select **HTTP
 | 
						|
Password**.
 | 
						|
 | 
						|
Click **Generate Password**. This should fill the "Password" box with a
 | 
						|
password. Copy the password, and add the following to your
 | 
						|
`$HOME/.netrc` file:
 | 
						|
 | 
						|
	machine review.coreboot.org login YourUserNameHere password YourPasswordHere
 | 
						|
 | 
						|
where YourUserNameHere is your username, and YourPasswordHere is the
 | 
						|
password you just generated.
 | 
						|
 | 
						|
If your system is behind a snooping HTTPS proxy, you might also have to
 | 
						|
make its SSL certificate known to curl, a system specific operation.
 | 
						|
If that's not possible for some reason, you can also disable SSL
 | 
						|
certificate verification in git:
 | 
						|
 | 
						|
	git config [--global] http.sslVerify [true|false]
 | 
						|
 | 
						|
The `--global` argument sets it for all git transfers of your local
 | 
						|
user, `false` means not to validate the certificate.
 | 
						|
 | 
						|
If that still doesn't allow you to pull or push changes to the server,
 | 
						|
the proxy is likely tampering with the data stream, in which case
 | 
						|
there's nothing we can do.
 | 
						|
 | 
						|
## Step 3: Clone coreboot and configure it for submitting patches
 | 
						|
 | 
						|
On Gerrit, click on the **Browse** tab in the upper left corner and
 | 
						|
select **Repositories**. From the listing, select the "coreboot" repo.
 | 
						|
You may have to click the next page arrow at the bottom a few times to
 | 
						|
find it.
 | 
						|
 | 
						|
If you are using SSH keys, select **ssh** from the tabs under "Project
 | 
						|
coreboot" and run the "clone with commit-msg hook" command that's
 | 
						|
provided.  This should prompt you for your id_rsa passphrase, if you
 | 
						|
previously set one.
 | 
						|
 | 
						|
**Note:** if the **ssh** option is not showing, check that you have a
 | 
						|
username set. Click the profile picture at the top right and select
 | 
						|
**User Settings**, then set your username in the **Profile** section.
 | 
						|
 | 
						|
If you are using HTTP, instead, select **http** from the tabs under
 | 
						|
"Project coreboot" and run the command that appears.
 | 
						|
 | 
						|
Now is a good time to configure your global git identity, if you haven't
 | 
						|
already.
 | 
						|
 | 
						|
	git config --global user.name "Your Name"
 | 
						|
	git config --global user.email "Your Email"
 | 
						|
 | 
						|
Finally, enter the local git repository and set up repository specific
 | 
						|
hooks and other configurations.
 | 
						|
 | 
						|
	cd coreboot
 | 
						|
	make gitconfig
 | 
						|
 | 
						|
## Step 4: Submit a commit
 | 
						|
 | 
						|
An easy first commit to make is fixing existing checkpatch errors and
 | 
						|
warnings in the source files. To see errors that are already present,
 | 
						|
build the files in the repository by running `make lint` in the coreboot
 | 
						|
directory. Alternatively, if you want to run `make lint` on a specific
 | 
						|
directory, run:
 | 
						|
 | 
						|
	util/lint/lint-007-checkpatch <filepath>
 | 
						|
 | 
						|
where `filepath` is the filepath of the directory (ex.
 | 
						|
`src/cpu/amd/car`).
 | 
						|
 | 
						|
Any changes made to files under the src directory are made locally,
 | 
						|
and can be submitted for review.
 | 
						|
 | 
						|
Once you finish making your desired changes, use the command line to
 | 
						|
stage and submit your changes. An alternative and potentially easier way
 | 
						|
to stage and submit commits is to use git cola, a graphical user
 | 
						|
interface for git. For instructions on how to do so, skip to Step 4b.
 | 
						|
 | 
						|
## Step 4a: Use the command line to stage and submit a commit
 | 
						|
 | 
						|
To use the command line to stage a commit, run
 | 
						|
 | 
						|
	git add <filename>
 | 
						|
 | 
						|
where `filename` is the name of your file.
 | 
						|
 | 
						|
To commit the change, run
 | 
						|
 | 
						|
	git commit -s
 | 
						|
 | 
						|
**Note:** The -s adds a signed-off-by line by the committer. Your commit
 | 
						|
should be signed off with your name and email (i.e. **Your Name**
 | 
						|
**\<Your Email\>**, based on what you set with git config earlier).
 | 
						|
 | 
						|
Running git commit first checks for any errors and warnings using lint.
 | 
						|
If there are any, you must go back and fix them before submitting your
 | 
						|
commit.  You can do so by making the necessary changes, and then staging
 | 
						|
your commit again.
 | 
						|
 | 
						|
When there are no errors or warnings, your default text editor will
 | 
						|
open.  This is where you will write your commit message.
 | 
						|
 | 
						|
The first line of your commit message is your commit summary. This is a
 | 
						|
brief one-line description of what you changed in the files using the
 | 
						|
template below:
 | 
						|
 | 
						|
    <filepath>: Short description
 | 
						|
 | 
						|
For example,
 | 
						|
 | 
						|
    cpu/amd/pi/00630F01: Fix checkpatch warnings and errors
 | 
						|
 | 
						|
**Note:** It is good practice to use present tense in your descriptions
 | 
						|
and do not punctuate your summary.
 | 
						|
 | 
						|
Then hit Enter. The next paragraph should be a more in-depth explanation
 | 
						|
of the changes you've made to the files. Again, it is good practice to
 | 
						|
use present tense. Ex.
 | 
						|
 | 
						|
    Fix space prohibited between function name and open parenthesis,
 | 
						|
    line over 80 characters, unnecessary braces for single statement
 | 
						|
    blocks, space required before open brace errors and warnings.
 | 
						|
 | 
						|
When you have finished writing your commit message, save and exit the
 | 
						|
text editor. You have finished committing your change. If, after
 | 
						|
submitting your commit, you wish to make changes to it, running `git
 | 
						|
commit --amend` allows you to take back your commit and amend it.
 | 
						|
 | 
						|
When you are done with your commit, run `git push` to push your commit
 | 
						|
to coreboot.org. **Note:** To submit as a private patch, use `git push
 | 
						|
origin HEAD:refs/for/master%private`. Submitting as a private patch
 | 
						|
means that your commit will be on review.coreboot.org, but is only
 | 
						|
visible to yourself and those you add as reviewers. This mode isn't
 | 
						|
perfect: Somebody who knows the commit ID can still fetch the change and
 | 
						|
everything it refers (e.g.  parent commits).
 | 
						|
 | 
						|
This has been a quick primer on how to submit a change to Gerrit for
 | 
						|
review using git. You may wish to review the [Gerrit code review
 | 
						|
workflow
 | 
						|
documentation](https://gerrit-review.googlesource.com/Documentation/intro-user.html#code-review),
 | 
						|
especially if you plan to work on multiple changes at the same time.
 | 
						|
 | 
						|
## Step 4b: Use git cola to stage and submit a commit
 | 
						|
 | 
						|
If git cola is not installed on your machine, see
 | 
						|
<https://git-cola.github.io/downloads.html> for download instructions.
 | 
						|
 | 
						|
After making some edits to src files, rather than run `git add`, run
 | 
						|
`git cola` from the command line. You should see all of the files
 | 
						|
edited under "Modified".
 | 
						|
 | 
						|
In the textbox labeled "Commit summary" provide a brief one-line
 | 
						|
description of what you changed in the files according to the template
 | 
						|
below:
 | 
						|
 | 
						|
    <filepath>: Short description
 | 
						|
 | 
						|
For example,
 | 
						|
 | 
						|
    cpu/amd/pi/00630F01: Fix checkpatch warnings and errors
 | 
						|
 | 
						|
**Note:** It is good practice to use present tense in your descriptions
 | 
						|
and do not punctuate your short description.
 | 
						|
 | 
						|
In the larger text box labeled 'Extended description...' provide a more
 | 
						|
in-depth explanation of the changes you've made to the files. Again, it
 | 
						|
is good practice to use present tense. Ex.
 | 
						|
 | 
						|
    Fix space prohibited between function name and open parenthesis,
 | 
						|
    line over 80 characters, unnecessary braces for single statement
 | 
						|
    blocks, space required before open brace errors and warnings.
 | 
						|
 | 
						|
Then press Enter two times to move the cursor to below your description.
 | 
						|
To the left of the text boxes, there is an icon with an downward arrow.
 | 
						|
Press the arrow and select "Sign Off." Make sure that you are signing
 | 
						|
off with your name and email (i.e. **Your Name** **\<Your Email\>**,
 | 
						|
based on what you set with git config earlier).
 | 
						|
 | 
						|
Now, review each of your changes and mark either individual changes or
 | 
						|
an entire file as Ready to Commit by marking it as 'Staged'. To do
 | 
						|
this, select one file from the 'Modified' list. If you only want to
 | 
						|
submit particular changes from each file, then highlight the red and
 | 
						|
green lines for your changes, right click and select 'Stage Selected
 | 
						|
Lines'. Alternatively, if an entire file is ready to be committed, just
 | 
						|
double click on the file under 'Modified' and it will be marked as
 | 
						|
Staged.
 | 
						|
 | 
						|
Once the descriptions are done and all the edits you would like to
 | 
						|
commit have been staged, press 'Commit' on the right of the text
 | 
						|
boxes.
 | 
						|
 | 
						|
If the commit fails due to persisting errors, a text box will appear
 | 
						|
showing the errors. You can correct these errors within 'git cola' by
 | 
						|
right-clicking on the file in which the error occurred and selecting
 | 
						|
'Launch Diff Tool'. Make necessary corrections, close the Diff Tool and
 | 
						|
'Stage' the corrected file again. It might be necessary to refresh
 | 
						|
'git cola' in order for the file to be shown under 'Modified' again.
 | 
						|
Note: Be sure to add any other changes that haven't already been
 | 
						|
explained in the extended description.
 | 
						|
 | 
						|
When ready, select 'Commit' again. Once all errors have been satisfied
 | 
						|
and the commit succeeds, move to the command line and run `git push`.
 | 
						|
 | 
						|
## Step 5: Let others review your commit
 | 
						|
 | 
						|
Your commits can now be seen on review.coreboot.org if you select "Your"
 | 
						|
and click on "Changes" and can be reviewed by others. Your code will
 | 
						|
first be reviewed by build bot (Jenkins), which will either give you a
 | 
						|
warning or verify a successful build; if so, your commit will receive a
 | 
						|
+1. Other users may also give your commit +1. For a commit to be merged,
 | 
						|
it needs to receive a +2. **Note:** A +1 and a +1 does not make a +2.
 | 
						|
Only certain users can give a +2.
 | 
						|
 | 
						|
## Step 6 (optional): bash-git-prompt
 | 
						|
 | 
						|
To help make it easier to understand the state of the git repository
 | 
						|
without running `git status` or `git log`, there is a way to make the
 | 
						|
command line show the status of the repository at every point. This
 | 
						|
is through bash-git-prompt.
 | 
						|
 | 
						|
Instructions for installing this are found at:
 | 
						|
<https://github.com/magicmonty/bash-git-prompt>.
 | 
						|
**Note:** Feel free to search for different versions of git prompt,
 | 
						|
as this one is specific to bash.
 | 
						|
 | 
						|
Alternatively, follow the instructions below:
 | 
						|
Run the following two commands in the command line:
 | 
						|
 | 
						|
```Bash
 | 
						|
cd
 | 
						|
git clone https://github.com/magicmonty/bash-git-prompt.git \
 | 
						|
    .bash-git-prompt --depth=1
 | 
						|
```
 | 
						|
**Note:** cd will change your directory to your home directory, so the
 | 
						|
git clone command will be run there.
 | 
						|
 | 
						|
Finally, open the `~/.bashrc` file and append the following two lines:
 | 
						|
 | 
						|
    GIT_PROMPT_ONLY_IN_REPO=1
 | 
						|
    source ~/.bash-git-prompt/gitprompt.sh
 | 
						|
 | 
						|
Now, whenever you are in a git repository, it will continuously display
 | 
						|
its state.
 | 
						|
 | 
						|
There also are additional configurations that you can change depending
 | 
						|
on your preferences. If you wish to do so, look at the "All configs for
 | 
						|
.bashrc" section on <https://github.com/magicmonty/bash-git-prompt>.
 | 
						|
Listed in that section are various lines that you can copy, uncomment
 | 
						|
and add to your .bashrc file to change the configurations. Example
 | 
						|
configurations include avoid fetching remote status, and supporting
 | 
						|
versions of Git older than 1.7.10.
 | 
						|
 | 
						|
## Appendix: Miscellaneous Advice
 | 
						|
 | 
						|
### Updating a commit after running git push:
 | 
						|
 | 
						|
Suppose you would like to update a commit that has already been pushed
 | 
						|
to the remote repository. If the commit you wish to update is the most
 | 
						|
recent commit you have made, after making your desired changes, stage
 | 
						|
the files (either using git add or in git cola), and amend the commit.
 | 
						|
To do so, if you are using the command line, run `git commit --amend`.
 | 
						|
If you are using git cola, click on the gear icon located on the upper
 | 
						|
left side under **Commit** and select **Amend Last Commit** in the drop
 | 
						|
down menu. Then, stage the files you have changed, commit the changes,
 | 
						|
and run git push to push the changes to the remote repository. Your
 | 
						|
change should be reflected in Gerrit as a new patch set.
 | 
						|
 | 
						|
If, however, the commit you wish to update is not the most recent commit
 | 
						|
you have made, you will first need to checkout that commit. To do so,
 | 
						|
find the URL of the commit on <https://review.coreboot.org> and go to
 | 
						|
that page; if the commit is one that you previously pushed, it can be
 | 
						|
found by selecting **My** and then **Changes** in the upper left corner.
 | 
						|
To checkout this commit, in the upper right corner, click on
 | 
						|
**Download**, and copy the command listed next to checkout by clicking
 | 
						|
**Copy to clipboard**. Then, run the copied command in your coreboot
 | 
						|
repository. Now, the last commit should be the most recent commit to
 | 
						|
that patch; to update it, make your desired changes, stage the files,
 | 
						|
then amend and push the commit using the instructions in the above
 | 
						|
paragraph.
 |