(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:'adding and checking out large blobs' span_id:9))}
          spids: [7]
        )
      ]
    )
    (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: '\t# clone does not allow us to pass core.bigfilethreshold to\n'
            span_id: 24
          ) (Token id:Id.Lit_Chars val:'\t# new repos, so set core.bigfilethreshold globally\n' span_id:25) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --global core.bigfilethreshold 200k &&\n'
            span_id: 26
          ) (Token id:Id.Lit_Chars val:'\tprintf "%2000000s" X >large1 &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\tcp large1 large2 &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\tcp large1 large3 &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\tprintf "%2500000s" Y >huge &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\tGIT_ALLOC_LIMIT=1500k &&\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\texport GIT_ALLOC_LIMIT\n' span_id:32)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add a large file or two' span_id:39))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tgit add large1 huge large2 &&\n' span_id:44) 
          (Token
            id: Id.Lit_Chars
            val: '\t# make sure we got a single packfile and no loose objects\n'
            span_id: 45
          ) (Token id:Id.Lit_Chars val:'\tbad= count=0 idx= &&\n' span_id:46) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor p in .git/objects/pack/pack-*.pack\n'
            span_id: 47
          ) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t\tcount=$(( $count + 1 ))\n' span_id:49) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif test -f "$p" && idx=${p%.pack}.idx && test -f "$idx"\n'
            span_id: 50
          ) (Token id:Id.Lit_Chars val:'\t\tthen\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\t\t\tcontinue\n' span_id:52) (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:53) (Token id:Id.Lit_Chars val:'\t\tbad=t\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\ttest -z "$bad" &&\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\ttest $count = 1 &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\tcnt=$(git show-index <"$idx" | wc -l) &&\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\ttest $cnt = 2 &&\n' span_id:59) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor l in .git/objects/??/??????????????????????????????????????\n'
            span_id: 60
          ) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\t\ttest -f "$l" || continue\n' span_id:62) (Token id:Id.Lit_Chars val:'\t\tbad=t\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttest -z "$bad" &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\n' span_id:66) (Token id:Id.Lit_Chars val:'\t# attempt to add another copy of the same\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\tgit add large3 &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tbad= count=0 &&\n' span_id:69) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor p in .git/objects/pack/pack-*.pack\n'
            span_id: 70
          ) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\t\tcount=$(( $count + 1 ))\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif test -f "$p" && idx=${p%.pack}.idx && test -f "$idx"\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\t\tthen\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\t\t\tcontinue\n' span_id:75) (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:76) (Token id:Id.Lit_Chars val:'\t\tbad=t\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\ttest -z "$bad" &&\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\ttest $count = 1\n' span_id:80)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout a large file' span_id:87))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\tlarge1=$(git rev-parse :large1) &&\n' span_id:92) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --add --cacheinfo 100644 $large1 another &&\n'
            span_id: 93
          ) (Token id:Id.Lit_Chars val:'\tgit checkout another &&\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp large1 another\n' span_id:95)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'packsize limit' span_id:102))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\ttest_create_repo mid &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\t(\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\t\tcd mid &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\t\tgit config core.bigfilethreshold 64k &&\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config pack.packsizelimit 256k &&\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\n' span_id:112) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# mid1 and mid2 will fit within 256k limit but\n'
            span_id: 113
          ) (Token id:Id.Lit_Chars val:'\t\t# appending mid3 will bust the limit and will\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\t\t# result in a separate packfile.\n' span_id:115) (Token id:Id.Lit_Chars val:'\t\ttest-genrandom "a" $(( 66 * 1024 )) >mid1 &&\n' span_id:116) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest-genrandom "b" $(( 80 * 1024 )) >mid2 &&\n'
            span_id: 117
          ) (Token id:Id.Lit_Chars val:'\t\ttest-genrandom "c" $(( 128 * 1024 )) >mid3 &&\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\t\tgit add mid1 mid2 mid3 &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\n' span_id:120) (Token id:Id.Lit_Chars val:'\t\tcount=0\n' span_id:121) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tfor pi in .git/objects/pack/pack-*.idx\n'
            span_id: 122
          ) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:123) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest -f "$pi" && count=$(( $count + 1 ))\n'
            span_id: 124
          ) (Token id:Id.Lit_Chars val:'\t\tdone &&\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\t\ttest $count = 2 &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\n' span_id:127) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit hash-object --stdin <mid1\n' span_id:129) (Token id:Id.Lit_Chars val:'\t\t\tgit hash-object --stdin <mid2\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit hash-object --stdin <mid3\n' span_id:131) (Token id:Id.Lit_Chars val:'\t\t) |\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\t\tsort >expect &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\n' span_id:134) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tfor pi in .git/objects/pack/pack-*.idx\n'
            span_id: 135
          ) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit show-index <"$pi"\n' span_id:137) (Token id:Id.Lit_Chars val:'\t\tdone |\n' span_id:138) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsed -e "s/^[0-9]* \\([0-9a-f]*\\) .*/\\1/" |\n'
            span_id: 139
          ) (Token id:Id.Lit_Chars val:'\t\tsort >actual &&\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\n' span_id:141) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:142) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:143)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff --raw' span_id:150))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'\tgit commit -q -m initial &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\techo modified >>large1 &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\tgit add large1 &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\tgit commit -q -m modified &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\tgit diff --raw HEAD^\n' span_id:159)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff --stat' span_id:166))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:170) 
          (Token id:Id.Lit_Chars val:'\tgit diff --stat HEAD^ HEAD\n' span_id:171)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:diff span_id:178))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\tgit diff HEAD^ HEAD >actual &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\tgrep "Binary files.*differ" actual\n' span_id:184)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff --cached' span_id:191))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:195) 
          (Token id:Id.Lit_Chars val:'\tgit diff --cached HEAD^ >actual &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\tgrep "Binary files.*differ" actual\n' span_id:197)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:hash-object span_id:204))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:208) 
          (Token id:Id.Lit_Chars val:'\tgit hash-object large1\n' span_id:209)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cat-file a large file' span_id:216))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:220) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob :large1 >/dev/null\n'
            span_id: 221
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cat-file a large file from a tag' span_id:228))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:232) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit tag -m largefile largefiletag :large1 &&\n'
            span_id: 233
          ) (Token id:Id.Lit_Chars val:'\tgit cat-file blob largefiletag >/dev/null\n' span_id:234)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git-show a large file' span_id:241))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\tgit show :large1 >/dev/null\n' span_id:246) (Token id:Id.Lit_Chars val:'\n' span_id:247)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:index-pack span_id:254))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone file://"$(pwd)"/.git foo &&\n'
            span_id: 259
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tGIT_DIR=non-existent git index-pack --strict --verify foo/.git/objects/pack/*.pack\n'
            span_id: 260
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:repack span_id:267))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\tgit repack -ad\n' span_id:272)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pack-objects with large loose object' span_id:279))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:283) 
          (Token id:Id.Lit_Chars val:'\tSHA1=$(git hash-object huge) &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\ttest_create_repo loose &&\n' span_id:285) 
          (Token
            id: Id.Lit_Chars
            val: '\techo $SHA1 | git pack-objects --stdout |\n'
            span_id: 286
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_ALLOC_LIMIT=0 GIT_DIR=loose/.git git unpack-objects &&\n'
            span_id: 287
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo $SHA1 | GIT_DIR=loose/.git git pack-objects pack &&\n'
            span_id: 288
          ) (Token id:Id.Lit_Chars val:'\ttest_create_repo packed &&\n' span_id:289) 
          (Token
            id: Id.Lit_Chars
            val: '\tmv pack-* packed/.git/objects/pack &&\n'
            span_id: 290
          ) (Token id:Id.Lit_Chars val:'\tGIT_DIR=packed/.git git cat-file blob $SHA1 >actual &&\n' span_id:291) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp huge actual\n' span_id:292)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'tar achiving' span_id:299))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:303) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit archive --format=tar HEAD >/dev/null\n'
            span_id: 304
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'zip achiving, store only' span_id:311))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:315) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit archive --format=zip -0 HEAD >/dev/null\n'
            span_id: 316
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'zip achiving, deflate' span_id:323))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:327) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit archive --format=zip HEAD >/dev/null\n'
            span_id: 328
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fsck large blobs' span_id:335))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:339) 
          (Token id:Id.Lit_Chars val:'\tgit fsck 2>err &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty err\n' span_id:341)
        )
      }
    )
    (C {(test_done)})
  ]
)