Make git cl upload correctly track upstream refs when uploading to Gerrit

NOPRESUBMIT because it's broke on CQ, Cf. https://codereview.chromium.org/1124803002

BUG=478260
NOPRESUBMIT=true

Review URL: https://codereview.chromium.org/1110293002

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@295124 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/git_cl.py b/git_cl.py
index b94be71..1f78545 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -1702,9 +1702,10 @@
   # We assume the remote called "origin" is the one we want.
   # It is probably not worthwhile to support different workflows.
   gerrit_remote = 'origin'
-  branch = 'master'
-  if options.target_branch:
-    branch = options.target_branch
+
+  remote, remote_branch = cl.GetRemoteBranch()
+  branch = GetTargetRef(remote, remote_branch, options.target_branch,
+                        pending_prefix='')
 
   change_desc = ChangeDescription(
       options.message or CreateDescriptionFromLog(args))
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py
index f633581..bb963c7 100755
--- a/tests/git_cl_test.py
+++ b/tests/git_cl_test.py
@@ -581,7 +581,8 @@
         ]
 
   @staticmethod
-  def _gerrit_upload_calls(description, reviewers, squash):
+  def _gerrit_upload_calls(description, reviewers, squash,
+                           expected_upstream_ref='origin/refs/heads/master'):
     calls = [
         ((['git', 'log', '--pretty=format:%s\n\n%b',
            'fake_ancestor_sha..HEAD'],),
@@ -620,7 +621,8 @@
       ref_to_push = 'HEAD'
 
     calls += [
-        ((['git', 'rev-list', 'origin/master..' + ref_to_push],), ''),
+        ((['git', 'rev-list',
+            expected_upstream_ref + '..' + ref_to_push],), ''),
         ((['git', 'config', 'rietveld.cc'],), '')
         ]
     receive_pack = '--receive-pack=git receive-pack '
@@ -632,7 +634,8 @@
     receive_pack += ''
     calls += [
         ((['git',
-           'push', receive_pack, 'origin', ref_to_push + ':refs/for/master'],),
+           'push', receive_pack, 'origin',
+           ref_to_push + ':refs/for/refs/heads/master'],),
          '')
         ]
     if squash:
@@ -650,10 +653,13 @@
       upload_args,
       description,
       reviewers,
-      squash=False):
+      squash=False,
+      expected_upstream_ref='origin/refs/heads/master'):
     """Generic gerrit upload test framework."""
     self.calls = self._gerrit_base_calls()
-    self.calls += self._gerrit_upload_calls(description, reviewers, squash)
+    self.calls += self._gerrit_upload_calls(
+        description, reviewers, squash,
+        expected_upstream_ref=expected_upstream_ref)
     git_cl.main(['upload'] + upload_args)
 
   def test_gerrit_upload_without_change_id(self):
@@ -686,7 +692,8 @@
         ['--squash'],
         'desc\n\nBUG=\nChange-Id:123456789\n',
         [],
-        squash=True)
+        squash=True,
+        expected_upstream_ref='origin/master')
 
   def test_config_gerrit_download_hook(self):
     self.mock(git_cl, 'FindCodereviewSettingsFile', CodereviewSettingsFileMock)