Added message when upstream branch is gone.

BUG=496892

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@295634 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/git_cl.py b/git_cl.py
index 7c3f530..60fd1ce 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -139,6 +139,13 @@
       LooseVersion(version[len(prefix):]) >= LooseVersion(min_version))
 
 
+def BranchExists(branch):
+  """Return True if specified branch exists."""
+  code, _ = RunGitWithCode(['rev-parse', '--verify', branch],
+                           suppress_stderr=True)
+  return not code
+
+
 def ask_for_data(prompt):
   try:
     return raw_input(prompt)
@@ -719,8 +726,12 @@
     return remote, upstream_branch
 
   def GetCommonAncestorWithUpstream(self):
+    upstream_branch = self.GetUpstreamBranch()
+    if not BranchExists(upstream_branch):
+      DieWithError('The upstream for the current branch (%s) does not exist '
+                   'anymore.\nPlease fix it and try again.' % self.GetBranch())
     return git_common.get_or_create_merge_base(self.GetBranch(),
-                                               self.GetUpstreamBranch())
+                                               upstream_branch)
 
   def GetUpstreamBranch(self):
     if self.upstream_branch is None:
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py
index cb87bdb..b19e45c 100755
--- a/tests/git_cl_test.py
+++ b/tests/git_cl_test.py
@@ -86,6 +86,7 @@
     self.mock(git_common, 'get_or_create_merge_base',
               lambda *a: (
                   self._mocked_call(['get_or_create_merge_base']+list(a))))
+    self.mock(git_cl, 'BranchExists', lambda _: True)
     self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: '')
     self.mock(git_cl, 'ask_for_data', self._mocked_call)
     self.mock(git_cl.breakpad, 'post', self._mocked_call)