Git fork
at reftables-rust 264 lines 6.4 kB view raw
1#!/bin/sh 2 3test_description='Test Git when git repository is located at root 4 5This test requires write access in root. Do not bother if you do not 6have a throwaway chroot or VM. 7 8Script t1509/prepare-chroot.sh may help you setup chroot, then you 9can chroot in and execute this test from there. 10' 11 12. ./test-lib.sh 13 14test_cmp_val() { 15 echo "$1" > expected 16 echo "$2" > result 17 test_cmp expected result 18} 19 20test_vars() { 21 test_expect_success "$1: gitdir" ' 22 test_cmp_val "'"$2"'" "$(git rev-parse --git-dir)" 23 ' 24 25 test_expect_success "$1: worktree" ' 26 test_cmp_val "'"$3"'" "$(git rev-parse --show-toplevel)" 27 ' 28 29 test_expect_success "$1: prefix" ' 30 test_cmp_val "'"$4"'" "$(git rev-parse --show-prefix)" 31 ' 32} 33 34test_foobar_root() { 35 test_expect_success 'add relative' ' 36 test -z "$(cd / && git ls-files)" && 37 git add foo/foome && 38 git add foo/bar/barme && 39 git add me && 40 ( cd / && git ls-files --stage ) > result && 41 test_cmp /ls.expected result && 42 rm "$(git rev-parse --git-dir)/index" 43 ' 44 45 test_expect_success 'add absolute' ' 46 test -z "$(cd / && git ls-files)" && 47 git add /foo/foome && 48 git add /foo/bar/barme && 49 git add /me && 50 ( cd / && git ls-files --stage ) > result && 51 test_cmp /ls.expected result && 52 rm "$(git rev-parse --git-dir)/index" 53 ' 54 55} 56 57test_foobar_foo() { 58 test_expect_success 'add relative' ' 59 test -z "$(cd / && git ls-files)" && 60 git add foome && 61 git add bar/barme && 62 git add ../me && 63 ( cd / && git ls-files --stage ) > result && 64 test_cmp /ls.expected result && 65 rm "$(git rev-parse --git-dir)/index" 66 ' 67 68 test_expect_success 'add absolute' ' 69 test -z "$(cd / && git ls-files)" && 70 git add /foo/foome && 71 git add /foo/bar/barme && 72 git add /me && 73 ( cd / && git ls-files --stage ) > result && 74 test_cmp /ls.expected result && 75 rm "$(git rev-parse --git-dir)/index" 76 ' 77} 78 79test_foobar_foobar() { 80 test_expect_success 'add relative' ' 81 test -z "$(cd / && git ls-files)" && 82 git add ../foome && 83 git add barme && 84 git add ../../me && 85 ( cd / && git ls-files --stage ) > result && 86 test_cmp /ls.expected result && 87 rm "$(git rev-parse --git-dir)/index" 88 ' 89 90 test_expect_success 'add absolute' ' 91 test -z "$(cd / && git ls-files)" && 92 git add /foo/foome && 93 git add /foo/bar/barme && 94 git add /me && 95 ( cd / && git ls-files --stage ) > result && 96 test_cmp /ls.expected result && 97 rm "$(git rev-parse --git-dir)/index" 98 ' 99} 100 101if ! test -w / 102then 103 skip_all="Test requiring writable / skipped. Read this test if you want to run it" 104 test_done 105fi 106 107if test -e /refs || test -e /objects || test -e /info || test -e /hooks || 108 test -e /.git || test -e /foo || test -e /me 109then 110 skip_all="Skip test that clobbers existing files in /" 111 test_done 112fi 113 114if [ "$IKNOWWHATIAMDOING" != "YES" ]; then 115 skip_all="You must set env var IKNOWWHATIAMDOING=YES in order to run this test" 116 test_done 117fi 118 119if ! test_have_prereq NOT_ROOT 120then 121 skip_all="No you can't run this as root" 122 test_done 123fi 124 125ONE_SHA1=d00491fd7e5bb6fa28c517a0bb32b8b506539d4d 126 127test_expect_success 'setup' ' 128 rm -rf /foo && 129 mkdir /foo && 130 mkdir /foo/bar && 131 echo 1 > /foo/foome && 132 echo 1 > /foo/bar/barme && 133 echo 1 > /me 134' 135 136say "GIT_DIR absolute, GIT_WORK_TREE set" 137 138test_expect_success 'go to /' 'cd /' 139 140cat >ls.expected <<EOF 141100644 $ONE_SHA1 0 foo/bar/barme 142100644 $ONE_SHA1 0 foo/foome 143100644 $ONE_SHA1 0 me 144EOF 145 146GIT_DIR="$TRASH_DIRECTORY/.git" && export GIT_DIR 147GIT_WORK_TREE=/ && export GIT_WORK_TREE 148 149test_vars 'abs gitdir, root' "$GIT_DIR" "/" "" 150test_foobar_root 151 152test_expect_success 'go to /foo' 'cd /foo' 153 154test_vars 'abs gitdir, foo' "$GIT_DIR" "/" "foo/" 155test_foobar_foo 156 157test_expect_success 'go to /foo/bar' 'cd /foo/bar' 158 159test_vars 'abs gitdir, foo/bar' "$GIT_DIR" "/" "foo/bar/" 160test_foobar_foobar 161 162say "GIT_DIR relative, GIT_WORK_TREE set" 163 164test_expect_success 'go to /' 'cd /' 165 166GIT_DIR="$(echo $TRASH_DIRECTORY|sed 's,^/,,')/.git" && export GIT_DIR 167GIT_WORK_TREE=/ && export GIT_WORK_TREE 168 169test_vars 'rel gitdir, root' "$GIT_DIR" "/" "" 170test_foobar_root 171 172test_expect_success 'go to /foo' 'cd /foo' 173 174GIT_DIR="../$TRASH_DIRECTORY/.git" && export GIT_DIR 175GIT_WORK_TREE=/ && export GIT_WORK_TREE 176 177test_vars 'rel gitdir, foo' "$TRASH_DIRECTORY/.git" "/" "foo/" 178test_foobar_foo 179 180test_expect_success 'go to /foo/bar' 'cd /foo/bar' 181 182GIT_DIR="../../$TRASH_DIRECTORY/.git" && export GIT_DIR 183GIT_WORK_TREE=/ && export GIT_WORK_TREE 184 185test_vars 'rel gitdir, foo/bar' "$TRASH_DIRECTORY/.git" "/" "foo/bar/" 186test_foobar_foobar 187 188say "GIT_DIR relative, GIT_WORK_TREE relative" 189 190test_expect_success 'go to /' 'cd /' 191 192GIT_DIR="$(echo $TRASH_DIRECTORY|sed 's,^/,,')/.git" && export GIT_DIR 193GIT_WORK_TREE=. && export GIT_WORK_TREE 194 195test_vars 'rel gitdir, root' "$GIT_DIR" "/" "" 196test_foobar_root 197 198test_expect_success 'go to /' 'cd /foo' 199 200GIT_DIR="../$TRASH_DIRECTORY/.git" && export GIT_DIR 201GIT_WORK_TREE=.. && export GIT_WORK_TREE 202 203test_vars 'rel gitdir, foo' "$TRASH_DIRECTORY/.git" "/" "foo/" 204test_foobar_foo 205 206test_expect_success 'go to /foo/bar' 'cd /foo/bar' 207 208GIT_DIR="../../$TRASH_DIRECTORY/.git" && export GIT_DIR 209GIT_WORK_TREE=../.. && export GIT_WORK_TREE 210 211test_vars 'rel gitdir, foo/bar' "$TRASH_DIRECTORY/.git" "/" "foo/bar/" 212test_foobar_foobar 213 214say ".git at root" 215 216unset GIT_DIR 217unset GIT_WORK_TREE 218 219test_expect_success 'go to /' 'cd /' 220test_expect_success 'setup' ' 221 rm -rf /.git && 222 echo "Initialized empty Git repository in /.git/" > expected && 223 git init > result && 224 test_cmp expected result && 225 git config --global --add safe.directory / 226' 227 228test_vars 'auto gitdir, root' ".git" "/" "" 229test_foobar_root 230 231test_expect_success 'go to /foo' 'cd /foo' 232test_vars 'auto gitdir, foo' "/.git" "/" "foo/" 233test_foobar_foo 234 235test_expect_success 'go to /foo/bar' 'cd /foo/bar' 236test_vars 'auto gitdir, foo/bar' "/.git" "/" "foo/bar/" 237test_foobar_foobar 238 239test_expect_success 'cleanup' 'rm -rf /.git' 240 241say "auto bare gitdir" 242 243# DESTROYYYYY!!!!! 244test_expect_success 'setup' ' 245 rm -rf /refs /objects /info /hooks && 246 rm -f /HEAD /expected /ls.expected /me /result && 247 cd / && 248 echo "Initialized empty Git repository in /" > expected && 249 git init --bare > result && 250 test_cmp expected result 251' 252 253test_vars 'auto gitdir, root' "." "" "" 254 255test_expect_success 'go to /foo' 'cd /foo' 256 257test_vars 'auto gitdir, root' "/" "" "" 258 259test_expect_success 'cleanup root' ' 260 rm -rf /.git /refs /objects /info /hooks /branches /foo && 261 rm -f /HEAD /config /description /expected /ls.expected /me /result 262' 263 264test_done