[StGit PATCH] Print conflict details with the new infrastructure (bug #11181)
From: Catalin Marinas <hidden>
Date: 2016-06-15 22:45:43
Subsystem:
the rest · Maintainer:
Linus Torvalds
The patch modifies the IndexAndWorkTree.merge() function to display pass the conflict information (files) when raising an exception. The logic is similar to the one in the old infrastructure. Signed-off-by: Catalin Marinas <redacted> --- stgit/lib/git.py | 14 +++++++++----- stgit/lib/transaction.py | 8 +++++--- 2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/stgit/lib/git.py b/stgit/lib/git.py
index 0a208ef..6457893 100644
--- a/stgit/lib/git.py
+++ b/stgit/lib/git.py@@ -829,12 +829,16 @@ class IndexAndWorktree(RunWithEnvCwd): env = { 'GITHEAD_%s' % base.sha1: 'ancestor', 'GITHEAD_%s' % ours.sha1: 'current', 'GITHEAD_%s' % theirs.sha1: 'patched'}) - r.discard_output() + r.returns([0, 1]) + output = r.output_lines() + if r.exitcode: + # There were conflicts + conflicts = [l for l in output if l.startswith('CONFLICT')] + err = '%d conflict(s)\n%s' \ + % (len(conflicts), ''.join(conflicts)) + raise MergeConflictException(err) except run.RunException, e: - if r.exitcode == 1: - raise MergeConflictException() - else: - raise MergeException('Index/worktree dirty') + raise MergeException('Index/worktree dirty') def changed_files(self, tree, pathlimits = []): """Return the set of files in the worktree that have changed with respect to C{tree}. The listing is optionally restricted to
diff --git a/stgit/lib/transaction.py b/stgit/lib/transaction.py
index 0f414d8..b8e82b6 100644
--- a/stgit/lib/transaction.py
+++ b/stgit/lib/transaction.py@@ -201,7 +201,8 @@ class StackTransaction(object): self.__stack.set_head(new_head, self.__msg) if self.__error: - out.error(self.__error) + error_lines = self.__error.split('\n') + out.error(*error_lines) # Write patches. def write(msg):
@@ -311,9 +312,10 @@ class StackTransaction(object): tree = iw.index.write_tree() self.__current_tree = tree s = ' (modified)' - except git.MergeConflictException: + except git.MergeConflictException, e: tree = ours merge_conflict = True + conflict_error = str(e) s = ' (conflict)' except git.MergeException, e: self.__halt(str(e))
@@ -344,7 +346,7 @@ class StackTransaction(object): # Save this update so that we can run it a little later. self.__conflicting_push = update - self.__halt('Merge conflict') + self.__halt(conflict_error) else: # Update immediately. update()