(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id:Id.Lit_Chars val:'object name disambiguation\n' span_id:6) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id: Id.Lit_Chars val: 'Create blobs, trees, commits and a tag that all share the same\n' span_id: 8 ) (Token id:Id.Lit_Chars val:'prefix, and make sure "git rev-parse" can take advantage of\n' span_id:9) (Token id: Id.Lit_Chars val: 'type information to disambiguate short object names that are\n' span_id: 10 ) (Token id:Id.Lit_Chars val:'not necessarily unique.\n' span_id:11) (Token id:Id.Lit_Chars val:'\n' span_id:12) (Token id: Id.Lit_Chars val: 'The final history used in the test has five commits, with the bottom\n' span_id: 13 ) (Token id: Id.Lit_Chars val: 'one tagged as v1.0.0. They all have one regular file each.\n' span_id: 14 ) (Token id:Id.Lit_Chars val:'\n' span_id:15) (Token id: Id.Lit_Chars val: ' +-------------------------------------------+\n' span_id: 16 ) (Token id:Id.Lit_Chars val:' | |\n' span_id:17) (Token id: Id.Lit_Chars val: ' | .-------b3wettvi---- ad2uee |\n' span_id: 18 ) (Token id:Id.Lit_Chars val:' | / / |\n' span_id:19) (Token id: Id.Lit_Chars val: ' | a2onsxbvj---czy8f73t--ioiley5o |\n' span_id: 20 ) (Token id:Id.Lit_Chars val:' | |\n' span_id:21) (Token id: Id.Lit_Chars val: ' +-------------------------------------------+\n' span_id: 22 ) (Token id:Id.Lit_Chars val:'\n' span_id:23) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'blob and tree' span_id:35))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:39) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\t(\n' span_id:41) (Token id:Id.Lit_Chars val:'\t\tfor i in 0 1 2 3 4 5 6 7 8 9\n' span_id:42) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:43) (Token id:Id.Lit_Chars val:'\t\t\techo $i\n' span_id:44) (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:45) (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:46) (Token id:Id.Lit_Chars val:'\t\techo b1rwzyc3\n' span_id:47) (Token id:Id.Lit_Chars val:'\t) >a0blgqsjc &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\n' span_id:49) (Token id:Id.Lit_Chars val:'\t# create one blob 0000000000b36\n' span_id:50) (Token id:Id.Lit_Chars val:'\tgit add a0blgqsjc &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\n' span_id:52) (Token id:Id.Lit_Chars val:'\t# create one tree 0000000000cdc\n' span_id:53) (Token id:Id.Lit_Chars val:'\tgit write-tree\n' span_id:54) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'warn ambiguity when no candidate matches type hint' span_id: 61 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:65) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify 000000000^{commit} 2>actual &&\n' span_id: 66 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "short SHA1 000000000 is ambiguous" actual\n' span_id:67) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'disambiguate tree-ish' span_id:74))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:78) (Token id: Id.Lit_Chars val: '\t# feed tree-ish in an unambiguous way\n' span_id: 79 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify 0000000000cdc:a0blgqsjc &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\n' span_id:81) (Token id: Id.Lit_Chars val: '\t# ambiguous at the object name level, but there is only one\n' span_id: 82 ) (Token id:Id.Lit_Chars val:'\t# such tree-ish (the other is a blob)\n' span_id:83) (Token id: Id.Lit_Chars val: '\tgit rev-parse --verify 000000000:a0blgqsjc\n' span_id: 84 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'disambiguate blob' span_id:91))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:95) (Token id:Id.Lit_Chars val:'\tsed -e "s/|$//" >patch <<-EOF &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\tdiff --git a/frotz b/frotz\n' span_id:97) (Token id:Id.Lit_Chars val:'\tindex 000000000..ffffff 100644\n' span_id:98) (Token id:Id.Lit_Chars val:'\t--- a/frotz\n' span_id:99) (Token id:Id.Lit_Chars val:'\t+++ b/frotz\n' span_id:100) (Token id:Id.Lit_Chars val:'\t@@ -10,3 +10,4 @@\n' span_id:101) (Token id:Id.Lit_Chars val:'\t 9\n' span_id:102) (Token id:Id.Lit_Chars val:'\t |\n' span_id:103) (Token id:Id.Lit_Chars val:'\t b1rwzyc3\n' span_id:104) (Token id:Id.Lit_Chars val:'\t+irwry\n' span_id:105) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:106) (Token id:Id.Lit_Chars val:'\t(\n' span_id:107) (Token id:Id.Lit_Chars val:'\t\tGIT_INDEX_FILE=frotz &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\t\texport GIT_INDEX_FILE &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\t\tgit apply --build-fake-ancestor frotz patch &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\t\tgit cat-file blob :frotz >actual\n' span_id:111) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\ttest_cmp a0blgqsjc actual\n' span_id:113) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'disambiguate tree' span_id:120))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:124) (Token id: Id.Lit_Chars val: '\tcommit=$(echo "d7xm" | git commit-tree 000000000) &&\n' span_id: 125 ) (Token id: Id.Lit_Chars val: '\t# this commit is fffff2e and not ambiguous with the 00000* objects\n' span_id: 126 ) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse $commit^{tree}) = $(git rev-parse 0000000000cdc)\n' span_id: 127 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'first commit' span_id:134))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:138) (Token id:Id.Lit_Chars val:'\t# create one commit 0000000000e4f\n' span_id:139) (Token id:Id.Lit_Chars val:'\tgit commit -m a2onsxbvj\n' span_id:140) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'disambiguate commit-ish' span_id:147))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) (Token id: Id.Lit_Chars val: '\t# feed commit-ish in an unambiguous way\n' span_id: 152 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify 0000000000e4f^{commit} &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\n' span_id:154) (Token id: Id.Lit_Chars val: '\t# ambiguous at the object name level, but there is only one\n' span_id: 155 ) (Token id:Id.Lit_Chars val:'\t# such commit (the others are tree and blob)\n' span_id:156) (Token id: Id.Lit_Chars val: '\tgit rev-parse --verify 000000000^{commit} &&\n' span_id: 157 ) (Token id:Id.Lit_Chars val:'\n' span_id:158) (Token id:Id.Lit_Chars val:'\t# likewise\n' span_id:159) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify 000000000^0\n' span_id:160) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'disambiguate commit' span_id:167))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:171) (Token id: Id.Lit_Chars val: '\tcommit=$(echo "hoaxj" | git commit-tree 0000000000cdc -p 000000000) &&\n' span_id: 172 ) (Token id: Id.Lit_Chars val: '\t# this commit is ffffffd8 and not ambiguous with the 00000* objects\n' span_id: 173 ) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse $commit^) = $(git rev-parse 0000000000e4f)\n' span_id: 174 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'log name1..name2 takes only commit-ishes on both ends' span_id: 181 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:185) (Token id: Id.Lit_Chars val: '\t# These are underspecified from the prefix-length point of view\n' span_id: 186 ) (Token id: Id.Lit_Chars val: '\t# to disambiguate the commit with other objects, but there is only\n' span_id: 187 ) (Token id:Id.Lit_Chars val:'\t# one commit that has 00000* prefix at this point.\n' span_id:188) (Token id:Id.Lit_Chars val:'\tgit log 000000000..000000000 &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\tgit log ..000000000 &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\tgit log 000000000.. &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\tgit log 000000000...000000000 &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\tgit log ...000000000 &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\tgit log 000000000...\n' span_id:194) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rev-parse name1..name2 takes only commit-ishes on both ends' span_id: 201 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:205) (Token id:Id.Lit_Chars val:'\t# Likewise.\n' span_id:206) (Token id:Id.Lit_Chars val:'\tgit rev-parse 000000000..000000000 &&\n' span_id:207) (Token id:Id.Lit_Chars val:'\tgit rev-parse ..000000000 &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tgit rev-parse 000000000..\n' span_id:209) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git log takes only commit-ish' span_id:216))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:220) (Token id:Id.Lit_Chars val:'\t# Likewise.\n' span_id:221) (Token id:Id.Lit_Chars val:'\tgit log 000000000\n' span_id:222) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git reset takes only commit-ish' span_id:229))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:233) (Token id:Id.Lit_Chars val:'\t# Likewise.\n' span_id:234) (Token id:Id.Lit_Chars val:'\tgit reset 000000000\n' span_id:235) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'first tag' span_id:242))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:246) (Token id:Id.Lit_Chars val:'\t# create one tag 0000000000f8f\n' span_id:247) (Token id:Id.Lit_Chars val:'\tgit tag -a -m j7cp83um v1.0.0\n' span_id:248) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'two semi-ambiguous commit-ish' span_id:255))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:259) (Token id: Id.Lit_Chars val: '\t# At this point, we have a tag 0000000000f8f that points\n' span_id: 260 ) (Token id:Id.Lit_Chars val:'\t# at a commit 0000000000e4f, and a tree and a blob that\n' span_id:261) (Token id: Id.Lit_Chars val: '\t# share 0000000000 prefix with these tag and commit.\n' span_id: 262 ) (Token id:Id.Lit_Chars val:'\t#\n' span_id:263) (Token id: Id.Lit_Chars val: '\t# Once the parser becomes ultra-smart, it could notice that\n' span_id: 264 ) (Token id: Id.Lit_Chars val: '\t# 0000000000 before ^{commit} name many different objects, but\n' span_id: 265 ) (Token id: Id.Lit_Chars val: '\t# that only two (HEAD and v1.0.0 tag) can be peeled to commit,\n' span_id: 266 ) (Token id: Id.Lit_Chars val: '\t# and that peeling them down to commit yield the same commit\n' span_id: 267 ) (Token id:Id.Lit_Chars val:'\t# without ambiguity.\n' span_id:268) (Token id: Id.Lit_Chars val: '\tgit rev-parse --verify 0000000000^{commit} &&\n' span_id: 269 ) (Token id:Id.Lit_Chars val:'\n' span_id:270) (Token id:Id.Lit_Chars val:'\t# likewise\n' span_id:271) (Token id:Id.Lit_Chars val:'\tgit log 0000000000..0000000000 &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\tgit log ..0000000000 &&\n' span_id:273) (Token id:Id.Lit_Chars val:'\tgit log 0000000000.. &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\tgit log 0000000000...0000000000 &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\tgit log ...0000000000 &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\tgit log 0000000000...\n' span_id:277) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'three semi-ambiguous tree-ish' span_id:284))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:288) (Token id: Id.Lit_Chars val: '\t# Likewise for tree-ish. HEAD, v1.0.0 and HEAD^{tree} share\n' span_id: 289 ) (Token id: Id.Lit_Chars val: '\t# the prefix but peeling them to tree yields the same thing\n' span_id: 290 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify 0000000000^{tree}\n' span_id:291) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'parse describe name' span_id:298))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:302) (Token id:Id.Lit_Chars val:'\t# feed an unambiguous describe name\n' span_id:303) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify v1.0.0-0-g0000000000e4f &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\n' span_id:305) (Token id: Id.Lit_Chars val: '\t# ambiguous at the object name level, but there is only one\n' span_id: 306 ) (Token id:Id.Lit_Chars val:'\t# such commit (others are blob, tree and tag)\n' span_id:307) (Token id: Id.Lit_Chars val: '\tgit rev-parse --verify v1.0.0-0-g000000000\n' span_id: 308 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'more history' span_id:315))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:319) (Token id:Id.Lit_Chars val:'\t# commit 0000000000043\n' span_id:320) (Token id:Id.Lit_Chars val:'\tgit mv a0blgqsjc d12cr3h8t &&\n' span_id:321) (Token id:Id.Lit_Chars val:'\techo h62xsjeu >>d12cr3h8t &&\n' span_id:322) (Token id:Id.Lit_Chars val:'\tgit add d12cr3h8t &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\n' span_id:324) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:325) (Token id:Id.Lit_Chars val:'\tgit commit -m czy8f73t &&\n' span_id:326) (Token id:Id.Lit_Chars val:'\n' span_id:327) (Token id:Id.Lit_Chars val:'\t# commit 00000000008ec\n' span_id:328) (Token id:Id.Lit_Chars val:'\tgit mv d12cr3h8t j000jmpzn &&\n' span_id:329) (Token id:Id.Lit_Chars val:'\techo j08bekfvt >>j000jmpzn &&\n' span_id:330) (Token id:Id.Lit_Chars val:'\tgit add j000jmpzn &&\n' span_id:331) (Token id:Id.Lit_Chars val:'\n' span_id:332) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:333) (Token id:Id.Lit_Chars val:'\tgit commit -m ioiley5o &&\n' span_id:334) (Token id:Id.Lit_Chars val:'\n' span_id:335) (Token id:Id.Lit_Chars val:'\t# commit 0000000005b0\n' span_id:336) (Token id:Id.Lit_Chars val:'\tgit checkout v1.0.0^0 &&\n' span_id:337) (Token id:Id.Lit_Chars val:'\tgit mv a0blgqsjc f5518nwu &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\n' span_id:339) (Token id: Id.Lit_Chars val: '\tfor i in h62xsjeu j08bekfvt kg7xflhm\n' span_id: 340 ) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:341) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:342) (Token id:Id.Lit_Chars val:'\tdone >>f5518nwu &&\n' span_id:343) (Token id:Id.Lit_Chars val:'\tgit add f5518nwu &&\n' span_id:344) (Token id:Id.Lit_Chars val:'\n' span_id:345) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:346) (Token id:Id.Lit_Chars val:'\tgit commit -m b3wettvi &&\n' span_id:347) (Token id:Id.Lit_Chars val:'\tside=$(git rev-parse HEAD) &&\n' span_id:348) (Token id:Id.Lit_Chars val:'\n' span_id:349) (Token id:Id.Lit_Chars val:'\t# commit 000000000066\n' span_id:350) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:351) (Token id:Id.Lit_Chars val:'\n' span_id:352) (Token id: Id.Lit_Chars val: '\t# If you use recursive, merge will fail and you will need to\n' span_id: 353 ) (Token id: Id.Lit_Chars val: '\t# clean up a0blgqsjc as well. If you use resolve, merge will\n' span_id: 354 ) (Token id:Id.Lit_Chars val:'\t# succeed.\n' span_id:355) (Token id: Id.Lit_Chars val: '\ttest_might_fail git merge --no-commit -s recursive $side &&\n' span_id: 356 ) (Token id:Id.Lit_Chars val:'\tgit rm -f f5518nwu j000jmpzn &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\n' span_id:358) (Token id:Id.Lit_Chars val:'\ttest_might_fail git rm -f a0blgqsjc &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\t(\n' span_id:360) (Token id:Id.Lit_Chars val:'\t\tgit cat-file blob $side:f5518nwu\n' span_id:361) (Token id:Id.Lit_Chars val:'\t\techo j3l0i9s6\n' span_id:362) (Token id:Id.Lit_Chars val:'\t) >ab2gs879 &&\n' span_id:363) (Token id:Id.Lit_Chars val:'\tgit add ab2gs879 &&\n' span_id:364) (Token id:Id.Lit_Chars val:'\n' span_id:365) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\tgit commit -m ad2uee\n' span_id:367) (Token id:Id.Lit_Chars val:'\n' span_id:368) ) } ) (C {(test_expect_failure)} { (SQ (Token id: Id.Lit_Chars val: 'parse describe name taking advantage of generation' span_id: 375 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:379) (Token id: Id.Lit_Chars val: '\t# ambiguous at the object name level, but there is only one\n' span_id: 380 ) (Token id:Id.Lit_Chars val:'\t# such commit at generation 0\n' span_id:381) (Token id: Id.Lit_Chars val: '\tgit rev-parse --verify v1.0.0-0-g000000000 &&\n' span_id: 382 ) (Token id:Id.Lit_Chars val:'\n' span_id:383) (Token id:Id.Lit_Chars val:'\t# likewise for generation 2 and 4\n' span_id:384) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify v1.0.0-2-g000000000 &&\n' span_id:385) (Token id: Id.Lit_Chars val: '\tgit rev-parse --verify v1.0.0-4-g000000000\n' span_id: 386 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'parse describe name not ignoring ambiguity' span_id:414))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:418) (Token id: Id.Lit_Chars val: '\t# ambiguous at the object name level, and there are two such\n' span_id: 419 ) (Token id:Id.Lit_Chars val:'\t# commits at generation 1\n' span_id:420) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify v1.0.0-1-g000000000\n' span_id: 421 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ambiguous commit-ish' span_id:428))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:432) (Token id: Id.Lit_Chars val: '\t# Now there are many commits that begin with the\n' span_id: 433 ) (Token id:Id.Lit_Chars val:'\t# common prefix, none of these should pick one at\n' span_id:434) (Token id: Id.Lit_Chars val: '\t# random. They all should result in ambiguity errors.\n' span_id: 435 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify 00000000^{commit} &&\n' span_id: 436 ) (Token id:Id.Lit_Chars val:'\n' span_id:437) (Token id:Id.Lit_Chars val:'\t# likewise\n' span_id:438) (Token id: Id.Lit_Chars val: '\ttest_must_fail git log 000000000..000000000 &&\n' span_id: 439 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git log ..000000000 &&\n' span_id:440) (Token id: Id.Lit_Chars val: '\ttest_must_fail git log 000000000.. &&\n' span_id: 441 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git log 000000000...000000000 &&\n' span_id:442) (Token id: Id.Lit_Chars val: '\ttest_must_fail git log ...000000000 &&\n' span_id: 443 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git log 000000000...\n' span_id:444) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ambiguous tags peel to treeish' span_id:460))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:464) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse 0000000000f^{tree}\n' span_id: 465 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-parse --disambiguate' span_id:472))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:476) (Token id: Id.Lit_Chars val: '\t# The test creates 16 objects that share the prefix and two\n' span_id: 477 ) (Token id: Id.Lit_Chars val: '\t# commits created by commit-tree in earlier tests share a\n' span_id: 478 ) (Token id:Id.Lit_Chars val:'\t# different prefix.\n' span_id:479) (Token id: Id.Lit_Chars val: '\tgit rev-parse --disambiguate=000000000 >actual &&\n' span_id: 480 ) (Token id:Id.Lit_Chars val:'\ttest $(wc -l <actual) = 16 &&\n' span_id:481) (Token id: Id.Lit_Chars val: '\ttest "$(sed -e "s/^\\(.........\\).*/\\1/" actual | sort -u)" = 000000000\n' span_id: 482 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-parse --disambiguate drops duplicates' span_id:489))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:493) (Token id: Id.Lit_Chars val: '\tgit rev-parse --disambiguate=000000000 >expect &&\n' span_id: 494 ) (Token id:Id.Lit_Chars val:'\tgit pack-objects .git/objects/pack/pack <expect &&\n' span_id:495) (Token id: Id.Lit_Chars val: '\tgit rev-parse --disambiguate=000000000 >actual &&\n' span_id: 496 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:497) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ambiguous 40-hex ref' span_id:504))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:508) (Token id:Id.Lit_Chars val:'\tTREE=$(git mktree </dev/null) &&\n' span_id:509) (Token id:Id.Lit_Chars val:'\tREF=$(git rev-parse HEAD) &&\n' span_id:510) (Token id: Id.Lit_Chars val: '\tVAL=$(git commit-tree $TREE </dev/null) &&\n' span_id: 511 ) (Token id:Id.Lit_Chars val:'\tgit update-ref refs/heads/$REF $VAL &&\n' span_id:512) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse $REF 2>err) = $REF &&\n' span_id: 513 ) (Token id:Id.Lit_Chars val:'\tgrep "refname.*${REF}.*ambiguous" err\n' span_id:514) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ambiguous short sha1 ref' span_id:521))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:525) (Token id:Id.Lit_Chars val:'\tTREE=$(git mktree </dev/null) &&\n' span_id:526) (Token id:Id.Lit_Chars val:'\tREF=$(git rev-parse --short HEAD) &&\n' span_id:527) (Token id: Id.Lit_Chars val: '\tVAL=$(git commit-tree $TREE </dev/null) &&\n' span_id: 528 ) (Token id:Id.Lit_Chars val:'\tgit update-ref refs/heads/$REF $VAL &&\n' span_id:529) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse $REF 2>err) = $VAL &&\n' span_id: 530 ) (Token id:Id.Lit_Chars val:'\tgrep "refname.*${REF}.*ambiguous" err\n' span_id:531) ) } ) (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ (Token id:Id.Lit_Chars val:'ambiguity errors are not repeated (raw)' span_id:540))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:544) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse 00000 2>stderr &&\n' span_id: 545 ) (Token id:Id.Lit_Chars val:'\tgrep "is ambiguous" stderr >errors &&\n' span_id:546) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 errors\n' span_id:547) ) } ) (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ (Token id:Id.Lit_Chars val:'ambiguity errors are not repeated (treeish)' span_id:556))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:560) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse 00000:foo 2>stderr &&\n' span_id: 561 ) (Token id:Id.Lit_Chars val:'\tgrep "is ambiguous" stderr >errors &&\n' span_id:562) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 errors\n' span_id:563) ) } ) (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ (Token id:Id.Lit_Chars val:'ambiguity errors are not repeated (peel)' span_id:572))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:576) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse 00000^{commit} 2>stderr &&\n' span_id: 577 ) (Token id:Id.Lit_Chars val:'\tgrep "is ambiguous" stderr >errors &&\n' span_id:578) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 errors\n' span_id:579) ) } ) (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ (Token id:Id.Lit_Chars val:'ambiguity hints' span_id:588))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:592) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse 000000000 2>stderr &&\n' span_id: 593 ) (Token id:Id.Lit_Chars val:'\tgrep ^hint: stderr >hints &&\n' span_id:594) (Token id: Id.Lit_Chars val: '\t# 16 candidates, plus one intro line\n' span_id: 595 ) (Token id:Id.Lit_Chars val:'\ttest_line_count = 17 hints\n' span_id:596) ) } ) (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ (Token id:Id.Lit_Chars val:'ambiguity hints respect type' span_id:605))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:609) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse 000000000^{commit} 2>stderr &&\n' span_id: 610 ) (Token id:Id.Lit_Chars val:'\tgrep ^hint: stderr >hints &&\n' span_id:611) (Token id: Id.Lit_Chars val: '\t# 5 commits, 1 tag (which is a commitish), plus intro line\n' span_id: 612 ) (Token id:Id.Lit_Chars val:'\ttest_line_count = 7 hints\n' span_id:613) ) } ) (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ (Token id:Id.Lit_Chars val:'failed type-selector still shows hint' span_id:622))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:626) (Token id: Id.Lit_Chars val: '\t# these two blobs share the same prefix "ee3d", but neither\n' span_id: 627 ) (Token id:Id.Lit_Chars val:'\t# will pass for a commit\n' span_id:628) (Token id: Id.Lit_Chars val: '\techo 851 | git hash-object --stdin -w &&\n' span_id: 629 ) (Token id:Id.Lit_Chars val:'\techo 872 | git hash-object --stdin -w &&\n' span_id:630) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse ee3d^{commit} 2>stderr &&\n' span_id: 631 ) (Token id:Id.Lit_Chars val:'\tgrep ^hint: stderr >hints &&\n' span_id:632) (Token id:Id.Lit_Chars val:'\ttest_line_count = 3 hints\n' span_id:633) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'core.disambiguate config can prefer types' span_id:640))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:644) (Token id:Id.Lit_Chars val:'\t# ambiguous between tree and tag\n' span_id:645) (Token id:Id.Lit_Chars val:'\tsha1=0000000000f &&\n' span_id:646) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse $sha1 &&\n' span_id: 647 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $sha1^{commit} &&\n' span_id:648) (Token id: Id.Lit_Chars val: '\tgit -c core.disambiguate=committish rev-parse $sha1\n' span_id: 649 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'core.disambiguate does not override context' span_id:656))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:660) (Token id: Id.Lit_Chars val: '\t# treeish ambiguous between tag and tree\n' span_id: 661 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail \\\n' span_id:662) (Token id: Id.Lit_Chars val: '\t\tgit -c core.disambiguate=committish rev-parse $sha1^{tree}\n' span_id: 663 ) ) } ) (C {(test_done)}) ] )