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