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] Leave working dir and index alone after failed (conflicting) push
Date: Wed, 22 Aug 2007 12:29:48 +0200 [thread overview]
Message-ID: <20070822102902.30714.47437.stgit@yoghurt> (raw)
In-Reply-To: <20070822095954.GE30748@diana.vm.bytemark.co.uk>
From: David Kågedal <davidk@lysator.liu.se>
This leaves the index and working tree in the state that merge-recursive
left it, with unmerged files in different stages, and the non-conflicting
changes in the index.
Signed-off-by: David Kågedal <davidk@lysator.liu.se>
Signed-off-by: Karl Hasselström <kha@treskal.com>
---
This is David's patch 2 and 3 clumped together, so that there is no
intermediate stage where the test suite fails.
stgit/git.py | 20 +-------------------
stgit/stack.py | 18 +++++++++++++-----
2 files changed, 14 insertions(+), 24 deletions(-)
diff --git a/stgit/git.py b/stgit/git.py
index 170c5d1..676314a 100644
--- a/stgit/git.py
+++ b/stgit/git.py
@@ -723,25 +723,7 @@ def merge_recursive(base, head1, head2):
# error and we have to abort the merge
raise GitException, err_output
- # merge the unmerged files
- errors = False
- for path in files:
- # remove additional files that might be generated for some
- # newer versions of GIT
- for suffix in [base, head1, head2]:
- if not suffix:
- continue
- fname = path + '~' + suffix
- if os.path.exists(fname):
- os.remove(fname)
-
- stages = files[path]
- if gitmergeonefile.merge(stages['1'][1], stages['2'][1],
- stages['3'][1], path, stages['1'][0],
- stages['2'][0], stages['3'][0]) != 0:
- errors = True
-
- if errors:
+ if files:
raise GitException, 'GIT index merging failed (possible conflicts)'
def merge(base, head1, head2):
diff --git a/stgit/stack.py b/stgit/stack.py
index 95f20f1..123efac 100644
--- a/stgit/stack.py
+++ b/stgit/stack.py
@@ -732,6 +732,7 @@ class Series(PatchSet):
config.unset(self.format_version_key())
def refresh_patch(self, files = None, message = None, edit = False,
+ empty = False,
show_patch = False,
cache_update = True,
author_name = None, author_email = None,
@@ -781,9 +782,16 @@ class Series(PatchSet):
bottom = patch.get_bottom()
+ if empty:
+ tree_id = git.get_commit(bottom).get_tree()
+ else:
+ tree_id = None
+
commit_id = git.commit(files = files,
message = descr, parents = [bottom],
cache_update = cache_update,
+ tree_id = tree_id,
+ set_head = True,
allowempty = True,
author_name = author_name,
author_email = author_email,
@@ -1086,11 +1094,11 @@ class Series(PatchSet):
log = 'push'
self.refresh_patch(cache_update = False, log = log)
else:
- # we store the correctly merged files only for
- # tracking the conflict history. Note that the
- # git.merge() operations should always leave the index
- # in a valid state (i.e. only stage 0 files)
- self.refresh_patch(cache_update = False, log = 'push(c)')
+ # We make the patch empty, with the merged state in
+ # the working tree and index just like after a failed
+ # git merge.
+ self.refresh_patch(cache_update = False, empty = True,
+ log = 'push(c)')
raise StackException, str(ex)
return modified
next prev parent reply other threads:[~2007-08-22 10:29 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-20 8:11 [StGit PATCH 0/6] Use git conflict handling on push David Kågedal
2007-08-20 8:11 ` [StGit PATCH 1/6] Split git.merge into two functions David Kågedal
2007-08-20 8:11 ` [StGit PATCH 2/6] Don't try to merge files that merge-recursive already merged David Kågedal
2007-08-20 8:12 ` [StGit PATCH 3/6] Don't touch state after conflict in push David Kågedal
2007-08-20 8:12 ` [StGit PATCH 4/6] Added a test case to check what happens when push finds a conflict David Kågedal
2007-08-20 8:12 ` [StGit PATCH 5/6] Simplify merge_recursive David Kågedal
2007-08-20 8:12 ` [StGit PATCH 6/6] Use the output from merge-recursive to list conflicts David Kågedal
2007-08-22 9:21 ` [StGit PATCH 2/6] Don't try to merge files that merge-recursive already merged Karl Hasselström
2007-08-22 9:37 ` David Kågedal
2007-08-22 9:44 ` Karl Hasselström
2007-08-22 9:59 ` Karl Hasselström
2007-08-22 10:29 ` Karl Hasselström [this message]
2007-08-20 8:55 ` [StGit PATCH 1/6] Split git.merge into two functions David Kågedal
2007-08-20 23:52 ` Junio C Hamano
2007-08-21 19:35 ` Uwe Kleine-König
2007-08-22 10:04 ` Junio C Hamano
2007-08-22 9:17 ` [StGit PATCH 0/6] Use git conflict handling on push Karl Hasselström
2007-08-23 14:54 ` Catalin Marinas
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=20070822102902.30714.47437.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.