[StGIT PATCH 5/6] Use the output from merge-recursive to list conflicts
- From
Karl Hasselström <kha@treskal.com>
- Date
- Aug 26, 2007, 20:42 UTC
- Message-ID
- <20070826204259.16700.55770.stgit@yoghurt>
- In-Reply-To
- <20070826203745.16700.5655.stgit@yoghurt>
From: David Kågedal <davidk@lysator.liu.se>
merge-recursive already has useful information about what the conflicts were, so we reuse that when pushing.
Signed-off-by: David Kågedal <davidk@lysator.liu.se> Signed-off-by: Karl Hasselström <kha@treskal.com>
---
stgit/git.py | 22 +++++++++++++++++----- stgit/stack.py | 2 ++ 2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/stgit/git.py b/stgit/git.py index 173cc4b..a185f19 100644 --- a/stgit/git.py +++ b/stgit/git.py @@ -39,6 +39,14 @@ class GitRunException(GitException): class GRun(Run): exc = GitRunException +class GitConflictException(GitException): + def __init__(self, conflicts): + GitException.__init__(self) + self.conflicts = conflicts + def __str__(self): + return "%d conflicts" % len(self.conflicts) + def list(self): + out.info(*self.conflicts) # # Classes @@ -642,11 +650,15 @@ def merge_recursive(base, head1, head2): """ refresh_index() - try: - # discard output to mask the verbose prints of the tool - GRun('git-merge-recursive', base, '--', head1, head2).discard_output() - except GitRunException: - raise GitException, 'GIT index merging failed (possible conflicts)' + p = GRun('git-merge-recursive', base, '--', head1, head2).returns([0, 1]) + output = p.output_lines() + if p.exitcode == 0: + # No problems + return + else: # exitcode == 1 + # There were conflicts + conflicts = [l for l in output if l.startswith('CONFLICT')] + raise GitConflictException(conflicts) def merge(base, head1, head2): """Perform a 3-way merge between base, head1 and head2 into the diff --git a/stgit/stack.py b/stgit/stack.py index eb0114e..d2ca0e2 100644 --- a/stgit/stack.py +++ b/stgit/stack.py @@ -1075,6 +1075,8 @@ class Series(PatchSet): # merge can fail but the patch needs to be pushed try: git.merge_recursive(bottom, head, top) + except git.GitConflictException, ex: + ex.list() except git.GitException, ex: out.error('The merge failed during "push".', 'Use "refresh" after fixing the conflicts or'