(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 git fast-import utility' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.Sentence
      child: (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/diff-lib.sh)})
      terminator: (Token id:Id.Op_Semi val:';' span_id:29)
    )
    (command.ShFunction
      name: verify_packs
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: p
              iter_words: [{(.git/objects/pack/) (Id.Lit_Star '*') (.pack)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(git)} {(verify-pack)} {(DQ ($ Id.VSub_At '$@'))} 
                          {(DQ ($ Id.VSub_DollarName '$p'))}
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:70)
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:file2_data)
          op: assign_op.Equal
          rhs: 
            {
              (SQ (Token id:Id.Lit_Chars val:'file2\n' span_id:80) 
                (Token id:Id.Lit_Chars val:'second line of EOF' span_id:81)
              )
            }
          spids: [78]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:file3_data)
          op: assign_op.Equal
          rhs: 
            {
              (SQ (Token id:Id.Lit_Chars val:'EOF\n' span_id:87) 
                (Token id:Id.Lit_Chars val:'in 3rd file\n' span_id:88) (Token id:Id.Lit_Chars val:' END' span_id:89)
              )
            }
          spids: [85]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:file4_data)
          op: assign_op.Equal
          rhs: {(abcd)}
          spids: [93]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:file4_len)
          op: assign_op.Equal
          rhs: {(4)}
          spids: [96]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:file5_data)
          op: assign_op.Equal
          rhs: 
            {
              (SQ (Token id:Id.Lit_Chars val:'an inline file.\n' span_id:102) 
                (Token id:Id.Lit_Chars val:'  we should see it later.' span_id:103)
              )
            }
          spids: [100]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:file6_data)
          op: assign_op.Equal
          rhs: 
            {
              (SQ (Token id:Id.Lit_Chars val:'#!/bin/sh\n' span_id:109) 
                (Token id:Id.Lit_Chars val:'echo "$@"' span_id:110)
              )
            }
          spids: [107]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'empty stream succeeds' span_id:127))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:131) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config fastimport.unpackLimit 0 &&\n'
            span_id: 132
          ) (Token id:Id.Lit_Chars val:'\tgit fast-import </dev/null\n' span_id:133)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'truncated stream complains' span_id:140))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:144) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "tag foo" | test_must_fail git fast-import\n'
            span_id: 145
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'A: create pack from stdin' span_id:152))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:159) (Token id:Id.Lit_Chars val:'\tmark :2\n' span_id:160) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:161) (Token id:Id.Lit_Chars val:'\t$file2_data\n' span_id:162) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:163) (Token id:Id.Lit_Chars val:'\n' span_id:164) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:165) 
          (Token id:Id.Lit_Chars val:'\tmark :3\n' span_id:166) (Token id:Id.Lit_Chars val:'\tdata <<END\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\t$file3_data\n' span_id:168) (Token id:Id.Lit_Chars val:'\tEND\n' span_id:169) (Token id:Id.Lit_Chars val:'\n' span_id:170) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:171) (Token id:Id.Lit_Chars val:'\tmark :4\n' span_id:172) 
          (Token id:Id.Lit_Chars val:'\tdata $file4_len\n' span_id:173) (Token id:Id.Lit_Chars val:'\t$file4_data\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/master\n' span_id:175) (Token id:Id.Lit_Chars val:'\tmark :5\n' span_id:176) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 177
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\tinitial\n' span_id:179) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:180) (Token id:Id.Lit_Chars val:'\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'\tM 644 :2 file2\n' span_id:182) (Token id:Id.Lit_Chars val:'\tM 644 :3 file3\n' span_id:183) 
          (Token id:Id.Lit_Chars val:'\tM 755 :4 file4\n' span_id:184) (Token id:Id.Lit_Chars val:'\n' span_id:185) 
          (Token id:Id.Lit_Chars val:'\ttag series-A\n' span_id:186) (Token id:Id.Lit_Chars val:'\tfrom :5\n' span_id:187) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:188) (Token id:Id.Lit_Chars val:'\tAn annotated tag without a tagger\n' span_id:189) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:190) (Token id:Id.Lit_Chars val:'\n' span_id:191) 
          (Token id:Id.Lit_Chars val:'\ttag series-A-blob\n' span_id:192) (Token id:Id.Lit_Chars val:'\tfrom :3\n' span_id:193) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:194) (Token id:Id.Lit_Chars val:'\tAn annotated tag that annotates a blob.\n' span_id:195) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:196) (Token id:Id.Lit_Chars val:'\n' span_id:197) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:198) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --export-marks=marks.out <input &&\n'
            span_id: 199
          ) (Token id:Id.Lit_Chars val:'\tgit whatchanged master\n' span_id:200)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify pack' span_id:207))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\tverify_packs\n' span_id:212)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify commit' span_id:219))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:223) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:224) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 225
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 226
          ) (Token id:Id.Lit_Chars val:'\n' span_id:227) (Token id:Id.Lit_Chars val:'\tinitial\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:229) (Token id:Id.Lit_Chars val:'\tgit cat-file commit master | sed 1d >actual &&\n' span_id:230) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:231)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify tree' span_id:238))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:242) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\t100644 blob file2\n' span_id:244) 
          (Token id:Id.Lit_Chars val:'\t100644 blob file3\n' span_id:245) (Token id:Id.Lit_Chars val:'\t100755 blob file4\n' span_id:246) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:247) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file -p master^{tree} | sed "s/ [0-9a-f]*\t/ /" >actual &&\n'
            span_id: 248
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:249)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify file2' span_id:256))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:260) 
          (Token id:Id.Lit_Chars val:'\techo "$file2_data" >expect &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\tgit cat-file blob master:file2 >actual &&\n' span_id:262) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:263)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify file3' span_id:270))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:274) 
          (Token id:Id.Lit_Chars val:'\techo "$file3_data" >expect &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\tgit cat-file blob master:file3 >actual &&\n' span_id:276) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:277)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify file4' span_id:284))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:288) 
          (Token id:Id.Lit_Chars val:'\tprintf "$file4_data" >expect &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\tgit cat-file blob master:file4 >actual &&\n' span_id:290) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:291)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify tag/series-A' span_id:298))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:303) (Token id:Id.Lit_Chars val:'\tobject $(git rev-parse refs/heads/master)\n' span_id:304) 
          (Token id:Id.Lit_Chars val:'\ttype commit\n' span_id:305) (Token id:Id.Lit_Chars val:'\ttag series-A\n' span_id:306) 
          (Token id:Id.Lit_Chars val:'\n' span_id:307) (Token id:Id.Lit_Chars val:'\tAn annotated tag without a tagger\n' span_id:308) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:309) (Token id:Id.Lit_Chars val:'\tgit cat-file tag tags/series-A >actual &&\n' span_id:310) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:311)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'A: verify tag/series-A-blob' span_id:318))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:322) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\tobject $(git rev-parse refs/heads/master:file3)\n' span_id:324) 
          (Token id:Id.Lit_Chars val:'\ttype blob\n' span_id:325) (Token id:Id.Lit_Chars val:'\ttag series-A-blob\n' span_id:326) 
          (Token id:Id.Lit_Chars val:'\n' span_id:327) (Token id:Id.Lit_Chars val:'\tAn annotated tag that annotates a blob.\n' span_id:328) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:329) (Token id:Id.Lit_Chars val:'\tgit cat-file tag tags/series-A-blob >actual &&\n' span_id:330) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:331)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify marks output' span_id:338))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:342) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:343) (Token id:Id.Lit_Chars val:'\t:2 $(git rev-parse --verify master:file2)\n' span_id:344) 
          (Token
            id: Id.Lit_Chars
            val: '\t:3 $(git rev-parse --verify master:file3)\n'
            span_id: 345
          ) (Token id:Id.Lit_Chars val:'\t:4 $(git rev-parse --verify master:file4)\n' span_id:346) 
          (Token
            id: Id.Lit_Chars
            val: '\t:5 $(git rev-parse --verify master^0)\n'
            span_id: 347
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:348) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect marks.out\n' span_id:349)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify marks import' span_id:356))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:360) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import \\\n' span_id:361) (Token id:Id.Lit_Chars val:'\t\t--import-marks=marks.out \\\n' span_id:362) 
          (Token id:Id.Lit_Chars val:'\t\t--export-marks=marks.new \\\n' span_id:363) (Token id:Id.Lit_Chars val:'\t\t</dev/null &&\n' span_id:364) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect marks.new\n' span_id:365)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: tag blob by sha1' span_id:372))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:376) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:377) (Token id:Id.Lit_Chars val:'\tnew_blob=$(echo testing | git hash-object --stdin) &&\n' span_id:378) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:379) (Token id:Id.Lit_Chars val:'\ttag series-A-blob-2\n' span_id:380) 
          (Token
            id: Id.Lit_Chars
            val: '\tfrom $(git rev-parse refs/heads/master:file3)\n'
            span_id: 381
          ) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:382) 
          (Token id:Id.Lit_Chars val:'\tTag blob by sha1.\n' span_id:383) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:384) (Token id:Id.Lit_Chars val:'\n' span_id:385) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:386) (Token id:Id.Lit_Chars val:'\tmark :6\n' span_id:387) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:388) (Token id:Id.Lit_Chars val:'\ttesting\n' span_id:389) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:390) (Token id:Id.Lit_Chars val:'\n' span_id:391) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/new_blob\n' span_id:392) (Token id:Id.Lit_Chars val:'\tcommitter  <> 0 +0000\n' span_id:393) 
          (Token id:Id.Lit_Chars val:'\tdata 0\n' span_id:394) (Token id:Id.Lit_Chars val:'\tM 644 :6 new_blob\n' span_id:395) 
          (Token
            id: Id.Lit_Chars
            val: '\t#pretend we got sha1 from fast-import\n'
            span_id: 396
          ) (Token id:Id.Lit_Chars val:'\tls "new_blob"\n' span_id:397) 
          (Token id:Id.Lit_Chars val:'\n' span_id:398) (Token id:Id.Lit_Chars val:'\ttag series-A-blob-3\n' span_id:399) 
          (Token id:Id.Lit_Chars val:'\tfrom $new_blob\n' span_id:400) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:401) 
          (Token id:Id.Lit_Chars val:'\tTag new_blob.\n' span_id:402) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:403) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:404) (Token id:Id.Lit_Chars val:'\n' span_id:405) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:406) (Token id:Id.Lit_Chars val:'\tobject $(git rev-parse refs/heads/master:file3)\n' span_id:407) 
          (Token id:Id.Lit_Chars val:'\ttype blob\n' span_id:408) (Token id:Id.Lit_Chars val:'\ttag series-A-blob-2\n' span_id:409) 
          (Token id:Id.Lit_Chars val:'\n' span_id:410) (Token id:Id.Lit_Chars val:'\tTag blob by sha1.\n' span_id:411) 
          (Token id:Id.Lit_Chars val:'\tobject $new_blob\n' span_id:412) (Token id:Id.Lit_Chars val:'\ttype blob\n' span_id:413) 
          (Token id:Id.Lit_Chars val:'\ttag series-A-blob-3\n' span_id:414) (Token id:Id.Lit_Chars val:'\n' span_id:415) 
          (Token id:Id.Lit_Chars val:'\tTag new_blob.\n' span_id:416) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:417) (Token id:Id.Lit_Chars val:'\n' span_id:418) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:419) (Token id:Id.Lit_Chars val:'\tgit cat-file tag tags/series-A-blob-2 >actual &&\n' span_id:420) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file tag tags/series-A-blob-3 >>actual &&\n'
            span_id: 421
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:422)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'A: verify marks import does not crash' span_id:429))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:433) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:434) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:435) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit refs/heads/verify--import-marks\n'
            span_id: 436
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 437
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:438) 
          (Token id:Id.Lit_Chars val:'\trecreate from :5\n' span_id:439) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:440) (Token id:Id.Lit_Chars val:'\n' span_id:441) 
          (Token id:Id.Lit_Chars val:'\tfrom :5\n' span_id:442) (Token id:Id.Lit_Chars val:'\tM 755 :2 copy-of-file2\n' span_id:443) 
          (Token id:Id.Lit_Chars val:'\n' span_id:444) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:445) (Token id:Id.Lit_Chars val:'\n' span_id:446) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --import-marks=marks.out <input &&\n'
            span_id: 447
          ) (Token id:Id.Lit_Chars val:'\tgit whatchanged verify--import-marks\n' span_id:448)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify pack' span_id:455))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:459) 
          (Token id:Id.Lit_Chars val:'\tverify_packs\n' span_id:460)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A: verify diff' span_id:467))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:471) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:472) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:000000 100755 0000000000000000000000000000000000000000 7123f7f44e39be127c5eb701e5968176ee9d78b1 A\tcopy-of-file2\n'
            span_id: 473
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:474) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -M -r master verify--import-marks >actual &&\n'
            span_id: 475
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual &&\n' span_id:476) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse --verify master:file2) \\\n'
            span_id: 477
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t    = $(git rev-parse --verify verify--import-marks:copy-of-file2)\n'
            span_id: 478
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'A: export marks with large values' span_id:485))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:489) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:490) (Token id:Id.Lit_Chars val:'\tmt=$(git hash-object --stdin < /dev/null) &&\n' span_id:491) 
          (Token id:Id.Lit_Chars val:'\t>input.blob &&\n' span_id:492) (Token id:Id.Lit_Chars val:'\t>marks.exp &&\n' span_id:493) 
          (Token id:Id.Lit_Chars val:'\t>tree.exp &&\n' span_id:494) (Token id:Id.Lit_Chars val:'\n' span_id:495) 
          (Token id:Id.Lit_Chars val:'\tcat >input.commit <<-EOF &&\n' span_id:496) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/verify--dump-marks\n' span_id:497) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 498
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:499) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest the sparse array dumping routines with exponentially growing marks\n'
            span_id: 500
          ) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:501) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:502) 
          (Token id:Id.Lit_Chars val:'\n' span_id:503) (Token id:Id.Lit_Chars val:'\ti=0 l=4 m=6 n=7 &&\n' span_id:504) 
          (Token id:Id.Lit_Chars val:'\twhile test "$i" -lt 27\n' span_id:505) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:506) 
          (Token id:Id.Lit_Chars val:'\t\tcat >>input.blob <<-EOF &&\n' span_id:507) (Token id:Id.Lit_Chars val:'\t\tblob\n' span_id:508) 
          (Token id:Id.Lit_Chars val:'\t\tmark :$l\n' span_id:509) (Token id:Id.Lit_Chars val:'\t\tdata 0\n' span_id:510) 
          (Token id:Id.Lit_Chars val:'\t\tblob\n' span_id:511) (Token id:Id.Lit_Chars val:'\t\tmark :$m\n' span_id:512) 
          (Token id:Id.Lit_Chars val:'\t\tdata 0\n' span_id:513) (Token id:Id.Lit_Chars val:'\t\tblob\n' span_id:514) 
          (Token id:Id.Lit_Chars val:'\t\tmark :$n\n' span_id:515) (Token id:Id.Lit_Chars val:'\t\tdata 0\n' span_id:516) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:517) (Token id:Id.Lit_Chars val:'\t\techo "M 100644 :$l l$i" >>input.commit &&\n' span_id:518) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "M 100644 :$m m$i" >>input.commit &&\n'
            span_id: 519
          ) (Token id:Id.Lit_Chars val:'\t\techo "M 100644 :$n n$i" >>input.commit &&\n' span_id:520) 
          (Token id:Id.Lit_Chars val:'\n' span_id:521) (Token id:Id.Lit_Chars val:'\t\techo ":$l $mt" >>marks.exp &&\n' span_id:522) 
          (Token id:Id.Lit_Chars val:'\t\techo ":$m $mt" >>marks.exp &&\n' span_id:523) (Token id:Id.Lit_Chars val:'\t\techo ":$n $mt" >>marks.exp &&\n' span_id:524) 
          (Token id:Id.Lit_Chars val:'\n' span_id:525) (Token id:Id.Lit_Chars val:'\t\tprintf "100644 blob $mt\\tl$i\\n" >>tree.exp &&\n' span_id:526) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tprintf "100644 blob $mt\\tm$i\\n" >>tree.exp &&\n'
            span_id: 527
          ) (Token id:Id.Lit_Chars val:'\t\tprintf "100644 blob $mt\\tn$i\\n" >>tree.exp &&\n' span_id:528) 
          (Token id:Id.Lit_Chars val:'\n' span_id:529) (Token id:Id.Lit_Chars val:'\t\tl=$(($l + $l)) &&\n' span_id:530) 
          (Token id:Id.Lit_Chars val:'\t\tm=$(($m + $m)) &&\n' span_id:531) (Token id:Id.Lit_Chars val:'\t\tn=$(($l + $n)) &&\n' span_id:532) 
          (Token id:Id.Lit_Chars val:'\n' span_id:533) (Token id:Id.Lit_Chars val:'\t\ti=$((1 + $i)) || return 1\n' span_id:534) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:535) (Token id:Id.Lit_Chars val:'\n' span_id:536) 
          (Token id:Id.Lit_Chars val:'\tsort tree.exp > tree.exp_s &&\n' span_id:537) (Token id:Id.Lit_Chars val:'\n' span_id:538) 
          (Token
            id: Id.Lit_Chars
            val: '\tcat input.blob input.commit | git fast-import --export-marks=marks.large &&\n'
            span_id: 539
          ) (Token id:Id.Lit_Chars val:'\tgit ls-tree refs/heads/verify--dump-marks >tree.out &&\n' span_id:540) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp tree.exp_s tree.out &&\n' span_id:541) (Token id:Id.Lit_Chars val:'\ttest_cmp marks.exp marks.large\n' span_id:542)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'B: fail on invalid blob sha1' span_id:559))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:563) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:564) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:565) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/branch\n' span_id:566) (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:567) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 568
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:569) 
          (Token id:Id.Lit_Chars val:'\tcorrupt\n' span_id:570) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:571) (Token id:Id.Lit_Chars val:'\n' span_id:572) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/master\n' span_id:573) (Token id:Id.Lit_Chars val:'\tM 755 0000000000000000000000000000000000000001 zero1\n' span_id:574) 
          (Token id:Id.Lit_Chars val:'\n' span_id:575) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:576) (Token id:Id.Lit_Chars val:'\n' span_id:577) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/objects/pack_* .git/objects/index_*" &&\n'
            span_id: 578
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import <input\n' span_id:579)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'B: accept branch name "TEMP_TAG"' span_id:586))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:590) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:591) (Token id:Id.Lit_Chars val:'\tcommit TEMP_TAG\n' span_id:592) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 593
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:594) 
          (Token id:Id.Lit_Chars val:'\ttag base\n' span_id:595) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:596) (Token id:Id.Lit_Chars val:'\n' span_id:597) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/master\n' span_id:598) (Token id:Id.Lit_Chars val:'\n' span_id:599) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:600) 
          (Token id:Id.Lit_Chars val:'\n' span_id:601) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/TEMP_TAG\n' span_id:602) 
          (Token id:Id.Lit_Chars val:'\t\tgit gc\n' span_id:603) (Token id:Id.Lit_Chars val:'\t\tgit prune" &&\n' span_id:604) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:605) (Token id:Id.Lit_Chars val:'\ttest -f .git/TEMP_TAG &&\n' span_id:606) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse master) = $(git rev-parse TEMP_TAG^)\n'
            span_id: 607
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'B: accept empty committer' span_id:614))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:618) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:619) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/empty-committer-1\n' span_id:620) 
          (Token id:Id.Lit_Chars val:'\tcommitter  <> $GIT_COMMITTER_DATE\n' span_id:621) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:622) 
          (Token id:Id.Lit_Chars val:'\tempty commit\n' span_id:623) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:624) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:625) (Token id:Id.Lit_Chars val:'\n' span_id:626) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/empty-committer-1\n'
            span_id: 627
          ) (Token id:Id.Lit_Chars val:'\t\tgit gc\n' span_id:628) 
          (Token id:Id.Lit_Chars val:'\t\tgit prune" &&\n' span_id:629) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:630) 
          (Token id:Id.Lit_Chars val:'\tout=$(git fsck) &&\n' span_id:631) (Token id:Id.Lit_Chars val:'\techo "$out" &&\n' span_id:632) 
          (Token id:Id.Lit_Chars val:'\ttest -z "$out"\n' span_id:633)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'B: accept and fixup committer with no name' span_id:640))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:644) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:645) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/empty-committer-2\n' span_id:646) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter <a@b.com> $GIT_COMMITTER_DATE\n'
            span_id: 647
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:648) 
          (Token id:Id.Lit_Chars val:'\tempty commit\n' span_id:649) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:650) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:651) (Token id:Id.Lit_Chars val:'\n' span_id:652) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/empty-committer-2\n'
            span_id: 653
          ) (Token id:Id.Lit_Chars val:'\t\tgit gc\n' span_id:654) 
          (Token id:Id.Lit_Chars val:'\t\tgit prune" &&\n' span_id:655) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:656) 
          (Token id:Id.Lit_Chars val:'\tout=$(git fsck) &&\n' span_id:657) (Token id:Id.Lit_Chars val:'\techo "$out" &&\n' span_id:658) 
          (Token id:Id.Lit_Chars val:'\ttest -z "$out"\n' span_id:659)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'B: fail on invalid committer (1)' span_id:666))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:670) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:671) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/invalid-committer\n' span_id:672) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter Name email> $GIT_COMMITTER_DATE\n'
            span_id: 673
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:674) 
          (Token id:Id.Lit_Chars val:'\tempty commit\n' span_id:675) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:676) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:677) (Token id:Id.Lit_Chars val:'\n' span_id:678) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/invalid-committer" &&\n'
            span_id: 679
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import <input\n' span_id:680)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'B: fail on invalid committer (2)' span_id:687))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:691) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:692) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/invalid-committer\n' span_id:693) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter Name <e<mail> $GIT_COMMITTER_DATE\n'
            span_id: 694
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:695) 
          (Token id:Id.Lit_Chars val:'\tempty commit\n' span_id:696) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:697) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:698) (Token id:Id.Lit_Chars val:'\n' span_id:699) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/invalid-committer" &&\n'
            span_id: 700
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import <input\n' span_id:701)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'B: fail on invalid committer (3)' span_id:708))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:712) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:713) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/invalid-committer\n' span_id:714) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter Name <email>> $GIT_COMMITTER_DATE\n'
            span_id: 715
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:716) 
          (Token id:Id.Lit_Chars val:'\tempty commit\n' span_id:717) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:718) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:719) (Token id:Id.Lit_Chars val:'\n' span_id:720) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/invalid-committer" &&\n'
            span_id: 721
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import <input\n' span_id:722)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'B: fail on invalid committer (4)' span_id:729))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:733) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:734) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/invalid-committer\n' span_id:735) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter Name <email $GIT_COMMITTER_DATE\n'
            span_id: 736
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:737) 
          (Token id:Id.Lit_Chars val:'\tempty commit\n' span_id:738) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:739) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:740) (Token id:Id.Lit_Chars val:'\n' span_id:741) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/invalid-committer" &&\n'
            span_id: 742
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import <input\n' span_id:743)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'B: fail on invalid committer (5)' span_id:750))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:754) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:755) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/invalid-committer\n' span_id:756) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter Name<email> $GIT_COMMITTER_DATE\n'
            span_id: 757
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:758) 
          (Token id:Id.Lit_Chars val:'\tempty commit\n' span_id:759) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:760) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:761) (Token id:Id.Lit_Chars val:'\n' span_id:762) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/invalid-committer" &&\n'
            span_id: 763
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import <input\n' span_id:764)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'C: incremental import create pack from stdin' span_id:781))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:785) 
          (Token
            id: Id.Lit_Chars
            val: '\tnewf=$(echo hi newf | git hash-object -w --stdin) &&\n'
            span_id: 786
          ) (Token id:Id.Lit_Chars val:'\toldf=$(git rev-parse --verify master:file2) &&\n' span_id:787) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:788) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:789) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/branch\n' span_id:790) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 791
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:792) 
          (Token id:Id.Lit_Chars val:'\tsecond\n' span_id:793) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:794) (Token id:Id.Lit_Chars val:'\n' span_id:795) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/master\n' span_id:796) (Token id:Id.Lit_Chars val:'\tM 644 $oldf file2/oldf\n' span_id:797) 
          (Token id:Id.Lit_Chars val:'\tM 755 $newf file2/newf\n' span_id:798) (Token id:Id.Lit_Chars val:'\tD file3\n' span_id:799) (Token id:Id.Lit_Chars val:'\n' span_id:800) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:801) (Token id:Id.Lit_Chars val:'\n' span_id:802) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:803) (Token id:Id.Lit_Chars val:'\tgit whatchanged branch\n' span_id:804)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'C: verify pack' span_id:811))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:815) 
          (Token id:Id.Lit_Chars val:'\tverify_packs\n' span_id:816)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'C: validate reuse existing blob' span_id:823))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:827) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $newf = $(git rev-parse --verify branch:file2/newf) &&\n'
            span_id: 828
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $oldf = $(git rev-parse --verify branch:file2/oldf)\n'
            span_id: 829
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'C: verify commit' span_id:836))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:840) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:841) (Token id:Id.Lit_Chars val:'\tparent $(git rev-parse --verify master^0)\n' span_id:842) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 843
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 844
          ) (Token id:Id.Lit_Chars val:'\n' span_id:845) (Token id:Id.Lit_Chars val:'\tsecond\n' span_id:846) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:847) (Token id:Id.Lit_Chars val:'\n' span_id:848) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit branch | sed 1d >actual &&\n'
            span_id: 849
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:850)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'C: validate rename result' span_id:857))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:861) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:862) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:000000 100755 0000000000000000000000000000000000000000 f1fb5da718392694d0076d677d6d0e364c79b0bc A\tfile2/newf\n'
            span_id: 863
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 R100\tfile2\tfile2/oldf\n'
            span_id: 864
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 000000 0d92e9f3374ae2947c23aa477cbc68ce598135f1 0000000000000000000000000000000000000000 D\tfile3\n'
            span_id: 865
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:866) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -M -r master branch >actual &&\n'
            span_id: 867
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:868)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'D: inline data in commit' span_id:885))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:889) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:890) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:891) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/branch\n' span_id:892) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 893
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:894) 
          (Token id:Id.Lit_Chars val:'\tthird\n' span_id:895) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:896) (Token id:Id.Lit_Chars val:'\n' span_id:897) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:898) (Token id:Id.Lit_Chars val:'\tM 644 inline newdir/interesting\n' span_id:899) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:900) (Token id:Id.Lit_Chars val:'\t$file5_data\n' span_id:901) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:902) (Token id:Id.Lit_Chars val:'\n' span_id:903) 
          (Token id:Id.Lit_Chars val:'\tM 755 inline newdir/exec.sh\n' span_id:904) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:905) 
          (Token id:Id.Lit_Chars val:'\t$file6_data\n' span_id:906) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:907) (Token id:Id.Lit_Chars val:'\n' span_id:908) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:909) (Token id:Id.Lit_Chars val:'\n' span_id:910) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:911) (Token id:Id.Lit_Chars val:'\tgit whatchanged branch\n' span_id:912)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'D: verify pack' span_id:919))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:923) 
          (Token id:Id.Lit_Chars val:'\tverify_packs\n' span_id:924)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'D: validate new files added' span_id:931))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:935) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:936) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:000000 100755 0000000000000000000000000000000000000000 e74b7d465e52746be2b4bae983670711e6e66657 A\tnewdir/exec.sh\n'
            span_id: 937
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:000000 100644 0000000000000000000000000000000000000000 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 A\tnewdir/interesting\n'
            span_id: 938
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:939) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -M -r branch^ branch >actual &&\n'
            span_id: 940
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:941)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'D: verify file5' span_id:948))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:952) 
          (Token id:Id.Lit_Chars val:'\techo "$file5_data" >expect &&\n' span_id:953) (Token id:Id.Lit_Chars val:'\tgit cat-file blob branch:newdir/interesting >actual &&\n' span_id:954) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:955)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'D: verify file6' span_id:962))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:966) 
          (Token id:Id.Lit_Chars val:'\techo "$file6_data" >expect &&\n' span_id:967) (Token id:Id.Lit_Chars val:'\tgit cat-file blob branch:newdir/exec.sh >actual &&\n' span_id:968) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:969)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'E: rfc2822 date, --date-format=raw' span_id:986))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:990) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:991) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/branch\n' span_id:992) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> Tue Feb 6 11:22:18 2007 -0500\n'
            span_id: 993
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> Tue Feb 6 12:35:02 2007 -0500\n'
            span_id: 994
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:995) 
          (Token id:Id.Lit_Chars val:'\tRFC 2822 type date\n' span_id:996) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:997) (Token id:Id.Lit_Chars val:'\n' span_id:998) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:999) (Token id:Id.Lit_Chars val:'\n' span_id:1000) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1001) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1002) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --date-format=raw <input\n'
            span_id: 1003
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'E: rfc2822 date, --date-format=rfc2822' span_id:1009))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1013) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --date-format=rfc2822 <input\n'
            span_id: 1014
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'E: verify pack' span_id:1021))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1025) 
          (Token id:Id.Lit_Chars val:'\tverify_packs\n' span_id:1026)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'E: verify commit' span_id:1033))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1037) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1038) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> 1170778938 -0500\n'
            span_id: 1039
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1170783302 -0500\n'
            span_id: 1040
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1041) 
          (Token id:Id.Lit_Chars val:'\tRFC 2822 type date\n' span_id:1042) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1043) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit branch | sed 1,2d >actual &&\n'
            span_id: 1044
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1045)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'F: non-fast-forward update skips' span_id:1062))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1066) 
          (Token
            id: Id.Lit_Chars
            val: '\told_branch=$(git rev-parse --verify branch^0) &&\n'
            span_id: 1067
          ) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1068) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1069) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/branch\n' span_id:1070) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1071
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1072) 
          (Token id:Id.Lit_Chars val:'\tlosing things already?\n' span_id:1073) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1074) (Token id:Id.Lit_Chars val:'\n' span_id:1075) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch~1\n' span_id:1076) (Token id:Id.Lit_Chars val:'\n' span_id:1077) 
          (Token id:Id.Lit_Chars val:'\treset refs/heads/other\n' span_id:1078) (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch\n' span_id:1079) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1080) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1081) (Token id:Id.Lit_Chars val:'\n' span_id:1082) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <input &&\n'
            span_id: 1083
          ) (Token id:Id.Lit_Chars val:'\t# branch must remain unaffected\n' span_id:1084) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $old_branch = $(git rev-parse --verify branch^0)\n'
            span_id: 1085
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'F: verify pack' span_id:1092))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1096) 
          (Token id:Id.Lit_Chars val:'\tverify_packs\n' span_id:1097)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'F: verify other commit' span_id:1104))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1108) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1109) (Token id:Id.Lit_Chars val:'\ttree $(git rev-parse branch~1^{tree})\n' span_id:1110) 
          (Token id:Id.Lit_Chars val:'\tparent $(git rev-parse branch~1)\n' span_id:1111) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1112
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1113
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1114) 
          (Token id:Id.Lit_Chars val:'\tlosing things already?\n' span_id:1115) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1116) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit other >actual &&\n'
            span_id: 1117
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1118)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'G: non-fast-forward update forced' span_id:1135))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1139) 
          (Token
            id: Id.Lit_Chars
            val: '\told_branch=$(git rev-parse --verify branch^0) &&\n'
            span_id: 1140
          ) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1141) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1142) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/branch\n' span_id:1143) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1144
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1145) 
          (Token id:Id.Lit_Chars val:'\tlosing things already?\n' span_id:1146) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1147) (Token id:Id.Lit_Chars val:'\n' span_id:1148) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch~1\n' span_id:1149) (Token id:Id.Lit_Chars val:'\n' span_id:1150) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1151) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import --force <input\n' span_id:1152)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'G: verify pack' span_id:1159))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1163) 
          (Token id:Id.Lit_Chars val:'\tverify_packs\n' span_id:1164)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'G: branch changed, but logged' span_id:1171))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1175) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $old_branch != $(git rev-parse --verify branch^0) &&\n'
            span_id: 1176
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $old_branch = $(git rev-parse --verify branch@{1})\n'
            span_id: 1177
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'H: deletall, add 1' span_id:1194))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1198) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1199) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1200) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/H\n' span_id:1201) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1202
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1203) 
          (Token id:Id.Lit_Chars val:'\tthird\n' span_id:1204) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1205) (Token id:Id.Lit_Chars val:'\n' span_id:1206) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:1207) (Token id:Id.Lit_Chars val:'\tM 644 inline i-will-die\n' span_id:1208) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:1209) (Token id:Id.Lit_Chars val:'\tthis file will never exist.\n' span_id:1210) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1211) (Token id:Id.Lit_Chars val:'\n' span_id:1212) (Token id:Id.Lit_Chars val:'\tdeleteall\n' span_id:1213) 
          (Token id:Id.Lit_Chars val:'\tM 644 inline h/e/l/lo\n' span_id:1214) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:1215) 
          (Token id:Id.Lit_Chars val:'\t$file5_data\n' span_id:1216) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1217) (Token id:Id.Lit_Chars val:'\n' span_id:1218) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1219) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1220) 
          (Token id:Id.Lit_Chars val:'\tgit whatchanged H\n' span_id:1221)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'H: verify pack' span_id:1228))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1232) 
          (Token id:Id.Lit_Chars val:'\tverify_packs\n' span_id:1233)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'H: validate old files removed, new files added' span_id:1240))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1244) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1245) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 000000 f1fb5da718392694d0076d677d6d0e364c79b0bc 0000000000000000000000000000000000000000 D\tfile2/newf\n'
            span_id: 1246
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 000000 7123f7f44e39be127c5eb701e5968176ee9d78b1 0000000000000000000000000000000000000000 D\tfile2/oldf\n'
            span_id: 1247
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 000000 85df50785d62d3b05ab03d9cbf7e4a0b49449730 0000000000000000000000000000000000000000 D\tfile4\n'
            span_id: 1248
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 R100\tnewdir/interesting\th/e/l/lo\n'
            span_id: 1249
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 000000 e74b7d465e52746be2b4bae983670711e6e66657 0000000000000000000000000000000000000000 D\tnewdir/exec.sh\n'
            span_id: 1250
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1251) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -M -r H^ H >actual &&\n'
            span_id: 1252
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1253)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'H: verify file' span_id:1260))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1264) 
          (Token id:Id.Lit_Chars val:'\techo "$file5_data" >expect &&\n' span_id:1265) (Token id:Id.Lit_Chars val:'\tgit cat-file blob H:h/e/l/lo >actual &&\n' span_id:1266) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1267)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'I: export-pack-edges' span_id:1284))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1288) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1289) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/export-boundary\n' span_id:1290) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1291
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1292) 
          (Token
            id: Id.Lit_Chars
            val: '\twe have a border.  its only 40 characters wide.\n'
            span_id: 1293
          ) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1294) (Token id:Id.Lit_Chars val:'\n' span_id:1295) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch\n' span_id:1296) (Token id:Id.Lit_Chars val:'\n' span_id:1297) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1298) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --export-pack-edges=edges.list <input\n'
            span_id: 1299
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'I: verify edge list' span_id:1306))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1310) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1311) 
          (Token
            id: Id.Lit_Chars
            val: '\t.git/objects/pack/pack-.pack: $(git rev-parse --verify export-boundary)\n'
            span_id: 1312
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1313) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e s/pack-.*pack/pack-.pack/ edges.list >actual &&\n'
            span_id: 1314
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1315)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'J: reset existing branch creates empty commit' span_id:1332))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1336) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1337) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/J\n' span_id:1338) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1339
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1340) 
          (Token id:Id.Lit_Chars val:'\tcreate J\n' span_id:1341) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1342) (Token id:Id.Lit_Chars val:'\n' span_id:1343) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch\n' span_id:1344) (Token id:Id.Lit_Chars val:'\n' span_id:1345) 
          (Token id:Id.Lit_Chars val:'\treset refs/heads/J\n' span_id:1346) (Token id:Id.Lit_Chars val:'\n' span_id:1347) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/J\n' span_id:1348) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1349
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1350) 
          (Token id:Id.Lit_Chars val:'\tinitialize J\n' span_id:1351) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1352) (Token id:Id.Lit_Chars val:'\n' span_id:1353) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1354) (Token id:Id.Lit_Chars val:'\tgit fast-import <input\n' span_id:1355)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'J: branch has 1 commit, empty tree' span_id:1361))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1365) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest 1 = $(git rev-list J | wc -l) &&\n'
            span_id: 1366
          ) (Token id:Id.Lit_Chars val:'\ttest 0 = $(git ls-tree J | wc -l)\n' span_id:1367)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'J: tag must fail on empty branch' span_id:1374))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1378) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1379) (Token id:Id.Lit_Chars val:'\treset refs/heads/J2\n' span_id:1380) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1381) (Token id:Id.Lit_Chars val:'\ttag wrong_tag\n' span_id:1382) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/J2\n' span_id:1383) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:1384) 
          (Token id:Id.Lit_Chars val:'\tTag branch that was reset.\n' span_id:1385) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1386) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1387) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import <input\n' span_id:1388)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'K: reinit branch with from' span_id:1405))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1409) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1410) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/K\n' span_id:1411) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1412
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1413) 
          (Token id:Id.Lit_Chars val:'\tcreate K\n' span_id:1414) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1415) (Token id:Id.Lit_Chars val:'\n' span_id:1416) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch\n' span_id:1417) (Token id:Id.Lit_Chars val:'\n' span_id:1418) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/K\n' span_id:1419) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1420
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1421) 
          (Token id:Id.Lit_Chars val:'\tredo K\n' span_id:1422) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1423) (Token id:Id.Lit_Chars val:'\n' span_id:1424) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^1\n' span_id:1425) (Token id:Id.Lit_Chars val:'\n' span_id:1426) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1427) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input\n' span_id:1428)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'K: verify K^1 = branch^1' span_id:1434))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1438) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse --verify branch^1) \\\n'
            span_id: 1439
          ) (Token id:Id.Lit_Chars val:'\t\t= $(git rev-parse --verify K^1)\n' span_id:1440)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'L: verify internal tree sorting' span_id:1457))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1461) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1462) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:1463) 
          (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:1464) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:1465) 
          (Token id:Id.Lit_Chars val:'\tsome data\n' span_id:1466) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1467) (Token id:Id.Lit_Chars val:'\n' span_id:1468) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:1469) (Token id:Id.Lit_Chars val:'\tmark :2\n' span_id:1470) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:1471) (Token id:Id.Lit_Chars val:'\tother data\n' span_id:1472) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1473) (Token id:Id.Lit_Chars val:'\n' span_id:1474) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/L\n' span_id:1475) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1476
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1477) 
          (Token id:Id.Lit_Chars val:'\tcreate L\n' span_id:1478) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1479) (Token id:Id.Lit_Chars val:'\n' span_id:1480) 
          (Token id:Id.Lit_Chars val:'\tM 644 :1 b.\n' span_id:1481) (Token id:Id.Lit_Chars val:'\tM 644 :1 b/other\n' span_id:1482) 
          (Token id:Id.Lit_Chars val:'\tM 644 :1 ba\n' span_id:1483) (Token id:Id.Lit_Chars val:'\n' span_id:1484) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/L\n' span_id:1485) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1486
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1487) 
          (Token id:Id.Lit_Chars val:'\tupdate L\n' span_id:1488) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1489) (Token id:Id.Lit_Chars val:'\n' span_id:1490) 
          (Token id:Id.Lit_Chars val:'\tM 644 :2 b.\n' span_id:1491) (Token id:Id.Lit_Chars val:'\tM 644 :2 b/other\n' span_id:1492) 
          (Token id:Id.Lit_Chars val:'\tM 644 :2 ba\n' span_id:1493) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1494) (Token id:Id.Lit_Chars val:'\n' span_id:1495) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EXPECT_END &&\n' span_id:1496) (Token id:Id.Lit_Chars val:'\t:100644 100644 4268632... 55d3a52... M\tb.\n' span_id:1497) 
          (Token
            id: Id.Lit_Chars
            val: '\t:040000 040000 0ae5cac... 443c768... M\tb\n'
            span_id: 1498
          ) (Token id:Id.Lit_Chars val:'\t:100644 100644 4268632... 55d3a52... M\tba\n' span_id:1499) 
          (Token id:Id.Lit_Chars val:'\tEXPECT_END\n' span_id:1500) (Token id:Id.Lit_Chars val:'\n' span_id:1501) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1502) (Token id:Id.Lit_Chars val:'\tgit diff-tree --abbrev --raw L^ L >output &&\n' span_id:1503) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect output\n' span_id:1504)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'L: nested tree copy does not corrupt deltas' span_id:1511))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1515) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1516) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:1517) 
          (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:1518) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:1519) 
          (Token id:Id.Lit_Chars val:'\tthe data\n' span_id:1520) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1521) (Token id:Id.Lit_Chars val:'\n' span_id:1522) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/L2\n' span_id:1523) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter C O Mitter <committer@example.com> 1112912473 -0700\n'
            span_id: 1524
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1525) 
          (Token id:Id.Lit_Chars val:'\tinit L2\n' span_id:1526) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1527) 
          (Token id:Id.Lit_Chars val:'\tM 644 :1 a/b/c\n' span_id:1528) (Token id:Id.Lit_Chars val:'\tM 644 :1 a/b/d\n' span_id:1529) 
          (Token id:Id.Lit_Chars val:'\tM 644 :1 a/e/f\n' span_id:1530) (Token id:Id.Lit_Chars val:'\n' span_id:1531) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/L2\n' span_id:1532) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter C O Mitter <committer@example.com> 1112912473 -0700\n'
            span_id: 1533
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1534) 
          (Token id:Id.Lit_Chars val:'\tupdate L2\n' span_id:1535) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1536) 
          (Token id:Id.Lit_Chars val:'\tC a g\n' span_id:1537) (Token id:Id.Lit_Chars val:'\tC a/e g/b\n' span_id:1538) 
          (Token id:Id.Lit_Chars val:'\tM 644 :1 g/b/h\n' span_id:1539) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1540) (Token id:Id.Lit_Chars val:'\n' span_id:1541) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1542) (Token id:Id.Lit_Chars val:'\tg/b/f\n' span_id:1543) 
          (Token id:Id.Lit_Chars val:'\tg/b/h\n' span_id:1544) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1545) (Token id:Id.Lit_Chars val:'\n' span_id:1546) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d refs/heads/L2" &&\n'
            span_id: 1547
          ) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1548) 
          (Token id:Id.Lit_Chars val:'\tgit ls-tree L2 g/b/ >tmp &&\n' span_id:1549) (Token id:Id.Lit_Chars val:'\tcat tmp | cut -f 2 >actual &&\n' span_id:1550) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1551) (Token id:Id.Lit_Chars val:'\tgit fsck $(git rev-parse L2)\n' span_id:1552)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'M: rename file in same subdirectory' span_id:1569))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1573) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1574) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1575) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/M1\n' span_id:1576) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1577
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1578) 
          (Token id:Id.Lit_Chars val:'\tfile rename\n' span_id:1579) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1580) (Token id:Id.Lit_Chars val:'\n' span_id:1581) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:1582) (Token id:Id.Lit_Chars val:'\tR file2/newf file2/n.e.w.f\n' span_id:1583) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1584) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1585) (Token id:Id.Lit_Chars val:'\n' span_id:1586) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1587) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc R100\tfile2/newf\tfile2/n.e.w.f\n'
            span_id: 1588
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1589) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1590) (Token id:Id.Lit_Chars val:'\tgit diff-tree -M -r M1^ M1 >actual &&\n' span_id:1591) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1592)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'M: rename file to new subdirectory' span_id:1599))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1603) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1604) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/M2\n' span_id:1605) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1606
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1607) 
          (Token id:Id.Lit_Chars val:'\tfile rename\n' span_id:1608) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1609) (Token id:Id.Lit_Chars val:'\n' span_id:1610) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:1611) (Token id:Id.Lit_Chars val:'\tR file2/newf i/am/new/to/you\n' span_id:1612) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1613) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1614) (Token id:Id.Lit_Chars val:'\n' span_id:1615) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1616) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc R100\tfile2/newf\ti/am/new/to/you\n'
            span_id: 1617
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1618) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1619) (Token id:Id.Lit_Chars val:'\tgit diff-tree -M -r M2^ M2 >actual &&\n' span_id:1620) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1621)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'M: rename subdirectory to new subdirectory' span_id:1628))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1632) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1633) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/M3\n' span_id:1634) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1635
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1636) 
          (Token id:Id.Lit_Chars val:'\tfile rename\n' span_id:1637) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1638) (Token id:Id.Lit_Chars val:'\n' span_id:1639) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/M2^0\n' span_id:1640) (Token id:Id.Lit_Chars val:'\tR i other/sub\n' span_id:1641) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1642) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1643) (Token id:Id.Lit_Chars val:'\n' span_id:1644) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1645) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc R100\ti/am/new/to/you\tother/sub/am/new/to/you\n'
            span_id: 1646
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1647) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1648) (Token id:Id.Lit_Chars val:'\tgit diff-tree -M -r M3^ M3 >actual &&\n' span_id:1649) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1650)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'M: rename root to subdirectory' span_id:1657))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1661) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1662) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/M4\n' span_id:1663) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1664
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1665) 
          (Token id:Id.Lit_Chars val:'\trename root\n' span_id:1666) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1667) (Token id:Id.Lit_Chars val:'\n' span_id:1668) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/M2^0\n' span_id:1669) (Token id:Id.Lit_Chars val:'\tR "" sub\n' span_id:1670) (Token id:Id.Lit_Chars val:'\n' span_id:1671) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1672) (Token id:Id.Lit_Chars val:'\n' span_id:1673) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1674) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 R100\tfile2/oldf\tsub/file2/oldf\n'
            span_id: 1675
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 85df50785d62d3b05ab03d9cbf7e4a0b49449730 85df50785d62d3b05ab03d9cbf7e4a0b49449730 R100\tfile4\tsub/file4\n'
            span_id: 1676
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc R100\ti/am/new/to/you\tsub/i/am/new/to/you\n'
            span_id: 1677
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 e74b7d465e52746be2b4bae983670711e6e66657 e74b7d465e52746be2b4bae983670711e6e66657 R100\tnewdir/exec.sh\tsub/newdir/exec.sh\n'
            span_id: 1678
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 R100\tnewdir/interesting\tsub/newdir/interesting\n'
            span_id: 1679
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1680) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1681) (Token id:Id.Lit_Chars val:'\tgit diff-tree -M -r M4^ M4 >actual &&\n' span_id:1682) 
          (Token id:Id.Lit_Chars val:'\tcat actual &&\n' span_id:1683) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1684)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: copy file in same subdirectory' span_id:1701))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1705) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1706) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1707) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N1\n' span_id:1708) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1709
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1710) 
          (Token id:Id.Lit_Chars val:'\tfile copy\n' span_id:1711) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1712) (Token id:Id.Lit_Chars val:'\n' span_id:1713) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:1714) (Token id:Id.Lit_Chars val:'\tC file2/newf file2/n.e.w.f\n' span_id:1715) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1716) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1717) (Token id:Id.Lit_Chars val:'\n' span_id:1718) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1719) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100\tfile2/newf\tfile2/n.e.w.f\n'
            span_id: 1720
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1721) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1722) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -C --find-copies-harder -r N1^ N1 >actual &&\n'
            span_id: 1723
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1724)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: copy then modify subdirectory' span_id:1731))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1735) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1736) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N2\n' span_id:1737) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1738
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1739) 
          (Token id:Id.Lit_Chars val:'\tclean directory copy\n' span_id:1740) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1741) (Token id:Id.Lit_Chars val:'\n' span_id:1742) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:1743) (Token id:Id.Lit_Chars val:'\tC file2 file3\n' span_id:1744) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1745) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N2\n' span_id:1746) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1747
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1748) 
          (Token id:Id.Lit_Chars val:'\tmodify directory copy\n' span_id:1749) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1750) (Token id:Id.Lit_Chars val:'\n' span_id:1751) 
          (Token id:Id.Lit_Chars val:'\tM 644 inline file3/file5\n' span_id:1752) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:1753) 
          (Token id:Id.Lit_Chars val:'\t$file5_data\n' span_id:1754) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1755) (Token id:Id.Lit_Chars val:'\n' span_id:1756) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1757) (Token id:Id.Lit_Chars val:'\n' span_id:1758) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1759) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 C100\tnewdir/interesting\tfile3/file5\n'
            span_id: 1760
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100\tfile2/newf\tfile3/newf\n'
            span_id: 1761
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100\tfile2/oldf\tfile3/oldf\n'
            span_id: 1762
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1763) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1764) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -C --find-copies-harder -r N2^^ N2 >actual &&\n'
            span_id: 1765
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1766)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: copy dirty subdirectory' span_id:1773))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1777) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1778) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N3\n' span_id:1779) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1780
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1781) 
          (Token id:Id.Lit_Chars val:'\tdirty directory copy\n' span_id:1782) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1783) (Token id:Id.Lit_Chars val:'\n' span_id:1784) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:1785) (Token id:Id.Lit_Chars val:'\tM 644 inline file2/file5\n' span_id:1786) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:1787) (Token id:Id.Lit_Chars val:'\t$file5_data\n' span_id:1788) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1789) (Token id:Id.Lit_Chars val:'\n' span_id:1790) 
          (Token id:Id.Lit_Chars val:'\tC file2 file3\n' span_id:1791) (Token id:Id.Lit_Chars val:'\tD file2/file5\n' span_id:1792) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1793) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1794) (Token id:Id.Lit_Chars val:'\n' span_id:1795) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1796) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse N2^{tree}) = $(git rev-parse N3^{tree})\n'
            span_id: 1797
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'N: copy directory by id' span_id:1804))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1808) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1809) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100\tfile2/newf\tfile3/newf\n'
            span_id: 1810
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100\tfile2/oldf\tfile3/oldf\n'
            span_id: 1811
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1812) 
          (Token
            id: Id.Lit_Chars
            val: '\tsubdir=$(git rev-parse refs/heads/branch^0:file2) &&\n'
            span_id: 1813
          ) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1814) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N4\n' span_id:1815) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1816
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1817) 
          (Token id:Id.Lit_Chars val:'\tcopy by tree hash\n' span_id:1818) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1819) (Token id:Id.Lit_Chars val:'\n' span_id:1820) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:1821) (Token id:Id.Lit_Chars val:'\tM 040000 $subdir file3\n' span_id:1822) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1823) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1824) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -C --find-copies-harder -r N4^ N4 >actual &&\n'
            span_id: 1825
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1826)
        )
      }
    )
    (C {(test_expect_success)} {(PIPE)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: read and copy directory' span_id:1835))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1839) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1840) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100\tfile2/newf\tfile3/newf\n'
            span_id: 1841
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100\tfile2/oldf\tfile3/oldf\n'
            span_id: 1842
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1843) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref -d refs/heads/N4 &&\n' span_id:1844) (Token id:Id.Lit_Chars val:'\trm -f backflow &&\n' span_id:1845) 
          (Token id:Id.Lit_Chars val:'\tmkfifo backflow &&\n' span_id:1846) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1847) 
          (Token id:Id.Lit_Chars val:'\t\texec <backflow &&\n' span_id:1848) (Token id:Id.Lit_Chars val:'\t\tcat <<-EOF &&\n' span_id:1849) 
          (Token id:Id.Lit_Chars val:'\t\tcommit refs/heads/N4\n' span_id:1850) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1851
          ) (Token id:Id.Lit_Chars val:'\t\tdata <<COMMIT\n' span_id:1852) 
          (Token id:Id.Lit_Chars val:'\t\tcopy by tree hash, part 2\n' span_id:1853) (Token id:Id.Lit_Chars val:'\t\tCOMMIT\n' span_id:1854) (Token id:Id.Lit_Chars val:'\n' span_id:1855) 
          (Token id:Id.Lit_Chars val:'\t\tfrom refs/heads/branch^0\n' span_id:1856) (Token id:Id.Lit_Chars val:'\t\tls "file2"\n' span_id:1857) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:1858) (Token id:Id.Lit_Chars val:'\t\tread mode type tree filename &&\n' span_id:1859) 
          (Token id:Id.Lit_Chars val:'\t\techo "M 040000 $tree file3"\n' span_id:1860) (Token id:Id.Lit_Chars val:'\t) |\n' span_id:1861) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --cat-blob-fd=3 3>backflow &&\n'
            span_id: 1862
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -C --find-copies-harder -r N4^ N4 >actual &&\n'
            span_id: 1863
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1864)
        )
      }
    )
    (C {(test_expect_success)} {(PIPE)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: empty directory reads as missing' span_id:1873))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1877) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expect &&\n' span_id:1878) (Token id:Id.Lit_Chars val:'\tOBJNAME\n' span_id:1879) 
          (Token
            id: Id.Lit_Chars
            val: '\t:000000 100644 OBJNAME OBJNAME A\tunrelated\n'
            span_id: 1880
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1881) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "missing src" >expect.response &&\n'
            span_id: 1882
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -d refs/heads/read-empty &&\n' span_id:1883) 
          (Token id:Id.Lit_Chars val:'\trm -f backflow &&\n' span_id:1884) (Token id:Id.Lit_Chars val:'\tmkfifo backflow &&\n' span_id:1885) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1886) (Token id:Id.Lit_Chars val:'\t\texec <backflow &&\n' span_id:1887) 
          (Token id:Id.Lit_Chars val:'\t\tcat <<-EOF &&\n' span_id:1888) (Token id:Id.Lit_Chars val:'\t\tcommit refs/heads/read-empty\n' span_id:1889) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1890
          ) (Token id:Id.Lit_Chars val:'\t\tdata <<COMMIT\n' span_id:1891) 
          (Token id:Id.Lit_Chars val:'\t\tread "empty" (missing) directory\n' span_id:1892) (Token id:Id.Lit_Chars val:'\t\tCOMMIT\n' span_id:1893) (Token id:Id.Lit_Chars val:'\n' span_id:1894) 
          (Token id:Id.Lit_Chars val:'\t\tM 100644 inline src/greeting\n' span_id:1895) (Token id:Id.Lit_Chars val:'\t\tdata <<BLOB\n' span_id:1896) 
          (Token id:Id.Lit_Chars val:'\t\thello\n' span_id:1897) (Token id:Id.Lit_Chars val:'\t\tBLOB\n' span_id:1898) 
          (Token id:Id.Lit_Chars val:'\t\tC src/greeting dst1/non-greeting\n' span_id:1899) (Token id:Id.Lit_Chars val:'\t\tC src/greeting unrelated\n' span_id:1900) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# leave behind "empty" src directory\n'
            span_id: 1901
          ) (Token id:Id.Lit_Chars val:'\t\tD src/greeting\n' span_id:1902) 
          (Token id:Id.Lit_Chars val:'\t\tls "src"\n' span_id:1903) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:1904) 
          (Token id:Id.Lit_Chars val:'\t\tread -r line &&\n' span_id:1905) (Token id:Id.Lit_Chars val:'\t\tprintf "%s\\n" "$line" >response &&\n' span_id:1906) 
          (Token id:Id.Lit_Chars val:'\t\tcat <<-\\EOF\n' span_id:1907) (Token id:Id.Lit_Chars val:'\t\tD dst1\n' span_id:1908) 
          (Token id:Id.Lit_Chars val:'\t\tD dst2\n' span_id:1909) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:1910) 
          (Token id:Id.Lit_Chars val:'\t) |\n' span_id:1911) (Token id:Id.Lit_Chars val:'\tgit fast-import --cat-blob-fd=3 3>backflow &&\n' span_id:1912) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expect.response response &&\n'
            span_id: 1913
          ) (Token id:Id.Lit_Chars val:'\tgit rev-list read-empty |\n' span_id:1914) 
          (Token id:Id.Lit_Chars val:'\tgit diff-tree -r --root --stdin |\n' span_id:1915) (Token id:Id.Lit_Chars val:'\tsed "s/$_x40/OBJNAME/g" >actual &&\n' span_id:1916) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1917)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: copy root directory by tree hash' span_id:1924))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1928) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1929) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 000000 f1fb5da718392694d0076d677d6d0e364c79b0bc 0000000000000000000000000000000000000000 D\tfile3/newf\n'
            span_id: 1930
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 000000 7123f7f44e39be127c5eb701e5968176ee9d78b1 0000000000000000000000000000000000000000 D\tfile3/oldf\n'
            span_id: 1931
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1932) 
          (Token
            id: Id.Lit_Chars
            val: '\troot=$(git rev-parse refs/heads/branch^0^{tree}) &&\n'
            span_id: 1933
          ) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1934) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N6\n' span_id:1935) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1936
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1937) 
          (Token id:Id.Lit_Chars val:'\tcopy root directory by tree hash\n' span_id:1938) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1939) (Token id:Id.Lit_Chars val:'\n' span_id:1940) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:1941) (Token id:Id.Lit_Chars val:'\tM 040000 $root ""\n' span_id:1942) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1943) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1944) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -C --find-copies-harder -r N4 N6 >actual &&\n'
            span_id: 1945
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1946)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'N: copy root by path' span_id:1953))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1957) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1958) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100\tfile2/newf\toldroot/file2/newf\n'
            span_id: 1959
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100\tfile2/oldf\toldroot/file2/oldf\n'
            span_id: 1960
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 85df50785d62d3b05ab03d9cbf7e4a0b49449730 85df50785d62d3b05ab03d9cbf7e4a0b49449730 C100\tfile4\toldroot/file4\n'
            span_id: 1961
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 e74b7d465e52746be2b4bae983670711e6e66657 e74b7d465e52746be2b4bae983670711e6e66657 C100\tnewdir/exec.sh\toldroot/newdir/exec.sh\n'
            span_id: 1962
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 C100\tnewdir/interesting\toldroot/newdir/interesting\n'
            span_id: 1963
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1964) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1965) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N-copy-root-path\n' span_id:1966) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1967
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:1968) 
          (Token
            id: Id.Lit_Chars
            val: '\tcopy root directory by (empty) path\n'
            span_id: 1969
          ) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:1970) (Token id:Id.Lit_Chars val:'\n' span_id:1971) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:1972) (Token id:Id.Lit_Chars val:'\tC "" oldroot\n' span_id:1973) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:1974) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:1975) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -C --find-copies-harder -r branch N-copy-root-path >actual &&\n'
            span_id: 1976
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:1977)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: delete directory by copying' span_id:1984))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1988) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1989) (Token id:Id.Lit_Chars val:'\tOBJID\n' span_id:1990) 
          (Token
            id: Id.Lit_Chars
            val: '\t:100644 000000 OBJID OBJID D\tfoo/bar/qux\n'
            span_id: 1991
          ) (Token id:Id.Lit_Chars val:'\tOBJID\n' span_id:1992) 
          (Token
            id: Id.Lit_Chars
            val: '\t:000000 100644 OBJID OBJID A\tfoo/bar/baz\n'
            span_id: 1993
          ) (Token id:Id.Lit_Chars val:'\t:000000 100644 OBJID OBJID A\tfoo/bar/qux\n' span_id:1994) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1995) (Token id:Id.Lit_Chars val:'\tempty_tree=$(git mktree </dev/null) &&\n' span_id:1996) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:1997) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N-delete\n' span_id:1998) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 1999
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2000) 
          (Token id:Id.Lit_Chars val:'\tcollect data to be deleted\n' span_id:2001) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2002) (Token id:Id.Lit_Chars val:'\n' span_id:2003) 
          (Token id:Id.Lit_Chars val:'\tdeleteall\n' span_id:2004) (Token id:Id.Lit_Chars val:'\tM 100644 inline foo/bar/baz\n' span_id:2005) 
          (Token id:Id.Lit_Chars val:'\tdata <<DATA_END\n' span_id:2006) (Token id:Id.Lit_Chars val:'\thello\n' span_id:2007) 
          (Token id:Id.Lit_Chars val:'\tDATA_END\n' span_id:2008) (Token id:Id.Lit_Chars val:'\tC "foo/bar/baz" "foo/bar/qux"\n' span_id:2009) 
          (Token id:Id.Lit_Chars val:'\tC "foo/bar/baz" "foo/bar/quux/1"\n' span_id:2010) (Token id:Id.Lit_Chars val:'\tC "foo/bar/baz" "foo/bar/quuux"\n' span_id:2011) 
          (Token id:Id.Lit_Chars val:'\tM 040000 $empty_tree foo/bar/quux\n' span_id:2012) (Token id:Id.Lit_Chars val:'\tM 040000 $empty_tree foo/bar/quuux\n' span_id:2013) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2014) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N-delete\n' span_id:2015) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2016
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2017) 
          (Token id:Id.Lit_Chars val:'\tdelete subdirectory\n' span_id:2018) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2019) (Token id:Id.Lit_Chars val:'\n' span_id:2020) 
          (Token id:Id.Lit_Chars val:'\tM 040000 $empty_tree foo/bar/qux\n' span_id:2021) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2022) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:2023) (Token id:Id.Lit_Chars val:'\tgit rev-list N-delete |\n' span_id:2024) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit diff-tree -r --stdin --root --always |\n'
            span_id: 2025
          ) (Token id:Id.Lit_Chars val:'\t\tsed -e "s/$_x40/OBJID/g" >actual &&\n' span_id:2026) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2027)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'N: modify copied tree' span_id:2034))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2038) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:2039) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 C100\tnewdir/interesting\tfile3/file5\n'
            span_id: 2040
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100\tfile2/newf\tfile3/newf\n'
            span_id: 2041
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100\tfile2/oldf\tfile3/oldf\n'
            span_id: 2042
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2043) 
          (Token
            id: Id.Lit_Chars
            val: '\tsubdir=$(git rev-parse refs/heads/branch^0:file2) &&\n'
            span_id: 2044
          ) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2045) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N5\n' span_id:2046) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2047
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2048) 
          (Token id:Id.Lit_Chars val:'\tcopy by tree hash\n' span_id:2049) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2050) (Token id:Id.Lit_Chars val:'\n' span_id:2051) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:2052) (Token id:Id.Lit_Chars val:'\tM 040000 $subdir file3\n' span_id:2053) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2054) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N5\n' span_id:2055) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2056
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2057) 
          (Token id:Id.Lit_Chars val:'\tmodify directory copy\n' span_id:2058) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2059) (Token id:Id.Lit_Chars val:'\n' span_id:2060) 
          (Token id:Id.Lit_Chars val:'\tM 644 inline file3/file5\n' span_id:2061) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2062) 
          (Token id:Id.Lit_Chars val:'\t$file5_data\n' span_id:2063) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2064) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2065) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:2066) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -C --find-copies-harder -r N5^^ N5 >actual &&\n'
            span_id: 2067
          ) (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:2068)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'N: reject foo/ syntax' span_id:2075))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2079) 
          (Token
            id: Id.Lit_Chars
            val: '\tsubdir=$(git rev-parse refs/heads/branch^0:file2) &&\n'
            span_id: 2080
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import <<-INPUT_END\n' span_id:2081) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N5B\n' span_id:2082) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2083
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2084) 
          (Token id:Id.Lit_Chars val:'\tcopy with invalid syntax\n' span_id:2085) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2086) (Token id:Id.Lit_Chars val:'\n' span_id:2087) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:2088) (Token id:Id.Lit_Chars val:'\tM 040000 $subdir file3/\n' span_id:2089) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2090)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: reject foo/ syntax in copy source' span_id:2097))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2101) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <<-INPUT_END\n'
            span_id: 2102
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N5C\n' span_id:2103) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2104
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2105) 
          (Token id:Id.Lit_Chars val:'\tcopy with invalid syntax\n' span_id:2106) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2107) (Token id:Id.Lit_Chars val:'\n' span_id:2108) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:2109) (Token id:Id.Lit_Chars val:'\tC file2/ file3\n' span_id:2110) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2111)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: reject foo/ syntax in rename source' span_id:2118))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2122) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <<-INPUT_END\n'
            span_id: 2123
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N5D\n' span_id:2124) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2125
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2126) 
          (Token id:Id.Lit_Chars val:'\trename with invalid syntax\n' span_id:2127) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2128) (Token id:Id.Lit_Chars val:'\n' span_id:2129) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:2130) (Token id:Id.Lit_Chars val:'\tR file2/ file3\n' span_id:2131) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2132)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: reject foo/ syntax in ls argument' span_id:2139))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2143) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <<-INPUT_END\n'
            span_id: 2144
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N5E\n' span_id:2145) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2146
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2147) 
          (Token id:Id.Lit_Chars val:'\tcopy with invalid syntax\n' span_id:2148) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2149) (Token id:Id.Lit_Chars val:'\n' span_id:2150) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:2151) (Token id:Id.Lit_Chars val:'\tls "file2/"\n' span_id:2152) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2153)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'N: copy to root by id and modify' span_id:2160))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2164) 
          (Token id:Id.Lit_Chars val:'\techo "hello, world" >expect.foo &&\n' span_id:2165) (Token id:Id.Lit_Chars val:'\techo hello >expect.bar &&\n' span_id:2166) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <<-SETUP_END &&\n' span_id:2167) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N7\n' span_id:2168) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2169
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2170) 
          (Token id:Id.Lit_Chars val:'\thello, tree\n' span_id:2171) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2172) (Token id:Id.Lit_Chars val:'\n' span_id:2173) 
          (Token id:Id.Lit_Chars val:'\tdeleteall\n' span_id:2174) (Token id:Id.Lit_Chars val:'\tM 644 inline foo/bar\n' span_id:2175) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2176) (Token id:Id.Lit_Chars val:'\thello\n' span_id:2177) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2178) (Token id:Id.Lit_Chars val:'\tSETUP_END\n' span_id:2179) (Token id:Id.Lit_Chars val:'\n' span_id:2180) 
          (Token
            id: Id.Lit_Chars
            val: '\ttree=$(git rev-parse --verify N7:) &&\n'
            span_id: 2181
          ) (Token id:Id.Lit_Chars val:'\tgit fast-import <<-INPUT_END &&\n' span_id:2182) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N8\n' span_id:2183) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2184
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2185) 
          (Token id:Id.Lit_Chars val:'\tcopy to root by id and modify\n' span_id:2186) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2187) (Token id:Id.Lit_Chars val:'\n' span_id:2188) 
          (Token id:Id.Lit_Chars val:'\tM 040000 $tree ""\n' span_id:2189) (Token id:Id.Lit_Chars val:'\tM 644 inline foo/foo\n' span_id:2190) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2191) (Token id:Id.Lit_Chars val:'\thello, world\n' span_id:2192) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2193) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2194) 
          (Token id:Id.Lit_Chars val:'\tgit show N8:foo/foo >actual.foo &&\n' span_id:2195) (Token id:Id.Lit_Chars val:'\tgit show N8:foo/bar >actual.bar &&\n' span_id:2196) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.foo actual.foo &&\n' span_id:2197) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.bar actual.bar\n' span_id:2198)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'N: extract subtree' span_id:2205))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2209) 
          (Token
            id: Id.Lit_Chars
            val: '\tbranch=$(git rev-parse --verify refs/heads/branch^{tree}) &&\n'
            span_id: 2210
          ) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2211) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N9\n' span_id:2212) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2213
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2214) 
          (Token id:Id.Lit_Chars val:'\textract subtree branch:newdir\n' span_id:2215) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2216) (Token id:Id.Lit_Chars val:'\n' span_id:2217) 
          (Token id:Id.Lit_Chars val:'\tM 040000 $branch ""\n' span_id:2218) (Token id:Id.Lit_Chars val:'\tC "newdir" ""\n' span_id:2219) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2220) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:2221) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --exit-code branch:newdir N9\n'
            span_id: 2222
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'N: modify subtree, extract it, and modify again'
            span_id: 2229
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2233) 
          (Token id:Id.Lit_Chars val:'\techo hello >expect.baz &&\n' span_id:2234) (Token id:Id.Lit_Chars val:'\techo hello, world >expect.qux &&\n' span_id:2235) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <<-SETUP_END &&\n' span_id:2236) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N10\n' span_id:2237) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2238
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2239) 
          (Token id:Id.Lit_Chars val:'\thello, tree\n' span_id:2240) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2241) (Token id:Id.Lit_Chars val:'\n' span_id:2242) 
          (Token id:Id.Lit_Chars val:'\tdeleteall\n' span_id:2243) (Token id:Id.Lit_Chars val:'\tM 644 inline foo/bar/baz\n' span_id:2244) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2245) (Token id:Id.Lit_Chars val:'\thello\n' span_id:2246) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2247) (Token id:Id.Lit_Chars val:'\tSETUP_END\n' span_id:2248) (Token id:Id.Lit_Chars val:'\n' span_id:2249) 
          (Token
            id: Id.Lit_Chars
            val: '\ttree=$(git rev-parse --verify N10:) &&\n'
            span_id: 2250
          ) (Token id:Id.Lit_Chars val:'\tgit fast-import <<-INPUT_END &&\n' span_id:2251) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/N11\n' span_id:2252) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2253
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2254) 
          (Token id:Id.Lit_Chars val:'\tcopy to root by id and modify\n' span_id:2255) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2256) (Token id:Id.Lit_Chars val:'\n' span_id:2257) 
          (Token id:Id.Lit_Chars val:'\tM 040000 $tree ""\n' span_id:2258) (Token id:Id.Lit_Chars val:'\tM 100644 inline foo/bar/qux\n' span_id:2259) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2260) (Token id:Id.Lit_Chars val:'\thello, world\n' span_id:2261) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2262) (Token id:Id.Lit_Chars val:'\tR "foo" ""\n' span_id:2263) 
          (Token id:Id.Lit_Chars val:'\tC "bar/qux" "bar/quux"\n' span_id:2264) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2265) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show N11:bar/baz >actual.baz &&\n'
            span_id: 2266
          ) (Token id:Id.Lit_Chars val:'\tgit show N11:bar/qux >actual.qux &&\n' span_id:2267) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show N11:bar/quux >actual.quux &&\n'
            span_id: 2268
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.baz actual.baz &&\n' span_id:2269) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.qux actual.qux &&\n' span_id:2270) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.qux actual.quux' span_id:2271)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'O: comments are all skipped' span_id:2288))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2292) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2293) (Token id:Id.Lit_Chars val:'\t#we will\n' span_id:2294) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O1\n' span_id:2295) (Token id:Id.Lit_Chars val:'\t# -- ignore all of this text\n' span_id:2296) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2297
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# $GIT_COMMITTER_NAME has inserted here for his benefit.\n'
            span_id: 2298
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2299) 
          (Token id:Id.Lit_Chars val:'\tdirty directory copy\n' span_id:2300) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2301) (Token id:Id.Lit_Chars val:'\n' span_id:2302) 
          (Token
            id: Id.Lit_Chars
            val: '\t# do not forget the import blank line!\n'
            span_id: 2303
          ) (Token id:Id.Lit_Chars val:'\t#\n' span_id:2304) 
          (Token
            id: Id.Lit_Chars
            val: '\t# yes, we started from our usual base of branch^0.\n'
            span_id: 2305
          ) (Token id:Id.Lit_Chars val:'\t# i like branch^0.\n' span_id:2306) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:2307) (Token id:Id.Lit_Chars val:'\t# and we need to reuse file2/file5 from N3 above.\n' span_id:2308) 
          (Token id:Id.Lit_Chars val:'\tM 644 inline file2/file5\n' span_id:2309) (Token id:Id.Lit_Chars val:'\t# otherwise the tree will be different\n' span_id:2310) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2311) (Token id:Id.Lit_Chars val:'\t$file5_data\n' span_id:2312) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2313) (Token id:Id.Lit_Chars val:'\n' span_id:2314) 
          (Token
            id: Id.Lit_Chars
            val: '\t# do not forget to copy file2 to file3\n'
            span_id: 2315
          ) (Token id:Id.Lit_Chars val:'\tC file2 file3\n' span_id:2316) 
          (Token id:Id.Lit_Chars val:'\t#\n' span_id:2317) (Token id:Id.Lit_Chars val:'\t# or to delete file5 from file2.\n' span_id:2318) 
          (Token id:Id.Lit_Chars val:'\tD file2/file5\n' span_id:2319) (Token id:Id.Lit_Chars val:'\t# are we done yet?\n' span_id:2320) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2321) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2322) (Token id:Id.Lit_Chars val:'\n' span_id:2323) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:2324) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse N3) = $(git rev-parse O1)\n' span_id:2325)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'O: blank lines not necessary after data commands'
            span_id: 2332
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2336) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2337) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O2\n' span_id:2338) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2339
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2340) 
          (Token id:Id.Lit_Chars val:'\tdirty directory copy\n' span_id:2341) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2342) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/branch^0\n' span_id:2343) (Token id:Id.Lit_Chars val:'\tM 644 inline file2/file5\n' span_id:2344) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2345) (Token id:Id.Lit_Chars val:'\t$file5_data\n' span_id:2346) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2347) (Token id:Id.Lit_Chars val:'\tC file2 file3\n' span_id:2348) 
          (Token id:Id.Lit_Chars val:'\tD file2/file5\n' span_id:2349) (Token id:Id.Lit_Chars val:'\n' span_id:2350) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2351) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2352) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:2353) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse N3) = $(git rev-parse O2)\n'
            span_id: 2354
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'O: repack before next test' span_id:2361))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2365) 
          (Token id:Id.Lit_Chars val:'\tgit repack -a -d\n' span_id:2366)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'O: blank lines not necessary after other commands'
            span_id: 2373
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2377) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2378) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O3\n' span_id:2379) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2380
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2381) 
          (Token id:Id.Lit_Chars val:'\tzstring\n' span_id:2382) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2383) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O3\n' span_id:2384) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2385
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2386) 
          (Token id:Id.Lit_Chars val:'\tzof\n' span_id:2387) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2388) 
          (Token id:Id.Lit_Chars val:'\tcheckpoint\n' span_id:2389) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O3\n' span_id:2390) 
          (Token id:Id.Lit_Chars val:'\tmark :5\n' span_id:2391) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2392
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2393) 
          (Token id:Id.Lit_Chars val:'\tzempty\n' span_id:2394) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2395) 
          (Token id:Id.Lit_Chars val:'\tcheckpoint\n' span_id:2396) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O3\n' span_id:2397) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2398
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2399) 
          (Token id:Id.Lit_Chars val:'\tzcommits\n' span_id:2400) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2401) 
          (Token id:Id.Lit_Chars val:'\treset refs/tags/O3-2nd\n' span_id:2402) (Token id:Id.Lit_Chars val:'\tfrom :5\n' span_id:2403) 
          (Token id:Id.Lit_Chars val:'\treset refs/tags/O3-3rd\n' span_id:2404) (Token id:Id.Lit_Chars val:'\tfrom :5\n' span_id:2405) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2406) (Token id:Id.Lit_Chars val:'\n' span_id:2407) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-INPUT_END &&\n' span_id:2408) (Token id:Id.Lit_Chars val:'\tstring\n' span_id:2409) 
          (Token id:Id.Lit_Chars val:'\tof\n' span_id:2410) (Token id:Id.Lit_Chars val:'\tempty\n' span_id:2411) 
          (Token id:Id.Lit_Chars val:'\tcommits\n' span_id:2412) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2413) (Token id:Id.Lit_Chars val:'\n' span_id:2414) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:2415) (Token id:Id.Lit_Chars val:'\ttest 8 = $(find .git/objects/pack -type f | wc -l) &&\n' span_id:2416) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse refs/tags/O3-2nd) = $(git rev-parse O3^) &&\n'
            span_id: 2417
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --reverse --pretty=oneline O3 | sed s/^.*z// >actual &&\n'
            span_id: 2418
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2419)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'O: progress outputs as requested by input' span_id:2426))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2430) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2431) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O4\n' span_id:2432) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2433
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2434) 
          (Token id:Id.Lit_Chars val:'\tzstring\n' span_id:2435) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2436) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O4\n' span_id:2437) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2438
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2439) 
          (Token id:Id.Lit_Chars val:'\tzof\n' span_id:2440) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2441) 
          (Token
            id: Id.Lit_Chars
            val: '\tprogress Two commits down, 2 to go!\n'
            span_id: 2442
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O4\n' span_id:2443) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2444
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2445) 
          (Token id:Id.Lit_Chars val:'\tzempty\n' span_id:2446) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2447) 
          (Token
            id: Id.Lit_Chars
            val: '\tprogress Three commits down, 1 to go!\n'
            span_id: 2448
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/O4\n' span_id:2449) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2450
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2451) 
          (Token id:Id.Lit_Chars val:'\tzcommits\n' span_id:2452) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2453) 
          (Token id:Id.Lit_Chars val:'\tprogress done!\n' span_id:2454) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2455) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input >actual &&\n' span_id:2456) (Token id:Id.Lit_Chars val:'\tgrep "progress " <input >expect &&\n' span_id:2457) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2458)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'P: superproject & submodule mix' span_id:2475))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2479) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2480) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:2481) 
          (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:2482) (Token id:Id.Lit_Chars val:'\tdata 10\n' span_id:2483) 
          (Token id:Id.Lit_Chars val:'\ttest file\n' span_id:2484) (Token id:Id.Lit_Chars val:'\n' span_id:2485) 
          (Token id:Id.Lit_Chars val:'\treset refs/heads/sub\n' span_id:2486) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/sub\n' span_id:2487) 
          (Token id:Id.Lit_Chars val:'\tmark :2\n' span_id:2488) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2489
          ) (Token id:Id.Lit_Chars val:'\tdata 12\n' span_id:2490) 
          (Token id:Id.Lit_Chars val:'\tsub_initial\n' span_id:2491) (Token id:Id.Lit_Chars val:'\tM 100644 :1 file\n' span_id:2492) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2493) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:2494) 
          (Token id:Id.Lit_Chars val:'\tmark :3\n' span_id:2495) (Token id:Id.Lit_Chars val:'\tdata <<DATAEND\n' span_id:2496) 
          (Token id:Id.Lit_Chars val:'\t[submodule "sub"]\n' span_id:2497) (Token id:Id.Lit_Chars val:'\t\tpath = sub\n' span_id:2498) 
          (Token id:Id.Lit_Chars val:'\t\turl = "$(pwd)/sub"\n' span_id:2499) (Token id:Id.Lit_Chars val:'\tDATAEND\n' span_id:2500) (Token id:Id.Lit_Chars val:'\n' span_id:2501) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/subuse1\n' span_id:2502) (Token id:Id.Lit_Chars val:'\tmark :4\n' span_id:2503) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2504
          ) (Token id:Id.Lit_Chars val:'\tdata 8\n' span_id:2505) 
          (Token id:Id.Lit_Chars val:'\tinitial\n' span_id:2506) (Token id:Id.Lit_Chars val:'\tfrom refs/heads/master\n' span_id:2507) 
          (Token id:Id.Lit_Chars val:'\tM 100644 :3 .gitmodules\n' span_id:2508) (Token id:Id.Lit_Chars val:'\tM 160000 :2 sub\n' span_id:2509) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2510) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:2511) 
          (Token id:Id.Lit_Chars val:'\tmark :5\n' span_id:2512) (Token id:Id.Lit_Chars val:'\tdata 20\n' span_id:2513) 
          (Token id:Id.Lit_Chars val:'\ttest file\n' span_id:2514) (Token id:Id.Lit_Chars val:'\tmore data\n' span_id:2515) (Token id:Id.Lit_Chars val:'\n' span_id:2516) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/sub\n' span_id:2517) (Token id:Id.Lit_Chars val:'\tmark :6\n' span_id:2518) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2519
          ) (Token id:Id.Lit_Chars val:'\tdata 11\n' span_id:2520) 
          (Token id:Id.Lit_Chars val:'\tsub_second\n' span_id:2521) (Token id:Id.Lit_Chars val:'\tfrom :2\n' span_id:2522) 
          (Token id:Id.Lit_Chars val:'\tM 100644 :5 file\n' span_id:2523) (Token id:Id.Lit_Chars val:'\n' span_id:2524) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/subuse1\n' span_id:2525) (Token id:Id.Lit_Chars val:'\tmark :7\n' span_id:2526) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2527
          ) (Token id:Id.Lit_Chars val:'\tdata 7\n' span_id:2528) 
          (Token id:Id.Lit_Chars val:'\tsecond\n' span_id:2529) (Token id:Id.Lit_Chars val:'\tfrom :4\n' span_id:2530) 
          (Token id:Id.Lit_Chars val:'\tM 160000 :6 sub\n' span_id:2531) (Token id:Id.Lit_Chars val:'\n' span_id:2532) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2533) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2534) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:2535) 
          (Token id:Id.Lit_Chars val:'\tgit checkout subuse1 &&\n' span_id:2536) (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:2537) 
          (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:2538) (Token id:Id.Lit_Chars val:'\t(\n' span_id:2539) 
          (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:2540) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:2541) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit fetch --update-head-ok .. refs/heads/sub:refs/heads/master &&\n'
            span_id: 2542
          ) (Token id:Id.Lit_Chars val:'\t\tgit checkout master\n' span_id:2543) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:2544) (Token id:Id.Lit_Chars val:'\tgit submodule init &&\n' span_id:2545) 
          (Token id:Id.Lit_Chars val:'\tgit submodule update\n' span_id:2546)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'P: verbatim SHA gitlinks' span_id:2553))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2557) 
          (Token
            id: Id.Lit_Chars
            val: '\tSUBLAST=$(git rev-parse --verify sub) &&\n'
            span_id: 2558
          ) (Token id:Id.Lit_Chars val:'\tSUBPREV=$(git rev-parse --verify sub^) &&\n' span_id:2559) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2560) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2561) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:2562) (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:2563) 
          (Token id:Id.Lit_Chars val:'\tdata <<DATAEND\n' span_id:2564) (Token id:Id.Lit_Chars val:'\t[submodule "sub"]\n' span_id:2565) 
          (Token id:Id.Lit_Chars val:'\t\tpath = sub\n' span_id:2566) (Token id:Id.Lit_Chars val:'\t\turl = "$(pwd)/sub"\n' span_id:2567) 
          (Token id:Id.Lit_Chars val:'\tDATAEND\n' span_id:2568) (Token id:Id.Lit_Chars val:'\n' span_id:2569) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/subuse2\n' span_id:2570) (Token id:Id.Lit_Chars val:'\tmark :2\n' span_id:2571) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2572
          ) (Token id:Id.Lit_Chars val:'\tdata 8\n' span_id:2573) 
          (Token id:Id.Lit_Chars val:'\tinitial\n' span_id:2574) (Token id:Id.Lit_Chars val:'\tfrom refs/heads/master\n' span_id:2575) 
          (Token id:Id.Lit_Chars val:'\tM 100644 :1 .gitmodules\n' span_id:2576) (Token id:Id.Lit_Chars val:'\tM 160000 $SUBPREV sub\n' span_id:2577) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2578) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/subuse2\n' span_id:2579) 
          (Token id:Id.Lit_Chars val:'\tmark :3\n' span_id:2580) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2581
          ) (Token id:Id.Lit_Chars val:'\tdata 7\n' span_id:2582) 
          (Token id:Id.Lit_Chars val:'\tsecond\n' span_id:2583) (Token id:Id.Lit_Chars val:'\tfrom :2\n' span_id:2584) 
          (Token id:Id.Lit_Chars val:'\tM 160000 $SUBLAST sub\n' span_id:2585) (Token id:Id.Lit_Chars val:'\n' span_id:2586) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2587) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2588) (Token id:Id.Lit_Chars val:'\tgit branch -D sub &&\n' span_id:2589) 
          (Token id:Id.Lit_Chars val:'\tgit gc &&\n' span_id:2590) (Token id:Id.Lit_Chars val:'\tgit prune &&\n' span_id:2591) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:2592) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse --verify subuse2) = $(git rev-parse --verify subuse1)\n'
            span_id: 2593
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'P: fail on inline gitlink' span_id:2600))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2604) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:2605) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2606) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/subuse3\n' span_id:2607) (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:2608) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2609
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2610) 
          (Token id:Id.Lit_Chars val:'\tcorrupt\n' span_id:2611) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2612) (Token id:Id.Lit_Chars val:'\n' span_id:2613) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/subuse2\n' span_id:2614) (Token id:Id.Lit_Chars val:'\tM 160000 inline sub\n' span_id:2615) 
          (Token id:Id.Lit_Chars val:'\tdata <<DATA\n' span_id:2616) (Token id:Id.Lit_Chars val:'\t$SUBPREV\n' span_id:2617) 
          (Token id:Id.Lit_Chars val:'\tDATA\n' span_id:2618) (Token id:Id.Lit_Chars val:'\n' span_id:2619) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2620) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2621) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import <input\n' span_id:2622)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'P: fail on blob mark in gitlink' span_id:2629))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2633) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:2634) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2635) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:2636) (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:2637) 
          (Token id:Id.Lit_Chars val:'\tdata <<DATA\n' span_id:2638) (Token id:Id.Lit_Chars val:'\t$SUBPREV\n' span_id:2639) 
          (Token id:Id.Lit_Chars val:'\tDATA\n' span_id:2640) (Token id:Id.Lit_Chars val:'\n' span_id:2641) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/subuse3\n' span_id:2642) (Token id:Id.Lit_Chars val:'\tmark :2\n' span_id:2643) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2644
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2645) 
          (Token id:Id.Lit_Chars val:'\tcorrupt\n' span_id:2646) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2647) (Token id:Id.Lit_Chars val:'\n' span_id:2648) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/subuse2\n' span_id:2649) (Token id:Id.Lit_Chars val:'\tM 160000 :1 sub\n' span_id:2650) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2651) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2652) (Token id:Id.Lit_Chars val:'\n' span_id:2653) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <input\n'
            span_id: 2654
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Q: commit notes' span_id:2671))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2675) 
          (Token
            id: Id.Lit_Chars
            val: '\tnote1_data="The first note for the first commit" &&\n'
            span_id: 2676
          ) (Token id:Id.Lit_Chars val:'\tnote2_data="The first note for the second commit" &&\n' span_id:2677) 
          (Token
            id: Id.Lit_Chars
            val: '\tnote3_data="The first note for the third commit" &&\n'
            span_id: 2678
          ) (Token id:Id.Lit_Chars val:'\tnote1b_data="The second note for the first commit" &&\n' span_id:2679) 
          (Token
            id: Id.Lit_Chars
            val: '\tnote1c_data="The third note for the first commit" &&\n'
            span_id: 2680
          ) (Token id:Id.Lit_Chars val:'\tnote2b_data="The second note for the second commit" &&\n' span_id:2681) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2682) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:2683) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:2684) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:2685) 
          (Token id:Id.Lit_Chars val:'\tmark :2\n' span_id:2686) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2687) 
          (Token id:Id.Lit_Chars val:'\t$file2_data\n' span_id:2688) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2689) (Token id:Id.Lit_Chars val:'\n' span_id:2690) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/notes-test\n' span_id:2691) (Token id:Id.Lit_Chars val:'\tmark :3\n' span_id:2692) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2693
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2694) 
          (Token id:Id.Lit_Chars val:'\tfirst (:3)\n' span_id:2695) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2696) (Token id:Id.Lit_Chars val:'\n' span_id:2697) 
          (Token id:Id.Lit_Chars val:'\tM 644 :2 file2\n' span_id:2698) (Token id:Id.Lit_Chars val:'\n' span_id:2699) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:2700) 
          (Token id:Id.Lit_Chars val:'\tmark :4\n' span_id:2701) (Token id:Id.Lit_Chars val:'\tdata $file4_len\n' span_id:2702) 
          (Token id:Id.Lit_Chars val:'\t$file4_data\n' span_id:2703) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/notes-test\n' span_id:2704) 
          (Token id:Id.Lit_Chars val:'\tmark :5\n' span_id:2705) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2706
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2707) 
          (Token id:Id.Lit_Chars val:'\tsecond (:5)\n' span_id:2708) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2709) (Token id:Id.Lit_Chars val:'\n' span_id:2710) 
          (Token id:Id.Lit_Chars val:'\tM 644 :4 file4\n' span_id:2711) (Token id:Id.Lit_Chars val:'\n' span_id:2712) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/notes-test\n' span_id:2713) (Token id:Id.Lit_Chars val:'\tmark :6\n' span_id:2714) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2715
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2716) 
          (Token id:Id.Lit_Chars val:'\tthird (:6)\n' span_id:2717) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2718) (Token id:Id.Lit_Chars val:'\n' span_id:2719) 
          (Token id:Id.Lit_Chars val:'\tM 644 inline file5\n' span_id:2720) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2721) 
          (Token id:Id.Lit_Chars val:'\t$file5_data\n' span_id:2722) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2723) (Token id:Id.Lit_Chars val:'\n' span_id:2724) 
          (Token id:Id.Lit_Chars val:'\tM 755 inline file6\n' span_id:2725) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2726) 
          (Token id:Id.Lit_Chars val:'\t$file6_data\n' span_id:2727) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2728) (Token id:Id.Lit_Chars val:'\n' span_id:2729) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:2730) (Token id:Id.Lit_Chars val:'\tmark :7\n' span_id:2731) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2732) (Token id:Id.Lit_Chars val:'\t$note1_data\n' span_id:2733) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2734) (Token id:Id.Lit_Chars val:'\n' span_id:2735) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:2736) 
          (Token id:Id.Lit_Chars val:'\tmark :8\n' span_id:2737) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2738) 
          (Token id:Id.Lit_Chars val:'\t$note2_data\n' span_id:2739) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2740) (Token id:Id.Lit_Chars val:'\n' span_id:2741) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/notes/foobar\n' span_id:2742) (Token id:Id.Lit_Chars val:'\tmark :9\n' span_id:2743) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2744
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2745) 
          (Token id:Id.Lit_Chars val:'\tnotes (:9)\n' span_id:2746) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2747) (Token id:Id.Lit_Chars val:'\n' span_id:2748) 
          (Token id:Id.Lit_Chars val:'\tN :7 :3\n' span_id:2749) (Token id:Id.Lit_Chars val:'\tN :8 :5\n' span_id:2750) 
          (Token id:Id.Lit_Chars val:'\tN inline :6\n' span_id:2751) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2752) 
          (Token id:Id.Lit_Chars val:'\t$note3_data\n' span_id:2753) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2754) (Token id:Id.Lit_Chars val:'\n' span_id:2755) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/notes/foobar\n' span_id:2756) (Token id:Id.Lit_Chars val:'\tmark :10\n' span_id:2757) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2758
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2759) 
          (Token id:Id.Lit_Chars val:'\tnotes (:10)\n' span_id:2760) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2761) (Token id:Id.Lit_Chars val:'\n' span_id:2762) 
          (Token id:Id.Lit_Chars val:'\tN inline :3\n' span_id:2763) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2764) 
          (Token id:Id.Lit_Chars val:'\t$note1b_data\n' span_id:2765) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2766) (Token id:Id.Lit_Chars val:'\n' span_id:2767) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/notes/foobar2\n' span_id:2768) (Token id:Id.Lit_Chars val:'\tmark :11\n' span_id:2769) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2770
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2771) 
          (Token id:Id.Lit_Chars val:'\tnotes (:11)\n' span_id:2772) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2773) (Token id:Id.Lit_Chars val:'\n' span_id:2774) 
          (Token id:Id.Lit_Chars val:'\tN inline :3\n' span_id:2775) (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2776) 
          (Token id:Id.Lit_Chars val:'\t$note1c_data\n' span_id:2777) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2778) (Token id:Id.Lit_Chars val:'\n' span_id:2779) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/notes/foobar\n' span_id:2780) (Token id:Id.Lit_Chars val:'\tmark :12\n' span_id:2781) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2782
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:2783) 
          (Token id:Id.Lit_Chars val:'\tnotes (:12)\n' span_id:2784) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:2785) (Token id:Id.Lit_Chars val:'\n' span_id:2786) 
          (Token id:Id.Lit_Chars val:'\tdeleteall\n' span_id:2787) (Token id:Id.Lit_Chars val:'\tN inline :5\n' span_id:2788) 
          (Token id:Id.Lit_Chars val:'\tdata <<EOF\n' span_id:2789) (Token id:Id.Lit_Chars val:'\t$note2b_data\n' span_id:2790) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2791) (Token id:Id.Lit_Chars val:'\n' span_id:2792) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:2793) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2794) (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:2795) 
          (Token id:Id.Lit_Chars val:'\tgit whatchanged notes-test\n' span_id:2796)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Q: verify pack' span_id:2803))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2807) 
          (Token id:Id.Lit_Chars val:'\tverify_packs\n' span_id:2808)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Q: verify first commit' span_id:2815))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2819) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit1=$(git rev-parse notes-test~2) &&\n'
            span_id: 2820
          ) (Token id:Id.Lit_Chars val:'\tcommit2=$(git rev-parse notes-test^) &&\n' span_id:2821) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit3=$(git rev-parse notes-test) &&\n'
            span_id: 2822
          ) (Token id:Id.Lit_Chars val:'\n' span_id:2823) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:2824) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2825
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2826
          ) (Token id:Id.Lit_Chars val:'\n' span_id:2827) 
          (Token id:Id.Lit_Chars val:'\tfirst (:3)\n' span_id:2828) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2829) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit notes-test~2 | sed 1d >actual &&\n'
            span_id: 2830
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2831)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Q: verify second commit' span_id:2838))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2842) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:2843) (Token id:Id.Lit_Chars val:'\tparent $commit1\n' span_id:2844) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2845
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2846
          ) (Token id:Id.Lit_Chars val:'\n' span_id:2847) 
          (Token id:Id.Lit_Chars val:'\tsecond (:5)\n' span_id:2848) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2849) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit notes-test^ | sed 1d >actual &&\n'
            span_id: 2850
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2851)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Q: verify third commit' span_id:2858))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2862) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:2863) (Token id:Id.Lit_Chars val:'\tparent $commit2\n' span_id:2864) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2865
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2866
          ) (Token id:Id.Lit_Chars val:'\n' span_id:2867) 
          (Token id:Id.Lit_Chars val:'\tthird (:6)\n' span_id:2868) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2869) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit notes-test | sed 1d >actual &&\n'
            span_id: 2870
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2871)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify first notes commit' span_id:2878))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2882) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:2883) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2884
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2885
          ) (Token id:Id.Lit_Chars val:'\n' span_id:2886) 
          (Token id:Id.Lit_Chars val:'\tnotes (:9)\n' span_id:2887) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2888) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit refs/notes/foobar~2 | sed 1d >actual &&\n'
            span_id: 2889
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2890)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify first notes tree' span_id:2897))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2901) 
          (Token id:Id.Lit_Chars val:'\tcat >expect.unsorted <<-EOF &&\n' span_id:2902) (Token id:Id.Lit_Chars val:'\t100644 blob $commit1\n' span_id:2903) 
          (Token id:Id.Lit_Chars val:'\t100644 blob $commit2\n' span_id:2904) (Token id:Id.Lit_Chars val:'\t100644 blob $commit3\n' span_id:2905) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2906) (Token id:Id.Lit_Chars val:'\tcat expect.unsorted | sort >expect &&\n' span_id:2907) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit cat-file -p refs/notes/foobar~2^{tree} | sed "s/ [0-9a-f]*\t/ /" >actual &&\n'
            span_id: 2908
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2909)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify first note for first commit' span_id:2916))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2920) 
          (Token id:Id.Lit_Chars val:'\techo "$note1_data" >expect &&\n' span_id:2921) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob refs/notes/foobar~2:$commit1 >actual &&\n'
            span_id: 2922
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2923)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify first note for second commit' span_id:2930))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2934) 
          (Token id:Id.Lit_Chars val:'\techo "$note2_data" >expect &&\n' span_id:2935) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob refs/notes/foobar~2:$commit2 >actual &&\n'
            span_id: 2936
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2937)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify first note for third commit' span_id:2944))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2948) 
          (Token id:Id.Lit_Chars val:'\techo "$note3_data" >expect &&\n' span_id:2949) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob refs/notes/foobar~2:$commit3 >actual &&\n'
            span_id: 2950
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2951)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify second notes commit' span_id:2958))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2962) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:2963) (Token id:Id.Lit_Chars val:'\tparent $(git rev-parse --verify refs/notes/foobar~2)\n' span_id:2964) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2965
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 2966
          ) (Token id:Id.Lit_Chars val:'\n' span_id:2967) 
          (Token id:Id.Lit_Chars val:'\tnotes (:10)\n' span_id:2968) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2969) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit refs/notes/foobar^ | sed 1d >actual &&\n'
            span_id: 2970
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2971)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify second notes tree' span_id:2978))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2982) 
          (Token id:Id.Lit_Chars val:'\tcat >expect.unsorted <<-EOF &&\n' span_id:2983) (Token id:Id.Lit_Chars val:'\t100644 blob $commit1\n' span_id:2984) 
          (Token id:Id.Lit_Chars val:'\t100644 blob $commit2\n' span_id:2985) (Token id:Id.Lit_Chars val:'\t100644 blob $commit3\n' span_id:2986) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2987) (Token id:Id.Lit_Chars val:'\tcat expect.unsorted | sort >expect &&\n' span_id:2988) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit cat-file -p refs/notes/foobar^^{tree} | sed "s/ [0-9a-f]*\t/ /" >actual &&\n'
            span_id: 2989
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2990)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify second note for first commit' span_id:2997))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3001) 
          (Token id:Id.Lit_Chars val:'\techo "$note1b_data" >expect &&\n' span_id:3002) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob refs/notes/foobar^:$commit1 >actual &&\n'
            span_id: 3003
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3004)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify first note for second commit' span_id:3011))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3015) 
          (Token id:Id.Lit_Chars val:'\techo "$note2_data" >expect &&\n' span_id:3016) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob refs/notes/foobar^:$commit2 >actual &&\n'
            span_id: 3017
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3018)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify first note for third commit' span_id:3025))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3029) 
          (Token id:Id.Lit_Chars val:'\techo "$note3_data" >expect &&\n' span_id:3030) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob refs/notes/foobar^:$commit3 >actual &&\n'
            span_id: 3031
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3032)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify third notes commit' span_id:3039))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3043) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:3044) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 3045
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 3046
          ) (Token id:Id.Lit_Chars val:'\n' span_id:3047) 
          (Token id:Id.Lit_Chars val:'\tnotes (:11)\n' span_id:3048) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3049) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit refs/notes/foobar2 | sed 1d >actual &&\n'
            span_id: 3050
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3051)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify third notes tree' span_id:3058))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3062) 
          (Token id:Id.Lit_Chars val:'\tcat >expect.unsorted <<-EOF &&\n' span_id:3063) (Token id:Id.Lit_Chars val:'\t100644 blob $commit1\n' span_id:3064) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3065) (Token id:Id.Lit_Chars val:'\tcat expect.unsorted | sort >expect &&\n' span_id:3066) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit cat-file -p refs/notes/foobar2^{tree} | sed "s/ [0-9a-f]*\t/ /" >actual &&\n'
            span_id: 3067
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3068)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify third note for first commit' span_id:3075))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3079) 
          (Token id:Id.Lit_Chars val:'\techo "$note1c_data" >expect &&\n' span_id:3080) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob refs/notes/foobar2:$commit1 >actual &&\n'
            span_id: 3081
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3082)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify fourth notes commit' span_id:3089))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3093) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:3094) (Token id:Id.Lit_Chars val:'\tparent $(git rev-parse --verify refs/notes/foobar^)\n' span_id:3095) 
          (Token
            id: Id.Lit_Chars
            val: '\tauthor $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 3096
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 3097
          ) (Token id:Id.Lit_Chars val:'\n' span_id:3098) 
          (Token id:Id.Lit_Chars val:'\tnotes (:12)\n' span_id:3099) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3100) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit refs/notes/foobar | sed 1d >actual &&\n'
            span_id: 3101
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3102)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify fourth notes tree' span_id:3109))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3113) 
          (Token id:Id.Lit_Chars val:'\tcat >expect.unsorted <<-EOF &&\n' span_id:3114) (Token id:Id.Lit_Chars val:'\t100644 blob $commit2\n' span_id:3115) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3116) (Token id:Id.Lit_Chars val:'\tcat expect.unsorted | sort >expect &&\n' span_id:3117) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file -p refs/notes/foobar^{tree} | sed "s/ [0-9a-f]*\t/ /" >actual &&\n'
            span_id: 3118
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3119)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: verify second note for second commit' span_id:3126))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3130) 
          (Token id:Id.Lit_Chars val:'\techo "$note2b_data" >expect &&\n' span_id:3131) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob refs/notes/foobar:$commit2 >actual &&\n'
            span_id: 3132
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3133)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Q: deny note on empty branch' span_id:3140))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3144) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3145) (Token id:Id.Lit_Chars val:'\treset refs/heads/Q0\n' span_id:3146) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3147) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/note-Q0\n' span_id:3148) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 3149
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:3150) 
          (Token id:Id.Lit_Chars val:'\tNote for an empty branch.\n' span_id:3151) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:3152) (Token id:Id.Lit_Chars val:'\n' span_id:3153) 
          (Token id:Id.Lit_Chars val:'\tN inline refs/heads/Q0\n' span_id:3154) (Token id:Id.Lit_Chars val:'\tdata <<NOTE\n' span_id:3155) 
          (Token id:Id.Lit_Chars val:'\tsome note\n' span_id:3156) (Token id:Id.Lit_Chars val:'\tNOTE\n' span_id:3157) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3158) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <input\n'
            span_id: 3159
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: abort on unsupported feature' span_id:3175))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3179) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3180) (Token id:Id.Lit_Chars val:'\tfeature no-such-feature-exists\n' span_id:3181) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3182) (Token id:Id.Lit_Chars val:'\n' span_id:3183) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <input\n'
            span_id: 3184
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: supported feature is accepted' span_id:3191))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3195) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3196) (Token id:Id.Lit_Chars val:'\tfeature date-format=now\n' span_id:3197) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3198) (Token id:Id.Lit_Chars val:'\n' span_id:3199) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input\n' span_id:3200)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: abort on receiving feature after data command'
            span_id: 3207
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3211) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3212) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3213) 
          (Token id:Id.Lit_Chars val:'\tdata 3\n' span_id:3214) (Token id:Id.Lit_Chars val:'\thi\n' span_id:3215) 
          (Token id:Id.Lit_Chars val:'\tfeature date-format=now\n' span_id:3216) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3217) (Token id:Id.Lit_Chars val:'\n' span_id:3218) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <input\n'
            span_id: 3219
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: only one import-marks feature allowed per stream'
            span_id: 3226
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3230) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3231) (Token id:Id.Lit_Chars val:'\tfeature import-marks=git.marks\n' span_id:3232) 
          (Token id:Id.Lit_Chars val:'\tfeature import-marks=git2.marks\n' span_id:3233) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3234) (Token id:Id.Lit_Chars val:'\n' span_id:3235) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <input\n'
            span_id: 3236
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: export-marks feature results in a marks file being created'
            span_id: 3243
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3247) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3248) (Token id:Id.Lit_Chars val:'\tfeature export-marks=git.marks\n' span_id:3249) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3250) (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:3251) 
          (Token id:Id.Lit_Chars val:'\tdata 3\n' span_id:3252) (Token id:Id.Lit_Chars val:'\thi\n' span_id:3253) (Token id:Id.Lit_Chars val:'\n' span_id:3254) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3255) (Token id:Id.Lit_Chars val:'\n' span_id:3256) 
          (Token id:Id.Lit_Chars val:'\tcat input | git fast-import &&\n' span_id:3257) (Token id:Id.Lit_Chars val:'\tgrep :1 git.marks\n' span_id:3258)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: export-marks options can be overridden by commandline options'
            span_id: 3265
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3269) 
          (Token
            id: Id.Lit_Chars
            val: '\tcat input | git fast-import --export-marks=other.marks &&\n'
            span_id: 3270
          ) (Token id:Id.Lit_Chars val:'\tgrep :1 other.marks\n' span_id:3271)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: catch typo in marks file name' span_id:3278))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3282) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=nonexistent.marks </dev/null &&\n'
            span_id: 3283
          ) (Token id:Id.Lit_Chars val:'\techo "feature import-marks=nonexistent.marks" |\n' span_id:3284) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import\n' span_id:3285)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: import and output marks can be the same file'
            span_id: 3292
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3296) 
          (Token id:Id.Lit_Chars val:'\trm -f io.marks &&\n' span_id:3297) (Token id:Id.Lit_Chars val:'\tblob=$(echo hi | git hash-object --stdin) &&\n' span_id:3298) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:3299) (Token id:Id.Lit_Chars val:'\t:1 $blob\n' span_id:3300) 
          (Token id:Id.Lit_Chars val:'\t:2 $blob\n' span_id:3301) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3302) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --export-marks=io.marks <<-\\EOF &&\n'
            span_id: 3303
          ) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3304) 
          (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:3305) (Token id:Id.Lit_Chars val:'\tdata 3\n' span_id:3306) 
          (Token id:Id.Lit_Chars val:'\thi\n' span_id:3307) (Token id:Id.Lit_Chars val:'\n' span_id:3308) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3309) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --import-marks=io.marks --export-marks=io.marks <<-\\EOF &&\n'
            span_id: 3310
          ) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3311) 
          (Token id:Id.Lit_Chars val:'\tmark :2\n' span_id:3312) (Token id:Id.Lit_Chars val:'\tdata 3\n' span_id:3313) 
          (Token id:Id.Lit_Chars val:'\thi\n' span_id:3314) (Token id:Id.Lit_Chars val:'\n' span_id:3315) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3316) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect io.marks\n' span_id:3317)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: --import-marks=foo --output-marks=foo to create foo fails'
            span_id: 3324
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3328) 
          (Token id:Id.Lit_Chars val:'\trm -f io.marks &&\n' span_id:3329) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_must_fail git fast-import --import-marks=io.marks --export-marks=io.marks <<-\\EOF\n'
            span_id: 3330
          ) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3331) 
          (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:3332) (Token id:Id.Lit_Chars val:'\tdata 3\n' span_id:3333) 
          (Token id:Id.Lit_Chars val:'\thi\n' span_id:3334) (Token id:Id.Lit_Chars val:'\n' span_id:3335) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3336)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: --import-marks-if-exists' span_id:3343))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3347) 
          (Token id:Id.Lit_Chars val:'\trm -f io.marks &&\n' span_id:3348) (Token id:Id.Lit_Chars val:'\tblob=$(echo hi | git hash-object --stdin) &&\n' span_id:3349) 
          (Token id:Id.Lit_Chars val:'\techo ":1 $blob" >expect &&\n' span_id:3350) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit fast-import --import-marks-if-exists=io.marks --export-marks=io.marks <<-\\EOF &&\n'
            span_id: 3351
          ) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3352) 
          (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:3353) (Token id:Id.Lit_Chars val:'\tdata 3\n' span_id:3354) 
          (Token id:Id.Lit_Chars val:'\thi\n' span_id:3355) (Token id:Id.Lit_Chars val:'\n' span_id:3356) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3357) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect io.marks\n' span_id:3358)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: feature import-marks-if-exists' span_id:3365))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3369) 
          (Token id:Id.Lit_Chars val:'\trm -f io.marks &&\n' span_id:3370) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:3371) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3372) (Token id:Id.Lit_Chars val:'\tgit fast-import --export-marks=io.marks <<-\\EOF &&\n' span_id:3373) 
          (Token
            id: Id.Lit_Chars
            val: '\tfeature import-marks-if-exists=not_io.marks\n'
            span_id: 3374
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3375) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect io.marks &&\n' span_id:3376) (Token id:Id.Lit_Chars val:'\n' span_id:3377) 
          (Token
            id: Id.Lit_Chars
            val: '\tblob=$(echo hi | git hash-object --stdin) &&\n'
            span_id: 3378
          ) (Token id:Id.Lit_Chars val:'\n' span_id:3379) 
          (Token id:Id.Lit_Chars val:'\techo ":1 $blob" >io.marks &&\n' span_id:3380) (Token id:Id.Lit_Chars val:'\techo ":1 $blob" >expect &&\n' span_id:3381) 
          (Token id:Id.Lit_Chars val:'\techo ":2 $blob" >>expect &&\n' span_id:3382) (Token id:Id.Lit_Chars val:'\n' span_id:3383) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --export-marks=io.marks <<-\\EOF &&\n'
            span_id: 3384
          ) (Token id:Id.Lit_Chars val:'\tfeature import-marks-if-exists=io.marks\n' span_id:3385) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3386) (Token id:Id.Lit_Chars val:'\tmark :2\n' span_id:3387) 
          (Token id:Id.Lit_Chars val:'\tdata 3\n' span_id:3388) (Token id:Id.Lit_Chars val:'\thi\n' span_id:3389) (Token id:Id.Lit_Chars val:'\n' span_id:3390) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3391) (Token id:Id.Lit_Chars val:'\ttest_cmp expect io.marks &&\n' span_id:3392) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3393) (Token id:Id.Lit_Chars val:'\techo ":3 $blob" >>expect &&\n' span_id:3394) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3395) (Token id:Id.Lit_Chars val:'\tgit fast-import --import-marks=io.marks \\\n' span_id:3396) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\t--export-marks=io.marks <<-\\EOF &&\n'
            span_id: 3397
          ) (Token id:Id.Lit_Chars val:'\tfeature import-marks-if-exists=not_io.marks\n' span_id:3398) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3399) (Token id:Id.Lit_Chars val:'\tmark :3\n' span_id:3400) 
          (Token id:Id.Lit_Chars val:'\tdata 3\n' span_id:3401) (Token id:Id.Lit_Chars val:'\thi\n' span_id:3402) (Token id:Id.Lit_Chars val:'\n' span_id:3403) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3404) (Token id:Id.Lit_Chars val:'\ttest_cmp expect io.marks &&\n' span_id:3405) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3406) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:3407) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3408) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --import-marks-if-exists=not_io.marks \\\n'
            span_id: 3409
          ) (Token id:Id.Lit_Chars val:'\t\t\t--export-marks=io.marks <<-\\EOF &&\n' span_id:3410) 
          (Token
            id: Id.Lit_Chars
            val: '\tfeature import-marks-if-exists=io.marks\n'
            span_id: 3411
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3412) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect io.marks\n' span_id:3413)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: import to output marks works without any content'
            span_id: 3420
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3424) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3425) (Token id:Id.Lit_Chars val:'\tfeature import-marks=marks.out\n' span_id:3426) 
          (Token id:Id.Lit_Chars val:'\tfeature export-marks=marks.new\n' span_id:3427) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3428) (Token id:Id.Lit_Chars val:'\n' span_id:3429) 
          (Token id:Id.Lit_Chars val:'\tcat input | git fast-import &&\n' span_id:3430) (Token id:Id.Lit_Chars val:'\ttest_cmp marks.out marks.new\n' span_id:3431)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: import marks prefers commandline marks file over the stream'
            span_id: 3438
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3442) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3443) (Token id:Id.Lit_Chars val:'\tfeature import-marks=nonexistent.marks\n' span_id:3444) 
          (Token id:Id.Lit_Chars val:'\tfeature export-marks=marks.new\n' span_id:3445) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3446) (Token id:Id.Lit_Chars val:'\n' span_id:3447) 
          (Token
            id: Id.Lit_Chars
            val: '\tcat input | git fast-import --import-marks=marks.out &&\n'
            span_id: 3448
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp marks.out marks.new\n' span_id:3449)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: multiple --import-marks= should be honoured' span_id:3457))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3461) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3462) (Token id:Id.Lit_Chars val:'\tfeature import-marks=nonexistent.marks\n' span_id:3463) 
          (Token
            id: Id.Lit_Chars
            val: '\tfeature export-marks=combined.marks\n'
            span_id: 3464
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3465) (Token id:Id.Lit_Chars val:'\n' span_id:3466) 
          (Token id:Id.Lit_Chars val:'\thead -n2 marks.out > one.marks &&\n' span_id:3467) (Token id:Id.Lit_Chars val:'\ttail -n +3 marks.out > two.marks &&\n' span_id:3468) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --import-marks=one.marks --import-marks=two.marks <input &&\n'
            span_id: 3469
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp marks.out combined.marks\n' span_id:3470)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: feature relative-marks should be honoured' span_id:3477))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3481) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3482) (Token id:Id.Lit_Chars val:'\tfeature relative-marks\n' span_id:3483) 
          (Token id:Id.Lit_Chars val:'\tfeature import-marks=relative.in\n' span_id:3484) (Token id:Id.Lit_Chars val:'\tfeature export-marks=relative.out\n' span_id:3485) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3486) (Token id:Id.Lit_Chars val:'\n' span_id:3487) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p .git/info/fast-import/ &&\n' span_id:3488) (Token id:Id.Lit_Chars val:'\tcp marks.new .git/info/fast-import/relative.in &&\n' span_id:3489) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:3490) (Token id:Id.Lit_Chars val:'\ttest_cmp marks.new .git/info/fast-import/relative.out\n' span_id:3491)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: feature no-relative-marks should be honoured'
            span_id: 3498
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3502) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3503) (Token id:Id.Lit_Chars val:'\tfeature relative-marks\n' span_id:3504) 
          (Token id:Id.Lit_Chars val:'\tfeature import-marks=relative.in\n' span_id:3505) (Token id:Id.Lit_Chars val:'\tfeature no-relative-marks\n' span_id:3506) 
          (Token
            id: Id.Lit_Chars
            val: '\tfeature export-marks=non-relative.out\n'
            span_id: 3507
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3508) (Token id:Id.Lit_Chars val:'\n' span_id:3509) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input &&\n' span_id:3510) (Token id:Id.Lit_Chars val:'\ttest_cmp marks.new non-relative.out\n' span_id:3511)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'R: feature ls supported' span_id:3518))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3522) 
          (Token id:Id.Lit_Chars val:'\techo "feature ls" |\n' span_id:3523) (Token id:Id.Lit_Chars val:'\tgit fast-import\n' span_id:3524)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: feature cat-blob supported' span_id:3531))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3535) 
          (Token id:Id.Lit_Chars val:'\techo "feature cat-blob" |\n' span_id:3536) (Token id:Id.Lit_Chars val:'\tgit fast-import\n' span_id:3537)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: cat-blob-fd must be a nonnegative integer' span_id:3544))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3548) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --cat-blob-fd=-1 </dev/null\n'
            span_id: 3549
          )
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: print old blob' span_id:3559))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3563) 
          (Token
            id: Id.Lit_Chars
            val: '\tblob=$(echo "yes it can" | git hash-object -w --stdin) &&\n'
            span_id: 3564
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:3565) 
          (Token id:Id.Lit_Chars val:'\t${blob} blob 11\n' span_id:3566) (Token id:Id.Lit_Chars val:'\tyes it can\n' span_id:3567) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3568) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3569) 
          (Token id:Id.Lit_Chars val:'\techo "cat-blob $blob" |\n' span_id:3570) (Token id:Id.Lit_Chars val:'\tgit fast-import --cat-blob-fd=6 6>actual &&\n' span_id:3571) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3572)
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: in-stream cat-blob-fd not respected' span_id:3582))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3586) 
          (Token id:Id.Lit_Chars val:'\techo hello >greeting &&\n' span_id:3587) (Token id:Id.Lit_Chars val:'\tblob=$(git hash-object -w greeting) &&\n' span_id:3588) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:3589) (Token id:Id.Lit_Chars val:'\t${blob} blob 6\n' span_id:3590) 
          (Token id:Id.Lit_Chars val:'\thello\n' span_id:3591) (Token id:Id.Lit_Chars val:'\n' span_id:3592) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3593) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --cat-blob-fd=3 3>actual.3 >actual.1 <<-EOF &&\n'
            span_id: 3594
          ) (Token id:Id.Lit_Chars val:'\tcat-blob $blob\n' span_id:3595) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3596) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.3 &&\n' span_id:3597) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty actual.1 &&\n' span_id:3598) (Token id:Id.Lit_Chars val:'\tgit fast-import 3>actual.3 >actual.1 <<-EOF &&\n' span_id:3599) 
          (Token id:Id.Lit_Chars val:'\toption cat-blob-fd=3\n' span_id:3600) (Token id:Id.Lit_Chars val:'\tcat-blob $blob\n' span_id:3601) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3602) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty actual.3 &&\n' span_id:3603) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.1\n' span_id:3604)
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: print mark for new blob' span_id:3614))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3618) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "effluentish" | git hash-object --stdin >expect &&\n'
            span_id: 3619
          ) (Token id:Id.Lit_Chars val:'\tgit fast-import --cat-blob-fd=6 6>actual <<-\\EOF &&\n' span_id:3620) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3621) (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:3622) 
          (Token id:Id.Lit_Chars val:'\tdata <<BLOB_END\n' span_id:3623) (Token id:Id.Lit_Chars val:'\teffluentish\n' span_id:3624) 
          (Token id:Id.Lit_Chars val:'\tBLOB_END\n' span_id:3625) (Token id:Id.Lit_Chars val:'\tget-mark :1\n' span_id:3626) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3627) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3628)
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: print new blob' span_id:3638))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3642) 
          (Token
            id: Id.Lit_Chars
            val: '\tblob=$(echo "yep yep yep" | git hash-object --stdin) &&\n'
            span_id: 3643
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:3644) 
          (Token id:Id.Lit_Chars val:'\t${blob} blob 12\n' span_id:3645) (Token id:Id.Lit_Chars val:'\tyep yep yep\n' span_id:3646) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3647) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3648) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --cat-blob-fd=6 6>actual <<-\\EOF &&\n'
            span_id: 3649
          ) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3650) 
          (Token id:Id.Lit_Chars val:'\tmark :1\n' span_id:3651) (Token id:Id.Lit_Chars val:'\tdata <<BLOB_END\n' span_id:3652) 
          (Token id:Id.Lit_Chars val:'\tyep yep yep\n' span_id:3653) (Token id:Id.Lit_Chars val:'\tBLOB_END\n' span_id:3654) 
          (Token id:Id.Lit_Chars val:'\tcat-blob :1\n' span_id:3655) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3656) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3657)
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: print new blob by sha1' span_id:3667))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3671) 
          (Token
            id: Id.Lit_Chars
            val: '\tblob=$(echo "a new blob named by sha1" | git hash-object --stdin) &&\n'
            span_id: 3672
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:3673) 
          (Token id:Id.Lit_Chars val:'\t${blob} blob 25\n' span_id:3674) (Token id:Id.Lit_Chars val:'\ta new blob named by sha1\n' span_id:3675) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3676) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3677) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --cat-blob-fd=6 6>actual <<-EOF &&\n'
            span_id: 3678
          ) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3679) 
          (Token id:Id.Lit_Chars val:'\tdata <<BLOB_END\n' span_id:3680) (Token id:Id.Lit_Chars val:'\ta new blob named by sha1\n' span_id:3681) 
          (Token id:Id.Lit_Chars val:'\tBLOB_END\n' span_id:3682) (Token id:Id.Lit_Chars val:'\tcat-blob $blob\n' span_id:3683) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3684) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3685)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup: big file' span_id:3692))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3696) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:3697) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "the quick brown fox jumps over the lazy dog" >big &&\n'
            span_id: 3698
          ) (Token id:Id.Lit_Chars val:'\t\tfor i in 1 2 3\n' span_id:3699) 
          (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:3700) (Token id:Id.Lit_Chars val:'\t\t\tcat big big big big >bigger &&\n' span_id:3701) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tcat bigger bigger bigger bigger >big ||\n'
            span_id: 3702
          ) (Token id:Id.Lit_Chars val:'\t\t\texit\n' span_id:3703) 
          (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:3704) (Token id:Id.Lit_Chars val:'\t)\n' span_id:3705)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: print two blobs to stdout' span_id:3712))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3716) 
          (Token id:Id.Lit_Chars val:'\tblob1=$(git hash-object big) &&\n' span_id:3717) (Token id:Id.Lit_Chars val:'\tblob1_len=$(wc -c <big) &&\n' span_id:3718) 
          (Token
            id: Id.Lit_Chars
            val: '\tblob2=$(echo hello | git hash-object --stdin) &&\n'
            span_id: 3719
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:3720) 
          (Token id:Id.Lit_Chars val:'\t\techo ${blob1} blob $blob1_len &&\n' span_id:3721) (Token id:Id.Lit_Chars val:'\t\tcat big &&\n' span_id:3722) 
          (Token id:Id.Lit_Chars val:'\t\tcat <<-EOF\n' span_id:3723) (Token id:Id.Lit_Chars val:'\n' span_id:3724) 
          (Token id:Id.Lit_Chars val:'\t\t${blob2} blob 6\n' span_id:3725) (Token id:Id.Lit_Chars val:'\t\thello\n' span_id:3726) (Token id:Id.Lit_Chars val:'\n' span_id:3727) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:3728) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:3729) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:3730) (Token id:Id.Lit_Chars val:'\t\tcat <<-\\END_PART1 &&\n' span_id:3731) 
          (Token id:Id.Lit_Chars val:'\t\t\tblob\n' span_id:3732) (Token id:Id.Lit_Chars val:'\t\t\tmark :1\n' span_id:3733) 
          (Token id:Id.Lit_Chars val:'\t\t\tdata <<data_end\n' span_id:3734) (Token id:Id.Lit_Chars val:'\t\tEND_PART1\n' span_id:3735) 
          (Token id:Id.Lit_Chars val:'\t\tcat big &&\n' span_id:3736) (Token id:Id.Lit_Chars val:'\t\tcat <<-\\EOF\n' span_id:3737) 
          (Token id:Id.Lit_Chars val:'\t\t\tdata_end\n' span_id:3738) (Token id:Id.Lit_Chars val:'\t\t\tblob\n' span_id:3739) 
          (Token id:Id.Lit_Chars val:'\t\t\tmark :2\n' span_id:3740) (Token id:Id.Lit_Chars val:'\t\t\tdata <<data_end\n' span_id:3741) 
          (Token id:Id.Lit_Chars val:'\t\t\thello\n' span_id:3742) (Token id:Id.Lit_Chars val:'\t\t\tdata_end\n' span_id:3743) 
          (Token id:Id.Lit_Chars val:'\t\t\tcat-blob :1\n' span_id:3744) (Token id:Id.Lit_Chars val:'\t\t\tcat-blob :2\n' span_id:3745) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:3746) (Token id:Id.Lit_Chars val:'\t} |\n' span_id:3747) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import >actual &&\n' span_id:3748) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3749)
        )
      }
    )
    (C {(test_expect_success)} {(PIPE)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: copy using cat-file' span_id:3758))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3762) 
          (Token
            id: Id.Lit_Chars
            val: '\texpect_id=$(git hash-object big) &&\n'
            span_id: 3763
          ) (Token id:Id.Lit_Chars val:'\texpect_len=$(wc -c <big) &&\n' span_id:3764) 
          (Token
            id: Id.Lit_Chars
            val: '\techo $expect_id blob $expect_len >expect.response &&\n'
            span_id: 3765
          ) (Token id:Id.Lit_Chars val:'\n' span_id:3766) 
          (Token id:Id.Lit_Chars val:'\trm -f blobs &&\n' span_id:3767) (Token id:Id.Lit_Chars val:'\tcat >frontend <<-\\FRONTEND_END &&\n' span_id:3768) 
          (Token id:Id.Lit_Chars val:'\t#!/bin/sh\n' span_id:3769) (Token id:Id.Lit_Chars val:'\tFRONTEND_END\n' span_id:3770) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3771) (Token id:Id.Lit_Chars val:'\tmkfifo blobs &&\n' span_id:3772) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:3773) 
          (Token
            id: Id.Lit_Chars
            val: '\t\texport GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_COMMITTER_DATE &&\n'
            span_id: 3774
          ) (Token id:Id.Lit_Chars val:'\t\tcat <<-\\EOF &&\n' span_id:3775) 
          (Token id:Id.Lit_Chars val:'\t\tfeature cat-blob\n' span_id:3776) (Token id:Id.Lit_Chars val:'\t\tblob\n' span_id:3777) 
          (Token id:Id.Lit_Chars val:'\t\tmark :1\n' span_id:3778) (Token id:Id.Lit_Chars val:'\t\tdata <<BLOB\n' span_id:3779) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:3780) (Token id:Id.Lit_Chars val:'\t\tcat big &&\n' span_id:3781) 
          (Token id:Id.Lit_Chars val:'\t\tcat <<-\\EOF &&\n' span_id:3782) (Token id:Id.Lit_Chars val:'\t\tBLOB\n' span_id:3783) 
          (Token id:Id.Lit_Chars val:'\t\tcat-blob :1\n' span_id:3784) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:3785) (Token id:Id.Lit_Chars val:'\n' span_id:3786) 
          (Token id:Id.Lit_Chars val:'\t\tread blob_id type size <&3 &&\n' span_id:3787) (Token id:Id.Lit_Chars val:'\t\techo "$blob_id $type $size" >response &&\n' span_id:3788) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_copy_bytes $size >blob <&3 &&\n'
            span_id: 3789
          ) (Token id:Id.Lit_Chars val:'\t\tread newline <&3 &&\n' span_id:3790) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3791) (Token id:Id.Lit_Chars val:'\t\tcat <<-EOF &&\n' span_id:3792) 
          (Token id:Id.Lit_Chars val:'\t\tcommit refs/heads/copied\n' span_id:3793) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 3794
          ) (Token id:Id.Lit_Chars val:'\t\tdata <<COMMIT\n' span_id:3795) 
          (Token id:Id.Lit_Chars val:'\t\tcopy big file as file3\n' span_id:3796) (Token id:Id.Lit_Chars val:'\t\tCOMMIT\n' span_id:3797) 
          (Token id:Id.Lit_Chars val:'\t\tM 644 inline file3\n' span_id:3798) (Token id:Id.Lit_Chars val:'\t\tdata <<BLOB\n' span_id:3799) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:3800) (Token id:Id.Lit_Chars val:'\t\tcat blob &&\n' span_id:3801) 
          (Token id:Id.Lit_Chars val:'\t\techo BLOB\n' span_id:3802) (Token id:Id.Lit_Chars val:'\t) 3<blobs |\n' span_id:3803) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --cat-blob-fd=3 3>blobs &&\n'
            span_id: 3804
          ) (Token id:Id.Lit_Chars val:'\tgit show copied:file3 >actual &&\n' span_id:3805) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expect.response response &&\n'
            span_id: 3806
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp big actual\n' span_id:3807)
        )
      }
    )
    (C {(test_expect_success)} {(PIPE)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: print blob mid-commit' span_id:3816))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3820) 
          (Token id:Id.Lit_Chars val:'\trm -f blobs &&\n' span_id:3821) (Token id:Id.Lit_Chars val:'\techo "A blob from _before_ the commit." >expect &&\n' span_id:3822) 
          (Token id:Id.Lit_Chars val:'\tmkfifo blobs &&\n' span_id:3823) (Token id:Id.Lit_Chars val:'\t(\n' span_id:3824) 
          (Token id:Id.Lit_Chars val:'\t\texec 3<blobs &&\n' span_id:3825) (Token id:Id.Lit_Chars val:'\t\tcat <<-EOF &&\n' span_id:3826) 
          (Token id:Id.Lit_Chars val:'\t\tfeature cat-blob\n' span_id:3827) (Token id:Id.Lit_Chars val:'\t\tblob\n' span_id:3828) 
          (Token id:Id.Lit_Chars val:'\t\tmark :1\n' span_id:3829) (Token id:Id.Lit_Chars val:'\t\tdata <<BLOB\n' span_id:3830) 
          (Token id:Id.Lit_Chars val:'\t\tA blob from _before_ the commit.\n' span_id:3831) (Token id:Id.Lit_Chars val:'\t\tBLOB\n' span_id:3832) 
          (Token id:Id.Lit_Chars val:'\t\tcommit refs/heads/temporary\n' span_id:3833) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 3834
          ) (Token id:Id.Lit_Chars val:'\t\tdata <<COMMIT\n' span_id:3835) 
          (Token id:Id.Lit_Chars val:'\t\tEmpty commit\n' span_id:3836) (Token id:Id.Lit_Chars val:'\t\tCOMMIT\n' span_id:3837) 
          (Token id:Id.Lit_Chars val:'\t\tcat-blob :1\n' span_id:3838) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:3839) (Token id:Id.Lit_Chars val:'\n' span_id:3840) 
          (Token id:Id.Lit_Chars val:'\t\tread blob_id type size <&3 &&\n' span_id:3841) (Token id:Id.Lit_Chars val:'\t\ttest_copy_bytes $size >actual <&3 &&\n' span_id:3842) 
          (Token id:Id.Lit_Chars val:'\t\tread newline <&3 &&\n' span_id:3843) (Token id:Id.Lit_Chars val:'\n' span_id:3844) (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:3845) 
          (Token id:Id.Lit_Chars val:'\t) |\n' span_id:3846) (Token id:Id.Lit_Chars val:'\tgit fast-import --cat-blob-fd=3 3>blobs &&\n' span_id:3847) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3848)
        )
      }
    )
    (C {(test_expect_success)} {(PIPE)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: print staged blob within commit' span_id:3857))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3861) 
          (Token id:Id.Lit_Chars val:'\trm -f blobs &&\n' span_id:3862) (Token id:Id.Lit_Chars val:'\techo "A blob from _within_ the commit." >expect &&\n' span_id:3863) 
          (Token id:Id.Lit_Chars val:'\tmkfifo blobs &&\n' span_id:3864) (Token id:Id.Lit_Chars val:'\t(\n' span_id:3865) 
          (Token id:Id.Lit_Chars val:'\t\texec 3<blobs &&\n' span_id:3866) (Token id:Id.Lit_Chars val:'\t\tcat <<-EOF &&\n' span_id:3867) 
          (Token id:Id.Lit_Chars val:'\t\tfeature cat-blob\n' span_id:3868) (Token id:Id.Lit_Chars val:'\t\tcommit refs/heads/within\n' span_id:3869) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 3870
          ) (Token id:Id.Lit_Chars val:'\t\tdata <<COMMIT\n' span_id:3871) 
          (Token id:Id.Lit_Chars val:'\t\tEmpty commit\n' span_id:3872) (Token id:Id.Lit_Chars val:'\t\tCOMMIT\n' span_id:3873) 
          (Token id:Id.Lit_Chars val:'\t\tM 644 inline within\n' span_id:3874) (Token id:Id.Lit_Chars val:'\t\tdata <<BLOB\n' span_id:3875) 
          (Token id:Id.Lit_Chars val:'\t\tA blob from _within_ the commit.\n' span_id:3876) (Token id:Id.Lit_Chars val:'\t\tBLOB\n' span_id:3877) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:3878) (Token id:Id.Lit_Chars val:'\n' span_id:3879) 
          (Token id:Id.Lit_Chars val:'\t\tto_get=$(\n' span_id:3880) (Token id:Id.Lit_Chars val:'\t\t\techo "A blob from _within_ the commit." |\n' span_id:3881) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit hash-object --stdin\n' span_id:3882) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:3883) 
          (Token id:Id.Lit_Chars val:'\t\techo "cat-blob $to_get" &&\n' span_id:3884) (Token id:Id.Lit_Chars val:'\n' span_id:3885) 
          (Token id:Id.Lit_Chars val:'\t\tread blob_id type size <&3 &&\n' span_id:3886) (Token id:Id.Lit_Chars val:'\t\ttest_copy_bytes $size >actual <&3 &&\n' span_id:3887) 
          (Token id:Id.Lit_Chars val:'\t\tread newline <&3 &&\n' span_id:3888) (Token id:Id.Lit_Chars val:'\n' span_id:3889) 
          (Token id:Id.Lit_Chars val:'\t\techo deleteall\n' span_id:3890) (Token id:Id.Lit_Chars val:'\t) |\n' span_id:3891) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --cat-blob-fd=3 3>blobs &&\n'
            span_id: 3892
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3893)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: quiet option results in no stats being output'
            span_id: 3900
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3904) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3905) (Token id:Id.Lit_Chars val:'\toption git quiet\n' span_id:3906) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:3907) (Token id:Id.Lit_Chars val:'\tdata 3\n' span_id:3908) 
          (Token id:Id.Lit_Chars val:'\thi\n' span_id:3909) (Token id:Id.Lit_Chars val:'\n' span_id:3910) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3911) 
          (Token id:Id.Lit_Chars val:'\n' span_id:3912) (Token id:Id.Lit_Chars val:'\tcat input | git fast-import 2> output &&\n' span_id:3913) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output\n' span_id:3914)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: feature done means terminating "done" is mandatory'
            span_id: 3921
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3925) 
          (Token
            id: Id.Lit_Chars
            val: '\techo feature done | test_must_fail git fast-import &&\n'
            span_id: 3926
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import --done </dev/null\n' span_id:3927)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'R: terminating "done" with trailing gibberish is ok'
            span_id: 3934
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3938) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <<-\\EOF &&\n' span_id:3939) (Token id:Id.Lit_Chars val:'\tfeature done\n' span_id:3940) 
          (Token id:Id.Lit_Chars val:'\tdone\n' span_id:3941) (Token id:Id.Lit_Chars val:'\ttrailing gibberish\n' span_id:3942) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3943) (Token id:Id.Lit_Chars val:'\tgit fast-import <<-\\EOF\n' span_id:3944) 
          (Token id:Id.Lit_Chars val:'\tdone\n' span_id:3945) (Token id:Id.Lit_Chars val:'\tmore trailing gibberish\n' span_id:3946) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3947)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: terminating "done" within commit' span_id:3954))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3958) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:3959) (Token id:Id.Lit_Chars val:'\tOBJID\n' span_id:3960) 
          (Token
            id: Id.Lit_Chars
            val: '\t:000000 100644 OBJID OBJID A\thello.c\n'
            span_id: 3961
          ) (Token id:Id.Lit_Chars val:'\t:000000 100644 OBJID OBJID A\thello2.c\n' span_id:3962) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3963) (Token id:Id.Lit_Chars val:'\tgit fast-import <<-EOF &&\n' span_id:3964) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/done-ends\n' span_id:3965) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 3966
          ) (Token id:Id.Lit_Chars val:'\tdata <<EOT\n' span_id:3967) 
          (Token
            id: Id.Lit_Chars
            val: '\tCommit terminated by "done" command\n'
            span_id: 3968
          ) (Token id:Id.Lit_Chars val:'\tEOT\n' span_id:3969) 
          (Token id:Id.Lit_Chars val:'\tM 100644 inline hello.c\n' span_id:3970) (Token id:Id.Lit_Chars val:'\tdata <<EOT\n' span_id:3971) 
          (Token id:Id.Lit_Chars val:'\tHello, world.\n' span_id:3972) (Token id:Id.Lit_Chars val:'\tEOT\n' span_id:3973) 
          (Token id:Id.Lit_Chars val:'\tC hello.c hello2.c\n' span_id:3974) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:3975) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3976) 
          (Token id:Id.Lit_Chars val:'\tgit rev-list done-ends |\n' span_id:3977) (Token id:Id.Lit_Chars val:'\tgit diff-tree -r --stdin --root --always |\n' span_id:3978) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/$_x40/OBJID/g" >actual &&\n'
            span_id: 3979
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3980)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: die on unknown option' span_id:3987))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3991) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:3992) (Token id:Id.Lit_Chars val:'\toption git non-existing-option\n' span_id:3993) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3994) (Token id:Id.Lit_Chars val:'\n' span_id:3995) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <input\n'
            span_id: 3996
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: unknown commandline options are rejected' span_id:4003))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\\\n' span_id:4007) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --non-existing-option < /dev/null\n'
            span_id: 4008
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: die on invalid option argument' span_id:4015))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4019) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "option git active-branches=-5" |\n'
            span_id: 4020
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import &&\n' span_id:4021) 
          (Token id:Id.Lit_Chars val:'\techo "option git depth=" |\n' span_id:4022) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fast-import &&\n' span_id:4023) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --depth="5 elephants" </dev/null\n'
            span_id: 4024
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: ignore non-git options' span_id:4031))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4035) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:4036) (Token id:Id.Lit_Chars val:'\toption non-existing-vcs non-existing-option\n' span_id:4037) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4038) (Token id:Id.Lit_Chars val:'\n' span_id:4039) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input\n' span_id:4040)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: corrupt lines do not mess marks file' span_id:4047))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4051) 
          (Token id:Id.Lit_Chars val:'\trm -f io.marks &&\n' span_id:4052) (Token id:Id.Lit_Chars val:'\tblob=$(echo hi | git hash-object --stdin) &&\n' span_id:4053) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:4054) (Token id:Id.Lit_Chars val:'\t:3 0000000000000000000000000000000000000000\n' span_id:4055) 
          (Token id:Id.Lit_Chars val:'\t:1 $blob\n' span_id:4056) (Token id:Id.Lit_Chars val:'\t:2 $blob\n' span_id:4057) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4058) (Token id:Id.Lit_Chars val:'\tcp expect io.marks &&\n' span_id:4059) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_must_fail git fast-import --import-marks=io.marks --export-marks=io.marks <<-\\EOF &&\n'
            span_id: 4060
          ) (Token id:Id.Lit_Chars val:'\n' span_id:4061) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4062) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect io.marks\n' span_id:4063)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: blob bigger than threshold' span_id:4079))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4083) 
          (Token id:Id.Lit_Chars val:'\tblobsize=$((2*1024*1024 + 53)) &&\n' span_id:4084) (Token id:Id.Lit_Chars val:'\ttest-genrandom bar $blobsize >expect &&\n' span_id:4085) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:4086) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/big-file\n' span_id:4087) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4088
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4089) 
          (Token id:Id.Lit_Chars val:'\tR - big file\n' span_id:4090) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4091) (Token id:Id.Lit_Chars val:'\n' span_id:4092) 
          (Token id:Id.Lit_Chars val:'\tM 644 inline big1\n' span_id:4093) (Token id:Id.Lit_Chars val:'\tdata $blobsize\n' span_id:4094) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:4095) (Token id:Id.Lit_Chars val:'\tcat expect >>input &&\n' span_id:4096) 
          (Token id:Id.Lit_Chars val:'\tcat >>input <<-INPUT_END &&\n' span_id:4097) (Token id:Id.Lit_Chars val:'\tM 644 inline big2\n' span_id:4098) 
          (Token id:Id.Lit_Chars val:'\tdata $blobsize\n' span_id:4099) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:4100) 
          (Token id:Id.Lit_Chars val:'\tcat expect >>input &&\n' span_id:4101) (Token id:Id.Lit_Chars val:'\techo >>input &&\n' span_id:4102) 
          (Token id:Id.Lit_Chars val:'\n' span_id:4103) (Token id:Id.Lit_Chars val:'\ttest_create_repo R &&\n' span_id:4104) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=R/.git config fastimport.unpackLimit 0 &&\n'
            span_id: 4105
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=R/.git fast-import --big-file-threshold=1 <input\n'
            span_id: 4106
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'R: verify created pack' span_id:4113))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4117) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:4118) (Token id:Id.Lit_Chars val:'\t\tcd R &&\n' span_id:4119) 
          (Token id:Id.Lit_Chars val:'\t\tverify_packs -v > ../verify\n' span_id:4120) (Token id:Id.Lit_Chars val:'\t)\n' span_id:4121)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: verify written objects' span_id:4128))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4132) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=R/.git cat-file blob big-file:big1 >actual &&\n'
            span_id: 4133
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp_bin expect actual &&\n' span_id:4134) 
          (Token
            id: Id.Lit_Chars
            val: '\ta=$(git --git-dir=R/.git rev-parse big-file:big1) &&\n'
            span_id: 4135
          ) (Token id:Id.Lit_Chars val:'\tb=$(git --git-dir=R/.git rev-parse big-file:big2) &&\n' span_id:4136) 
          (Token id:Id.Lit_Chars val:'\ttest $a = $b\n' span_id:4137)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'R: blob appears only once' span_id:4144))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4148) 
          (Token id:Id.Lit_Chars val:'\tn=$(grep $a verify | wc -l) &&\n' span_id:4149) (Token id:Id.Lit_Chars val:'\ttest 1 = $n\n' span_id:4150)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'S: initialize for S tests' span_id:4250))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4254) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:4255) (Token id:Id.Lit_Chars val:'\n' span_id:4256) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:4257) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S\n' span_id:4258) 
          (Token id:Id.Lit_Chars val:'\tmark :301\n' span_id:4259) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4260
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4261) 
          (Token id:Id.Lit_Chars val:'\tcommit 1\n' span_id:4262) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4263) 
          (Token id:Id.Lit_Chars val:'\tM 100644 inline hello.c\n' span_id:4264) (Token id:Id.Lit_Chars val:'\tdata <<BLOB\n' span_id:4265) 
          (Token id:Id.Lit_Chars val:'\tblob 1\n' span_id:4266) (Token id:Id.Lit_Chars val:'\tBLOB\n' span_id:4267) (Token id:Id.Lit_Chars val:'\n' span_id:4268) 
          (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S\n' span_id:4269) (Token id:Id.Lit_Chars val:'\tmark :302\n' span_id:4270) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4271
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4272) 
          (Token id:Id.Lit_Chars val:'\tcommit 2\n' span_id:4273) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4274) 
          (Token id:Id.Lit_Chars val:'\tfrom :301\n' span_id:4275) (Token id:Id.Lit_Chars val:'\tM 100644 inline hello.c\n' span_id:4276) 
          (Token id:Id.Lit_Chars val:'\tdata <<BLOB\n' span_id:4277) (Token id:Id.Lit_Chars val:'\tblob 2\n' span_id:4278) 
          (Token id:Id.Lit_Chars val:'\tBLOB\n' span_id:4279) (Token id:Id.Lit_Chars val:'\n' span_id:4280) (Token id:Id.Lit_Chars val:'\tblob\n' span_id:4281) 
          (Token id:Id.Lit_Chars val:'\tmark :403\n' span_id:4282) (Token id:Id.Lit_Chars val:'\tdata <<BLOB\n' span_id:4283) 
          (Token id:Id.Lit_Chars val:'\tblob 3\n' span_id:4284) (Token id:Id.Lit_Chars val:'\tBLOB\n' span_id:4285) (Token id:Id.Lit_Chars val:'\n' span_id:4286) 
          (Token id:Id.Lit_Chars val:'\tblob\n' span_id:4287) (Token id:Id.Lit_Chars val:'\tmark :202\n' span_id:4288) 
          (Token id:Id.Lit_Chars val:'\tdata <<BLOB\n' span_id:4289) (Token id:Id.Lit_Chars val:'\tnote 2\n' span_id:4290) 
          (Token id:Id.Lit_Chars val:'\tBLOB\n' span_id:4291) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:4292) (Token id:Id.Lit_Chars val:'\n' span_id:4293) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --export-marks=marks <input\n'
            span_id: 4294
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'S: filemodify with garbage after mark must fail'
            span_id: 4310
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4314) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4315
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S\n' span_id:4316) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4317
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4318) 
          (Token id:Id.Lit_Chars val:'\tcommit N\n' span_id:4319) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4320) 
          (Token id:Id.Lit_Chars val:'\tM 100644 :403x hello.c\n' span_id:4321) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4322) 
          (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4323) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "space after mark" err\n' span_id:4324)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'S: filemodify with garbage after inline must fail'
            span_id: 4334
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4338) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4339
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S\n' span_id:4340) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4341
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4342) 
          (Token id:Id.Lit_Chars val:'\tcommit N\n' span_id:4343) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4344) 
          (Token id:Id.Lit_Chars val:'\tM 100644 inlineX hello.c\n' span_id:4345) (Token id:Id.Lit_Chars val:'\tdata <<BLOB\n' span_id:4346) 
          (Token id:Id.Lit_Chars val:'\tinline\n' span_id:4347) (Token id:Id.Lit_Chars val:'\tBLOB\n' span_id:4348) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4349) 
          (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4350) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "nvalid dataref" err\n' span_id:4351)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'S: filemodify with garbage after sha1 must fail'
            span_id: 4358
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4362) 
          (Token
            id: Id.Lit_Chars
            val: '\tsha1=$(grep :403 marks | cut -d\\  -f2) &&\n'
            span_id: 4363
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4364
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S\n' span_id:4365) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4366
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4367) 
          (Token id:Id.Lit_Chars val:'\tcommit N\n' span_id:4368) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4369) 
          (Token id:Id.Lit_Chars val:'\tM 100644 ${sha1}x hello.c\n' span_id:4370) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4371) 
          (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4372) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "space after SHA1" err\n' span_id:4373)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'S: notemodify with garabge after mark dataref must fail'
            span_id: 4389
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4393) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4394
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S\n' span_id:4395) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4396
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4397) 
          (Token id:Id.Lit_Chars val:'\tcommit S note dataref markref\n' span_id:4398) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4399) 
          (Token id:Id.Lit_Chars val:'\tN :202x :302\n' span_id:4400) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4401) 
          (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4402) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "space after mark" err\n' span_id:4403)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'S: notemodify with garbage after inline dataref must fail'
            span_id: 4410
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4414) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4415
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S\n' span_id:4416) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4417
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4418) 
          (Token id:Id.Lit_Chars val:'\tcommit S note dataref inline\n' span_id:4419) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4420) 
          (Token id:Id.Lit_Chars val:'\tN inlineX :302\n' span_id:4421) (Token id:Id.Lit_Chars val:'\tdata <<BLOB\n' span_id:4422) 
          (Token id:Id.Lit_Chars val:'\tnote blob\n' span_id:4423) (Token id:Id.Lit_Chars val:'\tBLOB\n' span_id:4424) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4425) 
          (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4426) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "nvalid dataref" err\n' span_id:4427)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'S: notemodify with garbage after sha1 dataref must fail'
            span_id: 4434
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4438) 
          (Token
            id: Id.Lit_Chars
            val: '\tsha1=$(grep :202 marks | cut -d\\  -f2) &&\n'
            span_id: 4439
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4440
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S\n' span_id:4441) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4442
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4443) 
          (Token id:Id.Lit_Chars val:'\tcommit S note dataref sha1\n' span_id:4444) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4445) 
          (Token id:Id.Lit_Chars val:'\tN ${sha1}x :302\n' span_id:4446) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4447) 
          (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4448) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "space after SHA1" err\n' span_id:4449)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'S: notemodify with garbage after mark commit-ish must fail'
            span_id: 4465
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4469) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4470
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/Snotes\n' span_id:4471) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4472
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4473) 
          (Token id:Id.Lit_Chars val:'\tcommit S note commit-ish\n' span_id:4474) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4475) 
          (Token id:Id.Lit_Chars val:'\tN :202 :302x\n' span_id:4476) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4477) 
          (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4478) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "after mark" err\n' span_id:4479)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'S: from with garbage after mark must fail' span_id:4495))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4499) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail \\\n' span_id:4500) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --import-marks=marks --export-marks=marks <<-EOF 2>err &&\n'
            span_id: 4501
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S2\n' span_id:4502) 
          (Token id:Id.Lit_Chars val:'\tmark :303\n' span_id:4503) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4504
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4505) 
          (Token id:Id.Lit_Chars val:'\tcommit 3\n' span_id:4506) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4507) 
          (Token id:Id.Lit_Chars val:'\tfrom :301x\n' span_id:4508) (Token id:Id.Lit_Chars val:'\tM 100644 :403 hello.c\n' span_id:4509) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4510) (Token id:Id.Lit_Chars val:'\n' span_id:4511) (Token id:Id.Lit_Chars val:'\n' span_id:4512) 
          (Token
            id: Id.Lit_Chars
            val: '\t# go create the commit, need it for merge test\n'
            span_id: 4513
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --import-marks=marks --export-marks=marks <<-EOF &&\n'
            span_id: 4514
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S2\n' span_id:4515) 
          (Token id:Id.Lit_Chars val:'\tmark :303\n' span_id:4516) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4517
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4518) 
          (Token id:Id.Lit_Chars val:'\tcommit 3\n' span_id:4519) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4520) 
          (Token id:Id.Lit_Chars val:'\tfrom :301\n' span_id:4521) (Token id:Id.Lit_Chars val:'\tM 100644 :403 hello.c\n' span_id:4522) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4523) (Token id:Id.Lit_Chars val:'\n' span_id:4524) 
          (Token id:Id.Lit_Chars val:'\t# now evaluate the error\n' span_id:4525) (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4526) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "after mark" err\n' span_id:4527)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'S: merge with garbage after mark must fail' span_id:4544))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4548) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4549
          ) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/S\n' span_id:4550) 
          (Token id:Id.Lit_Chars val:'\tmark :304\n' span_id:4551) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4552
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4553) 
          (Token id:Id.Lit_Chars val:'\tmerge 4\n' span_id:4554) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4555) 
          (Token id:Id.Lit_Chars val:'\tfrom :302\n' span_id:4556) (Token id:Id.Lit_Chars val:'\tmerge :303x\n' span_id:4557) 
          (Token id:Id.Lit_Chars val:'\tM 100644 :403 hello.c\n' span_id:4558) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4559) 
          (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4560) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "after mark" err\n' span_id:4561)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'S: tag with garbage after mark must fail' span_id:4577))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4581) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4582
          ) (Token id:Id.Lit_Chars val:'\ttag refs/tags/Stag\n' span_id:4583) 
          (Token id:Id.Lit_Chars val:'\tfrom :302x\n' span_id:4584) 
          (Token
            id: Id.Lit_Chars
            val: '\ttagger $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4585
          ) (Token id:Id.Lit_Chars val:'\tdata <<TAG\n' span_id:4586) 
          (Token id:Id.Lit_Chars val:'\ttag S\n' span_id:4587) (Token id:Id.Lit_Chars val:'\tTAG\n' span_id:4588) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4589) 
          (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4590) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "after mark" err\n' span_id:4591)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'S: cat-blob with garbage after mark must fail' span_id:4607))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4611) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4612
          ) (Token id:Id.Lit_Chars val:'\tcat-blob :403x\n' span_id:4613) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4614) (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4615) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "after mark" err\n' span_id:4616)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'S: ls with garbage after mark must fail' span_id:4632))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4636) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4637
          ) (Token id:Id.Lit_Chars val:'\tls :302x hello.c\n' span_id:4638) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4639) (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4640) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "space after mark" err\n'
            span_id: 4641
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'S: ls with garbage after sha1 must fail' span_id:4648))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4652) 
          (Token
            id: Id.Lit_Chars
            val: '\tsha1=$(grep :302 marks | cut -d\\  -f2) &&\n'
            span_id: 4653
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&\n'
            span_id: 4654
          ) (Token id:Id.Lit_Chars val:'\tls ${sha1}x hello.c\n' span_id:4655) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4656) (Token id:Id.Lit_Chars val:'\tcat err &&\n' span_id:4657) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "space after tree-ish" err\n'
            span_id: 4658
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'T: ls root tree' span_id:4678))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4682) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/Z\\$//" >expect <<-EOF &&\n'
            span_id: 4683
          ) (Token id:Id.Lit_Chars val:'\t040000 tree $(git rev-parse S^{tree})\tZ\n' span_id:4684) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4685) (Token id:Id.Lit_Chars val:'\tsha1=$(git rev-parse --verify S) &&\n' span_id:4686) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fast-import --import-marks=marks <<-EOF >actual &&\n'
            span_id: 4687
          ) (Token id:Id.Lit_Chars val:'\tls $sha1 ""\n' span_id:4688) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4689) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:4690)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'T: delete branch' span_id:4697))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4701) 
          (Token id:Id.Lit_Chars val:'\tgit branch to-delete &&\n' span_id:4702) (Token id:Id.Lit_Chars val:'\tgit fast-import <<-EOF &&\n' span_id:4703) 
          (Token id:Id.Lit_Chars val:'\treset refs/heads/to-delete\n' span_id:4704) (Token id:Id.Lit_Chars val:'\tfrom 0000000000000000000000000000000000000000\n' span_id:4705) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4706) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify refs/heads/to-delete\n'
            span_id: 4707
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'T: empty reset doesnt delete branch' span_id:4714))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4718) 
          (Token id:Id.Lit_Chars val:'\tgit branch not-to-delete &&\n' span_id:4719) (Token id:Id.Lit_Chars val:'\tgit fast-import <<-EOF &&\n' span_id:4720) 
          (Token id:Id.Lit_Chars val:'\treset refs/heads/not-to-delete\n' span_id:4721) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4722) 
          (Token id:Id.Lit_Chars val:'\tgit show-ref &&\n' span_id:4723) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify refs/heads/not-to-delete\n' span_id:4724)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'U: initialize for U tests' span_id:4741))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4745) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:4746) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/U\n' span_id:4747) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4748
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4749) 
          (Token id:Id.Lit_Chars val:'\ttest setup\n' span_id:4750) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4751) 
          (Token id:Id.Lit_Chars val:'\tM 100644 inline hello.c\n' span_id:4752) (Token id:Id.Lit_Chars val:'\tdata <<BLOB\n' span_id:4753) 
          (Token id:Id.Lit_Chars val:'\tblob 1\n' span_id:4754) (Token id:Id.Lit_Chars val:'\tBLOB\n' span_id:4755) 
          (Token id:Id.Lit_Chars val:'\tM 100644 inline good/night.txt\n' span_id:4756) (Token id:Id.Lit_Chars val:'\tdata <<BLOB\n' span_id:4757) 
          (Token id:Id.Lit_Chars val:'\tsleep well\n' span_id:4758) (Token id:Id.Lit_Chars val:'\tBLOB\n' span_id:4759) 
          (Token id:Id.Lit_Chars val:'\tM 100644 inline good/bye.txt\n' span_id:4760) (Token id:Id.Lit_Chars val:'\tdata <<BLOB\n' span_id:4761) 
          (Token id:Id.Lit_Chars val:'\tau revoir\n' span_id:4762) (Token id:Id.Lit_Chars val:'\tBLOB\n' span_id:4763) (Token id:Id.Lit_Chars val:'\n' span_id:4764) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:4765) (Token id:Id.Lit_Chars val:'\n' span_id:4766) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input\n' span_id:4767)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'U: filedelete file succeeds' span_id:4774))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4778) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:4779) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/U\n' span_id:4780) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4781
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4782) 
          (Token id:Id.Lit_Chars val:'\tdelete good/night.txt\n' span_id:4783) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4784) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/U^0\n' span_id:4785) (Token id:Id.Lit_Chars val:'\tD good/night.txt\n' span_id:4786) 
          (Token id:Id.Lit_Chars val:'\n' span_id:4787) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:4788) (Token id:Id.Lit_Chars val:'\n' span_id:4789) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input\n' span_id:4790)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'U: validate file delete result' span_id:4797))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4801) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:4802) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 000000 2907ebb4bf85d91bf0716bb3bd8a68ef48d6da76 0000000000000000000000000000000000000000 D\tgood/night.txt\n'
            span_id: 4803
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4804) (Token id:Id.Lit_Chars val:'\n' span_id:4805) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -M -r U^1 U >actual &&\n'
            span_id: 4806
          ) (Token id:Id.Lit_Chars val:'\n' span_id:4807) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:4808)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'U: filedelete directory succeeds' span_id:4815))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4819) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:4820) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/U\n' span_id:4821) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4822
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4823) 
          (Token id:Id.Lit_Chars val:'\tdelete good dir\n' span_id:4824) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4825) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/U^0\n' span_id:4826) (Token id:Id.Lit_Chars val:'\tD good\n' span_id:4827) (Token id:Id.Lit_Chars val:'\n' span_id:4828) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:4829) (Token id:Id.Lit_Chars val:'\n' span_id:4830) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input\n' span_id:4831)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'U: validate directory delete result' span_id:4838))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4842) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:4843) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 000000 69cb75792f55123d8389c156b0b41c2ff00ed507 0000000000000000000000000000000000000000 D\tgood/bye.txt\n'
            span_id: 4844
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4845) (Token id:Id.Lit_Chars val:'\n' span_id:4846) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -M -r U^1 U >actual &&\n'
            span_id: 4847
          ) (Token id:Id.Lit_Chars val:'\n' span_id:4848) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:4849)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'U: filedelete root succeeds' span_id:4856))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4860) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:4861) (Token id:Id.Lit_Chars val:'\tcommit refs/heads/U\n' span_id:4862) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 4863
          ) (Token id:Id.Lit_Chars val:'\tdata <<COMMIT\n' span_id:4864) 
          (Token id:Id.Lit_Chars val:'\tmust succeed\n' span_id:4865) (Token id:Id.Lit_Chars val:'\tCOMMIT\n' span_id:4866) 
          (Token id:Id.Lit_Chars val:'\tfrom refs/heads/U^0\n' span_id:4867) (Token id:Id.Lit_Chars val:'\tD ""\n' span_id:4868) (Token id:Id.Lit_Chars val:'\n' span_id:4869) 
          (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:4870) (Token id:Id.Lit_Chars val:'\n' span_id:4871) 
          (Token id:Id.Lit_Chars val:'\tgit fast-import <input\n' span_id:4872)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'U: validate root delete result' span_id:4879))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:4883) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:4884) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t:100644 000000 c18147dc648481eeb65dc5e66628429a64843327 0000000000000000000000000000000000000000 D\thello.c\n'
            span_id: 4885
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:4886) (Token id:Id.Lit_Chars val:'\n' span_id:4887) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -M -r U^1 U >actual &&\n'
            span_id: 4888
          ) (Token id:Id.Lit_Chars val:'\n' span_id:4889) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_raw expect actual\n' span_id:4890)
        )
      }
    )
    (C {(test_done)})
  ]
)