SYNOPSIS

git drover --branch <branch> --cherry-pick <commit>
           [--parent_checkout <path-to-existing-checkout>]
           [--verbose] [--dry-run]

DESCRIPTION

git drover applies a commit to a release branch. It creates a new workdir from an existing checkout to avoid downloading a new checkout without affecting the existing checkout. Creating a workdir requires symlinks so this does not work on Windows. See the EXAMPLE section for the equivalent sequence of commands to run.

git drover does not support reverts. See the EXAMPLE section for the equivalent sequence of commands to run.

OPTIONS

--branch <branch>

The branch to cherry-pick the commit to.

--cherry-pick <commit>

The commit to cherry-pick.

--parent_checkout

The path to the chromium checkout to use as the source for a creating git-new-workdir workdir to use for cherry-picking. If unspecified, the current directory is used.

-v
--verbose

Enable verbose logging.

--dry-run

Skip landing the cherry-pick. Just ensure that the commit can be cherry-picked into the branch.

EXAMPLE

PREREQUISITES

Before working with branches, you must gclient sync --with_branch_heads at least once to fetch the branches.

Merge Example

# Here's a commit (from some.committer) that we want to 'drover'.
$ git log -n 1 --pretty=fuller
commit 8b79b7b2f7e6e728f9a3c7b385c72efc7c47244a
Author:     some.committer <some.committer@chromium.org>
AuthorDate: Thu Apr 10 08:54:46 2014 +0000
Commit:     some.committer <some.committer@chromium.org>
CommitDate: Thu Apr 10 08:54:46 2014 +0000

    This change needs to go to branch 9999

# Now do the 'drover'.
$ git drover --branch 9999 --cherry-pick 8b79b7b2f7e6e728f9a3c7b385c72efc7c47244a
Going to cherry-pick
"""
commit 8b79b7b2f7e6e728f9a3c7b385c72efc7c47244a
Author: some.committer <some.committer@chromium.org>
Date:   Thu Apr 10 08:54:46 2014 +0000

    This change needs to go to branch 9999
"""
to 9999. Continue (y/n)? y

# A cl is uploaded to rietveld, where it can be reviewed before landing.

About to land on 9999. Continue (y/n)? y
# The cherry-pick cl is landed on the branch 9999.

Revert Example

# Make sure we have the most up-to-date branch sources.
$ git fetch

# Checkout the branch with the change we want to revert.
$ git checkout -b drover_9999 branch-heads/9999
Branch drover_9999 set up to track remote ref refs/branch-heads/9999.

# Here's the commit we want to revert.
$ git log -n 1
commit 33b0e9164d4564eb8a4b4e5b951bba6edeeecacb
Author: some.committer <some.committer@chromium.org>
Date:   Thu Apr 10 08:54:46 2014 +0000

    This change is horribly broken.

# Now do the revert.
$ git revert 33b0e9164d4564eb8a4b4e5b951bba6edeeecacb

# That reverted the change and committed the revert.
$ git log -n 1
commit 8a2d2bb98b9cfc9260a9bc86da1eec2a43f43f8b
Author: you <you@chromium.org>
Date:   Thu Apr 10 09:11:36 2014 +0000

    Revert "This change is horribly broken."

    This reverts commit 33b0e9164d4564eb8a4b4e5b951bba6edeeecacb.

# As with old drover, reverts are generally OK to commit without LGTM.
$ git cl upload -r some.committer@chromium.org --send-mail
$ git cl land --bypass-hooks

Manual Merge Example

# Make sure we have the most up-to-date branch sources.
$ git fetch

# Here's a commit (from some.committer) that we want to 'drover'.
$ git log -n 1 --pretty=fuller
commit 537f446fa3d5e41acab017bb0b082fbd0c9eb043
Author:     some.committer <some.committer@chromium.org>
AuthorDate: Thu Apr 10 08:54:46 2014 +0000
Commit:     some.committer <some.committer@chromium.org>
CommitDate: Thu Apr 10 08:54:46 2014 +0000

    This change needs to go to branch 9999

# Checkout the branch we want to 'drover' to.
$ git checkout -b drover_9999 branch-heads/9999
Branch drover_9999 set up to track remote ref refs/branch-heads/9999.

# Now do the 'drover'.
# IMPORTANT!!! Do Not leave off the '-x' flag
$ git cherry-pick -x 537f446fa3d5e41acab017bb0b082fbd0c9eb043
[drover_9999 b468abc] This change needs to go to branch 9999
 Author: some.committer <some.committer@chromium.org>
 Date: Thu Apr 10 08:54:46 2014 +0000
 1 file changed, 1 insertion(+)
 create mode 100644 modified_file

# That took the code authored by some.committer and committed it to
# the branch by the person who drovered it (i.e. you).
$ git log -n 1 --pretty=fuller
commit b468abc42ddd4fd9aecc48c3eda172265306d2b4
Author:     some.committer <some.committer@chromium.org>
AuthorDate: Thu Apr 10 08:54:46 2014 +0000
Commit:     you <you@chromium.org>
CommitDate: Thu Apr 10 09:11:36 2014 +0000

    This change needs to go to branch 9999

    (cherry picked from commit 537f446fa3d5e41acab017bb0b082fbd0c9eb043)

# Looks good. Ship it!
$ git cl upload
# Wait for LGTM or TBR it.
$ git cl land
# Or skip the LGTM/TBR and just 'git cl land --bypass-hooks'

SEE ALSO

CHROMIUM DEPOT_TOOLS

Part of the chromium depot_tools(7) suite. These tools are meant to assist with the development of chromium and related projects. Download the tools from here.