ref namespaces: tests
[git] / t / t1020-subdirectory.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2006 Junio C Hamano
4 #
5
6 test_description='Try various core-level commands in subdirectory.
7 '
8
9 . ./test-lib.sh
10
11 test_expect_success setup '
12         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" &&
13         for c in $long; do echo $c; done >one &&
14         mkdir dir &&
15         for c in x y z $long a b c; do echo $c; done >dir/two &&
16         cp one original.one &&
17         cp dir/two original.two
18 '
19 LF='
20 '
21
22 test_expect_success 'update-index and ls-files' '
23         git update-index --add one &&
24         case "`git ls-files`" in
25         one) echo pass one ;;
26         *) echo bad one; exit 1 ;;
27         esac &&
28         (
29                 cd dir &&
30                 git update-index --add two &&
31                 case "`git ls-files`" in
32                 two) echo pass two ;;
33                 *) echo bad two; exit 1 ;;
34                 esac
35         ) &&
36         case "`git ls-files`" in
37         dir/two"$LF"one) echo pass both ;;
38         *) echo bad; exit 1 ;;
39         esac
40 '
41
42 test_expect_success 'cat-file' '
43         two=`git ls-files -s dir/two` &&
44         two=`expr "$two" : "[0-7]* \\([0-9a-f]*\\)"` &&
45         echo "$two" &&
46         git cat-file -p "$two" >actual &&
47         cmp dir/two actual &&
48         (
49                 cd dir &&
50                 git cat-file -p "$two" >actual &&
51                 cmp two actual
52         )
53 '
54 rm -f actual dir/actual
55
56 test_expect_success 'diff-files' '
57         echo a >>one &&
58         echo d >>dir/two &&
59         case "`git diff-files --name-only`" in
60         dir/two"$LF"one) echo pass top ;;
61         *) echo bad top; exit 1 ;;
62         esac &&
63         # diff should not omit leading paths
64         (
65                 cd dir &&
66                 case "`git diff-files --name-only`" in
67                 dir/two"$LF"one) echo pass subdir ;;
68                 *) echo bad subdir; exit 1 ;;
69                 esac &&
70                 case "`git diff-files --name-only .`" in
71                 dir/two) echo pass subdir limited ;;
72                 *) echo bad subdir limited; exit 1 ;;
73                 esac
74         )
75 '
76
77 test_expect_success 'write-tree' '
78         top=`git write-tree` &&
79         echo $top &&
80         (
81                 cd dir &&
82                 sub=`git write-tree` &&
83                 echo $sub &&
84                 test "z$top" = "z$sub"
85         )
86 '
87
88 test_expect_success 'checkout-index' '
89         git checkout-index -f -u one &&
90         cmp one original.one &&
91         (
92                 cd dir &&
93                 git checkout-index -f -u two &&
94                 cmp two ../original.two
95         )
96 '
97
98 test_expect_success 'read-tree' '
99         rm -f one dir/two &&
100         tree=`git write-tree` &&
101         git read-tree --reset -u "$tree" &&
102         cmp one original.one &&
103         cmp dir/two original.two &&
104         (
105                 cd dir &&
106                 rm -f two &&
107                 git read-tree --reset -u "$tree" &&
108                 cmp two ../original.two &&
109                 cmp ../one ../original.one
110         )
111 '
112
113 test_expect_success 'alias expansion' '
114         (
115                 git config alias.ss status &&
116                 cd dir &&
117                 git status &&
118                 git ss
119         )
120 '
121
122 test_expect_success '!alias expansion' '
123         pwd >expect &&
124         (
125                 git config alias.test !pwd &&
126                 cd dir &&
127                 git test >../actual
128         ) &&
129         test_cmp expect actual
130 '
131
132 test_expect_success 'GIT_PREFIX for !alias' '
133         printf "dir/" >expect &&
134         (
135                 git config alias.test "!sh -c \"printf \$GIT_PREFIX\"" &&
136                 cd dir &&
137                 git test >../actual
138         ) &&
139         test_cmp expect actual
140 '
141
142 test_expect_success 'no file/rev ambiguity check inside .git' '
143         git commit -a -m 1 &&
144         (
145                 cd .git &&
146                 git show -s HEAD
147         )
148 '
149
150 test_expect_success 'no file/rev ambiguity check inside a bare repo' '
151         git clone -s --bare .git foo.git &&
152         (
153                 cd foo.git &&
154                 GIT_DIR=. git show -s HEAD
155         )
156 '
157
158 # This still does not work as it should...
159 : test_expect_success 'no file/rev ambiguity check inside a bare repo' '
160         git clone -s --bare .git foo.git &&
161         (
162                 cd foo.git &&
163                 git show -s HEAD
164         )
165 '
166
167 test_expect_success SYMLINKS 'detection should not be fooled by a symlink' '
168         rm -fr foo.git &&
169         git clone -s .git another &&
170         ln -s another yetanother &&
171         (
172                 cd yetanother/.git &&
173                 git show -s HEAD
174         )
175 '
176
177 test_done