From: Junio C Hamano Date: Thu, 15 Mar 2012 23:18:00 GMT Subject: Re: [PATCH] difftool: print list of valid tools with '--tool-help' Message-ID: <7v8vj1ihcn.fsf@alter.siamese.dyndns.org> In-Reply-To: <1331850311-4620-1-git-send-email-tim.henigan@gmail.com> Tim Henigan writes: > @@ -100,6 +101,15 @@ sub generate_command > if ($arg eq '-h') { > usage(); > } > + if ($arg eq '--tool-help') { > + my $gitpath = Git::exec_path(); > + print "'git difftool --tool=' may be set to one of the following:\n"; > + for (glob "$gitpath/mergetools/*") { > + next if /defaults$/; > + print "\t" . basename($_) . "\n"; > + } As this topic to show list of tools dynamically has plenty of time to be in the mainline (it will be post 1.7.10), I would suggest a follow-up series to this patch to do things like the following (just thinking aloud): - define a new entry point to these mergetools/ scriptlets, let's call it "cando". An entry for mergetools/kompare might look like this: cando () { type kompare >/dev/null && test -n "$DISPLAY" } that would yield true only when kompare is available and $DISPLAY is set. - instead of dumping everything in $gitpath/mergetools/*, check if each tool says it can be used in the user's environment. for (glob "$gitpath/mergetools/*") { next unless can_run($_); print ... } ... and "can_run" may look like this: sub can_run { my ($script) = @_; my $cmd = ". '$script' && cando"; system('sh', '-c', $cmd) == 0; } - perhaps show the result in columnar layout.