[StGit PATCH 05/15] Use the output from merge-recursive to list conflicts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: David Kågedal <david@xxxxxxxxxxxxx>

merge-recursive already has useful information about what the conflicts
were, so we reuse that when pushing.

Signed-off-by: David Kågedal <davidk@xxxxxxxxxxxxxx>
Signed-off-by: Karl Hasselström <kha@xxxxxxxxxxx>

---

 stgit/git.py   |   24 ++++++++++++++++++------
 stgit/stack.py |    2 ++
 2 files changed, 20 insertions(+), 6 deletions(-)


diff --git a/stgit/git.py b/stgit/git.py
index d98cb60..b6b5c3d 100644
--- a/stgit/git.py
+++ b/stgit/git.py
@@ -38,6 +38,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
@@ -643,12 +651,16 @@ def merge_recursive(base, head1, head2):
     """
     refresh_index()
 
-    # use _output() to mask the verbose prints of the tool
-    try:
-        # discard output to mask the verbose prints of the tool
-        GRun('git-merge-recursive', base, '--', head1, head2).discard_output()
-    except GitRunException, ex:
-        raise GitException, 'GIT index merging failed (possible conflicts)'
+    # Duplicate _output(), since we need the exit status
+    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.strip() 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 e9dc97e..7dc4861 100644
--- a/stgit/stack.py
+++ b/stgit/stack.py
@@ -1076,6 +1076,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'

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux