All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Karl Hasselström" <kha@treskal.com>
To: "Catalin Marinas" <catalin.marinas@gmail.com>,
	"David Kågedal" <davidk@lysator.liu.se>
Cc: git@vger.kernel.org
Subject: [StGIT PATCH 5/6] Use the output from merge-recursive to list conflicts
Date: Sun, 26 Aug 2007 22:42:59 +0200	[thread overview]
Message-ID: <20070826204259.16700.55770.stgit@yoghurt> (raw)
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'

  parent reply	other threads:[~2007-08-26 20:43 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-26 20:42 [StGIT PATCH 0/6] David's conflict series using my subprocess stuff Karl Hasselström
2007-08-26 20:42 ` [StGIT PATCH 1/6] Split git.merge into two functions Karl Hasselström
2007-08-26 20:42 ` [StGIT PATCH 2/6] Leave working dir and index alone after failed (conflicting) push Karl Hasselström
2007-08-26 20:42 ` [StGIT PATCH 3/6] Added a test case to check what happens when push finds a conflict Karl Hasselström
2007-08-26 20:42 ` [StGIT PATCH 4/6] Simplify merge_recursive Karl Hasselström
2007-08-26 20:42 ` Karl Hasselström [this message]
2007-08-26 20:43 ` [StGIT PATCH 6/6] Better error message if merge fails Karl Hasselström

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070826204259.16700.55770.stgit@yoghurt \
    --to=kha@treskal.com \
    --cc=catalin.marinas@gmail.com \
    --cc=davidk@lysator.liu.se \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.