# git-cl -- a git-command for integrating reviews on Rietveld
# Copyright (C) 2008 Evan Martin <martine@danga.com>

== Background
Rietveld, also known as http://codereview.appspot.com, is a nice tool
for code reviews.  You upload a patch (and some other data) and it lets
others comment on your patch.

For more on how this all works conceptually, please see README.codereview.
The remainder of this document is the nuts and bolts of using git-cl.

== Install
Copy (symlink) it into your path somewhere, along with Rietveld
upload.py.

== Setup
Run this from your git checkout and answer some questions:
$ git cl config

== How to use it
Make a new branch.  Write some code.  Commit it locally.  Send it for
review:
$ git cl upload
By default, it diffs against whatever branch the current branch is
tracking (see "git checkout --track").  An optional last argument is
passed to "git diff", allowing reviews against other heads.

You'll be asked some questions, and the review issue number will be
associated with your current git branch, so subsequent calls to upload
will update that review rather than making a new one.

== git-svn integration
Review looks good?  Commit the code:
$ git cl dcommit
This does a git-svn dcommit, with a twist: all changes in the diff
will be squashed into a single commit, and the description of the commit
is taken directly from the Rietveld description.  This command also accepts
arguments to "git diff", much like upload.
Try "git cl dcommit --help" for more options.

== Extra commands
Print some status info:
$ git cl status

Edit the issue association on the current branch:
$ git cl issue 1234

Patch in a review:
$ git cl patch <url to full patch>
Try "git cl patch --help" for more options.

vim: tw=72 :
