提交 6ddc862e 编写于 作者: J Junio C Hamano

Merge branch 'js/test-ln-s-add' into maint

* js/test-ln-s-add:
  t4011: remove SYMLINKS prerequisite
  t6035: use test_ln_s_add to remove SYMLINKS prerequisite
  t3509, t4023, t4114: use test_ln_s_add to remove SYMLINKS prerequisite
  t3100: use test_ln_s_add to remove SYMLINKS prerequisite
  t3030: use test_ln_s_add to remove SYMLINKS prerequisite
  t0000: use test_ln_s_add to remove SYMLINKS prerequisite
  tests: use test_ln_s_add to remove SYMLINKS prerequisite (trivial cases)
  tests: introduce test_ln_s_add
  t3010: modernize style
  test-chmtime: Fix exit code on Windows
......@@ -595,6 +595,20 @@ library for your script to use.
test_cmp expected actual
'
- test_ln_s_add <path1> <path2>
This function helps systems whose filesystem does not support symbolic
links. Use it to add a symbolic link entry to the index when it is not
important that the file system entry is a symbolic link, i.e., instead
of the sequence
ln -s foo bar &&
git add bar
Sometimes it is possible to split a test in a part that does not need
the symbolic link in the file system and a part that does; then only
the latter part need be protected by a SYMLINKS prerequisite (see below).
Prerequisites
-------------
......
......@@ -367,22 +367,6 @@ test_expect_success 'validate object ID of a known tree' '
# Various types of objects
# Some filesystems do not support symblic links; on such systems
# some expected values are different
if test_have_prereq SYMLINKS
then
expectfilter=cat
expectedtree=087704a96baf1c2d1c869a8b084481e121c88b5b
expectedptree1=21ae8269cacbe57ae09138dcc3a2887f904d02b3
expectedptree2=3c5e5399f3a333eddecce7a9b9465b63f65f51e2
else
expectfilter='grep -v sym'
expectedtree=8e18edf7d7edcf4371a3ac6ae5f07c2641db7c46
expectedptree1=cfb8591b2f65de8b8cc1020cd7d9e67e7793b325
expectedptree2=ce580448f0148b985a513b693fdf7d802cacb44f
fi
test_expect_success 'adding various types of objects with git update-index --add' '
mkdir path2 path3 path3/subp3 &&
paths="path0 path2/file2 path3/file3 path3/subp3/file3" &&
......@@ -390,10 +374,7 @@ test_expect_success 'adding various types of objects with git update-index --add
for p in $paths
do
echo "hello $p" >$p || exit 1
if test_have_prereq SYMLINKS
then
ln -s "hello $p" ${p}sym || exit 1
fi
test_ln_s_add "hello $p" ${p}sym || exit 1
done
) &&
find path* ! -type d -print | xargs git update-index --add
......@@ -405,7 +386,7 @@ test_expect_success 'showing stage with git ls-files --stage' '
'
test_expect_success 'validate git ls-files output for a known tree' '
$expectfilter >expected <<-\EOF &&
cat >expected <<-\EOF &&
100644 f87290f8eb2cbbea7857214459a0739927eab154 0 path0
120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0 path0sym
100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0 path2/file2
......@@ -423,14 +404,14 @@ test_expect_success 'writing tree out with git write-tree' '
'
test_expect_success 'validate object ID for a known tree' '
test "$tree" = "$expectedtree"
test "$tree" = 087704a96baf1c2d1c869a8b084481e121c88b5b
'
test_expect_success 'showing tree with git ls-tree' '
git ls-tree $tree >current
'
test_expect_success SYMLINKS 'git ls-tree output for a known tree' '
test_expect_success 'git ls-tree output for a known tree' '
cat >expected <<-\EOF &&
100644 blob f87290f8eb2cbbea7857214459a0739927eab154 path0
120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01 path0sym
......@@ -447,7 +428,7 @@ test_expect_success 'showing tree with git ls-tree -r' '
'
test_expect_success 'git ls-tree -r output for a known tree' '
$expectfilter >expected <<-\EOF &&
cat >expected <<-\EOF &&
100644 blob f87290f8eb2cbbea7857214459a0739927eab154 path0
120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01 path0sym
100644 blob 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 path2/file2
......@@ -465,7 +446,7 @@ test_expect_success 'showing tree with git ls-tree -r -t' '
git ls-tree -r -t $tree >current
'
test_expect_success SYMLINKS 'git ls-tree -r output for a known tree' '
test_expect_success 'git ls-tree -r output for a known tree' '
cat >expected <<-\EOF &&
100644 blob f87290f8eb2cbbea7857214459a0739927eab154 path0
120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01 path0sym
......@@ -487,7 +468,7 @@ test_expect_success 'writing partial tree out with git write-tree --prefix' '
'
test_expect_success 'validate object ID for a known tree' '
test "$ptree" = "$expectedptree1"
test "$ptree" = 21ae8269cacbe57ae09138dcc3a2887f904d02b3
'
test_expect_success 'writing partial tree out with git write-tree --prefix' '
......@@ -495,7 +476,7 @@ test_expect_success 'writing partial tree out with git write-tree --prefix' '
'
test_expect_success 'validate object ID for a known tree' '
test "$ptree" = "$expectedptree2"
test "$ptree" = 3c5e5399f3a333eddecce7a9b9465b63f65f51e2
'
test_expect_success 'put invalid objects into the index' '
......@@ -529,7 +510,7 @@ test_expect_success 'git read-tree followed by write-tree should be idempotent'
'
test_expect_success 'validate git diff-files output for a know cache/work tree state' '
$expectfilter >expected <<\EOF &&
cat >expected <<\EOF &&
:100644 100644 f87290f8eb2cbbea7857214459a0739927eab154 0000000000000000000000000000000000000000 M path0
:120000 120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0000000000000000000000000000000000000000 M path0sym
:100644 100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0000000000000000000000000000000000000000 M path2/file2
......@@ -553,7 +534,7 @@ test_expect_success 'no diff after checkout and git update-index --refresh' '
'
################################################################
P=$expectedtree
P=087704a96baf1c2d1c869a8b084481e121c88b5b
test_expect_success 'git commit-tree records the correct tree in a commit' '
commit0=$(echo NO | git commit-tree $P) &&
......
......@@ -158,7 +158,7 @@ test_expect_success '3-way not overwriting local changes (their side)' '
'
test_expect_success SYMLINKS 'funny symlink in work tree' '
test_expect_success 'funny symlink in work tree' '
git reset --hard &&
git checkout -b sym-b side-b &&
......@@ -170,15 +170,14 @@ test_expect_success SYMLINKS 'funny symlink in work tree' '
rm -fr a &&
git checkout -b sym-a side-a &&
mkdir -p a &&
ln -s ../b a/b &&
git add a/b &&
test_ln_s_add ../b a/b &&
git commit -m "we add a/b" &&
read_tree_u_must_succeed -m -u sym-a sym-a sym-b
'
test_expect_success SYMLINKS,SANITY 'funny symlink in work tree, un-unlink-able' '
test_expect_success SANITY 'funny symlink in work tree, un-unlink-able' '
rm -fr a b &&
git reset --hard &&
......
......@@ -59,10 +59,9 @@ test_expect_success \
'git read-tree -m $tree1 && git checkout-index -f -a'
test_debug 'show_files $tree1'
test_expect_success SYMLINKS \
'git update-index --add a symlink.' \
'ln -s path0 path1 &&
git update-index --add path1'
test_expect_success \
'add a symlink' \
'test_ln_s_add path0 path1'
test_expect_success \
'writing tree out with git write-tree' \
'tree3=$(git write-tree)'
......
......@@ -194,11 +194,10 @@ test_expect_success \
test $(cat ../$s1) = tree1asubdir/path5)
)'
test_expect_success SYMLINKS \
test_expect_success \
'checkout --temp symlink' '
rm -f path* .merge_* out .git/index &&
ln -s b a &&
git update-index --add a &&
test_ln_s_add b a &&
t4=$(git write-tree) &&
rm -f .git/index &&
git read-tree $t4 &&
......
......@@ -6,7 +6,7 @@ test_description='git checkout to switch between branches with symlink<->dir'
. ./test-lib.sh
test_expect_success SYMLINKS setup '
test_expect_success setup '
mkdir frotz &&
echo hello >frotz/filfre &&
......@@ -25,25 +25,25 @@ test_expect_success SYMLINKS setup '
git rm --cached frotz/filfre &&
mv frotz xyzzy &&
ln -s xyzzy frotz &&
git add xyzzy/filfre frotz &&
test_ln_s_add xyzzy frotz &&
git add xyzzy/filfre &&
test_tick &&
git commit -m "side moves frotz/ to xyzzy/ and adds frotz->xyzzy/"
'
test_expect_success SYMLINKS 'switch from symlink to dir' '
test_expect_success 'switch from symlink to dir' '
git checkout master
'
test_expect_success SYMLINKS 'Remove temporary directories & switch to master' '
test_expect_success 'Remove temporary directories & switch to master' '
rm -fr frotz xyzzy nitfol &&
git checkout -f master
'
test_expect_success SYMLINKS 'switch from dir to symlink' '
test_expect_success 'switch from dir to symlink' '
git checkout side
......
......@@ -29,21 +29,25 @@ test_expect_success 'checkout commit with dir must not remove untracked a/b' '
test -f a/b
'
test_expect_success SYMLINKS 'create a commit where dir a/b changed to symlink' '
test_expect_success 'create a commit where dir a/b changed to symlink' '
rm -rf a/b && # cleanup if previous test failed
git checkout -f -b symlink start &&
rm -rf a/b &&
ln -s foo a/b &&
git add -A &&
test_ln_s_add foo a/b &&
git commit -m "dir to symlink"
'
test_expect_success SYMLINKS 'checkout commit with dir must not remove untracked a/b' '
test_expect_success 'checkout commit with dir must not remove untracked a/b' '
git rm --cached a/b &&
git commit -m "un-track the symlink" &&
test_must_fail git checkout start &&
test_must_fail git checkout start
'
test_expect_success SYMLINKS 'the symlink remained' '
test -h a/b
'
......
......@@ -96,11 +96,10 @@ test_expect_success 'non-limited update in subdir leaves root alone' '
test_cmp expect actual
'
test_expect_success SYMLINKS 'replace a file with a symlink' '
test_expect_success 'replace a file with a symlink' '
rm foo &&
ln -s top foo &&
git add -u -- foo
test_ln_s_add top foo
'
......
......@@ -37,71 +37,65 @@ modified without reporting path9 and path10.
'
. ./test-lib.sh
date >path0
if test_have_prereq SYMLINKS
then
ln -s xyzzy path1
else
date > path1
fi
mkdir path2 path3
date >path2/file2
date >path3/file3
: >path7
date >path8
: >path9
date >path10
test_expect_success \
'git update-index --add to add various paths.' \
"git update-index --add -- path0 path1 path?/file? path7 path8 path9 path10"
rm -fr path? ;# leave path10 alone
date >path2
if test_have_prereq SYMLINKS
then
ln -s frotz path3
ln -s nitfol path5
else
date > path3
date > path5
fi
mkdir path0 path1 path6
date >path0/file0
date >path1/file1
date >path6/file6
date >path7
: >path8
: >path9
touch path10
test_expect_success 'git update-index --add to add various paths.' '
date >path0 &&
test_ln_s_add xyzzy path1 &&
mkdir path2 path3 &&
date >path2/file2 &&
date >path3/file3 &&
: >path7 &&
date >path8 &&
: >path9 &&
date >path10 &&
git update-index --add -- path0 path?/file? path7 path8 path9 path10 &&
rm -fr path? # leave path10 alone
'
test_expect_success \
'git ls-files -k to show killed files.' \
'git ls-files -k >.output'
cat >.expected <<EOF
path0/file0
path1/file1
path2
path3
EOF
test_expect_success 'git ls-files -k to show killed files.' '
date >path2 &&
if test_have_prereq SYMLINKS
then
ln -s frotz path3 &&
ln -s nitfol path5
else
date >path3 &&
date >path5
fi &&
mkdir path0 path1 path6 &&
date >path0/file0 &&
date >path1/file1 &&
date >path6/file6 &&
date >path7 &&
: >path8 &&
: >path9 &&
touch path10 &&
git ls-files -k >.output
'
test_expect_success \
'validate git ls-files -k output.' \
'test_cmp .expected .output'
test_expect_success 'validate git ls-files -k output.' '
cat >.expected <<-\EOF &&
path0/file0
path1/file1
path2
path3
EOF
test_cmp .expected .output
'
test_expect_success \
'git ls-files -m to show modified files.' \
'git ls-files -m >.output'
cat >.expected <<EOF
path0
path1
path2/file2
path3/file3
path7
path8
EOF
test_expect_success 'git ls-files -m to show modified files.' '
git ls-files -m >.output
'
test_expect_success \
'validate git ls-files -m output.' \
'test_cmp .expected .output'
test_expect_success 'validate git ls-files -m output.' '
cat >.expected <<-\EOF &&
path0
path1
path2/file2
path3/file3
path7
path8
EOF
test_cmp .expected .output
'
test_done
......@@ -25,10 +25,7 @@ test_expect_success 'setup 1' '
git branch submod &&
git branch copy &&
git branch rename &&
if test_have_prereq SYMLINKS
then
git branch rename-ln
fi &&
git branch rename-ln &&
echo hello >>a &&
cp a d/e &&
......@@ -260,16 +257,12 @@ test_expect_success 'setup 8' '
git add e &&
test_tick &&
git commit -m "rename a->e" &&
if test_have_prereq SYMLINKS
then
git checkout rename-ln &&
git mv a e &&
ln -s e a &&
git add a e &&
test_tick &&
git commit -m "rename a->e, symlink a->e" &&
oln=`printf e | git hash-object --stdin`
fi
git checkout rename-ln &&
git mv a e &&
test_ln_s_add e a &&
test_tick &&
git commit -m "rename a->e, symlink a->e" &&
oln=`printf e | git hash-object --stdin`
'
test_expect_success 'setup 9' '
......@@ -569,28 +562,25 @@ test_expect_success 'merge-recursive copy vs. rename' '
test_cmp expected actual
'
if test_have_prereq SYMLINKS
then
test_expect_failure 'merge-recursive rename vs. rename/symlink' '
git checkout -f rename &&
git merge rename-ln &&
( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
(
echo "120000 blob $oln a"
echo "100644 blob $o0 b"
echo "100644 blob $o0 c"
echo "100644 blob $o0 d/e"
echo "100644 blob $o0 e"
echo "120000 $oln 0 a"
echo "100644 $o0 0 b"
echo "100644 $o0 0 c"
echo "100644 $o0 0 d/e"
echo "100644 $o0 0 e"
) >expected &&
test_cmp expected actual
'
fi
test_expect_failure 'merge-recursive rename vs. rename/symlink' '
git checkout -f rename &&
git merge rename-ln &&
( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
(
echo "120000 blob $oln a"
echo "100644 blob $o0 b"
echo "100644 blob $o0 c"
echo "100644 blob $o0 d/e"
echo "100644 blob $o0 e"
echo "120000 $oln 0 a"
echo "100644 $o0 0 b"
echo "100644 $o0 0 c"
echo "100644 $o0 0 d/e"
echo "100644 $o0 0 e"
) >expected &&
test_cmp expected actual
'
test_done
......@@ -22,20 +22,8 @@ test_expect_success \
'setup' \
'mkdir path2 path2/baz &&
echo Hi >path0 &&
if test_have_prereq SYMLINKS
then
ln -s path0 path1 &&
ln -s ../path1 path2/bazbo
make_expected () {
cat >expected
}
else
printf path0 > path1 &&
printf ../path1 > path2/bazbo
make_expected () {
sed -e "s/120000 /100644 /" >expected
}
fi &&
test_ln_s_add path0 path1 &&
test_ln_s_add ../path1 path2/bazbo &&
echo Lo >path2/foo &&
echo Mi >path2/baz/b &&
find path? \( -type f -o -type l \) -print |
......@@ -51,7 +39,7 @@ test_output () {
test_expect_success \
'ls-tree plain' \
'git ls-tree $tree >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
100644 blob X path0
120000 blob X path1
040000 tree X path2
......@@ -61,7 +49,7 @@ EOF
test_expect_success \
'ls-tree recursive' \
'git ls-tree -r $tree >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
100644 blob X path0
120000 blob X path1
100644 blob X path2/baz/b
......@@ -73,7 +61,7 @@ EOF
test_expect_success \
'ls-tree recursive with -t' \
'git ls-tree -r -t $tree >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
100644 blob X path0
120000 blob X path1
040000 tree X path2
......@@ -87,7 +75,7 @@ EOF
test_expect_success \
'ls-tree recursive with -d' \
'git ls-tree -r -d $tree >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
040000 tree X path2
040000 tree X path2/baz
EOF
......@@ -96,7 +84,7 @@ EOF
test_expect_success \
'ls-tree filtered with path' \
'git ls-tree $tree path >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
EOF
test_output'
......@@ -106,7 +94,7 @@ EOF
test_expect_success \
'ls-tree filtered with path1 path0' \
'git ls-tree $tree path1 path0 >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
100644 blob X path0
120000 blob X path1
EOF
......@@ -115,7 +103,7 @@ EOF
test_expect_success \
'ls-tree filtered with path0/' \
'git ls-tree $tree path0/ >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
EOF
test_output'
......@@ -124,7 +112,7 @@ EOF
test_expect_success \
'ls-tree filtered with path2' \
'git ls-tree $tree path2 >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
040000 tree X path2
EOF
test_output'
......@@ -133,7 +121,7 @@ EOF
test_expect_success \
'ls-tree filtered with path2/' \
'git ls-tree $tree path2/ >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
040000 tree X path2/baz
120000 blob X path2/bazbo
100644 blob X path2/foo
......@@ -145,7 +133,7 @@ EOF
test_expect_success \
'ls-tree filtered with path2/baz' \
'git ls-tree $tree path2/baz >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
040000 tree X path2/baz
EOF
test_output'
......@@ -153,14 +141,14 @@ EOF
test_expect_success \
'ls-tree filtered with path2/bak' \
'git ls-tree $tree path2/bak >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
EOF
test_output'
test_expect_success \
'ls-tree -t filtered with path2/bak' \
'git ls-tree -t $tree path2/bak >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
040000 tree X path2
EOF
test_output'
......@@ -168,7 +156,7 @@ EOF
test_expect_success \
'ls-tree with one path a prefix of the other' \
'git ls-tree $tree path2/baz path2/bazbo >current &&
make_expected <<\EOF &&
cat >expected <<\EOF &&
040000 tree X path2/baz
120000 blob X path2/bazbo
EOF
......
......@@ -10,17 +10,15 @@ test_expect_success 'Initialize repository' '
git commit -m a
'
test_expect_success SYMLINKS 'Setup rename across paths each below D/F conflicts' '
test_expect_success 'Setup rename across paths each below D/F conflicts' '
mkdir b &&
ln -s ../a b/a &&
git add b &&
test_ln_s_add ../a b/a &&
git commit -m b &&
git checkout -b branch &&
rm b/a &&
mv a b/a &&
ln -s b/a a &&
git add . &&
git mv a b/a &&
test_ln_s_add b/a a &&
git commit -m swap &&
>f1 &&
......@@ -28,7 +26,7 @@ test_expect_success SYMLINKS 'Setup rename across paths each below D/F conflicts
git commit -m f1
'
test_expect_success SYMLINKS 'Cherry-pick succeeds with rename across D/F conflicts' '
test_expect_success 'Cherry-pick succeeds with rename across D/F conflicts' '
git reset --hard &&
git checkout master^0 &&
git cherry-pick branch
......
......@@ -30,10 +30,9 @@ test_expect_success \
*) echo fail; git ls-files --stage xfoo1; (exit 1);;
esac'
test_expect_success SYMLINKS 'git add: filemode=0 should not get confused by symlink' '
test_expect_success 'git add: filemode=0 should not get confused by symlink' '
rm -f xfoo1 &&
ln -s foo xfoo1 &&
git add xfoo1 &&
test_ln_s_add foo xfoo1 &&
case "`git ls-files --stage xfoo1`" in
120000" "*xfoo1) echo pass;;
*) echo fail; git ls-files --stage xfoo1; (exit 1);;
......@@ -51,21 +50,19 @@ test_expect_success \
*) echo fail; git ls-files --stage xfoo2; (exit 1);;
esac'
test_expect_success SYMLINKS 'git add: filemode=0 should not get confused by symlink' '
test_expect_success 'git add: filemode=0 should not get confused by symlink' '
rm -f xfoo2 &&
ln -s foo xfoo2 &&
git update-index --add xfoo2 &&
test_ln_s_add foo xfoo2 &&
case "`git ls-files --stage xfoo2`" in
120000" "*xfoo2) echo pass;;
*) echo fail; git ls-files --stage xfoo2; (exit 1);;
esac
'
test_expect_success SYMLINKS \
test_expect_success \
'git update-index --add: Test that executable bit is not used...' \
'git config core.filemode 0 &&
ln -s xfoo2 xfoo3 &&
git update-index --add xfoo3 &&
test_ln_s_add xfoo2 xfoo3 && # runs git update-index --add
case "`git ls-files --stage xfoo3`" in
120000" "*xfoo3) echo pass;;
*) echo fail; git ls-files --stage xfoo3; (exit 1);;
......
......@@ -336,41 +336,58 @@ test_expect_success SYMLINKS 'stash file to symlink (full stage)' '
# This test creates a commit with a symlink used for the following tests
test_expect_success SYMLINKS 'stash symlink to file' '
test_expect_success 'stash symlink to file' '
git reset --hard &&
ln -s file filelink &&
git add filelink &&
test_ln_s_add file filelink &&
git commit -m "Add symlink" &&
rm filelink &&
cp file filelink &&
git stash save "symlink to file" &&
git stash save "symlink to file"
'
test_expect_success SYMLINKS 'this must have re-created the symlink' '
test -h filelink &&
case "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac &&
case "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac
'
test_expect_success 'unstash must re-create the file' '
git stash apply &&
! test -h filelink &&
test bar = "$(cat file)"
'
test_expect_success SYMLINKS 'stash symlink to file (stage rm)' '
test_expect_success 'stash symlink to file (stage rm)' '
git reset --hard &&
git rm filelink &&
cp file filelink &&
git stash save "symlink to file (stage rm)" &&
git stash save "symlink to file (stage rm)"
'
test_expect_success SYMLINKS 'this must have re-created the symlink' '
test -h filelink &&
case "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac &&
case "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac
'
test_expect_success 'unstash must re-create the file' '
git stash apply &&
! test -h filelink &&
test bar = "$(cat file)"
'
test_expect_success SYMLINKS 'stash symlink to file (full stage)' '
test_expect_success 'stash symlink to file (full stage)' '
git reset --hard &&
rm filelink &&
cp file filelink &&
git add filelink &&
git stash save "symlink to file (full stage)" &&
git stash save "symlink to file (full stage)"
'
test_expect_success SYMLINKS 'this must have re-created the symlink' '
test -h filelink &&
case "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac &&
case "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac
'
test_expect_success 'unstash must re-create the file' '
git stash apply &&
! test -h filelink &&
test bar = "$(cat file)"
......
......@@ -99,11 +99,11 @@ test_expect_success \
'validate result of -B -M (#4)' \
'compare_diff_raw expected current'
test_expect_success SYMLINKS \
test_expect_success \
'make file0 into something completely different' \
'rm -f file0 &&
ln -s frotz file0 &&
git update-index file0 file1'
test_ln_s_add frotz file0 &&
git update-index file1'
test_expect_success \
'run diff with -B' \
......@@ -114,7 +114,7 @@ cat >expected <<\EOF
:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 f5deac7be59e7eeab8657fd9ae706fd6a57daed2 M100 file1
EOF
test_expect_success SYMLINKS \
test_expect_success \
'validate result of -B (#5)' \
'compare_diff_raw expected current'
......@@ -129,7 +129,7 @@ cat >expected <<\EOF
:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 f5deac7be59e7eeab8657fd9ae706fd6a57daed2 R file0 file1
EOF
test_expect_success SYMLINKS \
test_expect_success \
'validate result of -B -M (#6)' \
'compare_diff_raw expected current'
......@@ -144,7 +144,7 @@ cat >expected <<\EOF
:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 f5deac7be59e7eeab8657fd9ae706fd6a57daed2 M file1
EOF
test_expect_success SYMLINKS \
test_expect_success \
'validate result of -M (#7)' \
'compare_diff_raw expected current'
......
......@@ -9,7 +9,7 @@ test_description='Test diff of symlinks.
. ./test-lib.sh
. "$TEST_DIRECTORY"/diff-lib.sh
test_expect_success SYMLINKS 'diff new symlink and file' '
test_expect_success 'diff new symlink and file' '
cat >expected <<-\EOF &&
diff --git a/frotz b/frotz
new file mode 120000
......@@ -27,22 +27,25 @@ test_expect_success SYMLINKS 'diff new symlink and file' '
@@ -0,0 +1 @@
+xyzzy
EOF
ln -s xyzzy frotz &&
echo xyzzy >nitfol &&
# the empty tree
git update-index &&
tree=$(git write-tree) &&
git update-index --add frotz nitfol &&
test_ln_s_add xyzzy frotz &&
echo xyzzy >nitfol &&
git update-index --add nitfol &&
GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree >current &&
compare_diff_patch expected current
'
test_expect_success SYMLINKS 'diff unchanged symlink and file' '
test_expect_success 'diff unchanged symlink and file' '
tree=$(git write-tree) &&
git update-index frotz nitfol &&
test -z "$(git diff-index --name-only $tree)"
'
test_expect_success SYMLINKS 'diff removed symlink and file' '
test_expect_success 'diff removed symlink and file' '
cat >expected <<-\EOF &&
diff --git a/frotz b/frotz
deleted file mode 120000
......@@ -66,12 +69,18 @@ test_expect_success SYMLINKS 'diff removed symlink and file' '
compare_diff_patch expected current
'
test_expect_success SYMLINKS 'diff identical, but newly created symlink and file' '
test_expect_success 'diff identical, but newly created symlink and file' '
>expected &&
rm -f frotz nitfol &&
echo xyzzy >nitfol &&
test-chmtime +10 nitfol &&
ln -s xyzzy frotz &&
if test_have_prereq SYMLINKS
then
ln -s xyzzy frotz
else
printf xyzzy >frotz
# the symlink property propagates from the index
fi &&
git diff-index -M -p $tree >current &&
compare_diff_patch expected current &&
......@@ -80,7 +89,7 @@ test_expect_success SYMLINKS 'diff identical, but newly created symlink and file
compare_diff_patch expected current
'
test_expect_success SYMLINKS 'diff different symlink and file' '
test_expect_success 'diff different symlink and file' '
cat >expected <<-\EOF &&
diff --git a/frotz b/frotz
index 7c465af..df1db54 120000
......@@ -100,7 +109,13 @@ test_expect_success SYMLINKS 'diff different symlink and file' '
+yxyyz
EOF
rm -f frotz &&
ln -s yxyyz frotz &&
if test_have_prereq SYMLINKS
then
ln -s yxyyz frotz
else
printf yxyyz >frotz
# the symlink property propagates from the index
fi &&
echo yxyyz >nitfol &&
git diff-index -M -p $tree >current &&
compare_diff_patch expected current
......
......@@ -4,44 +4,44 @@ test_description='typechange rename detection'
. ./test-lib.sh
test_expect_success SYMLINKS setup '
test_expect_success setup '
rm -f foo bar &&
cat "$TEST_DIRECTORY"/../COPYING >foo &&
ln -s linklink bar &&
git add foo bar &&
test_ln_s_add linklink bar &&
git add foo &&
git commit -a -m Initial &&
git tag one &&
rm -f foo bar &&
git rm -f foo bar &&
cat "$TEST_DIRECTORY"/../COPYING >bar &&
ln -s linklink foo &&
git add foo bar &&
test_ln_s_add linklink foo &&
git add bar &&
git commit -a -m Second &&
git tag two &&
rm -f foo bar &&
git rm -f foo bar &&
cat "$TEST_DIRECTORY"/../COPYING >foo &&
git add foo &&
git commit -a -m Third &&
git tag three &&
mv foo bar &&
ln -s linklink foo &&
git add foo bar &&
test_ln_s_add linklink foo &&
git add bar &&
git commit -a -m Fourth &&
git tag four &&
# This is purely for sanity check
rm -f foo bar &&
git rm -f foo bar &&
cat "$TEST_DIRECTORY"/../COPYING >foo &&
cat "$TEST_DIRECTORY"/../Makefile >bar &&
git add foo bar &&
git commit -a -m Fifth &&
git tag five &&
rm -f foo bar &&
git rm -f foo bar &&
cat "$TEST_DIRECTORY"/../Makefile >foo &&
cat "$TEST_DIRECTORY"/../COPYING >bar &&
git add foo bar &&
......@@ -50,7 +50,7 @@ test_expect_success SYMLINKS setup '
'
test_expect_success SYMLINKS 'cross renames to be detected for regular files' '
test_expect_success 'cross renames to be detected for regular files' '
git diff-tree five six -r --name-status -B -M | sort >actual &&
{
......@@ -61,7 +61,7 @@ test_expect_success SYMLINKS 'cross renames to be detected for regular files' '
'
test_expect_success SYMLINKS 'cross renames to be detected for typechange' '
test_expect_success 'cross renames to be detected for typechange' '
git diff-tree one two -r --name-status -B -M | sort >actual &&
{
......@@ -72,7 +72,7 @@ test_expect_success SYMLINKS 'cross renames to be detected for typechange' '
'
test_expect_success SYMLINKS 'moves and renames' '
test_expect_success 'moves and renames' '
git diff-tree three four -r --name-status -B -M | sort >actual &&
{
......
......@@ -139,12 +139,10 @@ index 0000000..67be421
+frotz
\ No newline at end of file
EOF
# make a symlink the hard way that works on symlink-challenged file systems
test_expect_success 'textconv does not act on symlinks' '
printf frotz > file &&
git add file &&
git ls-files -s | sed -e s/100644/120000/ |
git update-index --index-info &&
rm -f file &&
test_ln_s_add frotz file &&
git commit -m typechange &&
git show >diff &&
find_diff <diff >actual &&
......
......@@ -9,20 +9,19 @@ test_description='git apply should not get confused with type changes.
. ./test-lib.sh
test_expect_success SYMLINKS 'setup repository and commits' '
test_expect_success 'setup repository and commits' '
echo "hello world" > foo &&
echo "hi planet" > bar &&
git update-index --add foo bar &&
git commit -m initial &&
git branch initial &&
rm -f foo &&
ln -s bar foo &&
git update-index foo &&
test_ln_s_add bar foo &&
git commit -m "foo symlinked to bar" &&
git branch foo-symlinked-to-bar &&
rm -f foo &&
git rm -f foo &&
echo "how far is the sun?" > foo &&
git update-index foo &&
git update-index --add foo &&
git commit -m "foo back to file" &&
git branch foo-back-to-file &&
printf "\0" > foo &&
......@@ -42,7 +41,7 @@ test_expect_success SYMLINKS 'setup repository and commits' '
git branch foo-baz-renamed-from-foo
'
test_expect_success SYMLINKS 'file renamed from foo to foo/baz' '
test_expect_success 'file renamed from foo to foo/baz' '
git checkout -f initial &&
git diff-tree -M -p HEAD foo-baz-renamed-from-foo > patch &&
git apply --index < patch
......@@ -50,7 +49,7 @@ test_expect_success SYMLINKS 'file renamed from foo to foo/baz' '
test_debug 'cat patch'
test_expect_success SYMLINKS 'file renamed from foo/baz to foo' '
test_expect_success 'file renamed from foo/baz to foo' '
git checkout -f foo-baz-renamed-from-foo &&
git diff-tree -M -p HEAD initial > patch &&
git apply --index < patch
......@@ -58,7 +57,7 @@ test_expect_success SYMLINKS 'file renamed from foo/baz to foo' '
test_debug 'cat patch'
test_expect_success SYMLINKS 'directory becomes file' '
test_expect_success 'directory becomes file' '
git checkout -f foo-becomes-a-directory &&
git diff-tree -p HEAD initial > patch &&
git apply --index < patch
......@@ -66,7 +65,7 @@ test_expect_success SYMLINKS 'directory becomes file' '
test_debug 'cat patch'
test_expect_success SYMLINKS 'file becomes directory' '
test_expect_success 'file becomes directory' '
git checkout -f initial &&
git diff-tree -p HEAD foo-becomes-a-directory > patch &&
git apply --index < patch
......@@ -74,7 +73,7 @@ test_expect_success SYMLINKS 'file becomes directory' '
test_debug 'cat patch'
test_expect_success SYMLINKS 'file becomes symlink' '
test_expect_success 'file becomes symlink' '
git checkout -f initial &&
git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
git apply --index < patch
......@@ -82,21 +81,21 @@ test_expect_success SYMLINKS 'file becomes symlink' '
test_debug 'cat patch'
test_expect_success SYMLINKS 'symlink becomes file' '
test_expect_success 'symlink becomes file' '
git checkout -f foo-symlinked-to-bar &&
git diff-tree -p HEAD foo-back-to-file > patch &&
git apply --index < patch
'
test_debug 'cat patch'
test_expect_success SYMLINKS 'binary file becomes symlink' '
test_expect_success 'binary file becomes symlink' '
git checkout -f foo-becomes-binary &&
git diff-tree -p --binary HEAD foo-symlinked-to-bar > patch &&
git apply --index < patch
'
test_debug 'cat patch'
test_expect_success SYMLINKS 'symlink becomes binary file' '
test_expect_success 'symlink becomes binary file' '
git checkout -f foo-symlinked-to-bar &&
git diff-tree -p --binary HEAD foo-becomes-binary > patch &&
git apply --index < patch
......@@ -104,7 +103,7 @@ test_expect_success SYMLINKS 'symlink becomes binary file' '
test_debug 'cat patch'
test_expect_success SYMLINKS 'symlink becomes directory' '
test_expect_success 'symlink becomes directory' '
git checkout -f foo-symlinked-to-bar &&
git diff-tree -p HEAD foo-becomes-a-directory > patch &&
git apply --index < patch
......@@ -112,7 +111,7 @@ test_expect_success SYMLINKS 'symlink becomes directory' '
test_debug 'cat patch'
test_expect_success SYMLINKS 'directory becomes symlink' '
test_expect_success 'directory becomes symlink' '
git checkout -f foo-becomes-a-directory &&
git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
git apply --index < patch
......
......@@ -9,18 +9,16 @@ test_description='git apply symlinks and partial files
. ./test-lib.sh
test_expect_success SYMLINKS setup '
test_expect_success setup '
ln -s path1/path2/path3/path4/path5 link1 &&
git add link? &&
test_ln_s_add path1/path2/path3/path4/path5 link1 &&
git commit -m initial &&
git branch side &&
rm -f link? &&
ln -s htap6 link1 &&
git update-index link? &&
test_ln_s_add htap6 link1 &&
git commit -m second &&
git diff-tree -p HEAD^ HEAD >patch &&
......@@ -37,7 +35,7 @@ test_expect_success SYMLINKS 'apply symlink patch' '
'
test_expect_success SYMLINKS 'apply --index symlink patch' '
test_expect_success 'apply --index symlink patch' '
git checkout -f side &&
git apply --index patch &&
......
......@@ -10,11 +10,11 @@ lecho () {
done
}
test_expect_success SYMLINKS setup '
test_expect_success setup '
mkdir -p arch/i386/boot arch/x86_64 &&
lecho 1 2 3 4 5 >arch/i386/boot/Makefile &&
ln -s ../i386/boot arch/x86_64/boot &&
test_ln_s_add ../i386/boot arch/x86_64/boot &&
git add . &&
test_tick &&
git commit -m initial &&
......@@ -31,7 +31,7 @@ test_expect_success SYMLINKS setup '
'
test_expect_success SYMLINKS apply '
test_expect_success apply '
git checkout test &&
git diff --exit-code test &&
......@@ -40,7 +40,7 @@ test_expect_success SYMLINKS apply '
'
test_expect_success SYMLINKS 'check result' '
test_expect_success 'check result' '
git diff --exit-code master &&
git diff --exit-code --cached master &&
......
......@@ -3,7 +3,7 @@
test_description='merging when a directory was replaced with a symlink'
. ./test-lib.sh
test_expect_success SYMLINKS 'create a commit where dir a/b changed to symlink' '
test_expect_success 'create a commit where dir a/b changed to symlink' '
mkdir -p a/b/c a/b-2/c &&
> a/b/c/d &&
> a/b-2/c/d &&
......@@ -12,12 +12,12 @@ test_expect_success SYMLINKS 'create a commit where dir a/b changed to symlink'
git commit -m base &&
git tag start &&
rm -rf a/b &&
ln -s b-2 a/b &&
git add -A &&
test_ln_s_add b-2 a/b &&
git commit -m "dir to symlink"
'
test_expect_success SYMLINKS 'checkout does not clobber untracked symlink' '
test_expect_success 'checkout does not clobber untracked symlink' '
git checkout HEAD^0 &&
git reset --hard master &&
git rm --cached a/b &&
......@@ -25,7 +25,7 @@ test_expect_success SYMLINKS 'checkout does not clobber untracked symlink' '
test_must_fail git checkout start^0
'
test_expect_success SYMLINKS 'a/b-2/c/d is kept when clobbering symlink b' '
test_expect_success 'a/b-2/c/d is kept when clobbering symlink b' '
git checkout HEAD^0 &&
git reset --hard master &&
git rm --cached a/b &&
......@@ -34,14 +34,14 @@ test_expect_success SYMLINKS 'a/b-2/c/d is kept when clobbering symlink b' '
test -f a/b-2/c/d
'
test_expect_success SYMLINKS 'checkout should not have deleted a/b-2/c/d' '
test_expect_success 'checkout should not have deleted a/b-2/c/d' '
git checkout HEAD^0 &&
git reset --hard master &&
git checkout start^0 &&
test -f a/b-2/c/d
'
test_expect_success SYMLINKS 'setup for merge test' '
test_expect_success 'setup for merge test' '
git reset --hard &&
test -f a/b-2/c/d &&
echo x > a/x &&
......@@ -50,39 +50,51 @@ test_expect_success SYMLINKS 'setup for merge test' '
git tag baseline
'
test_expect_success SYMLINKS 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)' '
test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)' '
git reset --hard &&
git checkout baseline^0 &&
git merge -s resolve master &&
test -h a/b &&
test -f a/b-2/c/d
'
test_expect_success SYMLINKS 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)' '
test_expect_success SYMLINKS 'a/b was resolved as symlink' '
test -h a/b
'
test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)' '
git reset --hard &&
git checkout baseline^0 &&
git merge -s recursive master &&
test -h a/b &&
test -f a/b-2/c/d
'
test_expect_success SYMLINKS 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)' '
test_expect_success SYMLINKS 'a/b was resolved as symlink' '
test -h a/b
'
test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)' '
git reset --hard &&
git checkout master^0 &&
git merge -s resolve baseline^0 &&
test -h a/b &&
test -f a/b-2/c/d
'
test_expect_success SYMLINKS 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)' '
test_expect_success SYMLINKS 'a/b was resolved as symlink' '
test -h a/b
'
test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)' '
git reset --hard &&
git checkout master^0 &&
git merge -s recursive baseline^0 &&
test -h a/b &&
test -f a/b-2/c/d
'
test_expect_failure SYMLINKS 'do not lose untracked in merge (resolve)' '
test_expect_success SYMLINKS 'a/b was resolved as symlink' '
test -h a/b
'
test_expect_failure 'do not lose untracked in merge (resolve)' '
git reset --hard &&
git checkout baseline^0 &&
>a/b/c/e &&
......@@ -91,7 +103,7 @@ test_expect_failure SYMLINKS 'do not lose untracked in merge (resolve)' '
test -f a/b-2/c/d
'
test_expect_success SYMLINKS 'do not lose untracked in merge (recursive)' '
test_expect_success 'do not lose untracked in merge (recursive)' '
git reset --hard &&
git checkout baseline^0 &&
>a/b/c/e &&
......@@ -100,52 +112,61 @@ test_expect_success SYMLINKS 'do not lose untracked in merge (recursive)' '
test -f a/b-2/c/d
'
test_expect_success SYMLINKS 'do not lose modifications in merge (resolve)' '
test_expect_success 'do not lose modifications in merge (resolve)' '
git reset --hard &&
git checkout baseline^0 &&
echo more content >>a/b/c/d &&
test_must_fail git merge -s resolve master
'
test_expect_success SYMLINKS 'do not lose modifications in merge (recursive)' '
test_expect_success 'do not lose modifications in merge (recursive)' '
git reset --hard &&
git checkout baseline^0 &&
echo more content >>a/b/c/d &&
test_must_fail git merge -s recursive master
'
test_expect_success SYMLINKS 'setup a merge where dir a/b-2 changed to symlink' '
test_expect_success 'setup a merge where dir a/b-2 changed to symlink' '
git reset --hard &&
git checkout start^0 &&
rm -rf a/b-2 &&
ln -s b a/b-2 &&
git add -A &&
test_ln_s_add b a/b-2 &&
git commit -m "dir a/b-2 to symlink" &&
git tag test2
'
test_expect_success SYMLINKS 'merge should not have D/F conflicts (resolve)' '
test_expect_success 'merge should not have D/F conflicts (resolve)' '
git reset --hard &&
git checkout baseline^0 &&
git merge -s resolve test2 &&
test -h a/b-2 &&
test -f a/b/c/d
'
test_expect_success SYMLINKS 'merge should not have D/F conflicts (recursive)' '
test_expect_success SYMLINKS 'a/b-2 was resolved as symlink' '
test -h a/b-2
'
test_expect_success 'merge should not have D/F conflicts (recursive)' '
git reset --hard &&
git checkout baseline^0 &&
git merge -s recursive test2 &&
test -h a/b-2 &&
test -f a/b/c/d
'
test_expect_success SYMLINKS 'merge should not have F/D conflicts (recursive)' '
test_expect_success SYMLINKS 'a/b-2 was resolved as symlink' '
test -h a/b-2
'
test_expect_success 'merge should not have F/D conflicts (recursive)' '
git reset --hard &&
git checkout -b foo test2 &&
git merge -s recursive baseline^0 &&
test -h a/b-2 &&
test -f a/b/c/d
'
test_expect_success SYMLINKS 'a/b-2 was resolved as symlink' '
test -h a/b-2
'
test_done
......@@ -218,13 +218,13 @@ test_expect_success 'git mv should not change sha1 of moved cache entry' '
rm -f dirty dirty2
test_expect_success SYMLINKS 'git mv should overwrite symlink to a file' '
test_expect_success 'git mv should overwrite symlink to a file' '
rm -fr .git &&
git init &&
echo 1 >moved &&
ln -s moved symlink &&
git add moved symlink &&
test_ln_s_add moved symlink &&
git add moved &&
test_must_fail git mv moved symlink &&
git mv -f moved symlink &&
! test -e moved &&
......@@ -237,22 +237,26 @@ test_expect_success SYMLINKS 'git mv should overwrite symlink to a file' '
rm -f moved symlink
test_expect_success SYMLINKS 'git mv should overwrite file with a symlink' '
test_expect_success 'git mv should overwrite file with a symlink' '
rm -fr .git &&
git init &&
echo 1 >moved &&
ln -s moved symlink &&
git add moved symlink &&
test_ln_s_add moved symlink &&
git add moved &&
test_must_fail git mv symlink moved &&
git mv -f symlink moved &&
! test -e symlink &&
test -h moved &&
git update-index --refresh &&
git diff-files --quiet
'
test_expect_success SYMLINKS 'check moved symlink' '
test -h moved
'
rm -f moved symlink
test_done
......@@ -141,11 +141,10 @@ test_expect_success SYMLINKS 'will not overwrite untracked symlink in leading pa
test_path_is_missing .git/MERGE_HEAD
'
test_expect_success SYMLINKS 'will not be confused by symlink in leading path' '
test_expect_success 'will not be confused by symlink in leading path' '
git reset --hard c0 &&
rm -rf sub &&
ln -s sub2 sub &&
git add sub &&
test_ln_s_add sub2 sub &&
git commit -m ln &&
git checkout sub
'
......
......@@ -18,17 +18,13 @@ test_expect_success 'setup ' '
echo "bin: test number 0" >zero.bin &&
echo "bin: test 1" >one.bin &&
echo "bin: test number 2" >two.bin &&
if test_have_prereq SYMLINKS; then
ln -s one.bin symlink.bin
fi &&
test_ln_s_add one.bin symlink.bin &&
git add . &&
GIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" &&
echo "bin: test 1 version 2" >one.bin &&
echo "bin: test number 2 version 2" >>two.bin &&
if test_have_prereq SYMLINKS; then
rm symlink.bin &&
ln -s two.bin symlink.bin
fi &&
rm -f symlink.bin &&
test_ln_s_add two.bin symlink.bin &&
GIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"
'
......@@ -135,7 +131,7 @@ test_expect_success SYMLINKS 'blame --textconv (on symlink)' '
# cp two.bin three.bin and make small tweak
# (this will direct blame -C -C three.bin to consider two.bin and symlink.bin)
test_expect_success SYMLINKS 'make another new commit' '
test_expect_success 'make another new commit' '
cat >three.bin <<\EOF &&
bin: test number 2
bin: test number 2 version 2
......@@ -146,7 +142,7 @@ EOF
GIT_AUTHOR_NAME=Number4 git commit -a -m Fourth --date="2010-01-01 23:00:00"
'
test_expect_success SYMLINKS 'blame on last commit (-C -C, symlink)' '
test_expect_success 'blame on last commit (-C -C, symlink)' '
git blame -C -C three.bin >blame &&
find_blame <blame >result &&
cat >expected <<\EOF &&
......
......@@ -12,9 +12,7 @@ chmod +x helper
test_expect_success 'setup ' '
echo "bin: test" >one.bin &&
if test_have_prereq SYMLINKS; then
ln -s one.bin symlink.bin
fi &&
test_ln_s_add one.bin symlink.bin &&
git add . &&
GIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" &&
echo "bin: test version 2" >one.bin &&
......@@ -72,14 +70,14 @@ test_expect_success 'cat-file --textconv on previous commit' '
test_cmp expected result
'
test_expect_success SYMLINKS 'cat-file without --textconv (symlink)' '
test_expect_success 'cat-file without --textconv (symlink)' '
git cat-file blob :symlink.bin >result &&
printf "%s" "one.bin" >expected
test_cmp expected result
'
test_expect_success SYMLINKS 'cat-file --textconv on index (symlink)' '
test_expect_success 'cat-file --textconv on index (symlink)' '
! git cat-file --textconv :symlink.bin 2>result &&
cat >expected <<\EOF &&
fatal: git cat-file --textconv: unable to run textconv on :symlink.bin
......@@ -87,7 +85,7 @@ EOF
test_cmp expected result
'
test_expect_success SYMLINKS 'cat-file --textconv on HEAD (symlink)' '
test_expect_success 'cat-file --textconv on HEAD (symlink)' '
! git cat-file --textconv HEAD:symlink.bin 2>result &&
cat >expected <<EOF &&
fatal: git cat-file --textconv: unable to run textconv on HEAD:symlink.bin
......
......@@ -396,7 +396,7 @@ test_expect_success 'tree_tag-obj' 'git fast-export tree_tag-obj'
test_expect_success 'tag-obj_tag' 'git fast-export tag-obj_tag'
test_expect_success 'tag-obj_tag-obj' 'git fast-export tag-obj_tag-obj'
test_expect_success SYMLINKS 'directory becomes symlink' '
test_expect_success 'directory becomes symlink' '
git init dirtosymlink &&
git init result &&
(
......@@ -408,8 +408,7 @@ test_expect_success SYMLINKS 'directory becomes symlink' '
git add foo/world bar/world &&
git commit -q -mone &&
git rm -r foo &&
ln -s bar foo &&
git add foo &&
test_ln_s_add bar foo &&
git commit -q -mtwo
) &&
(
......
......@@ -156,10 +156,10 @@ test_expect_success \
git commit -a -m "File renamed." &&
gitweb_run "p=.git;a=commitdiff"'
test_expect_success SYMLINKS \
test_expect_success \
'commitdiff(0): file to symlink' \
'rm renamed_file &&
ln -s file renamed_file &&
test_ln_s_add file renamed_file &&
git commit -a -m "File to symlink." &&
gitweb_run "p=.git;a=commitdiff"'
......@@ -212,15 +212,14 @@ test_expect_success \
# ----------------------------------------------------------------------
# commitdiff testing (taken from t4114-apply-typechange.sh)
test_expect_success SYMLINKS 'setup typechange commits' '
test_expect_success 'setup typechange commits' '
echo "hello world" > foo &&
echo "hi planet" > bar &&
git update-index --add foo bar &&
git commit -m initial &&
git branch initial &&
rm -f foo &&
ln -s bar foo &&
git update-index foo &&
test_ln_s_add bar foo &&
git commit -m "foo symlinked to bar" &&
git branch foo-symlinked-to-bar &&
rm -f foo &&
......@@ -361,11 +360,7 @@ test_expect_success \
echo "Changed" >> 04-rename-to &&
test_chmod +x 05-mode-change &&
rm -f 06-file-or-symlink &&
if test_have_prereq SYMLINKS; then
ln -s 01-change 06-file-or-symlink
else
printf %s 01-change > 06-file-or-symlink
fi &&
test_ln_s_add 01-change 06-file-or-symlink &&
echo "Changed and have mode changed" > 07-change-mode-change &&
test_chmod +x 07-change-mode-change &&
git commit -a -m "Large commit" &&
......
......@@ -679,3 +679,20 @@ test_create_repo () {
mv .git/hooks .git/hooks-disabled
) || exit
}
# This function helps on symlink challenged file systems when it is not
# important that the file system entry is a symbolic link.
# Use test_ln_s_add instead of "ln -s x y && git add y" to add a
# symbolic link entry y to the index.
test_ln_s_add () {
if test_have_prereq SYMLINKS
then
ln -s "$1" "$2" &&
git update-index --add "$2"
else
printf '%s' "$1" >"$2" &&
ln_s_obj=$(git hash-object -w "$2") &&
git update-index --add --cacheinfo 120000 $ln_s_obj "$2"
fi
}
......@@ -84,7 +84,7 @@ int main(int argc, const char *argv[])
if (stat(argv[i], &sb) < 0) {
fprintf(stderr, "Failed to stat %s: %s\n",
argv[i], strerror(errno));
return -1;
return 1;
}
#ifdef WIN32
......@@ -92,7 +92,7 @@ int main(int argc, const char *argv[])
chmod(argv[i], sb.st_mode | S_IWUSR)) {
fprintf(stderr, "Could not make user-writable %s: %s",
argv[i], strerror(errno));
return -1;
return 1;
}
#endif
......@@ -107,7 +107,7 @@ int main(int argc, const char *argv[])
if (utb.modtime != sb.st_mtime && utime(argv[i], &utb) < 0) {
fprintf(stderr, "Failed to modify time on %s: %s\n",
argv[i], strerror(errno));
return -1;
return 1;
}
}
......@@ -115,5 +115,5 @@ int main(int argc, const char *argv[])
usage:
fprintf(stderr, "usage: %s %s\n", argv[0], usage_str);
return -1;
return 1;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册