1#!/bin/sh 2# 3# Copyright (c) 2006 Junio C Hamano 4# 5 6test_description='Try various core-level commands in subdirectory. 7' 8 9. ./test-lib.sh 10. "$TEST_DIRECTORY"/lib-read-tree.sh 11 12test_expect_success setup ' 13 long="a b c d e f g h i j k l m n o p q r s t u v w x y z" && 14 for c in $long; do echo $c; done >one && 15 mkdir dir && 16 for c in x y z $long a b c; do echo $c; done >dir/two && 17 cp one original.one && 18 cp dir/two original.two 19' 20 21test_expect_success 'update-index and ls-files' ' 22 git update-index --add one && 23 case "$(git ls-files)" in 24 one) echo pass one ;; 25 *) echo bad one; exit 1 ;; 26 esac && 27 ( 28 cd dir && 29 git update-index --add two && 30 case "$(git ls-files)" in 31 two) echo pass two ;; 32 *) echo bad two; exit 1 ;; 33 esac 34 ) && 35 case "$(git ls-files)" in 36 dir/two"$LF"one) echo pass both ;; 37 *) echo bad; exit 1 ;; 38 esac 39' 40 41test_expect_success 'cat-file' ' 42 two=$(git ls-files -s dir/two) && 43 two=$(expr "$two" : "[0-7]* \\([0-9a-f]*\\)") && 44 echo "$two" && 45 git cat-file -p "$two" >actual && 46 cmp dir/two actual && 47 ( 48 cd dir && 49 git cat-file -p "$two" >actual && 50 cmp two actual 51 ) 52' 53rm -f actual dir/actual 54 55test_expect_success 'diff-files' ' 56 echo a >>one && 57 echo d >>dir/two && 58 case "$(git diff-files --name-only)" in 59 dir/two"$LF"one) echo pass top ;; 60 *) echo bad top; exit 1 ;; 61 esac && 62 # diff should not omit leading paths 63 ( 64 cd dir && 65 case "$(git diff-files --name-only)" in 66 dir/two"$LF"one) echo pass subdir ;; 67 *) echo bad subdir; exit 1 ;; 68 esac && 69 case "$(git diff-files --name-only .)" in 70 dir/two) echo pass subdir limited ;; 71 *) echo bad subdir limited; exit 1 ;; 72 esac 73 ) 74' 75 76test_expect_success 'write-tree' ' 77 top=$(git write-tree) && 78 echo $top && 79 ( 80 cd dir && 81 sub=$(git write-tree) && 82 echo $sub && 83 test "z$top" = "z$sub" 84 ) 85' 86 87test_expect_success 'checkout-index' ' 88 git checkout-index -f -u one && 89 cmp one original.one && 90 ( 91 cd dir && 92 git checkout-index -f -u two && 93 cmp two ../original.two 94 ) 95' 96 97test_expect_success 'read-tree' ' 98 rm -f one dir/two && 99 tree=$(git write-tree) && 100 read_tree_u_must_succeed --reset -u "$tree" && 101 cmp one original.one && 102 cmp dir/two original.two && 103 ( 104 cd dir && 105 rm -f two && 106 read_tree_u_must_succeed --reset -u "$tree" && 107 cmp two ../original.two && 108 cmp ../one ../original.one 109 ) 110' 111 112test_expect_success 'alias expansion' ' 113 ( 114 git config alias.test-status-alias status && 115 cd dir && 116 git status && 117 git test-status-alias 118 ) 119' 120 121test_expect_success !MINGW '!alias expansion' ' 122 pwd >expect && 123 ( 124 git config alias.test-alias-directory !pwd && 125 cd dir && 126 git test-alias-directory >../actual 127 ) && 128 test_cmp expect actual 129' 130 131test_expect_success 'GIT_PREFIX for !alias' ' 132 printf "dir/" >expect && 133 ( 134 git config alias.test-alias-directory "!sh -c \"printf \$GIT_PREFIX\"" && 135 cd dir && 136 git test-alias-directory >../actual 137 ) && 138 test_cmp expect actual 139' 140 141test_expect_success 'GIT_PREFIX for built-ins' ' 142 # Use GIT_EXTERNAL_DIFF to test that the "diff" built-in 143 # receives the GIT_PREFIX variable. 144 echo "dir/" >expect && 145 write_script diff <<-\EOF && 146 printf "%s\n" "$GIT_PREFIX" 147 EOF 148 ( 149 cd dir && 150 echo "change" >two && 151 GIT_EXTERNAL_DIFF=./diff git diff >../actual && 152 git checkout -- two 153 ) && 154 test_cmp expect actual 155' 156 157test_expect_success 'no file/rev ambiguity check inside .git' ' 158 git commit -a -m 1 && 159 ( 160 cd .git && 161 git show -s HEAD 162 ) 163' 164 165test_expect_success 'no file/rev ambiguity check inside a bare repo (explicit GIT_DIR)' ' 166 test_when_finished "rm -fr foo.git" && 167 git clone -s --bare .git foo.git && 168 ( 169 cd foo.git && 170 # older Git needed help by exporting GIT_DIR=. 171 # to realize that it is inside a bare repository. 172 # We keep this test around for regression testing. 173 GIT_DIR=. git show -s HEAD 174 ) 175' 176 177test_expect_success 'no file/rev ambiguity check inside a bare repo' ' 178 test_when_finished "rm -fr foo.git" && 179 git clone -s --bare .git foo.git && 180 ( 181 cd foo.git && 182 git show -s HEAD 183 ) 184' 185 186test_expect_success SYMLINKS 'detection should not be fooled by a symlink' ' 187 git clone -s .git another && 188 ln -s another yetanother && 189 ( 190 cd yetanother/.git && 191 git show -s HEAD 192 ) 193' 194 195test_done 196