(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:'git fsck random collection of tests\n' span_id:6) 
                (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:'* (HEAD) B\n' span_id:8) 
                (Token id:Id.Lit_Chars val:'* (master) A\n' span_id:9)
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\tgit config gc.auto 0 &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\tgit config i18n.commitencoding ISO-8859-1 &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\ttest_commit A fileA one &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\tgit config --unset i18n.commitencoding &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^0 &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\ttest_commit B fileB two &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\tgit tag -d A B &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\tgit reflog expire --expire=now --all &&\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\t>empty\n' span_id:32)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'loose objects borrowed from alternate are not missing'
            span_id: 39
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tmkdir another &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\t(\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\t\tcd another &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:47) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo ../../../.git/objects >.git/objects/info/alternates &&\n'
            span_id: 48
          ) (Token id:Id.Lit_Chars val:'\t\ttest_commit C fileC one &&\n' span_id:49) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit fsck --no-dangling >../actual 2>&1\n'
            span_id: 50
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual\n' span_id:52)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'HEAD is part of refs, valid objects appear valid' span_id:59))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\tgit fsck >actual 2>&1 &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual\n' span_id:65)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup: helpers for corruption tests' span_id:82))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\tsha1_file() {\n' span_id:87) (Token id:Id.Lit_Chars val:'\t\techo "$*" | sed "s#..#.git/objects/&/#"\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\t} &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\tremove_object() {\n' span_id:91) (Token id:Id.Lit_Chars val:'\t\tfile=$(sha1_file "$*") &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\t\ttest -e "$file" &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\t\trm -f "$file"\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\t}\n' span_id:95)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'object with bad sha1' span_id:102))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:106) 
          (Token
            id: Id.Lit_Chars
            val: '\tsha=$(echo blob | git hash-object -w --stdin) &&\n'
            span_id: 107
          ) (Token id:Id.Lit_Chars val:'\told=$(echo $sha | sed "s+^..+&/+") &&\n' span_id:108) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(dirname $old)/ffffffffffffffffffffffffffffffffffffff &&\n'
            span_id: 109
          ) (Token id:Id.Lit_Chars val:'\tsha="$(dirname $new)$(basename $new)" &&\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\tmv .git/objects/$old .git/objects/$new &&\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $sha" &&\n' span_id:112) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --add --cacheinfo 100644 $sha foo &&\n'
            span_id: 113
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git read-tree -u --reset HEAD" &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\ttree=$(git write-tree) &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $tree" &&\n' span_id:116) 
          (Token
            id: Id.Lit_Chars
            val: '\tcmt=$(echo bogus | git commit-tree $tree) &&\n'
            span_id: 117
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $cmt" &&\n' span_id:118) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus $cmt &&\n'
            span_id: 119
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 120
          ) (Token id:Id.Lit_Chars val:'\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\tgrep "$sha.*corrupt" out\n' span_id:124)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch pointing to non-commit' span_id:131))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:135) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse HEAD^{tree} >.git/refs/heads/invalid &&\n'
            span_id: 136
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/invalid" &&\n'
            span_id: 137
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:139) (Token id:Id.Lit_Chars val:'\tgrep "not a commit" out\n' span_id:140)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'HEAD link pointing at a funny object' span_id:147))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "mv .git/SAVED_HEAD .git/HEAD" &&\n'
            span_id: 152
          ) (Token id:Id.Lit_Chars val:'\tmv .git/HEAD .git/SAVED_HEAD &&\n' span_id:153) 
          (Token
            id: Id.Lit_Chars
            val: '\techo 0000000000000000000000000000000000000000 >.git/HEAD &&\n'
            span_id: 154
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# avoid corrupt/broken HEAD from interfering with repo discovery\n'
            span_id: 155
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail env GIT_DIR=.git git fsck 2>out &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\tgrep "detached HEAD points" out\n' span_id:158)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'HEAD link pointing at a funny place' span_id:165))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:169) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "mv .git/SAVED_HEAD .git/HEAD" &&\n'
            span_id: 170
          ) (Token id:Id.Lit_Chars val:'\tmv .git/HEAD .git/SAVED_HEAD &&\n' span_id:171) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "ref: refs/funny/place" >.git/HEAD &&\n'
            span_id: 172
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# avoid corrupt/broken HEAD from interfering with repo discovery\n'
            span_id: 173
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail env GIT_DIR=.git git fsck 2>out &&\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tgrep "HEAD points to something strange" out\n' span_id:176)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'email without @ is okay' span_id:183))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:187) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >basis &&\n' span_id:188) (Token id:Id.Lit_Chars val:'\tsed "s/@/AT/" basis >okay &&\n' span_id:189) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(git hash-object -t commit -w --stdin <okay) &&\n'
            span_id: 190
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $new" &&\n' span_id:191) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus "$new" &&\n'
            span_id: 192
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 193
          ) (Token id:Id.Lit_Chars val:'\tgit fsck 2>out &&\n' span_id:194) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:195) (Token id:Id.Lit_Chars val:'\t! grep "commit $new" out\n' span_id:196)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'email with embedded > is not okay' span_id:203))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >basis &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tsed "s/@[a-z]/&>/" basis >bad-email &&\n' span_id:209) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(git hash-object -t commit -w --stdin <bad-email) &&\n'
            span_id: 210
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $new" &&\n' span_id:211) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus "$new" &&\n'
            span_id: 212
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 213
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:214) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\tgrep "error in commit $new" out\n' span_id:216)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'missing < email delimiter is reported nicely' span_id:223))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:227) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >basis &&\n' span_id:228) (Token id:Id.Lit_Chars val:'\tsed "s/<//" basis >bad-email-2 &&\n' span_id:229) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(git hash-object -t commit -w --stdin <bad-email-2) &&\n'
            span_id: 230
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $new" &&\n' span_id:231) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus "$new" &&\n'
            span_id: 232
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 233
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:234) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:235) (Token id:Id.Lit_Chars val:'\tgrep "error in commit $new.* - bad name" out\n' span_id:236)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'missing email is reported nicely' span_id:243))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >basis &&\n' span_id:248) (Token id:Id.Lit_Chars val:'\tsed "s/[a-z]* <[^>]*>//" basis >bad-email-3 &&\n' span_id:249) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(git hash-object -t commit -w --stdin <bad-email-3) &&\n'
            span_id: 250
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $new" &&\n' span_id:251) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus "$new" &&\n'
            span_id: 252
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 253
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:254) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\tgrep "error in commit $new.* - missing email" out\n' span_id:256)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'> in name is reported' span_id:263))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:267) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >basis &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tsed "s/ </> </" basis >bad-email-4 &&\n' span_id:269) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(git hash-object -t commit -w --stdin <bad-email-4) &&\n'
            span_id: 270
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $new" &&\n' span_id:271) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus "$new" &&\n'
            span_id: 272
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 273
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:274) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\tgrep "error in commit $new" out\n' span_id:276)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'integer overflow in timestamps is reported' span_id:286))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:290) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >basis &&\n' span_id:291) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed "s/^\\\\(author .*>\\\\) [0-9]*/\\\\1 18446744073709551617/" \\\n'
            span_id: 292
          ) (Token id:Id.Lit_Chars val:'\t\t<basis >bad-timestamp &&\n' span_id:293) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(git hash-object -t commit -w --stdin <bad-timestamp) &&\n'
            span_id: 294
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $new" &&\n' span_id:295) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus "$new" &&\n'
            span_id: 296
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 297
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:298) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tgrep "error in commit $new.*integer overflow" out\n' span_id:300)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit with NUL in header' span_id:307))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:311) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >basis &&\n' span_id:312) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed "s/author ./author Q/" <basis | q_to_nul >commit-NUL-header &&\n'
            span_id: 313
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(git hash-object -t commit -w --stdin <commit-NUL-header) &&\n'
            span_id: 314
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $new" &&\n' span_id:315) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus "$new" &&\n'
            span_id: 316
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 317
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:318) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:319) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "error in commit $new.*unterminated header: NUL at offset" out\n'
            span_id: 320
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'tree object with duplicate entries' span_id:327))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:331) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "remove_object \\$T" &&\n'
            span_id: 332
          ) (Token id:Id.Lit_Chars val:'\tT=$(\n' span_id:333) 
          (Token id:Id.Lit_Chars val:'\t\tGIT_INDEX_FILE=test-index &&\n' span_id:334) (Token id:Id.Lit_Chars val:'\t\texport GIT_INDEX_FILE &&\n' span_id:335) 
          (Token id:Id.Lit_Chars val:'\t\trm -f test-index &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\t\t>x &&\n' span_id:337) 
          (Token id:Id.Lit_Chars val:'\t\tgit add x &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\t\tT=$(git write-tree) &&\n' span_id:339) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:340) (Token id:Id.Lit_Chars val:'\t\t\tgit cat-file tree $T &&\n' span_id:341) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit cat-file tree $T\n' span_id:342) (Token id:Id.Lit_Chars val:'\t\t) |\n' span_id:343) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit hash-object -w -t tree --stdin\n'
            span_id: 344
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:345) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:346) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "error in tree .*contains duplicate file entries" out\n'
            span_id: 347
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unparseable tree object' span_id:354))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:358) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/wrong" &&\n'
            span_id: 359
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object \\$tree_sha1" &&\n' span_id:360) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "remove_object \\$commit_sha1" &&\n'
            span_id: 361
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttree_sha1=$(printf "100644 \\0twenty-bytes-of-junk" | git hash-object -t tree --stdin -w --literally) &&\n'
            span_id: 362
          ) (Token id:Id.Lit_Chars val:'\tcommit_sha1=$(git commit-tree $tree_sha1) &&\n' span_id:363) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/wrong $commit_sha1 &&\n'
            span_id: 364
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>out &&\n' span_id:365) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "error: empty filename in tree entry" out &&\n'
            span_id: 366
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "$tree_sha1" out &&\n' span_id:367) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep ! "fatal: empty filename in tree entry" out\n'
            span_id: 368
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'tag pointing to nonexistent' span_id:375))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:379) 
          (Token id:Id.Lit_Chars val:'\tcat >invalid-tag <<-\\EOF &&\n' span_id:380) (Token id:Id.Lit_Chars val:'\tobject ffffffffffffffffffffffffffffffffffffffff\n' span_id:381) 
          (Token id:Id.Lit_Chars val:'\ttype commit\n' span_id:382) (Token id:Id.Lit_Chars val:'\ttag invalid\n' span_id:383) 
          (Token
            id: Id.Lit_Chars
            val: '\ttagger T A Gger <tagger@example.com> 1234567890 -0000\n'
            span_id: 384
          ) (Token id:Id.Lit_Chars val:'\n' span_id:385) 
          (Token id:Id.Lit_Chars val:'\tThis is an invalid tag.\n' span_id:386) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:387) (Token id:Id.Lit_Chars val:'\n' span_id:388) 
          (Token
            id: Id.Lit_Chars
            val: '\ttag=$(git hash-object -t tag -w --stdin <invalid-tag) &&\n'
            span_id: 389
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $tag" &&\n' span_id:390) 
          (Token
            id: Id.Lit_Chars
            val: '\techo $tag >.git/refs/tags/invalid &&\n'
            span_id: 391
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/tags/invalid" &&\n'
            span_id: 392
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck --tags >out &&\n' span_id:393) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:394) (Token id:Id.Lit_Chars val:'\tgrep "broken link" out\n' span_id:395)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'tag pointing to something else than its type' span_id:402))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:406) 
          (Token
            id: Id.Lit_Chars
            val: '\tsha=$(echo blob | git hash-object -w --stdin) &&\n'
            span_id: 407
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $sha" &&\n' span_id:408) 
          (Token id:Id.Lit_Chars val:'\tcat >wrong-tag <<-EOF &&\n' span_id:409) (Token id:Id.Lit_Chars val:'\tobject $sha\n' span_id:410) 
          (Token id:Id.Lit_Chars val:'\ttype commit\n' span_id:411) (Token id:Id.Lit_Chars val:'\ttag wrong\n' span_id:412) 
          (Token
            id: Id.Lit_Chars
            val: '\ttagger T A Gger <tagger@example.com> 1234567890 -0000\n'
            span_id: 413
          ) (Token id:Id.Lit_Chars val:'\n' span_id:414) 
          (Token id:Id.Lit_Chars val:'\tThis is an invalid tag.\n' span_id:415) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:416) (Token id:Id.Lit_Chars val:'\n' span_id:417) 
          (Token
            id: Id.Lit_Chars
            val: '\ttag=$(git hash-object -t tag -w --stdin <wrong-tag) &&\n'
            span_id: 418
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $tag" &&\n' span_id:419) 
          (Token id:Id.Lit_Chars val:'\techo $tag >.git/refs/tags/wrong &&\n' span_id:420) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/tags/wrong" &&\n'
            span_id: 421
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck --tags\n' span_id:422)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'tag with incorrect tag name & missing tagger' span_id:429))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:433) 
          (Token id:Id.Lit_Chars val:'\tsha=$(git rev-parse HEAD) &&\n' span_id:434) (Token id:Id.Lit_Chars val:'\tcat >wrong-tag <<-EOF &&\n' span_id:435) 
          (Token id:Id.Lit_Chars val:'\tobject $sha\n' span_id:436) (Token id:Id.Lit_Chars val:'\ttype commit\n' span_id:437) 
          (Token id:Id.Lit_Chars val:'\ttag wrong name format\n' span_id:438) (Token id:Id.Lit_Chars val:'\n' span_id:439) 
          (Token id:Id.Lit_Chars val:'\tThis is an invalid tag.\n' span_id:440) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:441) (Token id:Id.Lit_Chars val:'\n' span_id:442) 
          (Token
            id: Id.Lit_Chars
            val: '\ttag=$(git hash-object -t tag -w --stdin <wrong-tag) &&\n'
            span_id: 443
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $tag" &&\n' span_id:444) 
          (Token id:Id.Lit_Chars val:'\techo $tag >.git/refs/tags/wrong &&\n' span_id:445) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/tags/wrong" &&\n'
            span_id: 446
          ) (Token id:Id.Lit_Chars val:'\tgit fsck --tags 2>out &&\n' span_id:447) 
          (Token id:Id.Lit_Chars val:'\n' span_id:448) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:449) 
          (Token
            id: Id.Lit_Chars
            val: '\twarning in tag $tag: badTagName: invalid '
            span_id: 450
          )
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:452)) 
        (SQ (Token id:Id.Lit_Chars val:tag span_id:454)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:456)) 
        (SQ (Token id:Id.Lit_Chars val:' name: wrong name format\n' span_id:458) 
          (Token
            id: Id.Lit_Chars
            val: '\twarning in tag $tag: missingTaggerEntry: invalid format - expected '
            span_id: 459
          )
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:461)) 
        (SQ (Token id:Id.Lit_Chars val:tagger span_id:463)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:465)) 
        (SQ (Token id:Id.Lit_Chars val:' line\n' span_id:467) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:468) (Token id:Id.Lit_Chars val:'\ttest_cmp expect out\n' span_id:469)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'tag with bad tagger' span_id:476))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:480) 
          (Token id:Id.Lit_Chars val:'\tsha=$(git rev-parse HEAD) &&\n' span_id:481) (Token id:Id.Lit_Chars val:'\tcat >wrong-tag <<-EOF &&\n' span_id:482) 
          (Token id:Id.Lit_Chars val:'\tobject $sha\n' span_id:483) (Token id:Id.Lit_Chars val:'\ttype commit\n' span_id:484) 
          (Token id:Id.Lit_Chars val:'\ttag not-quite-wrong\n' span_id:485) (Token id:Id.Lit_Chars val:'\ttagger Bad Tagger Name\n' span_id:486) 
          (Token id:Id.Lit_Chars val:'\n' span_id:487) (Token id:Id.Lit_Chars val:'\tThis is an invalid tag.\n' span_id:488) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:489) (Token id:Id.Lit_Chars val:'\n' span_id:490) 
          (Token
            id: Id.Lit_Chars
            val: '\ttag=$(git hash-object --literally -t tag -w --stdin <wrong-tag) &&\n'
            span_id: 491
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $tag" &&\n' span_id:492) 
          (Token id:Id.Lit_Chars val:'\techo $tag >.git/refs/tags/wrong &&\n' span_id:493) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/tags/wrong" &&\n'
            span_id: 494
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck --tags 2>out &&\n' span_id:495) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "error in tag .*: invalid author/committer" out\n'
            span_id: 496
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'tag with NUL in header' span_id:503))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:507) 
          (Token id:Id.Lit_Chars val:'\tsha=$(git rev-parse HEAD) &&\n' span_id:508) (Token id:Id.Lit_Chars val:'\tq_to_nul >tag-NUL-header <<-EOF &&\n' span_id:509) 
          (Token id:Id.Lit_Chars val:'\tobject $sha\n' span_id:510) (Token id:Id.Lit_Chars val:'\ttype commit\n' span_id:511) 
          (Token id:Id.Lit_Chars val:'\ttag contains-Q-in-header\n' span_id:512) (Token id:Id.Lit_Chars val:'\ttagger T A Gger <tagger@example.com> 1234567890 -0000\n' span_id:513) 
          (Token id:Id.Lit_Chars val:'\n' span_id:514) (Token id:Id.Lit_Chars val:'\tThis is an invalid tag.\n' span_id:515) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:516) (Token id:Id.Lit_Chars val:'\n' span_id:517) 
          (Token
            id: Id.Lit_Chars
            val: '\ttag=$(git hash-object --literally -t tag -w --stdin <tag-NUL-header) &&\n'
            span_id: 518
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $tag" &&\n' span_id:519) 
          (Token id:Id.Lit_Chars val:'\techo $tag >.git/refs/tags/wrong &&\n' span_id:520) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/tags/wrong" &&\n'
            span_id: 521
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck --tags 2>out &&\n' span_id:522) 
          (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:523) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "error in tag $tag.*unterminated header: NUL at offset" out\n'
            span_id: 524
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleaned up' span_id:531))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:535) 
          (Token id:Id.Lit_Chars val:'\tgit fsck >actual 2>&1 &&\n' span_id:536) (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual\n' span_id:537)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rev-list --verify-objects' span_id:544))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:548) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --verify-objects --all >/dev/null 2>out &&\n'
            span_id: 549
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp empty out\n' span_id:550)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rev-list --verify-objects with bad sha1' span_id:557))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:561) 
          (Token
            id: Id.Lit_Chars
            val: '\tsha=$(echo blob | git hash-object -w --stdin) &&\n'
            span_id: 562
          ) (Token id:Id.Lit_Chars val:'\told=$(echo $sha | sed "s+^..+&/+") &&\n' span_id:563) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(dirname $old)/ffffffffffffffffffffffffffffffffffffff &&\n'
            span_id: 564
          ) (Token id:Id.Lit_Chars val:'\tsha="$(dirname $new)$(basename $new)" &&\n' span_id:565) 
          (Token
            id: Id.Lit_Chars
            val: '\tmv .git/objects/$old .git/objects/$new &&\n'
            span_id: 566
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $sha" &&\n' span_id:567) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --add --cacheinfo 100644 $sha foo &&\n'
            span_id: 568
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git read-tree -u --reset HEAD" &&\n' span_id:569) 
          (Token id:Id.Lit_Chars val:'\ttree=$(git write-tree) &&\n' span_id:570) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $tree" &&\n' span_id:571) 
          (Token
            id: Id.Lit_Chars
            val: '\tcmt=$(echo bogus | git commit-tree $tree) &&\n'
            span_id: 572
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $cmt" &&\n' span_id:573) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus $cmt &&\n'
            span_id: 574
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 575
          ) (Token id:Id.Lit_Chars val:'\n' span_id:576) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_might_fail git rev-list --verify-objects refs/heads/bogus >/dev/null 2>out &&\n'
            span_id: 577
          ) (Token id:Id.Lit_Chars val:'\tcat out &&\n' span_id:578) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep -q "error: sha1 mismatch 63ffffffffffffffffffffffffffffffffffffff" out\n'
            span_id: 579
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'force fsck to ignore double author' span_id:586))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:590) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >basis &&\n' span_id:591) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed "s/^author .*/&,&/" <basis | tr , \\\\n >multiple-authors &&\n'
            span_id: 592
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(git hash-object -t commit -w --stdin <multiple-authors) &&\n'
            span_id: 593
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "remove_object $new" &&\n' span_id:594) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/bogus "$new" &&\n'
            span_id: 595
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/bogus" &&\n'
            span_id: 596
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck &&\n' span_id:597) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c fsck.multipleAuthors=ignore fsck\n'
            span_id: 598
          )
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_bz)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'\\0' span_id:604))}
          spids: [602]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_bz5)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName '$_bz') ($ Id.VSub_DollarName '$_bz') 
                ($ Id.VSub_DollarName '$_bz') ($ Id.VSub_DollarName '$_bz') ($ Id.VSub_DollarName '$_bz')
              )
            }
          spids: [607]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_bz20)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName '$_bz5') ($ Id.VSub_DollarName '$_bz5') 
                ($ Id.VSub_DollarName '$_bz5') ($ Id.VSub_DollarName '$_bz5')
              )
            }
          spids: [616]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck notices blob entry pointing to null sha1' span_id:628))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:632) 
          (Token id:Id.Lit_Chars val:'\t(git init null-blob &&\n' span_id:633) (Token id:Id.Lit_Chars val:'\t cd null-blob &&\n' span_id:634) 
          (Token
            id: Id.Lit_Chars
            val: '\t sha=$(printf "100644 file$_bz$_bz20" |\n'
            span_id: 635
          ) (Token id:Id.Lit_Chars val:'\t       git hash-object -w --stdin -t tree) &&\n' span_id:636) 
          (Token id:Id.Lit_Chars val:'\t  git fsck 2>out &&\n' span_id:637) (Token id:Id.Lit_Chars val:'\t  cat out &&\n' span_id:638) 
          (Token id:Id.Lit_Chars val:'\t  grep "warning.*null sha1" out\n' span_id:639) (Token id:Id.Lit_Chars val:'\t)\n' span_id:640)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fsck notices submodule entry pointing to null sha1'
            span_id: 647
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:651) 
          (Token id:Id.Lit_Chars val:'\t(git init null-commit &&\n' span_id:652) (Token id:Id.Lit_Chars val:'\t cd null-commit &&\n' span_id:653) 
          (Token
            id: Id.Lit_Chars
            val: '\t sha=$(printf "160000 submodule$_bz$_bz20" |\n'
            span_id: 654
          ) (Token id:Id.Lit_Chars val:'\t       git hash-object -w --stdin -t tree) &&\n' span_id:655) 
          (Token id:Id.Lit_Chars val:'\t  git fsck 2>out &&\n' span_id:656) (Token id:Id.Lit_Chars val:'\t  cat out &&\n' span_id:657) 
          (Token id:Id.Lit_Chars val:'\t  grep "warning.*null sha1" out\n' span_id:658) (Token id:Id.Lit_Chars val:'\t)\n' span_id:659)
        )
      }
    )
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:663)
      cond: [
        (command.Sentence
          child: (C {(read)} {(name)} {(path)} {(pretty)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:672)
        )
      ]
      body: 
        (command.DoGroup
          children: [
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:677)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(mode)} {(type)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:684)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (C {(Id.Lit_Other ':')} 
                      {
                        (braced_var_sub
                          token: (Token id:Id.VSub_Name val:pretty span_id:692)
                          suffix_op: 
                            (suffix_op.Unary
                              op_id: Id.VTest_ColonEquals
                              arg_word: {($ Id.VSub_DollarName '$path')}
                            )
                        )
                      }
                    )
                    (C {(test_expect_success)} 
                      {
                        (DQ ('fsck notices ') ($ Id.VSub_DollarName '$pretty') (' as ') 
                          ($ Id.VSub_DollarName '$type')
                        )
                      } 
                      {
                        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:708) 
                          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:709) (Token id:Id.Lit_Chars val:'\t\t\tgit init $name-$type &&\n' span_id:710) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\tcd $name-$type &&\n'
                            span_id: 711
                          ) (Token id:Id.Lit_Chars val:'\t\t\techo content >file &&\n' span_id:712) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\tgit add file &&\n'
                            span_id: 713
                          ) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m base &&\n' span_id:714) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\tblob=$(git rev-parse :file) &&\n'
                            span_id: 715
                          ) (Token id:Id.Lit_Chars val:'\t\t\ttree=$(git rev-parse HEAD^{tree}) &&\n' span_id:716) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\tvalue=$(eval "echo \\$$type") &&\n'
                            span_id: 717
                          ) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\tprintf "$mode $type %s\\t%s" "$value" "$path" >bad &&\n'
                            span_id: 718
                          ) (Token id:Id.Lit_Chars val:'\t\t\tbad_tree=$(git mktree <bad) &&\n' span_id:719) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\tgit fsck 2>out &&\n'
                            span_id: 720
                          ) (Token id:Id.Lit_Chars val:'\t\t\tcat out &&\n' span_id:721) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\tgrep "warning.*tree $bad_tree" out\n'
                            span_id: 722
                          ) (Token id:Id.Lit_Chars val:'\t\t)' span_id:723)
                        )
                      }
                    )
                  ]
                )
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:729)
                  fd: -1
                  here_begin: 
                    {
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\E' span_id:730)
                      ) (OF)
                    }
                  here_end_span_id: 735
                  stdin_parts: [('100644 blob\n') ('040000 tree\n')]
                )
              ]
            )
          ]
        )
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:738)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 765
          stdin_parts: [
            ('dot .\n')
            ('dotdot ..\n')
            ('dotgit .git\n')
            ('dotgit-case .GIT\n')
            ('dotgit-unicode .gI')
            (${ Id.VSub_Name u200c)
            ('T .gI{u200c}T\n')
            ('dotgit-case2 .Git\n')
            ('git-tilde1 git~1\n')
            ('dotgitdot .git.\n')
            ('dot-backslash-case .')
            (word_part.EscapedLiteral
              token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:754)
            )
            (word_part.EscapedLiteral
              token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:755)
            )
            (.GIT)
            (word_part.EscapedLiteral
              token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:757)
            )
            (word_part.EscapedLiteral
              token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:758)
            )
            ('foobar\n')
            ('dotgit-case-backslash .git')
            (word_part.EscapedLiteral
              token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:761)
            )
            (word_part.EscapedLiteral
              token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:762)
            )
            ('foobar\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fsck allows .\xc5\x87it' span_id:770))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:774) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:775) (Token id:Id.Lit_Chars val:'\t\tgit init not-dotgit &&\n' span_id:776) 
          (Token id:Id.Lit_Chars val:'\t\tcd not-dotgit &&\n' span_id:777) (Token id:Id.Lit_Chars val:'\t\techo content >file &&\n' span_id:778) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file &&\n' span_id:779) (Token id:Id.Lit_Chars val:'\t\tgit commit -m base &&\n' span_id:780) 
          (Token id:Id.Lit_Chars val:'\t\tblob=$(git rev-parse :file) &&\n' span_id:781) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tprintf "100644 blob $blob\\t.\\\\305\\\\207it" >tree &&\n'
            span_id: 782
          ) (Token id:Id.Lit_Chars val:'\t\ttree=$(git mktree <tree) &&\n' span_id:783) 
          (Token id:Id.Lit_Chars val:'\t\tgit fsck 2>err &&\n' span_id:784) (Token id:Id.Lit_Chars val:'\t\ttest_line_count = 0 err\n' span_id:785) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:786)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'NUL in commit' span_id:793))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:797) 
          (Token id:Id.Lit_Chars val:'\trm -fr nul-in-commit &&\n' span_id:798) (Token id:Id.Lit_Chars val:'\tgit init nul-in-commit &&\n' span_id:799) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:800) (Token id:Id.Lit_Chars val:'\t\tcd nul-in-commit &&\n' span_id:801) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit --allow-empty -m "initial commitQNUL after message" &&\n'
            span_id: 802
          ) (Token id:Id.Lit_Chars val:'\t\tgit cat-file commit HEAD >original &&\n' span_id:803) 
          (Token id:Id.Lit_Chars val:'\t\tq_to_nul <original >munged &&\n' span_id:804) (Token id:Id.Lit_Chars val:'\t\tgit hash-object -w -t commit --stdin <munged >name &&\n' span_id:805) 
          (Token id:Id.Lit_Chars val:'\t\tgit branch bad $(cat name) &&\n' span_id:806) (Token id:Id.Lit_Chars val:'\n' span_id:807) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git -c fsck.nulInCommit=error fsck 2>warn.1 &&\n'
            span_id: 808
          ) (Token id:Id.Lit_Chars val:'\t\tgrep nulInCommit warn.1 &&\n' span_id:809) 
          (Token id:Id.Lit_Chars val:'\t\tgit fsck 2>warn.2 &&\n' span_id:810) (Token id:Id.Lit_Chars val:'\t\tgrep nulInCommit warn.2\n' span_id:811) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:812)
        )
      }
    )
    (command.ShFunction
      name: create_repo_missing
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(rm)} {(-rf)} {(missing)})
                (C {(git)} {(init)} {(missing)})
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                          ]
                          children: [
                            (C {(cd)} {(missing)})
                            (C {(git)} {(commit)} {(-m)} {(one)} {(--allow-empty)})
                            (C {(mkdir)} {(subdir)})
                            (command.Simple
                              words: [{(echo)} {(content)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:885)
                                  fd: -1
                                  arg_word: {(subdir/file)}
                                )
                              ]
                            )
                            (C {(git)} {(add)} {(subdir/file)})
                            (C {(git)} {(commit)} {(-m)} {(two)})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:unrelated)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 912
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (command.Pipeline
                                                children: [
                                                  (C {(echo)} {(unrelated)})
                                                  (C {(git)} {(hash-object)} {(--stdin)} {(-w)})
                                                ]
                                                negated: F
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [911]
                                )
                              ]
                            )
                            (C {(git)} {(tag)} {(-m)} {(foo)} {(tag)} {($ Id.VSub_DollarName '$unrelated')})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:sha1)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 947
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(git)} {(rev-parse)} {(--verify)} 
                                                {(DQ ($ Id.VSub_Number '$1'))}
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [946]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:path)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 963
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (command.Pipeline
                                                children: [
                                                  (C {(echo)} {($ Id.VSub_DollarName '$sha1')})
                                                  (C {(sed)} 
                                                    {
                                                      (SQ 
                                                        (Token
                                                          id: Id.Lit_Chars
                                                          val: 's|..|&/|'
                                                          span_id: 973
                                                        )
                                                      )
                                                    }
                                                  )
                                                ]
                                                negated: F
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [962]
                                )
                              ]
                            )
                            (C {(rm)} {(.git/objects/) ($ Id.VSub_DollarName '$path')})
                          ]
                        )
                      ]
                    )
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck notices missing blob' span_id:994))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:998) 
          (Token
            id: Id.Lit_Chars
            val: '\tcreate_repo_missing HEAD:subdir/file &&\n'
            span_id: 999
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -C missing fsck\n' span_id:1000)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck notices missing subtree' span_id:1007))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1011) 
          (Token id:Id.Lit_Chars val:'\tcreate_repo_missing HEAD:subdir &&\n' span_id:1012) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -C missing fsck\n' span_id:1013)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck notices missing root tree' span_id:1020))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1024) 
          (Token id:Id.Lit_Chars val:'\tcreate_repo_missing HEAD^{tree} &&\n' span_id:1025) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -C missing fsck\n' span_id:1026)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck notices missing parent' span_id:1033))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1037) 
          (Token id:Id.Lit_Chars val:'\tcreate_repo_missing HEAD^ &&\n' span_id:1038) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -C missing fsck\n' span_id:1039)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck notices missing tagged object' span_id:1046))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1050) 
          (Token id:Id.Lit_Chars val:'\tcreate_repo_missing tag^{blob} &&\n' span_id:1051) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -C missing fsck\n' span_id:1052)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck notices ref pointing to missing commit' span_id:1059))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1063) 
          (Token id:Id.Lit_Chars val:'\tcreate_repo_missing HEAD &&\n' span_id:1064) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -C missing fsck\n' span_id:1065)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck notices ref pointing to missing tag' span_id:1072))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1076) 
          (Token id:Id.Lit_Chars val:'\tcreate_repo_missing tag &&\n' span_id:1077) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -C missing fsck\n' span_id:1078)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck --connectivity-only' span_id:1085))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1089) 
          (Token id:Id.Lit_Chars val:'\trm -rf connectivity-only &&\n' span_id:1090) (Token id:Id.Lit_Chars val:'\tgit init connectivity-only &&\n' span_id:1091) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1092) (Token id:Id.Lit_Chars val:'\t\tcd connectivity-only &&\n' span_id:1093) 
          (Token id:Id.Lit_Chars val:'\t\ttouch empty &&\n' span_id:1094) (Token id:Id.Lit_Chars val:'\t\tgit add empty &&\n' span_id:1095) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit empty &&\n' span_id:1096) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tempty=.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 &&\n'
            span_id: 1097
          ) (Token id:Id.Lit_Chars val:'\t\trm -f $empty &&\n' span_id:1098) 
          (Token id:Id.Lit_Chars val:'\t\techo invalid >$empty &&\n' span_id:1099) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git fsck --strict &&\n' span_id:1100) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit fsck --strict --connectivity-only &&\n'
            span_id: 1101
          ) (Token id:Id.Lit_Chars val:'\t\ttree=$(git rev-parse HEAD:) &&\n' span_id:1102) 
          (Token id:Id.Lit_Chars val:'\t\tsuffix=${tree#??} &&\n' span_id:1103) (Token id:Id.Lit_Chars val:'\t\ttree=.git/objects/${tree%$suffix}/$suffix &&\n' span_id:1104) 
          (Token id:Id.Lit_Chars val:'\t\trm -f $tree &&\n' span_id:1105) (Token id:Id.Lit_Chars val:'\t\techo invalid >$tree &&\n' span_id:1106) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git fsck --strict --connectivity-only\n'
            span_id: 1107
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1108)
        )
      }
    )
    (command.ShFunction
      name: remove_loose_object
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:sha1)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1122)
                              command_list: 
                                (command.CommandList
                                  children: [(C {(git)} {(rev-parse)} {(DQ ($ Id.VSub_Number '$1'))})]
                                )
                            )
                          )
                        }
                      spids: [1120]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:remainder)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:sha1 span_id:1138)
                            suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('??')})
                          )
                        }
                      spids: [1136]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:firsttwo)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:sha1 span_id:1148)
                            suffix_op: 
                              (suffix_op.Unary
                                op_id: Id.VOp1_Percent
                                arg_word: {($ Id.VSub_DollarName '$remainder')}
                              )
                          )
                        }
                      spids: [1146]
                    )
                  ]
                )
                (C {(rm)} 
                  {(.git/objects/) ($ Id.VSub_DollarName '$firsttwo') (/) 
                    ($ Id.VSub_DollarName '$remainder')
                  }
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fsck --name-objects' span_id:1169))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1173) 
          (Token id:Id.Lit_Chars val:'\trm -rf name-objects &&\n' span_id:1174) (Token id:Id.Lit_Chars val:'\tgit init name-objects &&\n' span_id:1175) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1176) (Token id:Id.Lit_Chars val:'\t\tcd name-objects &&\n' span_id:1177) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit julius caesar.t &&\n' span_id:1178) (Token id:Id.Lit_Chars val:'\t\ttest_commit augustus &&\n' span_id:1179) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit caesar &&\n' span_id:1180) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tremove_loose_object $(git rev-parse julius:caesar.t) &&\n'
            span_id: 1181
          ) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git fsck --name-objects >out &&\n' span_id:1182) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttree=$(git rev-parse --verify julius:) &&\n'
            span_id: 1183
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgrep "$tree (\\(refs/heads/master\\|HEAD\\)@{[0-9]*}:" out\n'
            span_id: 1184
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1185)
        )
      }
    )
    (C {(test_done)})
  ]
)