David Aguilar <[email protected]> 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 <[email protected]>
> Helped-by: Jens Lehmann <[email protected]>
> Helped-by: John Keeping <[email protected]>
> Signed-off-by: David Aguilar <[email protected]>
> ---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html