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