[PATCH 1/3] mergetool-lib: specialize kdiff3 options when in diff mode

Subsystems: the rest

DORMANTno replies

7 messages, 3 authors, 2016-06-15 · open the first message on its own page

[PATCH 1/3] mergetool-lib: specialize kdiff3 options when in diff mode

From: David Aguilar <hidden>
Date: 2016-06-15 22:46:32

kdiff3 should only show two files when in diff mode.

Signed-off-by: David Aguilar <redacted>
---
 git-mergetool-lib.sh |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/git-mergetool-lib.sh b/git-mergetool-lib.sh
index d28be68..e2d074d 100644
--- a/git-mergetool-lib.sh
+++ b/git-mergetool-lib.sh
@@ -67,9 +67,19 @@ run_mergetool () {
 			 --L1 "$MERGED (Base)" --L2 "$MERGED (Local)" --L3 "$MERGED (Remote)" \
 			 -o "$MERGED" "$BASE" "$LOCAL" "$REMOTE" > /dev/null 2>&1)
 		else
-			("$merge_tool_path" --auto \
-			 --L1 "$MERGED (Local)" --L2 "$MERGED (Remote)" \
-			 -o "$MERGED" "$LOCAL" "$REMOTE" > /dev/null 2>&1)
+			if merge_mode; then
+				("$merge_tool_path" --auto \
+				 --L1 "$MERGED (Local)" \
+				 --L2 "$MERGED (Remote)" \
+				 -o "$MERGED" "$LOCAL" "$REMOTE" \
+				> /dev/null 2>&1)
+			else
+				("$merge_tool_path" --auto \
+				 --L1 "$MERGED (A)" \
+				 --L2 "$MERGED (B)" \
+				 "$LOCAL" "$REMOTE" \
+				> /dev/null 2>&1)
+			fi
 		fi
 		status=$?
 		;;
-- 
1.6.2.1.303.g63699

[PATCH 3/3] mergetool-lib: add diffuse as merge and diff tool

From: David Aguilar <hidden>
Date: 2016-06-15 22:46:32

From: Sebastian Pipping <redacted>

This adds diffuse as a built-in merge tool.

Signed-off-by: Sebastian Pipping <redacted>
Signed-off-by: David Aguilar <redacted>
---

This is Sebastian's patch rebased onto Junio's pu branch.

I removed the git-gui part because I think git-gui
patches go through Shawn / git-gui.git?


This diff is still too big, so maybe we should
refactor the $mergetool_candidate code into
mergetool-lib as well.

 Documentation/git-difftool.txt         |    4 ++--
 Documentation/git-mergetool.txt        |    3 ++-
 Documentation/merge-config.txt         |    7 ++++---
 contrib/completion/git-completion.bash |    3 ++-
 git-difftool-helper.sh                 |    6 ++----
 git-mergetool-lib.sh                   |   17 ++++++++++++++++-
 git-mergetool.sh                       |    4 ++--
 7 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt
index 73d4782..15b247b 100644
--- a/Documentation/git-difftool.txt
+++ b/Documentation/git-difftool.txt
@@ -30,8 +30,8 @@ OPTIONS
 --tool=<tool>::
 	Use the diff tool specified by <tool>.
 	Valid merge tools are:
-	kdiff3, kompare, tkdiff, meld, xxdiff, emerge,
-	vimdiff, gvimdiff, ecmerge, and opendiff
+	kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff,
+	ecmerge, diffuse and opendiff
 +
 If a diff tool is not specified, 'git-difftool'
 will use the configuration variable `diff.tool`.  If the
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index 5d3c632..c3a8092 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt
@@ -26,7 +26,8 @@ OPTIONS
 --tool=<tool>::
 	Use the merge resolution program specified by <tool>.
 	Valid merge tools are:
-	kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, and opendiff
+	kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
+	diffuse and opendiff
 +
 If a merge resolution program is not specified, 'git-mergetool'
 will use the configuration variable `merge.tool`.  If the
diff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt
index 1ff08ff..c4fc3eb 100644
--- a/Documentation/merge-config.txt
+++ b/Documentation/merge-config.txt
@@ -22,9 +22,10 @@ merge.stat::
 merge.tool::
 	Controls which merge resolution program is used by
 	linkgit:git-mergetool[1].  Valid built-in values are: "kdiff3",
-	"tkdiff", "meld", "xxdiff", "emerge", "vimdiff", "gvimdiff", and
-	"opendiff".  Any other value is treated is custom merge tool
-	and there must be a corresponding mergetool.<tool>.cmd option.
+	"tkdiff", "meld", "xxdiff", "emerge", "vimdiff", "gvimdiff",
+	"diffuse" and "opendiff".  Any other value is treated as a custom
+	merge tool and there must be a corresponding mergetool.<tool>.cmd
+	option.
 
 merge.verbosity::
 	Controls the amount of output shown by the recursive merge
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index e72ce24..4fcd77a 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1173,7 +1173,8 @@ _git_mergetool ()
 	--tool=*)
 		__gitcomp "
 			kdiff3 tkdiff meld xxdiff emerge
-			vimdiff gvimdiff ecmerge opendiff
+			vimdiff gvimdiff ecmerge diffuse
+			opendiff
 			" "" "${cur##--tool=}"
 		return
 		;;
diff --git a/git-difftool-helper.sh b/git-difftool-helper.sh
index 2dfc870..d174b34 100755
--- a/git-difftool-helper.sh
+++ b/git-difftool-helper.sh
@@ -1,7 +1,5 @@
 #!/bin/sh
 # git-difftool-helper is a GIT_EXTERNAL_DIFF-compatible diff tool launcher.
-# It supports kdiff3, kompare, tkdiff, xxdiff, meld, opendiff,
-# emerge, ecmerge, vimdiff, gvimdiff, and custom user-configurable tools.
 # This script is typically launched by using the 'git difftool'
 # convenience command.
 #
@@ -70,9 +68,9 @@ if test -z "$merge_tool"; then
 	if test -n "$DISPLAY"; then
 		# If gnome then prefer meld, otherwise, prefer kdiff3 or kompare
 		if test -n "$GNOME_DESKTOP_SESSION_ID" ; then
-			merge_tool_candidates="meld kdiff3 kompare tkdiff xxdiff gvimdiff"
+			merge_tool_candidates="meld kdiff3 kompare tkdiff xxdiff gvimdiff diffuse"
 		else
-			merge_tool_candidates="kdiff3 kompare tkdiff xxdiff meld gvimdiff"
+			merge_tool_candidates="kdiff3 kompare tkdiff xxdiff meld gvimdiff diffuse"
 		fi
 	fi
 	if echo "${VISUAL:-$EDITOR}" | grep 'emacs' > /dev/null 2>&1; then
diff --git a/git-mergetool-lib.sh b/git-mergetool-lib.sh
index 3ba332b..197533e 100644
--- a/git-mergetool-lib.sh
+++ b/git-mergetool-lib.sh
@@ -29,7 +29,7 @@ check_unchanged () {
 
 valid_tool () {
 	case "$1" in
-	kdiff3 | kompare | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | gvimdiff | ecmerge)
+	kdiff3 | kompare | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | gvimdiff | ecmerge | diffuse)
 		if test "$1" = "kompare" && ! diff_mode; then
 			return 1
 		fi
@@ -108,6 +108,21 @@ run_mergetool () {
 		fi
 		check_unchanged
 		;;
+	diffuse)
+		if merge_mode; then
+			touch "$BACKUP"
+		fi
+		if $base_present; then
+			"$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE" "$BASE" | cat
+		else
+			if merge_mode; then
+				"$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE" | cat
+			else
+				"$merge_tool_path" "$LOCAL" "$REMOTE" | cat
+			fi
+		fi
+		check_unchanged
+		;;
 	vimdiff)
 		if merge_mode; then
 			touch "$BACKUP"
diff --git a/git-mergetool.sh b/git-mergetool.sh
index fd81ad7..16562bd 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -284,9 +284,9 @@ fi
 if test -z "$merge_tool" ; then
     if test -n "$DISPLAY"; then
         if test -n "$GNOME_DESKTOP_SESSION_ID" ; then
-            merge_tool_candidates="meld kdiff3 tkdiff xxdiff gvimdiff"
+            merge_tool_candidates="meld kdiff3 tkdiff xxdiff gvimdiff diffuse"
         else
-            merge_tool_candidates="kdiff3 tkdiff xxdiff meld gvimdiff"
+            merge_tool_candidates="kdiff3 tkdiff xxdiff meld gvimdiff diffuse"
         fi
     fi
     if echo "${VISUAL:-$EDITOR}" | grep 'emacs' > /dev/null 2>&1; then
-- 
1.6.2.1.303.g63699

[PATCH 2/3] mergetool-lib: specialize xxdiff options when in diff mode

From: David Aguilar <hidden>
Date: 2016-06-15 22:46:32

We don't need '-merged-file', 'save as', and the merge-status exit
code when in diff mode

Signed-off-by: David Aguilar <redacted>
---
 git-mergetool-lib.sh |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/git-mergetool-lib.sh b/git-mergetool-lib.sh
index e2d074d..3ba332b 100644
--- a/git-mergetool-lib.sh
+++ b/git-mergetool-lib.sh
@@ -127,7 +127,9 @@ run_mergetool () {
 		fi
 		;;
 	xxdiff)
-		merge_mode && touch "$BACKUP"
+		if merge_mode; then
+			touch "$BACKUP"
+		fi
 		if $base_present; then
 			"$merge_tool_path" -X --show-merged-pane \
 			    -R 'Accel.SaveAsMerged: "Ctrl-S"' \
@@ -135,12 +137,18 @@ run_mergetool () {
 			    -R 'Accel.SearchForward: "Ctrl-G"' \
 			    --merged-file "$MERGED" "$LOCAL" "$BASE" "$REMOTE"
 		else
-			merge_mode && extra=--show-merged-pane
-			"$merge_tool_path" -X $extra \
-				-R 'Accel.SaveAsMerged: "Ctrl-S"' \
-				-R 'Accel.Search: "Ctrl+F"' \
-				-R 'Accel.SearchForward: "Ctrl-G"' \
-				--merged-file "$MERGED" "$LOCAL" "$REMOTE"
+			if merge_mode; then
+				"$merge_tool_path" -X $extra \
+					-R 'Accel.SaveAsMerged: "Ctrl-S"' \
+					-R 'Accel.Search: "Ctrl+F"' \
+					-R 'Accel.SearchForward: "Ctrl-G"' \
+					--merged-file "$MERGED" "$LOCAL" "$REMOTE"
+			else
+				"$merge_tool_path" \
+					-R 'Accel.Search: "Ctrl+F"' \
+					-R 'Accel.SearchForward: "Ctrl-G"' \
+					"$LOCAL" "$REMOTE"
+			fi
 		fi
 		check_unchanged
 		;;
-- 
1.6.2.1.303.g63699

Re: [PATCH 3/3] mergetool-lib: add diffuse as merge and diff tool

From: David Aguilar <hidden>
Date: 2016-06-15 22:46:32

On  0, David Aguilar [off-list ref] wrote:
From: Sebastian Pipping <redacted>

This adds diffuse as a built-in merge tool.

Signed-off-by: Sebastian Pipping <redacted>
Signed-off-by: David Aguilar <redacted>
---

This is Sebastian's patch rebased onto Junio's pu branch.

I removed the git-gui part because I think git-gui
patches go through Shawn / git-gui.git?
Hi Sebastian..
Here's the patch you sent a couple of days ago applied
onto Junio's pu branch

As I mentioned above, you had some git-gui changes in your
original that I stripped out since I was under the impression
that git-gui patches go through Shawn / git-gui.git.

git-send-email (probably gmail, too) won't let me send
one patch in a series with a different "From:" header,
so maybe you should resend this patch so that you can get the
proper authorship recognition?  I've attached the original
patch file I sent in case you want to just grab it and
send-email it back out for the purposes of getting the right
authorship in there (actually, Junio, please advise...,
I'm not exactly sure what you'd prefer)


Also, all three patches should apply independently,
so even though this says 3/3 in principle they are
actually all independent patches,
I just happened to have them queued up that way.


 Documentation/git-difftool.txt         |    4 ++--
 Documentation/git-mergetool.txt        |    3 ++-
 Documentation/merge-config.txt         |    7 ++++---
 contrib/completion/git-completion.bash |    3 ++-
 git-difftool-helper.sh                 |    6 ++----
 git-mergetool-lib.sh                   |   17 ++++++++++++++++-
 git-mergetool.sh                       |    4 ++--
 7 files changed, 30 insertions(+), 14 deletions(-)
-- 

	David

Re: [PATCH 3/3] mergetool-lib: add diffuse as merge and diff tool

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:46:32

David Aguilar [off-list ref] writes:
git-send-email (probably gmail, too) won't let me send
one patch in a series with a different "From:" header,
so maybe you should resend this patch so that you can get the
proper authorship recognition?  I've attached the original
patch file I sent in case you want to just grab it and
send-email it back out for the purposes of getting the right
authorship in there (actually, Junio, please advise...,
I'm not exactly sure what you'd prefer)
The way you marked your 3/3 with a From: line in the body of the message
is the preferred way to say "David forwards a patch from Sebastian", and
our patch application tool knows about it.

If you wanted to preserve the original author date, you could have also
added a Date: line in-body ("David forwards a patch from Sebastian, who
created it at this date in this timezone").  You can find an earlier
example in:

    http://article.gmane.org/gmane.comp.version-control.git/115289

Re: [PATCH 2/3] mergetool-lib: specialize xxdiff options when in diff mode

From: Markus Heidelberg <hidden>
Date: 2016-06-15 22:46:32

David Aguilar, 02.04.2009:
We don't need '-merged-file', 'save as', and the merge-status exit
code when in diff mode
I guess the same as for xxdiff and kdiff3 also applies to opendiff,
ecmerge and emerge. But since I don't have them installed, I'm not
entirely sure not to break something.
On the other hand it should be save, since they were just copied from
git-mergetool without adjustment for diff use.

Markus

Re: [PATCH 2/3] mergetool-lib: specialize xxdiff options when in diff mode

From: David Aguilar <hidden>
Date: 2016-06-15 22:46:32

On  0, Markus Heidelberg [off-list ref] wrote:
David Aguilar, 02.04.2009:
quoted
We don't need '-merged-file', 'save as', and the merge-status exit
code when in diff mode
I guess the same as for xxdiff and kdiff3 also applies to opendiff,
ecmerge and emerge. But since I don't have them installed, I'm not
entirely sure not to break something.
On the other hand it should be save, since they were just copied from
git-mergetool without adjustment for diff use.

Markus
I have opendiff on a mac at work so I'll give it a test there
and send a patch once it's working.

-- 
		David
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help