All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Schuberth <sschuberth@gmail.com>
To: unlisted-recipients:; (no To-header on input)
Cc: Junio C Hamano <gitster@pobox.com>,
	David Aguilar <davvid@gmail.com>,
	git@vger.kernel.org
Subject: [PATCH] mergetool: support --tool-help option like difftool does
Date: Mon, 23 Jul 2012 20:58:35 +0200	[thread overview]
Message-ID: <500D9EDB.90603@gmail.com> (raw)
In-Reply-To: <500D9E5A.2000204@gmail.com>

This way we do not have to risk the list of tools go out of sync
between the implementation and the documentation. Adjust the documentation
accordingly to not explicitly list the tools but refer to --tool-help.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
---
 Documentation/git-difftool.txt  |  7 ++++---
 Documentation/git-mergetool.txt |  8 ++++----
 git-mergetool--lib.sh           | 11 ++++++++++-
 git-mergetool.sh                | 42 ++++++++++++++++++++++++++++++++++++++++-
 4 files changed, 59 insertions(+), 9 deletions(-)

diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt
index 31fc2e3..0bdfe35 100644
--- a/Documentation/git-difftool.txt
+++ b/Documentation/git-difftool.txt
@@ -36,9 +36,10 @@ OPTIONS
 
 -t <tool>::
 --tool=<tool>::
-	Use the diff tool specified by <tool>.  Valid values include
-	emerge, kompare, meld, and vimdiff. Run `git difftool --tool-help`
-	for the list of valid <tool> settings.
+	Use the diff tool specified by <tool>.
+
+--tool-help::
+	List all supported values for <tool>.
 +
 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 2a49de7..99e53b1 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt
@@ -26,10 +26,10 @@ OPTIONS
 -------
 -t <tool>::
 --tool=<tool>::
-	Use the merge resolution program specified by <tool>.
-	Valid merge tools are:
-	araxis, bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3,
-	meld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff and xxdiff.
+	Use the merge tool specified by <tool>.
+
+--tool-help::
+	List all supported values for <tool>.
 +
 If a merge resolution program is not specified, 'git mergetool'
 will use the configuration variable `merge.tool`.  If the
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index ed630b2..f0865d4 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -111,15 +111,18 @@ run_merge_tool () {
 	return $status
 }
 
-guess_merge_tool () {
+list_merge_tool_candidates () {
+	# Add tools that can either do merging or diffing, but not both.
 	if merge_mode
 	then
 		tools="tortoisemerge"
 	else
 		tools="kompare"
 	fi
+
 	if test -n "$DISPLAY"
 	then
+		# Prefer GTK-based tools under Gnome.
 		if test -n "$GNOME_DESKTOP_SESSION_ID"
 		then
 			tools="meld opendiff kdiff3 tkdiff xxdiff $tools"
@@ -128,6 +131,8 @@ guess_merge_tool () {
 		fi
 		tools="$tools gvimdiff diffuse ecmerge p4merge araxis bc3"
 	fi
+
+	# Prefer vimdiff if vim is the default editor.
 	case "${VISUAL:-$EDITOR}" in
 	*vim*)
 		tools="$tools vimdiff emerge"
@@ -136,6 +141,10 @@ guess_merge_tool () {
 		tools="$tools emerge vimdiff"
 		;;
 	esac
+}
+
+guess_merge_tool () {
+	list_merge_tool_candidates
 	echo >&2 "merge tool candidates: $tools"
 
 	# Loop over each candidate and stop when a valid merge tool is found.
diff --git a/git-mergetool.sh b/git-mergetool.sh
index a9f23f7..0db0c44 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -8,7 +8,7 @@
 # at the discretion of Junio C Hamano.
 #
 
-USAGE='[--tool=tool] [-y|--no-prompt|--prompt] [file to merge] ...'
+USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [file to merge] ...'
 SUBDIRECTORY_OK=Yes
 OPTIONS_SPEC=
 TOOL_MODE=merge
@@ -284,11 +284,51 @@ merge_file () {
     return 0
 }
 
+show_tool_help () {
+	TOOL_MODE=merge
+	list_merge_tool_candidates
+	unavailable= available= LF='
+'
+	for i in $tools
+	do
+		merge_tool_path=$(translate_merge_tool_path "$i")
+		if type "$merge_tool_path" >/dev/null 2>&1
+		then
+			available="$available$i$LF"
+		else
+			unavailable="$unavailable$i$LF"
+		fi
+	done
+	if test -n "$available"
+	then
+		echo "'git mergetool --tool=<tool>' may be set to one of the following:"
+		echo "$available" | sort | sed -e 's/^/	/'
+	else
+		echo "No suitable tool for 'git mergetool --tool=<tool>' found."
+	fi
+	if test -n "$unavailable"
+	then
+		echo
+		echo 'The following tools are valid, but not currently available:'
+		echo "$unavailable" | sort | sed -e 's/^/	/'
+	fi
+	if test -n "$unavailable$available"
+	then
+		echo
+		echo "Some of the tools listed above only work in a windowed"
+		echo "environment. If run in a terminal-only session, they will fail."
+	fi
+	exit 0
+}
+
 prompt=$(git config --bool mergetool.prompt || echo true)
 
 while test $# != 0
 do
     case "$1" in
+	--tool-help)
+		show_tool_help
+		;;
 	-t|--tool*)
 	    case "$#,$1" in
 		*,*=*)
-- 
1.7.11.msysgit.2

  reply	other threads:[~2012-07-23 18:58 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-23  7:10 [PATCH 0/4] Various merge / diff tool related minor clean-ups and improvements Sebastian Schuberth
2012-07-23  7:14 ` [PATCH v2 0/5] " Sebastian Schuberth
2012-07-23  7:17   ` [PATCH v2 1/5] Sort the list of tools that support both merging and diffing alphabetically Sebastian Schuberth
2012-07-23  7:18   ` [PATCH v2 2/5] Use variables for the lists of tools that support merging / diffing Sebastian Schuberth
2012-07-23 16:46     ` Junio C Hamano
2012-07-23 18:30       ` Sebastian Schuberth
2012-07-23 18:32         ` [PATCH 1/4] " Sebastian Schuberth
2012-07-23 18:37         ` [PATCH v2 2/5] " Junio C Hamano
2012-07-23 19:03           ` Sebastian Schuberth
2012-07-23  7:18   ` [PATCH 3/5] Explicitly list all valid diff tools and document --tool-help as an option Sebastian Schuberth
2012-07-23 16:48     ` Junio C Hamano
2012-07-23 17:21       ` mergetool: support --tool-help option like difftool does Junio C Hamano
2012-07-23 18:56         ` Sebastian Schuberth
2012-07-23 18:58           ` Sebastian Schuberth [this message]
2012-07-23 19:52             ` [PATCH] " Junio C Hamano
2012-07-23 20:14               ` Sebastian Schuberth
2012-07-23 20:44                 ` David Aguilar
2012-07-23 21:16                   ` Junio C Hamano
2012-07-23 21:27                     ` Sebastian Schuberth
2012-07-23 22:31                       ` Junio C Hamano
2012-08-23  5:33         ` Re*: " Junio C Hamano
2012-08-23  7:39           ` David Aguilar
2012-08-23 17:39             ` Junio C Hamano
2012-08-24  8:31               ` David Aguilar
2012-08-26 18:38                 ` Jens Lehmann
2012-07-23  7:19   ` [PATCH v2 4/5] Make sure to use Araxis' "compare" and not e.g. ImageMagick's Sebastian Schuberth
2012-07-23 16:50     ` Junio C Hamano
2012-07-23 19:37       ` [PATCH] " Sebastian Schuberth
2012-07-23 20:47         ` Junio C Hamano
2012-07-23 21:09           ` Sebastian Schuberth
2012-07-23 21:24             ` Junio C Hamano
2012-07-23 21:31               ` Sebastian Schuberth
2012-07-23 21:34               ` David Aguilar
2012-07-23 21:44                 ` Sebastian Schuberth
2012-07-23 21:26             ` Andreas Schwab
2012-07-23 22:22             ` Junio C Hamano
2012-07-23 22:39               ` Sebastian Schuberth
2012-07-23 22:41               ` Junio C Hamano
2012-07-23 23:09                 ` Sebastian Schuberth
2012-07-23  7:20   ` [PATCH v2 5/5] Add a few more code comments and blank lines in guess_merge_tool Sebastian Schuberth

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=500D9EDB.90603@gmail.com \
    --to=sschuberth@gmail.com \
    --cc=davvid@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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.