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

Re: [PATCH] difftool: support repositories with .git-files

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 24, 2014, 17:55 UTC
Message-ID
<xmqqr46s9yzx.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1393211555-50270-1-git-send-email-davvid@gmail.com>
David Aguilar <davvid@gmail.com> writes:
Show 20 quoted lines
> Modern versions of "git submodule" use .git-files to setup the
> submodule directory.  When run in a "git submodule"-created
> repository "git difftool --dir-diff" dies with the following
> error:
>
> 	$ git difftool -d HEAD~
> 	fatal: This operation must be run in a work tree
> 	diff --raw --no-abbrev -z HEAD~: command returned error: 128
>
> core.worktree is relative to the .git directory but the logic
> in find_worktree() does not account for it.
>
> Use `git rev-parse --show-toplevel` to find the worktree so that
> the dir-diff feature works inside a submodule.
>
> Reported-by: Gábor Lipták <gabor.liptak@gmail.com>
> Helped-by: Jens Lehmann <jens.lehmann@web.de>
> Helped-by: John Keeping <john@keeping.me.uk>
> Signed-off-by: David Aguilar <davvid@gmail.com>
> ---
Looks good; thanks.
Show 41 quoted lines
>  git-difftool.perl | 18 ++----------------
>  1 file changed, 2 insertions(+), 16 deletions(-)
>
> diff --git a/git-difftool.perl b/git-difftool.perl
> index e57d3d1..18ca61e 100755
> --- a/git-difftool.perl
> +++ b/git-difftool.perl
> @@ -39,24 +39,10 @@ USAGE
>  
>  sub find_worktree
>  {
> -	my ($repo) = @_;
> -
>  	# Git->repository->wc_path() does not honor changes to the working
>  	# tree location made by $ENV{GIT_WORK_TREE} or the 'core.worktree'
>  	# config variable.
> -	my $worktree;
> -	my $env_worktree = $ENV{GIT_WORK_TREE};
> -	my $core_worktree = Git::config('core.worktree');
> -
> -	if (defined($env_worktree) and (length($env_worktree) > 0)) {
> -		$worktree = $env_worktree;
> -	} elsif (defined($core_worktree) and (length($core_worktree) > 0)) {
> -		$worktree = $core_worktree;
> -	} else {
> -		$worktree = $repo->wc_path();
> -	}
> -
> -	return $worktree;
> +	return Git::command_oneline('rev-parse', '--show-toplevel');
>  }
>  
>  sub print_tool_help
> @@ -418,7 +404,7 @@ sub dir_diff
>  	my $rc;
>  	my $error = 0;
>  	my $repo = Git->repository();
> -	my $workdir = find_worktree($repo);
> +	my $workdir = find_worktree();
>  	my ($a, $b, $tmpdir, @worktree) =
>  		setup_dir_diff($repo, $workdir, $symlinks);
Previous: David AguilarNext: Jens Lehmann
Message 2 of 8 in “difftool: support repositories with .git-files”
  1. difftool: support repositories with .git-filesDavid Aguilar, Feb 24, 2014
  2. Junio C HamanoFeb 24, 2014
  3. Jens LehmannFeb 24, 2014
  4. Junio C HamanoFeb 25, 2014
  5. Jens LehmannFeb 25, 2014
  6. Junio C HamanoFeb 25, 2014
  7. Jens LehmannFeb 27, 2014
  8. t7800: add a difftool test for .git-filesDavid Aguilar, Mar 5, 2014

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.