Index: gclient_scm.py |
diff --git a/gclient_scm.py b/gclient_scm.py |
index 8c7e70f2064b1c506eb22c565b84e0a74686410f..a3e902cf64e20044778b1bd293080794c86ffbe9 100644 |
--- a/gclient_scm.py |
+++ b/gclient_scm.py |
@@ -140,13 +140,32 @@ class GitWrapper(SCMWrapper, scm.GIT): |
new_base = 'origin' |
if revision: |
new_base = revision |
- cur_branch = self._Run(['symbolic-ref', 'HEAD']).split('/')[-1] |
+ cur_branch = self._GetCurrentBranch() |
+ |
+ # Check if we are in a rebase conflict |
+ if cur_branch is None: |
+ raise gclient_utils.Error('\n____ %s%s\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.relpath, rev_str)) |
+ |
merge_base = self._Run(['merge-base', 'HEAD', new_base]) |
self._Run(['remote', 'update'], redirect_stdout=False) |
files = self._Run(['diff', new_base, '--name-only']).split() |
file_list.extend([os.path.join(self.checkout_path, f) for f in files]) |
self._Run(['rebase', '-v', '--onto', new_base, merge_base, cur_branch], |
- redirect_stdout=False) |
+ redirect_stdout=False, checkrc=False) |
+ |
+ # If the rebase generated a conflict, abort and ask user to fix |
+ if self._GetCurrentBranch() is None: |
+ raise gclient_utils.Error('\n____ %s%s\n' |
+ '\nConflict while rebasing this branch.\n' |
+ 'Fix the conflict and run gclient again.\n' |
+ 'See man git-rebase for details.\n' |
+ % (self.relpath, rev_str)) |
+ |
print "Checked out revision %s." % self.revinfo(options, (), None) |
def revert(self, options, args, file_list): |
@@ -204,6 +223,15 @@ class GitWrapper(SCMWrapper, scm.GIT): |
elif min_ver < ver: |
return |
+ def _GetCurrentBranch(self): |
+ # Returns name of current branch |
+ # Returns None if inside a (no branch) |
+ tokens = self._Run(['branch']).split() |
+ branch = tokens[tokens.index('*') + 1] |
+ if branch == '(no': |
+ return None |
+ return branch |
+ |
def _Run(self, args, cwd=None, checkrc=True, redirect_stdout=True): |
# TODO(maruel): Merge with Capture? |
if cwd is None: |