On Thu, Mar 15, 2012 at 7:18 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Tim Henigan <tim.henigan@xxxxxxxxx> writes: > > 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. I experimented with this a bit and came up with the following idea (not protected for GMail whitespace mangling): # The following is to be added to 'git-difftool.perl' sub print_tool_help { my ($cmd, @found, @notfound); my $gitpath = Git::exec_path(); for (glob "$gitpath/mergetools/*") { my $tool = basename($_); next if ($tool eq "defaults"); $cmd = '. "$(git --exec-path)/git-mergetool--lib"'; $cmd .= " && get_merge_tool_path $tool >/dev/null 2>&1"; if (system('sh', '-c', $cmd) == 0) { push(@found, $tool); } else { push(@notfound, $tool); } } print "'git difftool --tool=<tool>' may be set to one of the following:\n"; print "\t$_\n" for (@found); print "\nThe following are valid tools, but not currently installed:\n"; print "\t$_\n" for (@notfound); exit(0); } Rather than create a new entry point, I used the existing 'get_merge_tool_path' that resides in 'git-mergetool--lib' to determine if a given tool is actually installed on the system. The '$DISPLAY' variable is lost in this implementation, but honestly I don't understand how it was intended to be used. Does this look useful? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html