From: Shawn Pearce <spearce@spearce.org>
To: git@vger.kernel.org
Subject: [RFC] Merge strategy 'applyreject'
Date: Wed, 13 Sep 2006 17:08:17 -0400 [thread overview]
Message-ID: <20060913210817.GA30782@spearce.org> (raw)
Any thoughts on something like the following?
I was talking with Jakub Narebski on #git today about using a
diff/apply pipeline as a merge strategy.
I was talking about implementing this within the merge-recur driver
as an alternative to invoking the RCS 'merge' program. The idea
would be to take the current branch's file and try to apply the
diff of merge_base and the other branch to it. If that has any
rejects then try the other direction (apply diff of merge_base and
current to other) and leave the user with whichever one resulted
in the smallest number of rejected lines.
But that's a little bit more work, this is a quick hack. :-)
-- >8 --
Create merge strategy 'applyreject'.
The applyreject merge strategy is a two head merge strategy which performs
the merge by obtaining the diff between the common base and the branch
being merged and applies it to the current branch using git-apply --reject.
Consequently any failures are written to .rej files, rather than using
the RCS <<<<<<< ======= >>>>>>> format.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
.gitignore | 1 +
Makefile | 1 +
git-merge-applyreject.sh | 26 ++++++++++++++++++++++++++
git-merge.sh | 2 +-
4 files changed, 29 insertions(+), 1 deletions(-)
diff --git a/.gitignore b/.gitignore
index 0d608fe..0f43ece 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,6 +56,7 @@ git-ls-tree
git-mailinfo
git-mailsplit
git-merge
+git-merge-applyreject
git-merge-base
git-merge-index
git-merge-tree
diff --git a/Makefile b/Makefile
index 7b3114f..a57dab5 100644
--- a/Makefile
+++ b/Makefile
@@ -161,6 +161,7 @@ SCRIPT_SH = \
git-tag.sh git-verify-tag.sh \
git-applymbox.sh git-applypatch.sh git-am.sh \
git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
+ git-merge-applyreject.sh \
git-merge-resolve.sh git-merge-ours.sh \
git-lost-found.sh git-quiltimport.sh
diff --git a/git-merge-applyreject.sh b/git-merge-applyreject.sh
new file mode 100755
index 0000000..e4c8703
--- /dev/null
+++ b/git-merge-applyreject.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# Simple merge strategy which produces reject files on failed merges.
+# Only handles two heads and one merge base, thus the command line
+# parameters must be: base -- head1 head2
+
+base="$1"; shift; [ -z "$base" ] && exit 2
+while [ $# -gt 2 -a "X$1" != "X--" ]
+do
+ shift
+done
+if [ "X$1" = "X--" ]
+then
+ shift
+else
+ exit 2
+fi
+current="$1"; shift; [ -z "$current" ] && exit 2
+incoming="$1"; shift; [ -z "$incoming" ] && exit 2
+[ $# -gt 0 ] && exit 2
+
+git-read-tree --reset $current || exit 2
+git-update-index --refresh 2>/dev/null
+git-diff --binary -M $base $incoming \
+ | git-apply --index --reject --verbose
+[ $? = 0 ] || exit 1
diff --git a/git-merge.sh b/git-merge.sh
index d049e16..e39de0a 100755
--- a/git-merge.sh
+++ b/git-merge.sh
@@ -9,7 +9,7 @@ USAGE='[-n] [--no-commit] [--squash] [-s
LF='
'
-all_strategies='recursive recur octopus resolve stupid ours'
+all_strategies='recursive recur octopus resolve stupid ours applyreject'
case "${GIT_USE_RECUR_FOR_RECURSIVE}" in
'')
default_twohead_strategies=recursive ;;
--
1.4.2.gc52f
next reply other threads:[~2006-09-13 21:08 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-13 21:08 Shawn Pearce [this message]
2006-09-13 21:16 ` [RFC] Merge strategy 'applyreject' Petr Baudis
2006-09-13 21:43 ` Junio C Hamano
2006-09-13 21:50 ` Shawn Pearce
2006-09-13 21:54 ` Jakub Narebski
2006-09-13 22:26 ` Shawn Pearce
2006-09-13 21:50 ` Petr Baudis
2006-09-13 21:46 ` Shawn Pearce
2006-09-13 21:22 ` Jakub Narebski
2006-09-13 21:38 ` Shawn Pearce
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=20060913210817.GA30782@spearce.org \
--to=spearce@spearce.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).