Fix how we format the full destination branch when uploading.

If the dest-branch attribute is set in the project manifest, then
we need to push to that branch.  Previously, we would unconditionally
pre-pend the refs/heads prefix to it.  The dest-branch attribute is
allowed to be a ref expression though, so it may already have it.

Simple fix is to check if it already has the prefix before adding it.

Bug: crbug.com/gerrit/12770

Change-Id: I45d6107ed6cf305cf223023b0ddad4278f7f4146
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/268152
Reviewed-by: Mike Frysinger <vapier@google.com>
Tested-by: Sean McAllister <smcallis@google.com>
diff --git a/subcmds/upload.py b/subcmds/upload.py
index cf3c8a9..3dd9fd2 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -23,6 +23,7 @@
 from editor import Editor
 from error import HookError, UploadError
 from git_command import GitCommand
+from git_refs import R_HEADS
 from project import RepoHook
 
 from pyversion import is_python3
@@ -462,7 +463,10 @@
         # Make sure our local branch is not setup to track a different remote branch
         merge_branch = self._GetMergeBranch(branch.project)
         if destination:
-          full_dest = 'refs/heads/%s' % destination
+          full_dest = destination
+          if not full_dest.startswith(R_HEADS):
+            full_dest = R_HEADS + full_dest
+
           if not opt.dest_branch and merge_branch and merge_branch != full_dest:
             print('merge branch %s does not match destination branch %s'
                   % (merge_branch, full_dest))