* [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution @ 2006-08-03 23:53 Martin Langhoff 2006-08-04 0:01 ` Junio C Hamano 0 siblings, 1 reply; 9+ messages in thread From: Martin Langhoff @ 2006-08-03 23:53 UTC (permalink / raw) To: git; +Cc: Martin Langhoff This is a bit of a crude but really useful shortcut for conflict resolution. The name is bad, but git-merge-* is a different 'namespace', and git-resolve is also taken. And as different conflict resolvers take different options, it may make sense to have git-xxdiff, git-sdiff and git-winmerge at least initially. Signed-off-by: Martin Langhoff <martin@catalyst.net.nz> --- Makefile | 2 +- git-xxdiff.sh | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletions(-) diff --git a/Makefile b/Makefile index 8349e3d..a6f6628 100644 --- a/Makefile +++ b/Makefile @@ -145,7 +145,7 @@ SCRIPT_SH = \ git-applymbox.sh git-applypatch.sh git-am.sh \ git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \ git-merge-resolve.sh git-merge-ours.sh \ - git-lost-found.sh git-quiltimport.sh + git-lost-found.sh git-quiltimport.sh git-xxdiff.sh SCRIPT_PERL = \ git-archimport.perl git-cvsimport.perl git-relink.perl \ diff --git a/git-xxdiff.sh b/git-xxdiff.sh new file mode 100755 index 0000000..d562ab2 --- /dev/null +++ b/git-xxdiff.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +USAGE='<path>' +SUBDIRECTORY_OK=No +. git-sh-setup + +FILE=$1 +MERGE_HEAD=`git rev-parse MERGE_HEAD` + +# Sanity checks +if test ! -n "$FILE" +then + echo Need a path + exit 1 +fi + +if test ! -n "$MERGE_HEAD" +then + echo git-xxdiff is only useful during a merge +fi + +git cat-file blob HEAD:$FILE > $FILE~HEAD +if test $? -gt 0 +then + echo "Error - maybe $FILE is not tracked by git?" + exit +fi +echo Written $FILE~HEAD + +git cat-file blob $MERGE_HEAD:$FILE > $FILE~MERGE_HEAD +if test $? -gt 0 +then + echo "Error - maybe $FILE is not tracked by git?" + exit +fi +echo Written $FILE~MERGE_HEAD + +xxdiff -wbB --show-merged-pane --merged-filename $FILE~merged $FILE~HEAD $FILE~MERGE_HEAD \ No newline at end of file -- 1.4.2.rc2.g1869bc-dirty ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution 2006-08-03 23:53 [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution Martin Langhoff @ 2006-08-04 0:01 ` Junio C Hamano 2006-08-04 0:16 ` Martin Langhoff (CatalystIT) ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Junio C Hamano @ 2006-08-04 0:01 UTC (permalink / raw) To: Martin Langhoff; +Cc: git Martin Langhoff <martin@catalyst.net.nz> writes: > diff --git a/git-xxdiff.sh b/git-xxdiff.sh > new file mode 100755 > index 0000000..d562ab2 > --- /dev/null > +++ b/git-xxdiff.sh > @@ -0,0 +1,38 @@ > +#!/bin/sh > + > +USAGE='<path>' > +SUBDIRECTORY_OK=No > +. git-sh-setup > + > +FILE=$1 > +MERGE_HEAD=`git rev-parse MERGE_HEAD` > + > +# Sanity checks We can have unmerged index without MERGE_HEAD (for example, think "rebase --merge" or "am -3"); drop check for that and instead check for stage 2 ("ours") for the path. git cat-file blob :2:$FILE Can xxdiff take more than one file pairs? If so you might want to list unmerged paths (ls-files -u) and iterate through it when no paths are given from the command line. If not, you might want to take the first unmerged path when no paths are given from the command line. > +xxdiff -wbB --show-merged-pane --merged-filename $FILE~merged $FILE~HEAD $FILE~MERGE_HEAD > \ No newline at end of file ;-). ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution 2006-08-04 0:01 ` Junio C Hamano @ 2006-08-04 0:16 ` Martin Langhoff (CatalystIT) 2006-08-04 0:37 ` [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution - take 2 Martin Langhoff 2006-08-04 0:37 ` [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution Martin Langhoff (CatalystIT) 2 siblings, 0 replies; 9+ messages in thread From: Martin Langhoff (CatalystIT) @ 2006-08-04 0:16 UTC (permalink / raw) To: Junio C Hamano; +Cc: git Junio C Hamano wrote: >>diff --git a/git-xxdiff.sh b/git-xxdiff.sh >>new file mode 100755 >>index 0000000..d562ab2 >>--- /dev/null >>+++ b/git-xxdiff.sh >>@@ -0,0 +1,38 @@ >>+#!/bin/sh >>+ >>+USAGE='<path>' >>+SUBDIRECTORY_OK=No >>+. git-sh-setup >>+ >>+FILE=$1 >>+MERGE_HEAD=`git rev-parse MERGE_HEAD` >>+ >>+# Sanity checks > > > We can have unmerged index without MERGE_HEAD (for example, > think "rebase --merge" or "am -3"); drop check for that and > instead check for stage 2 ("ours") for the path. > > git cat-file blob :2:$FILE (didn't know the :$stage: trick, neat) I did think of using merge stages but I wasn't sure whether all the merge strategies followed the same convention. I'll fix up and re-post it. > Can xxdiff take more than one file pairs? Not that I can see. >>+xxdiff -wbB --show-merged-pane --merged-filename $FILE~merged $FILE~HEAD $FILE~MERGE_HEAD >>\ No newline at end of file > > ;-). Ouch, yes, I forgot the newline. Grumble. I am also telling xxdiff to save the merged file as ~merged rather than overwriting the merge attempt that git has made. Better safe than sorry. cheers, m -- ----------------------------------------------------------------------- Martin @ Catalyst .Net .NZ Ltd, PO Box 11-053, Manners St, Wellington WEB: http://catalyst.net.nz/ PHYS: Level 2, 150-154 Willis St OFFICE: +64(4)916-7224 MOB: +64(21)364-017 Make things as simple as possible, but no simpler - Einstein ----------------------------------------------------------------------- ^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution - take 2 2006-08-04 0:01 ` Junio C Hamano 2006-08-04 0:16 ` Martin Langhoff (CatalystIT) @ 2006-08-04 0:37 ` Martin Langhoff 2006-08-04 8:09 ` Alex Riesen 2006-08-04 0:37 ` [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution Martin Langhoff (CatalystIT) 2 siblings, 1 reply; 9+ messages in thread From: Martin Langhoff @ 2006-08-04 0:37 UTC (permalink / raw) To: git; +Cc: Martin Langhoff This is a bit of a crude but really useful shortcut for conflict resolution. The name is bad, but git-merge-* is a different 'namespace', and git-resolve is also taken. And as different conflict resolvers take different options, it may make sense to have git-xxdiff, git-sdiff and git-winmerge at least initially. Reposting with some fixes suggested by Junio. Signed-off-by: Martin Langhoff <martin@catalyst.net.nz> --- How about this one? ;-) --- Makefile | 2 +- git-xxdiff.sh | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletions(-) diff --git a/Makefile b/Makefile index 8349e3d..a6f6628 100644 --- a/Makefile +++ b/Makefile @@ -145,7 +145,7 @@ SCRIPT_SH = \ git-applymbox.sh git-applypatch.sh git-am.sh \ git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \ git-merge-resolve.sh git-merge-ours.sh \ - git-lost-found.sh git-quiltimport.sh + git-lost-found.sh git-quiltimport.sh git-xxdiff.sh SCRIPT_PERL = \ git-archimport.perl git-cvsimport.perl git-relink.perl \ diff --git a/git-xxdiff.sh b/git-xxdiff.sh new file mode 100755 index 0000000..3dc9876 --- /dev/null +++ b/git-xxdiff.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +USAGE='<path-with-conflict>' +SUBDIRECTORY_OK=No +. git-sh-setup + +FILE=$1 + +# Sanity checks +if test ! -n "$FILE" +then + echo Need a path + exit 1 +fi + +git cat-file blob :2:$FILE > $FILE~ours +if test $? -gt 0 +then + echo "Error - $FILE is not tracked by git or does not have a conflict" + exit 1 +fi +echo Written $FILE~ours + +git cat-file blob :3:$FILE > $FILE~branch +if test $? -gt 0 +then + echo "Error - $FILE is not tracked by git or does not have a conflict" + exit 1 +fi +echo Written $FILE~branch +echo Resolved file will be saved as $FILE~merged + +xxdiff -wbB --show-merged-pane --merged-filename $FILE~merged $FILE~ours $FILE~branch -- 1.4.2.rc2.g1869bc-dirty ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution - take 2 2006-08-04 0:37 ` [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution - take 2 Martin Langhoff @ 2006-08-04 8:09 ` Alex Riesen 2006-08-05 3:26 ` Martin Langhoff 0 siblings, 1 reply; 9+ messages in thread From: Alex Riesen @ 2006-08-04 8:09 UTC (permalink / raw) To: Martin Langhoff; +Cc: git On 8/4/06, Martin Langhoff <martin@catalyst.net.nz> wrote: > This is a bit of a crude but really useful shortcut for conflict resolution. > The name is bad, but git-merge-* is a different 'namespace', and git-resolve is > also taken. git-xxmerge? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution - take 2 2006-08-04 8:09 ` Alex Riesen @ 2006-08-05 3:26 ` Martin Langhoff 0 siblings, 0 replies; 9+ messages in thread From: Martin Langhoff @ 2006-08-05 3:26 UTC (permalink / raw) To: Alex Riesen; +Cc: git On 8/4/06, Alex Riesen <raa.lkml@gmail.com> wrote: > On 8/4/06, Martin Langhoff <martin@catalyst.net.nz> wrote: > > This is a bit of a crude but really useful shortcut for conflict resolution. > > The name is bad, but git-merge-* is a different 'namespace', and git-resolve is > > also taken. > > git-xxmerge? Well, the xx part is taken because it uses xxdiff, so I thought perhaps we can have trivial git wrappers for many popular mergers. Ie: git-wiggle, git-sdiff. We could have a single command with a 'strategy' parameter, say git-mergehelper -s [xxdiff|sdiff|wiggle] path/to/file but separate commands are easier for prototyping IMVHO. cheers, martin ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution 2006-08-04 0:01 ` Junio C Hamano 2006-08-04 0:16 ` Martin Langhoff (CatalystIT) 2006-08-04 0:37 ` [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution - take 2 Martin Langhoff @ 2006-08-04 0:37 ` Martin Langhoff (CatalystIT) 2006-08-04 3:31 ` Jeff King 2 siblings, 1 reply; 9+ messages in thread From: Martin Langhoff (CatalystIT) @ 2006-08-04 0:37 UTC (permalink / raw) To: Junio C Hamano; +Cc: git Junio C Hamano wrote: > We can have unmerged index without MERGE_HEAD (for example, > think "rebase --merge" or "am -3"); drop check for that and > instead check for stage 2 ("ours") for the path. Reading Documentation/git-read-tree.txt it seems to mean that stage 1 is merge base, 1 is ours and 2 is the branch being merged in. I am confused... Quote: > When performing a merge of another > branch into the current branch, we use the common ancestor tree > as <tree1>, the current branch head as <tree2>, and the other > branch head as <tree3>. m -- ----------------------------------------------------------------------- Martin @ Catalyst .Net .NZ Ltd, PO Box 11-053, Manners St, Wellington WEB: http://catalyst.net.nz/ PHYS: Level 2, 150-154 Willis St OFFICE: +64(4)916-7224 MOB: +64(21)364-017 Make things as simple as possible, but no simpler - Einstein ----------------------------------------------------------------------- ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution 2006-08-04 0:37 ` [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution Martin Langhoff (CatalystIT) @ 2006-08-04 3:31 ` Jeff King 2006-08-04 3:48 ` Martin Langhoff (CatalystIT) 0 siblings, 1 reply; 9+ messages in thread From: Jeff King @ 2006-08-04 3:31 UTC (permalink / raw) To: Martin Langhoff (CatalystIT); +Cc: Junio C Hamano, git On Fri, Aug 04, 2006 at 12:37:44PM +1200, Martin Langhoff (CatalystIT) wrote: > >instead check for stage 2 ("ours") for the path. > Reading Documentation/git-read-tree.txt it seems to mean that stage 1 is > merge base, 1 is ours and 2 is the branch being merged in. > > I am confused... > > Quote: > >When performing a merge of another > >branch into the current branch, we use the common ancestor tree > >as <tree1>, the current branch head as <tree2>, and the other > >branch head as <tree3>. Look further down: OK, this all sounds like a collection of totally nonsensical rules, but it's actually exactly what you want in order to do a fast merge. The different stages represent the "result tree" (stage 0, aka "merged"), the original tree (stage 1, aka "orig"), and the two trees you are trying to merge (stage 2 and 3 respectively). HTH, -Peff ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution 2006-08-04 3:31 ` Jeff King @ 2006-08-04 3:48 ` Martin Langhoff (CatalystIT) 0 siblings, 0 replies; 9+ messages in thread From: Martin Langhoff (CatalystIT) @ 2006-08-04 3:48 UTC (permalink / raw) To: Jeff King; +Cc: Junio C Hamano, git Jeff King wrote: > On Fri, Aug 04, 2006 at 12:37:44PM +1200, Martin Langhoff (CatalystIT) wrote: > > >>>instead check for stage 2 ("ours") for the path. >> >>Reading Documentation/git-read-tree.txt it seems to mean that stage 1 is >>merge base, 1 is ours and 2 is the branch being merged in. >> >>I am confused... >> >>Quote: >> >>>When performing a merge of another >>>branch into the current branch, we use the common ancestor tree >>>as <tree1>, the current branch head as <tree2>, and the other >>>branch head as <tree3>. > > > Look further down: > OK, this all sounds like a collection of totally nonsensical rules, > but it's actually exactly what you want in order to do a fast > merge. The different stages represent the "result tree" (stage 0, > aka "merged"), the original tree (stage 1, aka "orig"), and the two > trees you are trying to merge (stage 2 and 3 respectively). Grr. I just re-read my own email, and I can't believe how stupid my question was. Still, git-xxdiff is doing the right thing, stage 2 is "ours" and stage 3 is "branch we are merging in". cheers, martin -- ----------------------------------------------------------------------- Martin @ Catalyst .Net .NZ Ltd, PO Box 11-053, Manners St, Wellington WEB: http://catalyst.net.nz/ PHYS: Level 2, 150-154 Willis St OFFICE: +64(4)916-7224 MOB: +64(21)364-017 Make things as simple as possible, but no simpler - Einstein ----------------------------------------------------------------------- ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2006-08-05 3:26 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-08-03 23:53 [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution Martin Langhoff 2006-08-04 0:01 ` Junio C Hamano 2006-08-04 0:16 ` Martin Langhoff (CatalystIT) 2006-08-04 0:37 ` [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution - take 2 Martin Langhoff 2006-08-04 8:09 ` Alex Riesen 2006-08-05 3:26 ` Martin Langhoff 2006-08-04 0:37 ` [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution Martin Langhoff (CatalystIT) 2006-08-04 3:31 ` Jeff King 2006-08-04 3:48 ` Martin Langhoff (CatalystIT)
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).