Stop defaulting unrecognized branches to master except for handful of special refs.

Context:
In https://codereview.chromium.org/781523002/ I added the ability for target_ref to be set to any branch name. Eg: For Skia a ref of 'refs/remotes/origin/chrome/m42' would be correctly set to 'refs/heads/chrome/m42'.

But in https://codereview.chromium.org/822503005/ this was changed to treat any branch that did not start with 'refs/remotes/branch-heads' or 'refs/remotes/origin/refs' to be 'refs/remotes/origin/master'.
This makes it very chromium specific, there are plenty of other projects that use depot_tools that does not work like this.
For Skia 'refs/remotes/origin/chrome/m42' would now change to 'refs/remotes/origin/master' which is wrong.

The default behavior should be to preserve the original ref not to override it to master.

I handled 'lkgr' and 'lkcr' as special cases in this CL because many developers track it and would like it to land in master by default.

BUG=chromium:463109
NOPRESUBMIT=true

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@294303 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/git_cl.py b/git_cl.py
index bcd4a62..41ed20c 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -56,6 +56,10 @@
 DESCRIPTION_BACKUP_FILE = '~/.git_cl_description_backup'
 GIT_INSTRUCTIONS_URL = 'http://code.google.com/p/chromium/wiki/UsingGit'
 CHANGE_ID = 'Change-Id:'
+REFS_THAT_ALIAS_TO_OTHER_REFS = {
+    'refs/remotes/origin/lkgr': 'refs/remotes/origin/master',
+    'refs/remotes/origin/lkcr': 'refs/remotes/origin/master',
+}
 
 # Valid extensions for files we want to lint.
 DEFAULT_LINT_REGEX = r"(.*\.cpp|.*\.cc|.*\.h)"
@@ -1790,10 +1794,9 @@
       if not match:
         # This is a branch path but not one we recognize; use as-is.
         remote_branch = target_branch
-  elif (not remote_branch.startswith('refs/remotes/branch-heads') and
-        not remote_branch.startswith('refs/remotes/%s/refs' % remote)):
-    # Default to master for refs that are not branches.
-    remote_branch = 'refs/remotes/%s/master' % remote
+  elif remote_branch in REFS_THAT_ALIAS_TO_OTHER_REFS:
+    # Handle the refs that need to land in different refs.
+    remote_branch = REFS_THAT_ALIAS_TO_OTHER_REFS[remote_branch]
 
   # Create the true path to the remote branch.
   # Does the following translation:
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py
index ed29824..31eb972 100755
--- a/tests/git_cl_test.py
+++ b/tests/git_cl_test.py
@@ -822,6 +822,10 @@
                      git_cl.GetTargetRef('origin',
                                          'refs/remotes/origin/refs/diff/test',
                                          None, None))
+    self.assertEqual('refs/heads/chrome/m42',
+                     git_cl.GetTargetRef('origin',
+                                         'refs/remotes/origin/chrome/m42',
+                                         None, None))
 
     # Check target refs for user-specified target branch.
     for branch in ('branch-heads/123', 'remotes/branch-heads/123',