(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)}) ] )