Gerrit

From TFM: Gerrit is a web based code review system, facilitating online code reviews for projects using the Git version control system. It is not available for CVS or SVN. For more information about Gerrit, please see http://code.google.com/p/gerrit/.

Enabling Gerrit for your Eclipse.org Project

I want project committers use Gerrit code review exclusively for my project. Everything must be reviewed -- no direct access to the main repo should be available.

I want project committers to be able to bypass the Gerrit code review system and push changes directly to the git repo. Please note that this will have to be done via the 'new' Gerrit URLs(SSH and HTTPS). The original dev.eclipse.org SSH URLs will become inactive once Gerrit is enabled.

Note: If you're adding all of your code repos to Gerrit, you will lose control of the 'container' for your project(/gitroot/projectname), as Webmaster will give the container to the Gerrit user. This means that you will not be able to create new repos via the initrepo command, instead you will have to contact Webmaster(via a bug).

User Account

In order to contribute you need an Eclipse user account . If you are an Eclipse committer you already have one.

Confirm you agree to the Eclipse.org Terms of Service by completing the Individual Contributor agreement.

Logon

Gerrit Web UI

Logon to the Gerrit Web UI at https://git.eclipse.org/r/ using the email address you registered with your Eclipse (and Bugzilla) account and your Eclipse password.

Git over SSH

When accessing Gerrit over SSH from git or EGit use the username displayed here and upload your public SSH key to Gerrit here.

Gerrit SSH URl:

ssh://username@git.eclipse.org:29418/repository.git

Gerrit SSH service versus SSH shell accessGerrit's SSH service listens on port 29418 and isn't linked to the public keys on git.eclipse.org used for SSH shell access on port 22

Git over HTTPS

When accessing Gerrit over HTTPS from git or EGit use username and HTTP password displayed here

Using Gerrit with EGit:

Eclipse will look for your private key in the SSH2 Home location specified in the General>Network Connections>SSH2 Preference Page. If your id_rsa private key makes use of the AES-128-CBC algorithm (view the file as text to confirm), Eclipse will need at least com.jcraft.jsch 0.1.44 to make use of it.

The wizards "Import Projects from Git" and "Clone Git Repository" will offer the possibility to browse the list of repositories on Gerrit servers and to clone selected repositories. After cloning the Gerrit configuration will be done automatically.

Importing Gerrit changes as Mylyn tasks

Fetching patch sets directly from the task editor

Reviewing changes in the task editor

Submitting changes from the task editor

Gerrit Code Review Cheatsheet

Install the commit-msg hook in your repository

scp -p -P 29418 username@git.eclipse.org:hooks/commit-msg .git/hooks/

This will ask for a password. It is the password that you have to generate in the SSH Keys section of settings in your Gerrit account.

To update an existing change with a new commit

This works because Gerrit links the new commit to the prior change based upon the Change-Id footer in the commit message. (This is automatically generated by the commit-msg hook you installed above.) If you refuse to use the commit-msg hook, or don't have a Change-Id footer, you should read the Gerrit documentation on change-id lines and replacing changes.

Note: To be picked up by Gerrit, a Change-Id line must be in the bottom portion (last paragraph) of a commit message, and may be mixed together with the Signed-off-by, Acked-by, or other such footers. So if your Change-Id line is ignored it's probably not in the last paragraph :).

To compare bulk diffs using Git

Since each Gerrit review patchset actually commits its own tree, you can pull out the trees and compare them.

If you've got a large changeset, and you want to be able to do diffs between them via (command line) git instead of browsing on the web, then you can fetch the individual changes and then perform a diff. For example, http://git.eclipse.org/r/2 shows the 'download' section for each patchset. In this case, it looks like:

Performing a git pull will both get the bits and merge them into your tree, which won't do what you want for comparison. So, in order to get the bits (but not merge), you need to do a git fetch instead. Let's say we want to diff the last two patches against each other rather than reviewing the entire patchset again:

If you're doing this from within an already checked out project, you can do git fetch origin (or any other remote name in .git/config}.

Git fetched data will stay around in your repository, but will be 'orphaned' if no references point to it. To clean up, you can run git gc or wait until this happens automatically.

To approve a change

Click on Publish Comments

Vote with the radio buttons

To add a reviewer

Once you've pushed your commit to Gerrit for review, you can go to the web page (https://git.eclipse.org/r/) and see your changes. By clicking on the review, there's an option to add a reviewer by e-mail address; they'll then be sent a message indicating that they'd like your review on the item.

Code Review

The code review category indicates your opinion on the quality of the code, and how well it fits within the purpose of the existing surrounding code. A +2 vote from any committer is required before submission can occur. A -2 vote from any committer will block submission.

IP Review

Verifying Changes on Hudson using Gerrit Trigger Plugin

You may use the Jenkins Gerrit Trigger Plugin installed on sandbox Hudson in order to run a Hudson job to verify each new patchset uploaded to Gerrit for code review. Hudson will then also vote on these changes using the "Verify" voting category.

In order to setup a verification build job file a bug in Bugzilla on "Eclipse Foundation > Community" using component "Hudson sandbox" and ask the webmaster to create a new build job on sandbox Hudson. Then
configure the new job following the description given on the plugin's home page.

The configuration sections for the Git plugin and the Gerrit trigger plugin of the verification job used by the JGit project may serve as an example.