(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:'test transitive info/alternate entries' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'preparing first repository' span_id:26))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:30) (Token id:Id.Lit_Chars val:'\ttest_create_repo A && (\n' span_id:31) (Token id:Id.Lit_Chars val:'\t\tcd A &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\t\techo "Hello World" > file1 &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:34) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "Initial commit" file1 &&\n' span_id: 35 ) (Token id:Id.Lit_Chars val:'\t\tgit repack -a -d &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\t\tgit prune\n' span_id:37) (Token id:Id.Lit_Chars val:'\t)\n' span_id:38) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'preparing second repository' span_id:45))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit clone -l -s A B && (\n' span_id:50) (Token id:Id.Lit_Chars val:'\t\tcd B &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\t\techo "foo bar" > file2 &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\t\tgit add file2 &&\n' span_id:53) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "next commit" file2 &&\n' span_id: 54 ) (Token id:Id.Lit_Chars val:'\t\tgit repack -a -d -l &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\t\tgit prune\n' span_id:56) (Token id:Id.Lit_Chars val:'\t)\n' span_id:57) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'preparing third repository' span_id:64))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit clone -l -s B C && (\n' span_id:69) (Token id:Id.Lit_Chars val:'\t\tcd C &&\n' span_id:70) (Token id: Id.Lit_Chars val: '\t\techo "Goodbye, cruel world" > file3 &&\n' span_id: 71 ) (Token id:Id.Lit_Chars val:'\t\tgit add file3 &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "one more" file3 &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\t\tgit repack -a -d -l &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\t\tgit prune\n' span_id:75) (Token id:Id.Lit_Chars val:'\t)\n' span_id:76) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'count-objects shows the alternates' span_id:83))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\talternate: $(pwd)/B/.git/objects\n' span_id:89) (Token id:Id.Lit_Chars val:'\talternate: $(pwd)/A/.git/objects\n' span_id:90) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit -C C count-objects -v >actual &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\tgrep ^alternate: actual >actual.alternates &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.alternates\n' span_id:94) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'creating too deep nesting' span_id:146))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:150) (Token id:Id.Lit_Chars val:'\tgit clone -l -s C D &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\tgit clone -l -s D E &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\tgit clone -l -s E F &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\tgit clone -l -s F G &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tgit clone --bare -l -s G H\n' span_id:155) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'validity of seventh repository' span_id:162))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:166) (Token id:Id.Lit_Chars val:'\tgit -C G fsck\n' span_id:167) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'invalidity of eighth repository' span_id:174))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:178) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -C H fsck\n' span_id:179) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'breaking of loops' span_id:186))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:190) (Token id: Id.Lit_Chars val: '\techo "$(pwd)"/B/.git/objects >>A/.git/objects/info/alternates &&\n' span_id: 191 ) (Token id:Id.Lit_Chars val:'\tgit -C C fsck\n' span_id:192) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'that info/alternates is necessary' span_id:199))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:203) (Token id: Id.Lit_Chars val: '\trm -f C/.git/objects/info/alternates &&\n' span_id: 204 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -C C fsck\n' span_id:205) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'that relative alternate is possible for current dir' span_id: 212 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) (Token id: Id.Lit_Chars val: '\techo "../../../B/.git/objects" >C/.git/objects/info/alternates &&\n' span_id: 217 ) (Token id:Id.Lit_Chars val:'\tgit fsck\n' span_id:218) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'that relative alternate is recursive' span_id:225))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:229) (Token id:Id.Lit_Chars val:'\tgit -C D fsck\n' span_id:230) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'relative duplicates are eliminated' span_id:246))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:250) (Token id:Id.Lit_Chars val:'\tmkdir -p deep/subdir &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\tgit init --bare deep/subdir/duplicate.git &&\n' span_id:252) (Token id: Id.Lit_Chars val: '\tcat >deep/subdir/duplicate.git/objects/info/alternates <<-\\EOF &&\n' span_id: 253 ) (Token id:Id.Lit_Chars val:'\t../../../../C/.git/objects\n' span_id:254) (Token id:Id.Lit_Chars val:'\t../../../../A/.git/objects\n' span_id:255) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:256) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:257) (Token id:Id.Lit_Chars val:'\talternate: $(pwd)/C/.git/objects\n' span_id:258) (Token id:Id.Lit_Chars val:'\talternate: $(pwd)/B/.git/objects\n' span_id:259) (Token id:Id.Lit_Chars val:'\talternate: $(pwd)/A/.git/objects\n' span_id:260) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:261) (Token id: Id.Lit_Chars val: '\tgit -C deep/subdir/duplicate.git count-objects -v >actual &&\n' span_id: 262 ) (Token id:Id.Lit_Chars val:'\tgrep ^alternate: actual >actual.alternates &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.alternates\n' span_id:264) ) } ) (C {(test_expect_success)} {(CASE_INSENSITIVE_FS)} {(SQ (Token id:Id.Lit_Chars val:'dup finding can be case-insensitive' span_id:273))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:277) (Token id:Id.Lit_Chars val:'\tgit init --bare insensitive.git &&\n' span_id:278) (Token id:Id.Lit_Chars val:'\t# the previous entry for "A" will have used uppercase\n' span_id:279) (Token id: Id.Lit_Chars val: '\tcat >insensitive.git/objects/info/alternates <<-\\EOF &&\n' span_id: 280 ) (Token id:Id.Lit_Chars val:'\t../../C/.git/objects\n' span_id:281) (Token id:Id.Lit_Chars val:'\t../../a/.git/objects\n' span_id:282) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:283) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\talternate: $(pwd)/C/.git/objects\n' span_id:285) (Token id:Id.Lit_Chars val:'\talternate: $(pwd)/B/.git/objects\n' span_id:286) (Token id:Id.Lit_Chars val:'\talternate: $(pwd)/A/.git/objects\n' span_id:287) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:288) (Token id:Id.Lit_Chars val:'\tgit -C insensitive.git count-objects -v >actual &&\n' span_id:289) (Token id: Id.Lit_Chars val: '\tgrep ^alternate: actual >actual.alternates &&\n' span_id: 290 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.alternates\n' span_id:291) ) } ) (C {(test_done)}) ] )