Merge branch 'da/difftool-dir-diff-symlink-fix' into da/difftool
* da/difftool-dir-diff-symlink-fix: difftool: fix symlink-file writing in dir-diff mode
This commit is contained in:
commit
77bd616367
@ -557,11 +557,13 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
|
||||
if (*entry->left) {
|
||||
add_path(&ldir, ldir_len, entry->path);
|
||||
ensure_leading_directories(ldir.buf);
|
||||
unlink(ldir.buf);
|
||||
write_file(ldir.buf, "%s", entry->left);
|
||||
}
|
||||
if (*entry->right) {
|
||||
add_path(&rdir, rdir_len, entry->path);
|
||||
ensure_leading_directories(rdir.buf);
|
||||
unlink(rdir.buf);
|
||||
write_file(rdir.buf, "%s", entry->right);
|
||||
}
|
||||
}
|
||||
|
@ -674,7 +674,6 @@ test_expect_success SYMLINKS 'difftool --dir-diff handles modified symlinks' '
|
||||
rm c &&
|
||||
ln -s d c &&
|
||||
cat >expect <<-EOF &&
|
||||
b
|
||||
c
|
||||
|
||||
c
|
||||
@ -710,7 +709,6 @@ test_expect_success SYMLINKS 'difftool --dir-diff handles modified symlinks' '
|
||||
# Deleted symlinks
|
||||
rm -f c &&
|
||||
cat >expect <<-EOF &&
|
||||
b
|
||||
c
|
||||
|
||||
EOF
|
||||
@ -723,6 +721,71 @@ test_expect_success SYMLINKS 'difftool --dir-diff handles modified symlinks' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success SYMLINKS 'difftool --dir-diff writes symlinks as raw text' '
|
||||
# Start out on a branch called "branch-init".
|
||||
git init -b branch-init symlink-files &&
|
||||
(
|
||||
cd symlink-files &&
|
||||
# This test ensures that symlinks are written as raw text.
|
||||
# The "cat" tools output link and file contents.
|
||||
git config difftool.cat-left-link.cmd "cat \"\$LOCAL/link\"" &&
|
||||
git config difftool.cat-left-a.cmd "cat \"\$LOCAL/file-a\"" &&
|
||||
git config difftool.cat-right-link.cmd "cat \"\$REMOTE/link\"" &&
|
||||
git config difftool.cat-right-b.cmd "cat \"\$REMOTE/file-b\"" &&
|
||||
|
||||
# Record the empty initial state so that we can come back here
|
||||
# later and not have to consider the any cases where difftool
|
||||
# will create symlinks back into the worktree.
|
||||
test_tick &&
|
||||
git commit --allow-empty -m init &&
|
||||
|
||||
# Create a file called "file-a" with a symlink pointing to it.
|
||||
git switch -c branch-a &&
|
||||
echo a >file-a &&
|
||||
ln -s file-a link &&
|
||||
git add file-a link &&
|
||||
test_tick &&
|
||||
git commit -m link-to-file-a &&
|
||||
|
||||
# Create a file called "file-b" and point the symlink to it.
|
||||
git switch -c branch-b &&
|
||||
echo b >file-b &&
|
||||
rm link &&
|
||||
ln -s file-b link &&
|
||||
git add file-b link &&
|
||||
git rm file-a &&
|
||||
test_tick &&
|
||||
git commit -m link-to-file-b &&
|
||||
|
||||
# Checkout the initial branch so that the --symlinks behavior is
|
||||
# not activated. The two directories should be completely
|
||||
# independent with no symlinks pointing back here.
|
||||
git switch branch-init &&
|
||||
|
||||
# The left link must be "file-a" and "file-a" must contain "a".
|
||||
echo file-a >expect &&
|
||||
git difftool --symlinks --dir-diff --tool cat-left-link \
|
||||
branch-a branch-b >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
echo a >expect &&
|
||||
git difftool --symlinks --dir-diff --tool cat-left-a \
|
||||
branch-a branch-b >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
# The right link must be "file-b" and "file-b" must contain "b".
|
||||
echo file-b >expect &&
|
||||
git difftool --symlinks --dir-diff --tool cat-right-link \
|
||||
branch-a branch-b >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
echo b >expect &&
|
||||
git difftool --symlinks --dir-diff --tool cat-right-b \
|
||||
branch-a branch-b >actual &&
|
||||
test_cmp expect actual
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'add -N and difftool -d' '
|
||||
test_when_finished git reset --hard &&
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user