download: unify error handling with sub git calls

We gracefully handle cherry-pick errors, but none of the others
which means people get confusing Python tracebacks.  Move the
main logic in a single GitError try block so we can show pretty
error messages for all of them.

Change-Id: I52cdf6468d21a98de7f65b86d5267b3caabd5af8
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/259854
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 db9595a..badd9ab 100644
--- a/subcmds/download.py
+++ b/subcmds/download.py
@@ -109,18 +109,28 @@
               file=sys.stderr)
         for c in dl.commits:
           print('  %s' % (c), file=sys.stderr)
+
       if opt.cherrypick:
-        try:
+        mode = 'cherry-pick'
+      elif opt.revert:
+        mode = 'revert'
+      elif opt.ffonly:
+        mode = 'fast-forward merge'
+      else:
+        mode = 'checkout'
+
+      try:
+        if opt.cherrypick:
           project._CherryPick(dl.commit, ffonly=opt.ffonly,
                               record_origin=opt.record_origin)
-        except GitError:
-          print('[%s] Could not complete the cherry-pick of %s'
-                % (project.name, dl.commit), file=sys.stderr)
-          sys.exit(1)
+        elif opt.revert:
+          project._Revert(dl.commit)
+        elif opt.ffonly:
+          project._FastForward(dl.commit, ffonly=True)
+        else:
+          project._Checkout(dl.commit)
 
-      elif opt.revert:
-        project._Revert(dl.commit)
-      elif opt.ffonly:
-        project._FastForward(dl.commit, ffonly=True)
-      else:
-        project._Checkout(dl.commit)
+      except GitError:
+        print('[%s] Could not complete the %s of %s'
+              % (project.name, mode, dl.commit), file=sys.stderr)
+        sys.exit(1)