Merge branch 'maint'
[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 ok 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 ok two ;;
34         *) echo bad two; exit 1 ;;
35         esac &&
36         cd .. &&
37         case "`git-ls-files`" in
38         dir/two"$LF"one) echo ok 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 ok 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 ok subdir ;;
68         *) echo bad subdir; exit 1 ;;
69         esac &&
70         case "`git-diff-files --name-only .`" in
71         dir/two) echo ok 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_done