Skip to content

Commit

Permalink
Merge branch 'da/difftool-git-files' into maint
Browse files Browse the repository at this point in the history
"git difftool" misbehaved when the repository is bound to the
working tree with the ".git file" mechanism, where a textual file
".git" tells us where it is.

* da/difftool-git-files:
  t7800: add a difftool test for .git-files
  difftool: support repositories with .git-files
  • Loading branch information
Junio C Hamano committed Mar 18, 2014
2 parents 4097a25 + fcfec8b commit 01e13d0
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 16 deletions.
18 changes: 2 additions & 16 deletions git-difftool.perl
Original file line number Diff line number Diff line change
Expand Up @@ -39,24 +39,10 @@ sub 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
Expand Down Expand Up @@ -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);

Expand Down
14 changes: 14 additions & 0 deletions t/t7800-difftool.sh
Original file line number Diff line number Diff line change
Expand Up @@ -434,4 +434,18 @@ test_expect_success PERL 'difftool --no-symlinks detects conflict ' '
)
'

test_expect_success PERL 'difftool properly honors gitlink and core.worktree' '
git submodule add ./. submod/ule &&
(
cd submod/ule &&
test_config diff.tool checktrees &&
test_config difftool.checktrees.cmd '\''
test -d "$LOCAL" && test -d "$REMOTE" && echo good
'\'' &&
echo good >expect &&
git difftool --tool=checktrees --dir-diff HEAD~ >actual &&
test_cmp expect actual
)
'

test_done

0 comments on commit 01e13d0

Please sign in to comment.