3 test_description
='test git rev-parse diagnosis for invalid argument'
12 cat >expected
<<-EOF &&
13 fatal: Path '$2$3' $4, but not ${5:-$sq$3$sq}.
14 Did you mean '$1:$2$3'${2:+ aka $sq$1:./$3$sq}?
16 test_cmp expected error
21 test_expect_success
'set up basic repo' '
22 echo one > file.txt &&
24 echo two > subdir/file.txt &&
25 echo three > subdir/file2.txt &&
28 echo four > index-only.txt &&
29 git add index-only.txt &&
30 echo five > disk-only.txt
33 test_expect_success
'correct file objects' '
34 HASH_file=$(git rev-parse HEAD:file.txt) &&
35 git rev-parse HEAD:subdir/file.txt &&
36 git rev-parse :index-only.txt &&
38 git rev-parse HEAD:subdir/file2.txt &&
39 test $HASH_file = $(git rev-parse HEAD:file.txt) &&
40 test $HASH_file = $(git rev-parse :file.txt) &&
41 test $HASH_file = $(git rev-parse :0:file.txt) )
44 test_expect_success
'correct relative file objects (0)' '
45 git rev-parse :file.txt >expected &&
46 git rev-parse :./file.txt >result &&
47 test_cmp expected result &&
48 git rev-parse :0:./file.txt >result &&
49 test_cmp expected result
52 test_expect_success
'correct relative file objects (1)' '
53 git rev-parse HEAD:file.txt >expected &&
54 git rev-parse HEAD:./file.txt >result &&
55 test_cmp expected result
58 test_expect_success
'correct relative file objects (2)' '
61 git rev-parse HEAD:../file.txt >result &&
62 test_cmp ../expected result
66 test_expect_success
'correct relative file objects (3)' '
69 git rev-parse HEAD:../subdir/../file.txt >result &&
70 test_cmp ../expected result
74 test_expect_success
'correct relative file objects (4)' '
75 git rev-parse HEAD:subdir/file.txt >expected &&
78 git rev-parse HEAD:./file.txt >result &&
79 test_cmp ../expected result
83 test_expect_success
'correct relative file objects (5)' '
84 git rev-parse :subdir/file.txt >expected &&
87 git rev-parse :./file.txt >result &&
88 test_cmp ../expected result &&
89 git rev-parse :0:./file.txt >result &&
90 test_cmp ../expected result
94 test_expect_success
'correct relative file objects (6)' '
95 git rev-parse :file.txt >expected &&
98 git rev-parse :../file.txt >result &&
99 test_cmp ../expected result &&
100 git rev-parse :0:../file.txt >result &&
101 test_cmp ../expected result
105 test_expect_success
'incorrect revision id' '
106 test_must_fail git rev-parse foobar:file.txt 2>error &&
107 grep "Invalid object name '"'"'foobar'"'"'." error &&
108 test_must_fail git rev-parse foobar 2> error &&
109 grep "unknown revision or path not in the working tree." error
112 test_expect_success
'incorrect file in sha1:path' '
113 test_must_fail git rev-parse HEAD:nothing.txt 2> error &&
114 grep "fatal: Path '"'"'nothing.txt'"'"' does not exist in '"'"'HEAD'"'"'" error &&
115 test_must_fail git rev-parse HEAD:index-only.txt 2> error &&
116 grep "fatal: Path '"'"'index-only.txt'"'"' exists on disk, but not in '"'"'HEAD'"'"'." error &&
118 test_must_fail git rev-parse HEAD:file2.txt 2> error &&
119 test_did_you_mean HEAD subdir/ file2.txt exists )
122 test_expect_success
'incorrect file in :path and :N:path' '
123 test_must_fail git rev-parse :nothing.txt 2> error &&
124 grep "fatal: Path '"'"'nothing.txt'"'"' does not exist (neither on disk nor in the index)." error &&
125 test_must_fail git rev-parse :1:nothing.txt 2> error &&
126 grep "Path '"'"'nothing.txt'"'"' does not exist (neither on disk nor in the index)." error &&
127 test_must_fail git rev-parse :1:file.txt 2> error &&
128 test_did_you_mean ":0" "" file.txt "is in the index" "at stage 1" &&
130 test_must_fail git rev-parse :1:file.txt 2> error &&
131 test_did_you_mean ":0" "" file.txt "is in the index" "at stage 1" &&
132 test_must_fail git rev-parse :file2.txt 2> error &&
133 test_did_you_mean ":0" subdir/ file2.txt "is in the index" &&
134 test_must_fail git rev-parse :2:file2.txt 2> error &&
135 test_did_you_mean :0 subdir/ file2.txt "is in the index") &&
136 test_must_fail git rev-parse :disk-only.txt 2> error &&
137 grep "fatal: Path '"'"'disk-only.txt'"'"' exists on disk, but not in the index." error
140 test_expect_success
'invalid @{n} reference' '
141 test_must_fail git rev-parse master@{99999} >output 2>error &&
142 test -z "$(cat output)" &&
143 grep "fatal: Log for [^ ]* only has [0-9][0-9]* entries." error &&
144 test_must_fail git rev-parse --verify master@{99999} >output 2>error &&
145 test -z "$(cat output)" &&
146 grep "fatal: Log for [^ ]* only has [0-9][0-9]* entries." error
149 test_expect_success
'relative path not found' '
152 test_must_fail git rev-parse HEAD:./nonexistent.txt 2>error &&
153 grep subdir/nonexistent.txt error
157 test_expect_success
'relative path outside worktree' '
158 test_must_fail git rev-parse HEAD:../file.txt >output 2>error &&
159 test -z "$(cat output)" &&
160 grep "outside repository" error
163 test_expect_success
'relative path when cwd is outside worktree' '
164 test_must_fail git --git-dir=.git --work-tree=subdir rev-parse HEAD:./file.txt >output 2>error &&
165 test -z "$(cat output)" &&
166 grep "relative path syntax can.t be used outside working tree." error
169 test_expect_success
'relative path when startup_info is NULL' '
170 test_must_fail test-match-trees HEAD:./file.txt HEAD:./file.txt 2>error &&
171 grep "BUG: startup_info struct is not initialized." error