(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <'test transitive info/alternate entries'>)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <'preparing first repository'>)} { (SQ <'\n'> <'\ttest_create_repo A && (\n'> <'\t\tcd A &&\n'> <'\t\techo "Hello World" > file1 &&\n'> <'\t\tgit add file1 &&\n'> <'\t\tgit commit -m "Initial commit" file1 &&\n'> <'\t\tgit repack -a -d &&\n'> <'\t\tgit prune\n'> <'\t)\n'> ) } ) (C {(test_expect_success)} {(SQ <'preparing second repository'>)} { (SQ <'\n'> <'\tgit clone -l -s A B && (\n'> <'\t\tcd B &&\n'> <'\t\techo "foo bar" > file2 &&\n'> <'\t\tgit add file2 &&\n'> <'\t\tgit commit -m "next commit" file2 &&\n'> <'\t\tgit repack -a -d -l &&\n'> <'\t\tgit prune\n'> <'\t)\n'> ) } ) (C {(test_expect_success)} {(SQ <'preparing third repository'>)} { (SQ <'\n'> <'\tgit clone -l -s B C && (\n'> <'\t\tcd C &&\n'> <'\t\techo "Goodbye, cruel world" > file3 &&\n'> <'\t\tgit add file3 &&\n'> <'\t\tgit commit -m "one more" file3 &&\n'> <'\t\tgit repack -a -d -l &&\n'> <'\t\tgit prune\n'> <'\t)\n'> ) } ) (C {(test_expect_success)} {(SQ <'count-objects shows the alternates'>)} { (SQ <'\n'> <'\tcat >expect <<-EOF &&\n'> <'\talternate: $(pwd)/B/.git/objects\n'> <'\talternate: $(pwd)/A/.git/objects\n'> <'\tEOF\n'> <'\tgit -C C count-objects -v >actual &&\n'> <'\tgrep ^alternate: actual >actual.alternates &&\n'> <'\ttest_cmp expect actual.alternates\n'> ) } ) (C {(test_expect_success)} {(SQ <'creating too deep nesting'>)} { (SQ <'\n'> <'\tgit clone -l -s C D &&\n'> <'\tgit clone -l -s D E &&\n'> <'\tgit clone -l -s E F &&\n'> <'\tgit clone -l -s F G &&\n'> <'\tgit clone --bare -l -s G H\n'> ) } ) (C {(test_expect_success)} {(SQ <'validity of seventh repository'>)} {(SQ <'\n'> <'\tgit -C G fsck\n'>)} ) (C {(test_expect_success)} {(SQ <'invalidity of eighth repository'>)} {(SQ <'\n'> <'\ttest_must_fail git -C H fsck\n'>)} ) (C {(test_expect_success)} {(SQ <'breaking of loops'>)} { (SQ <'\n'> <'\techo "$(pwd)"/B/.git/objects >>A/.git/objects/info/alternates &&\n'> <'\tgit -C C fsck\n'> ) } ) (C {(test_expect_success)} {(SQ <'that info/alternates is necessary'>)} { (SQ <'\n'> <'\trm -f C/.git/objects/info/alternates &&\n'> <'\ttest_must_fail git -C C fsck\n'>) } ) (C {(test_expect_success)} {(SQ <'that relative alternate is possible for current dir'>)} { (SQ <'\n'> <'\techo "../../../B/.git/objects" >C/.git/objects/info/alternates &&\n'> <'\tgit fsck\n'> ) } ) (C {(test_expect_success)} {(SQ <'that relative alternate is recursive'>)} {(SQ <'\n'> <'\tgit -C D fsck\n'>)} ) (C {(test_expect_success)} {(SQ <'relative duplicates are eliminated'>)} { (SQ <'\n'> <'\tmkdir -p deep/subdir &&\n'> <'\tgit init --bare deep/subdir/duplicate.git &&\n'> <'\tcat >deep/subdir/duplicate.git/objects/info/alternates <<-\\EOF &&\n'> <'\t../../../../C/.git/objects\n'> <'\t../../../../A/.git/objects\n'> <'\tEOF\n'> <'\tcat >expect <<-EOF &&\n'> <'\talternate: $(pwd)/C/.git/objects\n'> <'\talternate: $(pwd)/B/.git/objects\n'> <'\talternate: $(pwd)/A/.git/objects\n'> <'\tEOF\n'> <'\tgit -C deep/subdir/duplicate.git count-objects -v >actual &&\n'> <'\tgrep ^alternate: actual >actual.alternates &&\n'> <'\ttest_cmp expect actual.alternates\n'> ) } ) (C {(test_expect_success)} {(CASE_INSENSITIVE_FS)} {(SQ <'dup finding can be case-insensitive'>)} { (SQ <'\n'> <'\tgit init --bare insensitive.git &&\n'> <'\t# the previous entry for "A" will have used uppercase\n'> <'\tcat >insensitive.git/objects/info/alternates <<-\\EOF &&\n'> <'\t../../C/.git/objects\n'> <'\t../../a/.git/objects\n'> <'\tEOF\n'> <'\tcat >expect <<-EOF &&\n'> <'\talternate: $(pwd)/C/.git/objects\n'> <'\talternate: $(pwd)/B/.git/objects\n'> <'\talternate: $(pwd)/A/.git/objects\n'> <'\tEOF\n'> <'\tgit -C insensitive.git count-objects -v >actual &&\n'> <'\tgrep ^alternate: actual >actual.alternates &&\n'> <'\ttest_cmp expect actual.alternates\n'> ) } ) (C {(test_done)}) ] )