git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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?
Previous: Junio C HamanoNext: Junio C Hamano
Message 5 of 7 in “difftool: print list of valid tools with '--tool-help'”
  1. difftool: print list of valid tools with '--tool-help'Tim Henigan, Mar 15, 2012
  2. Junio C HamanoMar 15, 2012
  3. David AguilarMar 17, 2012
  4. Junio C HamanoMar 15, 2012
  5. Tim HeniganMar 23, 2012
  6. Junio C HamanoMar 23, 2012
  7. 9/9 difftool: print list of valid tools with '--tool-help'Tim Henigan, Mar 26, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.