download: add a --branch option

This allows people to quickly create new branches when pulling down
changes rather than having to juggle the git calls themselves.

Bug: https://crbug.com/gerrit/11609
Change-Id: Ie6a4d05e9f4e9347fe7f7119c768e6446563ae65
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/259855
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
Tested-by: Mike Frysinger <vapier@google.com>
diff --git a/subcmds/download.py b/subcmds/download.py
index badd9ab..723124f 100644
--- a/subcmds/download.py
+++ b/subcmds/download.py
@@ -37,6 +37,8 @@
 """
 
   def _Options(self, p):
+    p.add_option('-b', '--branch',
+                 help='create a new branch first')
     p.add_option('-c', '--cherry-pick',
                  dest='cherrypick', action='store_true',
                  help="cherry-pick instead of checkout")
@@ -119,6 +121,11 @@
       else:
         mode = 'checkout'
 
+      # We'll combine the branch+checkout operation, but all the rest need a
+      # dedicated branch start.
+      if opt.branch and mode != 'checkout':
+        project.StartBranch(opt.branch)
+
       try:
         if opt.cherrypick:
           project._CherryPick(dl.commit, ffonly=opt.ffonly,
@@ -128,7 +135,10 @@
         elif opt.ffonly:
           project._FastForward(dl.commit, ffonly=True)
         else:
-          project._Checkout(dl.commit)
+          if opt.branch:
+            project.StartBranch(opt.branch, revision=dl.commit)
+          else:
+            project._Checkout(dl.commit)
 
       except GitError:
         print('[%s] Could not complete the %s of %s'