Re: [PATCH] difftool: print list of valid tools with '--tool-help'
- From
Tim Henigan <tim.henigan@gmail.com>
- Date
- Mar 23, 2012, 18:26 UTC
- Message-ID
- <CAFouethYEmY7g3Uw0HfFMOKFNcBv=TyAsSyEkBU-cQrhaf6v7g@mail.gmail.com>
- In-Reply-To
- <7v8vj1ihcn.fsf@alter.siamese.dyndns.org>
On Thu, Mar 15, 2012 at 7:18 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 19 quoted lines
> Tim Henigan <tim.henigan@gmail.com> 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?