David Aguilar <davvid@xxxxxxxxx> writes: > 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@xxxxxxxxx> > Helped-by: Jens Lehmann <jens.lehmann@xxxxxx> > Helped-by: John Keeping <john@xxxxxxxxxxxxx> > Signed-off-by: David Aguilar <davvid@xxxxxxxxx> > --- Looks good; thanks. > 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); -- 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