Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: gclient_scm.py

Issue 496003: gclient: Add better error reporting and handling when there is a rebase conflict (Closed)
Patch Set: Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/gclient_scm_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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:
« no previous file with comments | « no previous file | tests/gclient_scm_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698