Use prerequisite tags to skip tests that depend on symbolic links
authorJohannes Sixt <j6t@kdbg.org>
Wed, 4 Mar 2009 21:38:24 +0000 (22:38 +0100)
committerJohannes Sixt <j6t@kdbg.org>
Sun, 22 Mar 2009 16:26:44 +0000 (17:26 +0100)
Many tests depend on that symbolic links work.  This introduces a check
that sets the prerequisite tag SYMLINKS if the file system supports
symbolic links.  Since so many tests have to check for this prerequisite,
we do the check in test-lib.sh, so that we don't need to repeat the test
in many scripts.

To check for 'ln -s' failures, you can use a FAT partition on Linux:

$ mkdosfs -C git-on-fat 1000000
$ sudo mount -o loop,uid=j6t,gid=users,shortname=winnt git-on-fat /mnt

Clone git to /mnt and

$ GIT_SKIP_TESTS='t0001.1[34] t0010 t1301 t403[34] t4129.[47] t5701.7
          t7701.3 t9100 t9101.26 t9119 t9124.[67] t9200.10 t9600.6' \
        make test

(These additionally skipped tests depend on POSIX permissions that FAT on
Linux does not provide.)

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
32 files changed:
t/t0000-basic.sh
t/t0055-beyond-symlinks.sh
t/t1004-read-tree-m-u-wf.sh
t/t1020-subdirectory.sh
t/t1300-repo-config.sh
t/t2001-checkout-cache-clash.sh
t/t2003-checkout-cache-mkdir.sh
t/t2004-checkout-cache-temp.sh
t/t2007-checkout-symlink.sh
t/t2100-update-cache-badpath.sh
t/t2200-add-update.sh
t/t2201-add-update-typechange.sh
t/t2300-cd-to-toplevel.sh
t/t3000-ls-files-others.sh
t/t3010-ls-files-killed-modified.sh
t/t3100-ls-tree-restrict.sh
t/t3200-branch.sh
t/t3700-add.sh
t/t4004-diff-rename-symlink.sh
t/t4008-diff-break-rewrite.sh
t/t4011-diff-symlink.sh
t/t4023-diff-rename-typechange.sh
t/t4114-apply-typechange.sh
t/t4115-apply-symlink.sh
t/t4122-apply-symlink-inside.sh
t/t5000-tar-tree.sh
t/t5522-pull-symlink.sh
t/t7001-mv.sh
t/t9131-git-svn-empty-symlink.sh
t/t9132-git-svn-broken-symlink.sh
t/t9500-gitweb-standalone-no-errors.sh
t/test-lib.sh

index c53de1f212de62f2e91eccd59ca11302f365ed51..f4ca4fc85c6b52a2ba919528284f2b668e6bd3d2 100755 (executable)
@@ -115,12 +115,31 @@ test_expect_success \
     'test "$tree" = 4b825dc642cb6eb9a060e54bf8d69288fbee4904'
 
 # Various types of objects
+# Some filesystems do not support symblic links; on such systems
+# some expected values are different
 mkdir path2 path3 path3/subp3
-for p in path0 path2/file2 path3/file3 path3/subp3/file3
+paths='path0 path2/file2 path3/file3 path3/subp3/file3'
+for p in $paths
 do
     echo "hello $p" >$p
-    ln -s "hello $p" ${p}sym
 done
+if test_have_prereq SYMLINKS
+then
+       for p in $paths
+       do
+               ln -s "hello $p" ${p}sym
+       done
+       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.' \
     'find path* ! -type d -print | xargs git update-index --add'
@@ -130,7 +149,7 @@ test_expect_success \
     'showing stage with git ls-files --stage' \
     'git ls-files --stage >current'
 
-cat >expected <<\EOF
+$expectfilter >expected <<\EOF
 100644 f87290f8eb2cbbea7857214459a0739927eab154 0      path0
 120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0      path0sym
 100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0      path2/file2
@@ -149,7 +168,7 @@ test_expect_success \
     'tree=$(git write-tree)'
 test_expect_success \
     'validate object ID for a known tree.' \
-    'test "$tree" = 087704a96baf1c2d1c869a8b084481e121c88b5b'
+    'test "$tree" = "$expectedtree"'
 
 test_expect_success \
     'showing tree with git ls-tree' \
@@ -160,7 +179,7 @@ cat >expected <<\EOF
 040000 tree 58a09c23e2ca152193f2786e06986b7b6712bdbe   path2
 040000 tree 21ae8269cacbe57ae09138dcc3a2887f904d02b3   path3
 EOF
-test_expect_success \
+test_expect_success SYMLINKS \
     'git ls-tree output for a known tree.' \
     'test_cmp expected current'
 
@@ -169,7 +188,7 @@ test_expect_success \
 test_expect_success \
     'showing tree with git ls-tree -r' \
     'git ls-tree -r $tree >current'
-cat >expected <<\EOF
+$expectfilter >expected <<\EOF
 100644 blob f87290f8eb2cbbea7857214459a0739927eab154   path0
 120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01   path0sym
 100644 blob 3feff949ed00a62d9f7af97c15cd8a30595e7ac7   path2/file2
@@ -200,7 +219,7 @@ cat >expected <<\EOF
 100644 blob 00fb5908cb97c2564a9783c0c64087333b3b464f   path3/subp3/file3
 120000 blob 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c   path3/subp3/file3sym
 EOF
-test_expect_success \
+test_expect_success SYMLINKS \
     'git ls-tree -r output for a known tree.' \
     'test_cmp expected current'
 
@@ -209,14 +228,14 @@ test_expect_success \
     'ptree=$(git write-tree --prefix=path3)'
 test_expect_success \
     'validate object ID for a known tree.' \
-    'test "$ptree" = 21ae8269cacbe57ae09138dcc3a2887f904d02b3'
+    'test "$ptree" = "$expectedptree1"'
 
 test_expect_success \
     'writing partial tree out with git write-tree --prefix.' \
     'ptree=$(git write-tree --prefix=path3/subp3)'
 test_expect_success \
     'validate object ID for a known tree.' \
-    'test "$ptree" = 3c5e5399f3a333eddecce7a9b9465b63f65f51e2'
+    'test "$ptree" = "$expectedptree2"'
 
 cat >badobjects <<EOF
 100644 blob 1000000000000000000000000000000000000000   dir/file1
@@ -249,7 +268,7 @@ test_expect_success \
      newtree=$(git write-tree) &&
      test "$newtree" = "$tree"'
 
-cat >expected <<\EOF
+$expectfilter >expected <<\EOF
 :100644 100644 f87290f8eb2cbbea7857214459a0739927eab154 0000000000000000000000000000000000000000 M     path0
 :120000 120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0000000000000000000000000000000000000000 M     path0sym
 :100644 100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0000000000000000000000000000000000000000 M     path2/file2
@@ -272,7 +291,7 @@ test_expect_success \
     'git diff-files >current && cmp -s current /dev/null'
 
 ################################################################
-P=087704a96baf1c2d1c869a8b084481e121c88b5b
+P=$expectedtree
 test_expect_success \
     'git commit-tree records the correct tree in a commit.' \
     'commit0=$(echo NO | git commit-tree $P) &&
@@ -308,7 +327,7 @@ test_expect_success 'update-index D/F conflict' '
        test $numpath0 = 1
 '
 
-test_expect_success 'absolute path works as expected' '
+test_expect_success SYMLINKS 'absolute path works as expected' '
        mkdir first &&
        ln -s ../.git first/.git &&
        mkdir second &&
index b29c37a5a4de42239474c4fdf87c86c6f27b6ade..0c6ff567a1d47f52492dd89bd098b25bae737bad 100755 (executable)
@@ -4,7 +4,7 @@ test_description='update-index and add refuse to add beyond symlinks'
 
 . ./test-lib.sh
 
-test_expect_success setup '
+test_expect_success SYMLINKS setup '
        >a &&
        mkdir b &&
        ln -s b c &&
@@ -12,12 +12,12 @@ test_expect_success setup '
        git update-index --add a b/d
 '
 
-test_expect_success 'update-index --add beyond symlinks' '
+test_expect_success SYMLINKS 'update-index --add beyond symlinks' '
        test_must_fail git update-index --add c/d &&
        ! ( git ls-files | grep c/d )
 '
 
-test_expect_success 'add beyond symlinks' '
+test_expect_success SYMLINKS 'add beyond symlinks' '
        test_must_fail git add c/d &&
        ! ( git ls-files | grep c/d )
 '
index 570d3729bd2312a8d9cf90f3d2e1121a58f43de6..f19b4a2a4afa89fd1242d1acccb1e999e6a88c6d 100755 (executable)
@@ -157,7 +157,7 @@ test_expect_success '3-way not overwriting local changes (their side)' '
 
 '
 
-test_expect_success 'funny symlink in work tree' '
+test_expect_success SYMLINKS 'funny symlink in work tree' '
 
        git reset --hard &&
        git checkout -b sym-b side-b &&
@@ -177,7 +177,7 @@ test_expect_success 'funny symlink in work tree' '
 
 '
 
-test_expect_success 'funny symlink in work tree, un-unlink-able' '
+test_expect_success SYMLINKS 'funny symlink in work tree, un-unlink-able' '
 
        rm -fr a b &&
        git reset --hard &&
@@ -189,7 +189,7 @@ test_expect_success 'funny symlink in work tree, un-unlink-able' '
 '
 
 # clean-up from the above test
-chmod a+w a
+chmod a+w a 2>/dev/null
 rm -fr a b
 
 test_expect_success 'D/F setup' '
index fc386ba033ac165a5f4a9fca0c6c6f5db49a314e..210e594f6f3c83cc1b0c423a0f692380ff57176b 100755 (executable)
@@ -126,7 +126,7 @@ test_expect_success 'no file/rev ambiguity check inside a bare repo' '
        cd foo.git && git show -s HEAD
 '
 
-test_expect_success 'detection should not be fooled by a symlink' '
+test_expect_success SYMLINKS 'detection should not be fooled by a symlink' '
        cd "$HERE" &&
        rm -fr foo.git &&
        git clone -s .git another &&
index 3c06842d99a68ea37ce82546b4bfa0cd487b87d7..64663e1886f7b5670c03f9add1b955c4b15a4830 100755 (executable)
@@ -726,7 +726,7 @@ echo >>result
 
 test_expect_success '--null --get-regexp' 'cmp result expect'
 
-test_expect_success 'symlinked configuration' '
+test_expect_success SYMLINKS 'symlinked configuration' '
 
        ln -s notyet myconfig &&
        GIT_CONFIG=myconfig git config test.frotz nitfol &&
index ef007532b15108d72445f7c95a2906a3039fbbbb..98aa73e8239355eba098253edfd156d4ea254be2 100755 (executable)
@@ -59,10 +59,10 @@ test_expect_success \
     'git read-tree -m $tree1 && git checkout-index -f -a'
 test_debug 'show_files $tree1'
 
-ln -s path0 path1
-test_expect_success \
+test_expect_success SYMLINKS \
     'git update-index --add a symlink.' \
-    'git update-index --add path1'
+    'ln -s path0 path1 &&
+     git update-index --add path1'
 test_expect_success \
     'writing tree out with git write-tree' \
     'tree3=$(git write-tree)'
index 71894b37439bd1b9c72194cbbabe37680d2f9743..02a4fc5d36a08d1046b9384c799f697640da0c4e 100755 (executable)
@@ -19,7 +19,7 @@ test_expect_success \
     echo rezrov >path1/file1 &&
     git update-index --add path0 path1/file1'
 
-test_expect_success \
+test_expect_success SYMLINKS \
     'have symlink in place where dir is expected.' \
     'rm -fr path0 path1 &&
      mkdir path2 &&
@@ -59,7 +59,7 @@ test_expect_success \
      test ! -f path1/file1'
 
 # Linus fix #1
-test_expect_success \
+test_expect_success SYMLINKS \
     'use --prefix=tmp/orary/ where tmp is a symlink' \
     'rm -fr path0 path1 path2 tmp* &&
      mkdir tmp1 tmp1/orary &&
@@ -71,7 +71,7 @@ test_expect_success \
      test -h tmp'
 
 # Linus fix #2
-test_expect_success \
+test_expect_success SYMLINKS \
     'use --prefix=tmp/orary- where tmp is a symlink' \
     'rm -fr path0 path1 path2 tmp* &&
      mkdir tmp1 &&
@@ -82,7 +82,7 @@ test_expect_success \
      test -h tmp'
 
 # Linus fix #3
-test_expect_success \
+test_expect_success SYMLINKS \
     'use --prefix=tmp- where tmp-path1 is a symlink' \
     'rm -fr path0 path1 path2 tmp* &&
      mkdir tmp1 &&
index 39133b8c7a4b56cb7273cec607ea89081a426eff..36cca14d957f85733174d6ce514e22acfff3b1c9 100755 (executable)
@@ -194,7 +194,7 @@ test_expect_success \
  test $(cat ../$s1) = tree1asubdir/path5)
 )'
 
-test_expect_success \
+test_expect_success SYMLINKS \
 'checkout --temp symlink' '
 rm -f path* .merge_* out .git/index &&
 ln -s b a &&
index 0526fce163fc13273daf035a0920a6b53a3acefb..20f33436d00077b64dcc855fc263cd5d0efcca38 100755 (executable)
@@ -6,6 +6,12 @@ test_description='git checkout to switch between branches with symlink<->dir'
 
 . ./test-lib.sh
 
+if ! test_have_prereq SYMLINKS
+then
+       say "symbolic links not supported - skipping tests"
+       test_done
+fi
+
 test_expect_success setup '
 
        mkdir frotz &&
index 6ef2dcfd8afece86aaf6345630179af179eb2ed9..2df3fdde8bf665a2b531dd367b70a7a767ee3dbc 100755 (executable)
@@ -26,7 +26,12 @@ All of the attempts should fail.
 
 mkdir path2 path3
 date >path0
-ln -s xyzzy path1
+if test_have_prereq SYMLINKS
+then
+       ln -s xyzzy path1
+else
+       date > path1
+fi
 date >path2/file2
 date >path3/file3
 
@@ -38,7 +43,12 @@ rm -fr path?
 
 mkdir path0 path1
 date >path2
-ln -s frotz path3
+if test_have_prereq SYMLINKS
+then
+       ln -s frotz path3
+else
+       date > path3
+fi
 date >path0/file0
 date >path1/file1
 
index 5a8d52f2ff5ecfea8a1d4f9d39a2ed4a08c822e0..912075063b9946d38a9ff72621cb80bcf2c05399 100755 (executable)
@@ -80,7 +80,7 @@ test_expect_success 'change gets noticed' '
 
 '
 
-test_expect_success 'replace a file with a symlink' '
+test_expect_success SYMLINKS 'replace a file with a symlink' '
 
        rm foo &&
        ln -s top foo &&
index d24c7d9e5fce0e9c0f8ef5576dab86ffdbc11331..2e8f70245204bd4dc78e67f227e86838e1cdad5b 100755 (executable)
@@ -11,7 +11,13 @@ test_expect_success setup '
        _empty=$(git hash-object --stdin <xyzzy) &&
        >yomin &&
        >caskly &&
-       ln -s frotz nitfol &&
+       if test_have_prereq SYMLINKS; then
+               ln -s frotz nitfol &&
+               T_letter=T
+       else
+               printf %s frotz > nitfol &&
+               T_letter=M
+       fi &&
        mkdir rezrov &&
        >rezrov/bozbar &&
        git add caskly xyzzy yomin nitfol rezrov/bozbar &&
@@ -29,7 +35,11 @@ test_expect_success modify '
        >nitfol &&
        # rezrov/bozbar disappears
        rm -fr rezrov &&
-       ln -s xyzzy rezrov &&
+       if test_have_prereq SYMLINKS; then
+               ln -s xyzzy rezrov
+       else
+               printf %s xyzzy > rezrov
+       fi &&
        # xyzzy disappears (not a submodule)
        mkdir xyzzy &&
        echo gnusto >xyzzy/bozbar &&
@@ -71,7 +81,7 @@ test_expect_success modify '
                                s/blob/000000/
                        }
                        /       nitfol/{
-                               s/      nitfol/ $_z40 T&/
+                               s/      nitfol/ $_z40 $T_letter&/
                                s/blob/100644/
                        }
                        /       rezrov.bozbar/{
index 293dc353b1601e137f86dfe441fff57b96c92753..3b01ad2e4de152d23bbe8267d3b1a5cafd615e88 100755 (executable)
@@ -5,7 +5,7 @@ test_description='cd_to_toplevel'
 . ./test-lib.sh
 
 test_cd_to_toplevel () {
-       test_expect_success "$2" '
+       test_expect_success $3 "$2" '
                (
                        cd '"'$1'"' &&
                        . git-sh-setup &&
@@ -24,14 +24,14 @@ test_cd_to_toplevel repo 'at physical root'
 
 test_cd_to_toplevel repo/sub/dir 'at physical subdir'
 
-ln -s repo symrepo
-test_cd_to_toplevel symrepo 'at symbolic root'
+ln -s repo symrepo 2>/dev/null
+test_cd_to_toplevel symrepo 'at symbolic root' SYMLINKS
 
-ln -s repo/sub/dir subdir-link
-test_cd_to_toplevel subdir-link 'at symbolic subdir'
+ln -s repo/sub/dir subdir-link 2>/dev/null
+test_cd_to_toplevel subdir-link 'at symbolic subdir' SYMLINKS
 
 cd repo
-ln -s sub/dir internal-link
-test_cd_to_toplevel internal-link 'at internal symbolic subdir'
+ln -s sub/dir internal-link 2>/dev/null
+test_cd_to_toplevel internal-link 'at internal symbolic subdir' SYMLINKS
 
 test_done
index 36eee0f8ae377e130bdcc20ad882261a83764e38..b7e03063161337248df90c6e88d2c06bf2377bd9 100755 (executable)
@@ -17,7 +17,12 @@ filesystem.
 . ./test-lib.sh
 
 date >path0
-ln -s xyzzy path1
+if test_have_prereq SYMLINKS
+then
+       ln -s xyzzy path1
+else
+       date > path1
+fi
 mkdir path2 path3
 date >path2/file2
 date >path2-junk
index e4f02a0968331f3a03a6eb1d1bbf2420152caa12..95671c205364a12bea02173b33d0d427d5c546fe 100755 (executable)
@@ -38,7 +38,12 @@ modified without reporting path9 and path10.
 . ./test-lib.sh
 
 date >path0
-ln -s xyzzy path1
+if test_have_prereq SYMLINKS
+then
+       ln -s xyzzy path1
+else
+       date > path1
+fi
 mkdir path2 path3
 date >path2/file2
 date >path3/file3
@@ -52,8 +57,14 @@ test_expect_success \
 
 rm -fr path? ;# leave path10 alone
 date >path2
-ln -s frotz path3
-ln -s nitfol path5
+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
index 6e6a2542a22712006ae23874069c55943a3cba27..ee60d03fe8a582100e9df5511f6fea8900bcc543 100755 (executable)
@@ -22,9 +22,21 @@ test_expect_success \
     'setup' \
     'mkdir path2 path2/baz &&
      echo Hi >path0 &&
-     ln -s path0 path1 &&
+     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 &&
      echo Lo >path2/foo &&
-     ln -s ../path1 path2/bazbo &&
      echo Mi >path2/baz/b &&
      find path? \( -type f -o -type l \) -print |
      xargs git update-index --add &&
@@ -41,7 +53,7 @@ test_output () {
 test_expect_success \
     'ls-tree plain' \
     'git ls-tree $tree >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 100644 blob X  path0
 120000 blob X  path1
 040000 tree X  path2
@@ -51,7 +63,7 @@ EOF
 test_expect_success \
     'ls-tree recursive' \
     'git ls-tree -r $tree >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 100644 blob X  path0
 120000 blob X  path1
 100644 blob X  path2/baz/b
@@ -63,7 +75,7 @@ EOF
 test_expect_success \
     'ls-tree recursive with -t' \
     'git ls-tree -r -t $tree >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 100644 blob X  path0
 120000 blob X  path1
 040000 tree X  path2
@@ -77,7 +89,7 @@ EOF
 test_expect_success \
     'ls-tree recursive with -d' \
     'git ls-tree -r -d $tree >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 040000 tree X  path2
 040000 tree X  path2/baz
 EOF
@@ -86,7 +98,7 @@ EOF
 test_expect_success \
     'ls-tree filtered with path' \
     'git ls-tree $tree path >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 EOF
      test_output'
 
@@ -96,7 +108,7 @@ EOF
 test_expect_success \
     'ls-tree filtered with path1 path0' \
     'git ls-tree $tree path1 path0 >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 100644 blob X  path0
 120000 blob X  path1
 EOF
@@ -105,7 +117,7 @@ EOF
 test_expect_success \
     'ls-tree filtered with path0/' \
     'git ls-tree $tree path0/ >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 EOF
      test_output'
 
@@ -114,7 +126,7 @@ EOF
 test_expect_success \
     'ls-tree filtered with path2' \
     'git ls-tree $tree path2 >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 040000 tree X  path2
 EOF
      test_output'
@@ -123,7 +135,7 @@ EOF
 test_expect_success \
     'ls-tree filtered with path2/' \
     'git ls-tree $tree path2/ >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 040000 tree X  path2/baz
 120000 blob X  path2/bazbo
 100644 blob X  path2/foo
@@ -135,7 +147,7 @@ EOF
 test_expect_success \
     'ls-tree filtered with path2/baz' \
     'git ls-tree $tree path2/baz >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 040000 tree X  path2/baz
 EOF
      test_output'
@@ -143,14 +155,14 @@ EOF
 test_expect_success \
     'ls-tree filtered with path2/bak' \
     'git ls-tree $tree path2/bak >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 EOF
      test_output'
 
 test_expect_success \
     'ls-tree -t filtered with path2/bak' \
     'git ls-tree -t $tree path2/bak >current &&
-     cat >expected <<\EOF &&
+     make_expected <<\EOF &&
 040000 tree X  path2
 EOF
      test_output'
index 61a2010f5b0e24a50c6cddda9a17bad67f3214b8..f82bcdbd465d44d8577e775264581bb5652c7b07 100755 (executable)
@@ -121,7 +121,7 @@ test_expect_success 'renaming a symref is not allowed' \
        ! test -f .git/refs/heads/master3
 '
 
-test_expect_success \
+test_expect_success SYMLINKS \
     'git branch -m u v should fail when the reflog for u is a symlink' '
      git branch -l u &&
      mv .git/logs/refs/heads/u real-u &&
index 9f6454d2ffa22ef8a207b1a4e5e2ba156e84cdb9..e98f9825cf0689182b66814b76ad86049dbea4c2 100755 (executable)
@@ -30,7 +30,7 @@ test_expect_success \
         *) echo fail; git ls-files --stage xfoo1; (exit 1);;
         esac'
 
-test_expect_success 'git add: filemode=0 should not get confused by symlink' '
+test_expect_success SYMLINKS 'git add: filemode=0 should not get confused by symlink' '
        rm -f xfoo1 &&
        ln -s foo xfoo1 &&
        git add xfoo1 &&
@@ -51,7 +51,7 @@ test_expect_success \
         *) echo fail; git ls-files --stage xfoo2; (exit 1);;
         esac'
 
-test_expect_success 'git add: filemode=0 should not get confused by symlink' '
+test_expect_success SYMLINKS 'git add: filemode=0 should not get confused by symlink' '
        rm -f xfoo2 &&
        ln -s foo xfoo2 &&
        git update-index --add xfoo2 &&
@@ -61,7 +61,7 @@ test_expect_success 'git add: filemode=0 should not get confused by symlink' '
        esac
 '
 
-test_expect_success \
+test_expect_success SYMLINKS \
        'git update-index --add: Test that executable bit is not used...' \
        'git config core.filemode 0 &&
         ln -s xfoo2 xfoo3 &&
index b35af9b42d318904bd12649562be309fd49977a3..3db74443f838bec13be54d983972a8646e3a2ac5 100755 (executable)
@@ -12,6 +12,13 @@ by an edit for them.
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/diff-lib.sh
 
+if ! test_have_prereq SYMLINKS
+then
+       say 'Symbolic links not supported, skipping tests.'
+       test_done
+       exit
+fi
+
 test_expect_success \
     'prepare reference tree' \
     'echo xyzzy | tr -d '\\\\'012 >yomin &&
index 7e343a9cd130a73547ed1df9a4d9cd364e60bf9f..e19ca65885a1e49916f68eee4abbe65e98227c50 100755 (executable)
@@ -99,7 +99,7 @@ test_expect_success \
     'validate result of -B -M (#4)' \
     'compare_diff_raw expected current'
 
-test_expect_success \
+test_expect_success SYMLINKS \
     'make file0 into something completely different' \
     'rm -f file0 &&
      ln -s frotz file0 &&
@@ -114,7 +114,7 @@ cat >expected <<\EOF
 :100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 f5deac7be59e7eeab8657fd9ae706fd6a57daed2 M100  file1
 EOF
 
-test_expect_success \
+test_expect_success SYMLINKS \
     '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 \
+test_expect_success SYMLINKS \
     '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 \
+test_expect_success SYMLINKS \
     'validate result of -M (#7)' \
     'compare_diff_raw expected current'
 
index 9055c8b318aa8cfa8b89fd19b20e94a7435ee155..3a8130996739766f8168fe2908814987395d53a2 100755 (executable)
@@ -9,6 +9,13 @@ test_description='Test diff of symlinks.
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/diff-lib.sh
 
+if ! test_have_prereq SYMLINKS
+then
+       say 'Symbolic links not supported, skipping tests.'
+       test_done
+       exit
+fi
+
 cat > expected << EOF
 diff --git a/frotz b/frotz
 new file mode 120000
index 297ddb5a25b682412851aed70370771aa5a15976..5099862ebac7cf381759783c5a3b696edb7ba5bf 100755 (executable)
@@ -4,6 +4,13 @@ test_description='typechange rename detection'
 
 . ./test-lib.sh
 
+if ! test_have_prereq SYMLINKS
+then
+       say 'Symbolic links not supported, skipping tests.'
+       test_done
+       exit
+fi
+
 test_expect_success setup '
 
        rm -f foo bar &&
index 0f185caa44f3a9d048a2c058d963a1e86e9984fd..7dc35dea38b39ebc49c022714779ae07a9c17d88 100755 (executable)
@@ -9,6 +9,13 @@ test_description='git apply should not get confused with type changes.
 
 . ./test-lib.sh
 
+if ! test_have_prereq SYMLINKS
+then
+       say 'Symbolic links not supported, skipping tests.'
+       test_done
+       exit
+fi
+
 test_expect_success 'setup repository and commits' '
        echo "hello world" > foo &&
        echo "hi planet" > bar &&
index 9ace578f17a07aafc050ccaf935aef8a4a3cab4e..1a3aea34cec6552f40271bbed60e42d199ef25be 100755 (executable)
@@ -9,6 +9,13 @@ test_description='git apply symlinks and partial files
 
 . ./test-lib.sh
 
+if ! test_have_prereq SYMLINKS
+then
+       say 'Symbolic links not supported, skipping tests.'
+       test_done
+       exit
+fi
+
 test_expect_success setup '
 
        ln -s path1/path2/path3/path4/path5 link1 &&
index 841773f75fc085d07836b39b3775f49bde5d8d19..8aad20bfccc09310e2663f6bdab046520ae43fa9 100755 (executable)
@@ -3,6 +3,13 @@
 test_description='apply to deeper directory without getting fooled with symlink'
 . ./test-lib.sh
 
+if ! test_have_prereq SYMLINKS
+then
+       say 'Symbolic links not supported, skipping tests.'
+       test_done
+       exit
+fi
+
 lecho () {
        for l_
        do
index 7a84ab61d0de86798d84eaa9e1768688f6b5ad77..60a4b8dc0dbbe21d6ad954854397522bfae00e1b 100755 (executable)
@@ -37,7 +37,11 @@ test_expect_success \
      cp /bin/sh a/bin &&
      printf "A\$Format:%s\$O" "$SUBSTFORMAT" >a/substfile1 &&
      printf "A not substituted O" >a/substfile2 &&
-     ln -s a a/l1 &&
+     if test_have_prereq SYMLINKS; then
+       ln -s a a/l1
+     else
+       printf %s a > a/l1
+     fi &&
      (p=long_path_to_a_file && cd a &&
       for depth in 1 2 3 4 5; do mkdir $p && cd $p; done &&
       echo text >file_with_long_path) &&
index 5672b51e2ea8db0e080e95315b292c91480a0000..d887eb6c1ac1084effb9ab422d471e8c52754700 100755 (executable)
@@ -4,6 +4,13 @@ test_description='pulling from symlinked subdir'
 
 . ./test-lib.sh
 
+if ! test_have_prereq SYMLINKS
+then
+       say 'Symbolic links not supported, skipping tests.'
+       test_done
+       exit
+fi
+
 # The scenario we are building:
 #
 #   trash\ directory/
index 8fb3a56838dd476b9b0923f835ce70bd95499f2b..10b8f8c44befdb4eb00b3959f8b29cbebb7a22e1 100755 (executable)
@@ -206,7 +206,7 @@ test_expect_success 'git mv should not change sha1 of moved cache entry' '
 
 rm -f dirty dirty2
 
-test_expect_success 'git mv should overwrite symlink to a file' '
+test_expect_success SYMLINKS 'git mv should overwrite symlink to a file' '
 
        rm -fr .git &&
        git init &&
@@ -225,7 +225,7 @@ test_expect_success 'git mv should overwrite symlink to a file' '
 
 rm -f moved symlink
 
-test_expect_success 'git mv should overwrite file with a symlink' '
+test_expect_success SYMLINKS 'git mv should overwrite file with a symlink' '
 
        rm -fr .git &&
        git init &&
index 8f35e294aa885e7afbb704186c9afe9467172570..9a24a65b64111b4540db28315fedd4efd3b19ae7 100755 (executable)
@@ -88,7 +88,7 @@ test_expect_success 'enable broken symlink workaround' \
 test_expect_success '"bar" is an empty file' 'test -f x/bar && ! test -s x/bar'
 test_expect_success 'get "bar" => symlink fix from svn' \
                '(cd x && git svn rebase)'
-test_expect_success '"bar" becomes a symlink' 'test -L x/bar'
+test_expect_success SYMLINKS '"bar" becomes a symlink' 'test -L x/bar'
 
 
 test_expect_success 'clone using git svn' 'git svn clone -r1 "$svnrepo" y'
index b8de59e493cbf0f0e85e60daf49fd4dc716244e1..6c4c90b03694d2ebe986897b744444fbc00b7125 100755 (executable)
@@ -85,7 +85,7 @@ EOF
 
 test_expect_success 'clone using git svn' 'git svn clone -r1 "$svnrepo" x'
 
-test_expect_success '"bar" is a symlink that points to "asdf"' '
+test_expect_success SYMLINKS '"bar" is a symlink that points to "asdf"' '
        test -L x/bar &&
        (cd x && test xasdf = x"`git cat-file blob HEAD:bar`")
 '
@@ -94,7 +94,7 @@ test_expect_success 'get "bar" => symlink fix from svn' '
        (cd x && git svn rebase)
 '
 
-test_expect_success '"bar" remains a proper symlink' '
+test_expect_success SYMLINKS '"bar" remains a proper symlink' '
        test -L x/bar &&
        (cd x && test xdoink = x"`git cat-file blob HEAD:bar`")
 '
index dce06bcc9733f010463692cc2f41400d5a518106..9ec5030a91965847d4ae546b47e4f43badb1693b 100755 (executable)
@@ -246,7 +246,7 @@ test_expect_success \
         gitweb_run "p=.git;a=commitdiff"'
 test_debug 'cat gitweb.log'
 
-test_expect_success \
+test_expect_success SYMLINKS \
        'commitdiff(0): file to symlink' \
        'rm renamed_file &&
         ln -s file renamed_file &&
@@ -308,7 +308,7 @@ test_debug 'cat gitweb.log'
 # ----------------------------------------------------------------------
 # commitdiff testing (taken from t4114-apply-typechange.sh)
 
-test_expect_success 'setup typechange commits' '
+test_expect_success SYMLINKS 'setup typechange commits' '
        echo "hello world" > foo &&
        echo "hi planet" > bar &&
        git update-index --add foo bar &&
@@ -418,7 +418,12 @@ test_expect_success \
         git mv 04-rename-from 04-rename-to &&
         echo "Changed" >> 04-rename-to &&
         test_chmod +x 05-mode-change &&
-        rm -f 06-file-or-symlink && ln -s 01-change 06-file-or-symlink &&
+        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 &&
         echo "Changed and have mode changed" > 07-change-mode-change   &&
         test_chmod +x 07-change-mode-change &&
         git commit -a -m "Large commit" &&
index 3c65cfe1ab3db02a6837c1f6e2d374e6f02e934d..5337e8920277fa4093e0a908f3ae30282f974f1b 100644 (file)
@@ -689,3 +689,7 @@ case $(uname -s) in
        }
        ;;
 esac
+
+# test whether the filesystem supports symbolic links
+ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS
+rm -f y