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