git-review
==========

A git command for submitting branches to Gerrit

git-review is a tool that helps submitting git branches to gerrit for
review.

Setup
-----

By default, git-review will look for a remote named 'gerrit' for working
with Gerrit. If the remote exists, git-review will submit the current
branch to HEAD:refs/for/master at that remote.

If the Gerrit remote does not exist, git-review looks for a file
called .gitreview at the root of the repository with information about
the gerrit remote.  Assuming that file is present, git-review should
be able to automatically configure your repository the first time it
is run.

The name of the Gerrit remote is configurable; see the configuration
section below.

Usage
-----

Hack on some code, then::

    git review

If you want to submit that code to a branch other than "master", then::

    git review branchname

If you want to submit to a different remote::

    git review -r my-remote

If you want to supply a review topic::

    git review -t topic/awesome-feature

If you want to submit a branch for review and then remove the local branch::

    git review -f

If you want to skip the automatic "git rebase -i" step::

    git review -R

If you want to download change 781 from gerrit to review it::

    git review -d 781

If you want to download patchset 4 for change 781 from gerrit to review it::

    git review -d 781,4

If you want to compare patchset 4 with patchset 10 of change 781 from gerrit::

    git review -m 781,4-10

If you just want to do the commit message and remote setup steps::

    git review -s

.gitreview file format
----------------------

Example .gitreview file (used to upload for git-review itself)::

    [gerrit]
    host=review.openstack.org
    port=29418
    project=openstack-infra/git-review.git
    defaultbranch=master

Required values: host, project

Optional values: port (default: 29418), defaultbranch (default: master),
defaultremote (default: gerrit).

**Notes**

* Username is not required because it is requested on first run

* Unlike git config files, there cannot be any whitespace before the name
  of the variable.

* Upon first run, git-review will create a remote for working with Gerrit,
  if it does not already exist. By default, the remote name is 'gerrit',
  but this can be overridden with the 'defaultremote' configuration
  option.

* You can specify different values to be used as defaults in
  ~/.config/git-review/git-review.conf or /etc/git-review/git-review.conf.

Hooks
-----

git-review has a custom hook mechanism to run a script before certain
actions. This is done in the same spirit as the classic hooks in git.

There are two types of hooks, a global one which is stored in
~/.config/git-review/hooks/ and one local to the repository stored in
.git/hooks/ with the other git hook scripts.

**The script needs be executable before getting executed**

The name of the script is $action-review where action can be
:

* pre - run at first before doing anything.

* post - run at the end after the review was sent.

* draft - run when in draft mode.

if the script returns with an exit status different than zero,
git-review will exit with the a custom shell exit code 71.

Installation
------------

Install with pip install git-review

For installation from source simply add git-review to your $PATH
after installing the dependencies listed in requirements.txt

Running tests
-------------

Running tests for git-review means running a local copy of Gerrit to
check that git-review interacts correctly with it. This requires the
following
:

* a Java Runtime Environment on the machine to run tests on

* Internet access to download the gerrit.war file, or a locally
  cached copy (it needs to be located in a .gerrit directory at the
  top level of the git-review project)

To run git-review integration tests the following commands may by run::

    tox -e py27
    tox -e py26
    tox -e py32
    tox -e py33

depending on what Python interpreter would you like to use.

Contributing
------------

To get the latest code, see: https://git.openstack.org/cgit/openstack-infra/git-review

Bugs are handled at: https://launchpad.net/git-review

There is a mailing list at: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-infra

Code reviews, as you might expect, are handled by gerrit at: https://review.openstack.org

Use ``git review`` to submit patches (after creating a gerrit account that links to your launchpad account). Example::

    # Do your commits
    git review
    # Enter your username if prompted
