Merge branch 'ab/submodule-add-f'
[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 HERE=`pwd`
20 LF='
21 '
22
23 test_expect_success 'update-index and ls-files' '
24         cd "$HERE" &&
25         git update-index --add one &&
26         case "`git ls-files`" in
27         one) echo pass one ;;
28         *) echo bad one; exit 1 ;;
29         esac &&
30         cd dir &&
31         git update-index --add two &&
32         case "`git ls-files`" in
33         two) echo pass two ;;
34         *) echo bad two; exit 1 ;;
35         esac &&
36         cd .. &&
37         case "`git ls-files`" in
38         dir/two"$LF"one) echo pass both ;;
39         *) echo bad; exit 1 ;;
40         esac
41 '
42
43 test_expect_success 'cat-file' '
44         cd "$HERE" &&
45         two=`git ls-files -s dir/two` &&
46         two=`expr "$two" : "[0-7]* \\([0-9a-f]*\\)"` &&
47         echo "$two" &&
48         git cat-file -p "$two" >actual &&
49         cmp dir/two actual &&
50         cd dir &&
51         git cat-file -p "$two" >actual &&
52         cmp two actual
53 '
54 rm -f actual dir/actual
55
56 test_expect_success 'diff-files' '
57         cd "$HERE" &&
58         echo a >>one &&
59         echo d >>dir/two &&
60         case "`git diff-files --name-only`" in
61         dir/two"$LF"one) echo pass top ;;
62         *) echo bad top; exit 1 ;;
63         esac &&
64         # diff should not omit leading paths
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 test_expect_success 'write-tree' '
77         cd "$HERE" &&
78         top=`git write-tree` &&
79         echo $top &&
80         cd dir &&
81         sub=`git write-tree` &&
82         echo $sub &&
83         test "z$top" = "z$sub"
84 '
85
86 test_expect_success 'checkout-index' '
87         cd "$HERE" &&
88         git checkout-index -f -u one &&
89         cmp one original.one &&
90         cd dir &&
91         git checkout-index -f -u two &&
92         cmp two ../original.two
93 '
94
95 test_expect_success 'read-tree' '
96         cd "$HERE" &&
97         rm -f one dir/two &&
98         tree=`git write-tree` &&
99         git read-tree --reset -u "$tree" &&
100         cmp one original.one &&
101         cmp dir/two original.two &&
102         cd dir &&
103         rm -f two &&
104         git read-tree --reset -u "$tree" &&
105         cmp two ../original.two &&
106         cmp ../one ../original.one
107 '
108
109 test_expect_success 'no file/rev ambiguity check inside .git' '
110         cd "$HERE" &&
111         git commit -a -m 1 &&
112         cd "$HERE"/.git &&
113         git show -s HEAD
114 '
115
116 test_expect_success 'no file/rev ambiguity check inside a bare repo' '
117         cd "$HERE" &&
118         git clone -s --bare .git foo.git &&
119         cd foo.git && GIT_DIR=. git show -s HEAD
120 '
121
122 # This still does not work as it should...
123 : test_expect_success 'no file/rev ambiguity check inside a bare repo' '
124         cd "$HERE" &&
125         git clone -s --bare .git foo.git &&
126         cd foo.git && git show -s HEAD
127 '
128
129 test_expect_success SYMLINKS 'detection should not be fooled by a symlink' '
130         cd "$HERE" &&
131         rm -fr foo.git &&
132         git clone -s .git another &&
133         ln -s another yetanother &&
134         cd yetanother/.git &&
135         git show -s HEAD
136 '
137
138 test_done