gclient: Add better error reporting and handling when there is a rebase conflict

When a rebase generates a conflict, report an error and exit immediately.
If in an existing conflict (no branch), report an error and exit immediately.

Review URL: http://codereview.chromium.org/496003

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@34459 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py
index 8d37678..a5413ca 100755
--- a/tests/gclient_scm_test.py
+++ b/tests/gclient_scm_test.py
@@ -279,7 +279,7 @@
     scm.update(options, self.args, file_list)
 
 
-class GitWrapperTestCase(SuperMoxBaseTestBase):
+class GitWrapperTestCase(BaseTestCase):
   """This class doesn't use pymox."""
   class OptionsObject(object):
      def __init__(self, test_case, verbose=False, revision=None):
@@ -506,6 +506,29 @@
     self.assertEquals(scm.revinfo(options, (), None),
                       'a7142dc9f0009350b96a11f372b6ea658592aa95')
 
+  def testUpdateConflict(self):
+    if not self.enabled:
+      return
+    options = self.Options()
+    scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
+                                relpath=self.relpath)
+    file_path = gclient_scm.os.path.join(self.base_path, 'b')
+    f = open(file_path, 'w').writelines('conflict\n')
+    scm._Run(['commit', '-am', 'test'])
+    exception = \
+        '\n____ .\n' \
+        '\nConflict while rebasing this branch.\n' \
+        'Fix the conflict and run gclient again.\n' \
+        'See man git-rebase for details.\n'
+    self.assertRaisesError(exception, scm.update, options, (), [])
+    exception = \
+        '\n____ .\n' \
+        '\tAlready in a conflict, i.e. (no branch).\n' \
+        '\tFix the conflict and run gclient again.\n' \
+        '\tOr to abort run:\n\t\tgit-rebase --abort\n' \
+        '\tSee man git-rebase for details.\n'
+    self.assertRaisesError(exception, scm.update, options, (), [])
+
   def testRevinfo(self):
     if not self.enabled:
       return