(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ (Token id:Id.Lit_Chars val:'git status --porcelain=v2\n' span_id:6) 
                (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:'This test exercises porcelain V2 output for git status.' span_id:8)
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf false &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\techo x >file_x &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\techo y >file_y &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\techo z >file_z &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tmkdir dir1 &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\techo a >dir1/file_a &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\techo b >dir1/file_b\n' span_id:32)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'before initial commit, nothing added, only untracked'
            span_id: 39
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\t# branch.oid (initial)\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:46) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\t? dir1/\n' span_id:48) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\t? file_x\n' span_id:50) (Token id:Id.Lit_Chars val:'\t? file_y\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\t? file_z\n' span_id:52) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:53) (Token id:Id.Lit_Chars val:'\n' span_id:54) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch --untracked-files=normal >actual &&\n'
            span_id: 55
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:56)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'before initial commit, things added' span_id:63))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\tgit add file_x file_y file_z dir1 &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tOID_A=$(git hash-object -t blob -- dir1/file_a) &&\n' span_id:69) 
          (Token
            id: Id.Lit_Chars
            val: '\tOID_B=$(git hash-object -t blob -- dir1/file_b) &&\n'
            span_id: 70
          ) (Token id:Id.Lit_Chars val:'\tOID_X=$(git hash-object -t blob -- file_x) &&\n' span_id:71) 
          (Token
            id: Id.Lit_Chars
            val: '\tOID_Y=$(git hash-object -t blob -- file_y) &&\n'
            span_id: 72
          ) (Token id:Id.Lit_Chars val:'\tOID_Z=$(git hash-object -t blob -- file_z) &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\n' span_id:74) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\t# branch.oid (initial)\n' span_id:76) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:77) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_A dir1/file_a\n'
            span_id: 78
          ) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_B dir1/file_b\n' span_id:79) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_X file_x\n'
            span_id: 80
          ) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_Y file_y\n' span_id:81) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_Z file_z\n'
            span_id: 82
          ) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:84) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:85) (Token id:Id.Lit_Chars val:'\n' span_id:86) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 87
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:88)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'before initial commit, things added (-z)' span_id:95))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:99) 
          (Token id:Id.Lit_Chars val:'\tlf_to_nul >expect <<-EOF &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\t# branch.oid (initial)\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:102) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_A dir1/file_a\n' span_id:103) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_B dir1/file_b\n'
            span_id: 104
          ) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_X file_x\n' span_id:105) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_Y file_y\n'
            span_id: 106
          ) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_Z file_z\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:108) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:110) (Token id:Id.Lit_Chars val:'\n' span_id:111) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status -z --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 112
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:113)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'make first commit, comfirm HEAD oid and branch' span_id:120))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:129) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:131) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:132) (Token id:Id.Lit_Chars val:'\n' span_id:133) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 134
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:135)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'after first commit, create unstaged changes' span_id:142))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:146) 
          (Token id:Id.Lit_Chars val:'\techo x >>file_x &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\tOID_X1=$(git hash-object -t blob -- file_x) &&\n' span_id:148) 
          (Token id:Id.Lit_Chars val:'\trm file_z &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:150) 
          (Token id:Id.Lit_Chars val:'\n' span_id:151) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:152) 
          (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:153) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 .M N... 100644 100644 100644 $OID_X $OID_X file_x\n'
            span_id: 155
          ) (Token id:Id.Lit_Chars val:'\t1 .D N... 100644 100644 000000 $OID_Z $OID_Z file_z\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:157) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:159) (Token id:Id.Lit_Chars val:'\n' span_id:160) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 161
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:162)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'after first commit but omit untracked files and branch'
            span_id: 169
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\t1 .M N... 100644 100644 100644 $OID_X $OID_X file_x\n' span_id:175) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 .D N... 100644 100644 000000 $OID_Z $OID_Z file_z\n'
            span_id: 176
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:177) (Token id:Id.Lit_Chars val:'\n' span_id:178) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --untracked-files=no >actual &&\n'
            span_id: 179
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:180)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'after first commit, stage existing changes' span_id:187))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:191) 
          (Token id:Id.Lit_Chars val:'\tgit add file_x &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\tgit rm file_z &&\n' span_id:193) 
          (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\n' span_id:195) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:197) 
          (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:198) (Token id:Id.Lit_Chars val:'\t1 M. N... 100644 100644 100644 $OID_X $OID_X1 file_x\n' span_id:199) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 D. N... 100644 000000 000000 $OID_Z $_z40 file_z\n'
            span_id: 200
          ) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:201) 
          (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:202) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:203) (Token id:Id.Lit_Chars val:'\n' span_id:204) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 205
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:206)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rename causes 2 path lines' span_id:213))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:217) 
          (Token id:Id.Lit_Chars val:'\tgit mv file_y renamed_y &&\n' span_id:218) (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:219) 
          (Token id:Id.Lit_Chars val:'\n' span_id:220) (Token id:Id.Lit_Chars val:'\tq_to_tab >expect <<-EOF &&\n' span_id:221) 
          (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:222) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:223) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 M. N... 100644 100644 100644 $OID_X $OID_X1 file_x\n'
            span_id: 224
          ) (Token id:Id.Lit_Chars val:'\t1 D. N... 100644 000000 000000 $OID_Z $_z40 file_z\n' span_id:225) 
          (Token
            id: Id.Lit_Chars
            val: '\t2 R. N... 100644 100644 100644 $OID_Y $OID_Y R100 renamed_yQfile_y\n'
            span_id: 226
          ) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:227) 
          (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:228) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:229) (Token id:Id.Lit_Chars val:'\n' span_id:230) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 231
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:232)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rename causes 2 path lines (-z)' span_id:239))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\n' span_id:245) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t## Lines use NUL path separator and line terminator, so double transform here.\n'
            span_id: 246
          ) (Token id:Id.Lit_Chars val:'\tq_to_nul <<-EOF | lf_to_nul >expect &&\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:248) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:249) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 M. N... 100644 100644 100644 $OID_X $OID_X1 file_x\n'
            span_id: 250
          ) (Token id:Id.Lit_Chars val:'\t1 D. N... 100644 000000 000000 $OID_Z $_z40 file_z\n' span_id:251) 
          (Token
            id: Id.Lit_Chars
            val: '\t2 R. N... 100644 100644 100644 $OID_Y $OID_Y R100 renamed_yQfile_y\n'
            span_id: 252
          ) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:254) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:255) (Token id:Id.Lit_Chars val:'\n' span_id:256) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch --untracked-files=all -z >actual &&\n'
            span_id: 257
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:258)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'make second commit, confirm clean and new HEAD oid'
            span_id: 265
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:269) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m second &&\n' span_id:270) (Token id:Id.Lit_Chars val:'\tH1=$(git rev-parse HEAD) &&\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\n' span_id:272) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:273) 
          (Token id:Id.Lit_Chars val:'\t# branch.oid $H1\n' span_id:274) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:275) 
          (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:276) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:277) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:278) (Token id:Id.Lit_Chars val:'\n' span_id:279) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 280
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:281)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'confirm ignored files are not printed' span_id:288))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:292) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f x.ign .gitignore" &&\n'
            span_id: 293
          ) (Token id:Id.Lit_Chars val:'\techo x.ign >.gitignore &&\n' span_id:294) 
          (Token id:Id.Lit_Chars val:'\techo "ignore me" >x.ign &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\n' span_id:296) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:297) (Token id:Id.Lit_Chars val:'\t? .gitignore\n' span_id:298) 
          (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:299) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:301) (Token id:Id.Lit_Chars val:'\n' span_id:302) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --untracked-files=all >actual &&\n'
            span_id: 303
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:304)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ignored files are printed with --ignored' span_id:311))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:315) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f x.ign .gitignore" &&\n'
            span_id: 316
          ) (Token id:Id.Lit_Chars val:'\techo x.ign >.gitignore &&\n' span_id:317) 
          (Token id:Id.Lit_Chars val:'\techo "ignore me" >x.ign &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\n' span_id:319) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\t? .gitignore\n' span_id:321) 
          (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:322) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:323) 
          (Token id:Id.Lit_Chars val:'\t! x.ign\n' span_id:324) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:325) (Token id:Id.Lit_Chars val:'\n' span_id:326) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --ignored --untracked-files=all >actual &&\n'
            span_id: 327
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:328)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create and commit permanent ignore file' span_id:335))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:339) 
          (Token id:Id.Lit_Chars val:'\tcat >.gitignore <<-EOF &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\tactual*\n' span_id:341) 
          (Token id:Id.Lit_Chars val:'\texpect*\n' span_id:342) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:343) (Token id:Id.Lit_Chars val:'\n' span_id:344) 
          (Token id:Id.Lit_Chars val:'\tgit add .gitignore &&\n' span_id:345) (Token id:Id.Lit_Chars val:'\tgit commit -m ignore_trash &&\n' span_id:346) 
          (Token id:Id.Lit_Chars val:'\tH1=$(git rev-parse HEAD) &&\n' span_id:347) (Token id:Id.Lit_Chars val:'\n' span_id:348) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:349) (Token id:Id.Lit_Chars val:'\t# branch.oid $H1\n' span_id:350) 
          (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:351) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:352) (Token id:Id.Lit_Chars val:'\n' span_id:353) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch >actual &&\n'
            span_id: 354
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:355)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'verify --intent-to-add output' span_id:362))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:366) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rm -f intent1.add intent2.add" &&\n'
            span_id: 367
          ) (Token id:Id.Lit_Chars val:'\ttouch intent1.add &&\n' span_id:368) 
          (Token id:Id.Lit_Chars val:'\techo test >intent2.add &&\n' span_id:369) (Token id:Id.Lit_Chars val:'\n' span_id:370) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit add --intent-to-add intent1.add intent2.add &&\n'
            span_id: 371
          ) (Token id:Id.Lit_Chars val:'\n' span_id:372) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:373) (Token id:Id.Lit_Chars val:'\t1 .A N... 000000 000000 100644 $_z40 $_z40 intent1.add\n' span_id:374) 
          (Token
            id: Id.Lit_Chars
            val: '\t1 .A N... 000000 000000 100644 $_z40 $_z40 intent2.add\n'
            span_id: 375
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:376) (Token id:Id.Lit_Chars val:'\n' span_id:377) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 >actual &&\n'
            span_id: 378
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:379)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'verify AA (add-add) conflict' span_id:386))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:390) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git reset --hard" &&\n'
            span_id: 391
          ) (Token id:Id.Lit_Chars val:'\n' span_id:392) 
          (Token id:Id.Lit_Chars val:'\tgit branch AA_A master &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\tgit checkout AA_A &&\n' span_id:394) 
          (Token id:Id.Lit_Chars val:'\techo "Branch AA_A" >conflict.txt &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\tOID_AA_A=$(git hash-object -t blob -- conflict.txt) &&\n' span_id:396) 
          (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:397) (Token id:Id.Lit_Chars val:'\tgit commit -m "branch aa_a" &&\n' span_id:398) 
          (Token id:Id.Lit_Chars val:'\n' span_id:399) (Token id:Id.Lit_Chars val:'\tgit branch AA_B master &&\n' span_id:400) 
          (Token id:Id.Lit_Chars val:'\tgit checkout AA_B &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\techo "Branch AA_B" >conflict.txt &&\n' span_id:402) 
          (Token
            id: Id.Lit_Chars
            val: '\tOID_AA_B=$(git hash-object -t blob -- conflict.txt) &&\n'
            span_id: 403
          ) (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:404) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "branch aa_b" &&\n' span_id:405) (Token id:Id.Lit_Chars val:'\n' span_id:406) 
          (Token id:Id.Lit_Chars val:'\tgit branch AA_M AA_B &&\n' span_id:407) (Token id:Id.Lit_Chars val:'\tgit checkout AA_M &&\n' span_id:408) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge AA_A &&\n' span_id:409) (Token id:Id.Lit_Chars val:'\n' span_id:410) 
          (Token id:Id.Lit_Chars val:'\tHM=$(git rev-parse HEAD) &&\n' span_id:411) (Token id:Id.Lit_Chars val:'\n' span_id:412) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\t# branch.oid $HM\n' span_id:414) 
          (Token id:Id.Lit_Chars val:'\t# branch.head AA_M\n' span_id:415) 
          (Token
            id: Id.Lit_Chars
            val: '\tu AA N... 000000 100644 100644 100644 $_z40 $OID_AA_B $OID_AA_A conflict.txt\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 status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 419
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:420)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'verify UU (edit-edit) conflict' span_id:427))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:431) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git reset --hard" &&\n'
            span_id: 432
          ) (Token id:Id.Lit_Chars val:'\n' span_id:433) 
          (Token id:Id.Lit_Chars val:'\tgit branch UU_ANC master &&\n' span_id:434) (Token id:Id.Lit_Chars val:'\tgit checkout UU_ANC &&\n' span_id:435) 
          (Token id:Id.Lit_Chars val:'\techo "Ancestor" >conflict.txt &&\n' span_id:436) 
          (Token
            id: Id.Lit_Chars
            val: '\tOID_UU_ANC=$(git hash-object -t blob -- conflict.txt) &&\n'
            span_id: 437
          ) (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:438) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "UU_ANC" &&\n' span_id:439) (Token id:Id.Lit_Chars val:'\n' span_id:440) 
          (Token id:Id.Lit_Chars val:'\tgit branch UU_A UU_ANC &&\n' span_id:441) (Token id:Id.Lit_Chars val:'\tgit checkout UU_A &&\n' span_id:442) 
          (Token id:Id.Lit_Chars val:'\techo "Branch UU_A" >conflict.txt &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\tOID_UU_A=$(git hash-object -t blob -- conflict.txt) &&\n' span_id:444) 
          (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:445) (Token id:Id.Lit_Chars val:'\tgit commit -m "branch uu_a" &&\n' span_id:446) 
          (Token id:Id.Lit_Chars val:'\n' span_id:447) (Token id:Id.Lit_Chars val:'\tgit branch UU_B UU_ANC &&\n' span_id:448) 
          (Token id:Id.Lit_Chars val:'\tgit checkout UU_B &&\n' span_id:449) (Token id:Id.Lit_Chars val:'\techo "Branch UU_B" >conflict.txt &&\n' span_id:450) 
          (Token
            id: Id.Lit_Chars
            val: '\tOID_UU_B=$(git hash-object -t blob -- conflict.txt) &&\n'
            span_id: 451
          ) (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:452) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "branch uu_b" &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\n' span_id:454) 
          (Token id:Id.Lit_Chars val:'\tgit branch UU_M UU_B &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\tgit checkout UU_M &&\n' span_id:456) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge UU_A &&\n' span_id:457) (Token id:Id.Lit_Chars val:'\n' span_id:458) 
          (Token id:Id.Lit_Chars val:'\tHM=$(git rev-parse HEAD) &&\n' span_id:459) (Token id:Id.Lit_Chars val:'\n' span_id:460) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:461) (Token id:Id.Lit_Chars val:'\t# branch.oid $HM\n' span_id:462) 
          (Token id:Id.Lit_Chars val:'\t# branch.head UU_M\n' span_id:463) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tu UU N... 100644 100644 100644 100644 $OID_UU_ANC $OID_UU_B $OID_UU_A conflict.txt\n'
            span_id: 464
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:465) (Token id:Id.Lit_Chars val:'\n' span_id:466) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 467
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:468)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'verify upstream fields in branch header' span_id:475))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:479) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:480) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -rf sub_repo" &&\n' span_id:481) 
          (Token id:Id.Lit_Chars val:'\tgit clone . sub_repo &&\n' span_id:482) (Token id:Id.Lit_Chars val:'\t(\n' span_id:483) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t## Confirm local master tracks remote master.\n'
            span_id: 484
          ) (Token id:Id.Lit_Chars val:'\t\tcd sub_repo &&\n' span_id:485) 
          (Token id:Id.Lit_Chars val:'\t\tHUF=$(git rev-parse HEAD) &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\n' span_id:487) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:488) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HUF\n' span_id:489) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:490) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:491) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:492) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:493) (Token id:Id.Lit_Chars val:'\n' span_id:494) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 495
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:496) 
          (Token id:Id.Lit_Chars val:'\n' span_id:497) (Token id:Id.Lit_Chars val:'\t\t## Test ahead/behind.\n' span_id:498) 
          (Token id:Id.Lit_Chars val:'\t\techo xyz >file_xyz &&\n' span_id:499) (Token id:Id.Lit_Chars val:'\t\tgit add file_xyz &&\n' span_id:500) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m xyz &&\n' span_id:501) (Token id:Id.Lit_Chars val:'\n' span_id:502) 
          (Token id:Id.Lit_Chars val:'\t\tHUF=$(git rev-parse HEAD) &&\n' span_id:503) (Token id:Id.Lit_Chars val:'\n' span_id:504) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:505) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HUF\n' span_id:506) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:507) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:508) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.ab +1 -0\n' span_id:509) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:510) (Token id:Id.Lit_Chars val:'\n' span_id:511) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 512
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:513) 
          (Token id:Id.Lit_Chars val:'\n' span_id:514) (Token id:Id.Lit_Chars val:'\t\t## Repeat the above but without --branch.\n' span_id:515) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:516) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:517) (Token id:Id.Lit_Chars val:'\n' span_id:518) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --untracked-files=all >actual &&\n'
            span_id: 519
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:520) 
          (Token id:Id.Lit_Chars val:'\n' span_id:521) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t## Test upstream-gone case. Fake this by pointing origin/master at\n'
            span_id: 522
          ) (Token id:Id.Lit_Chars val:'\t\t## a non-existing commit.\n' span_id:523) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tOLD=$(git rev-parse origin/master) &&\n'
            span_id: 524
          ) (Token id:Id.Lit_Chars val:'\t\tNEW=$_z40 &&\n' span_id:525) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tmv .git/packed-refs .git/old-packed-refs &&\n'
            span_id: 526
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsed "s/$OLD/$NEW/g" <.git/old-packed-refs >.git/packed-refs &&\n'
            span_id: 527
          ) (Token id:Id.Lit_Chars val:'\n' span_id:528) 
          (Token id:Id.Lit_Chars val:'\t\tHUF=$(git rev-parse HEAD) &&\n' span_id:529) (Token id:Id.Lit_Chars val:'\n' span_id:530) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:531) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HUF\n' span_id:532) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:533) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:534) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:535) (Token id:Id.Lit_Chars val:'\n' span_id:536) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 537
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:538) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:539)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'create and add submodule, submodule appears clean (A. S...)'
            span_id: 546
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:550) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:551) (Token id:Id.Lit_Chars val:'\tgit clone . sub_repo &&\n' span_id:552) 
          (Token id:Id.Lit_Chars val:'\tgit clone . super_repo &&\n' span_id:553) (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:554) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit submodule add ../sub_repo sub1 &&\n'
            span_id: 555
          ) (Token id:Id.Lit_Chars val:'\n' span_id:556) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t## Confirm stage/add of clean submodule.\n'
            span_id: 557
          ) (Token id:Id.Lit_Chars val:'\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n' span_id:558) 
          (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:559) (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:560) 
          (Token id:Id.Lit_Chars val:'\n' span_id:561) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:562) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:563) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:564) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:565) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:566) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n'
            span_id: 567
          ) (Token id:Id.Lit_Chars val:'\t\t1 A. S... 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:568) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:569) (Token id:Id.Lit_Chars val:'\n' span_id:570) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 571
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:572) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:573)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'untracked changes in added submodule (AM S..U)' span_id:580))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:584) 
          (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:585) (Token id:Id.Lit_Chars val:'\t\t## create untracked file in the submodule.\n' span_id:586) 
          (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:587) (Token id:Id.Lit_Chars val:'\t\t\techo "xxxx" >file_in_sub\n' span_id:588) 
          (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:589) (Token id:Id.Lit_Chars val:'\n' span_id:590) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n'
            span_id: 591
          ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:592) 
          (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:593) (Token id:Id.Lit_Chars val:'\n' span_id:594) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:595) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:596) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:597) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:598) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:599) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n'
            span_id: 600
          ) (Token id:Id.Lit_Chars val:'\t\t1 AM S..U 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:601) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:602) (Token id:Id.Lit_Chars val:'\n' span_id:603) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 604
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:605) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:606)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'staged changes in added submodule (AM S.M.)' span_id:613))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:617) 
          (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:618) (Token id:Id.Lit_Chars val:'\t\t## stage the changes in the submodule.\n' span_id:619) 
          (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:620) (Token id:Id.Lit_Chars val:'\t\t\tgit add file_in_sub\n' span_id:621) 
          (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:622) (Token id:Id.Lit_Chars val:'\n' span_id:623) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n'
            span_id: 624
          ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:625) 
          (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:626) (Token id:Id.Lit_Chars val:'\n' span_id:627) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:628) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:629) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:630) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:631) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:632) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n'
            span_id: 633
          ) (Token id:Id.Lit_Chars val:'\t\t1 AM S.M. 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:634) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:635) (Token id:Id.Lit_Chars val:'\n' span_id:636) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 637
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:638) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:639)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'staged and unstaged changes in added (AM S.M.)' span_id:646))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:650) 
          (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:651) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:652) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\t## make additional unstaged changes (on the same file) in the submodule.\n'
            span_id: 653
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\t\t## This does not cause us to get S.MU (because the submodule does not report\n'
            span_id: 654
          ) (Token id:Id.Lit_Chars val:'\t\t\t## a "?" line for the unstaged changes).\n' span_id:655) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\techo "more changes" >>file_in_sub\n'
            span_id: 656
          ) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:657) (Token id:Id.Lit_Chars val:'\n' span_id:658) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n'
            span_id: 659
          ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:660) 
          (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:661) (Token id:Id.Lit_Chars val:'\n' span_id:662) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:663) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:664) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:665) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:666) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:667) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n'
            span_id: 668
          ) (Token id:Id.Lit_Chars val:'\t\t1 AM S.M. 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:669) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:670) (Token id:Id.Lit_Chars val:'\n' span_id:671) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 672
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:673) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:674)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'staged and untracked changes in added submodule (AM S.MU)'
            span_id: 681
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:685) 
          (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:686) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:687) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\t## stage new changes in tracked file.\n'
            span_id: 688
          ) (Token id:Id.Lit_Chars val:'\t\t\tgit add file_in_sub &&\n' span_id:689) 
          (Token id:Id.Lit_Chars val:'\t\t\t## create new untracked file.\n' span_id:690) (Token id:Id.Lit_Chars val:'\t\t\techo "yyyy" >>another_file_in_sub\n' span_id:691) 
          (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:692) (Token id:Id.Lit_Chars val:'\n' span_id:693) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n'
            span_id: 694
          ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:695) 
          (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:696) (Token id:Id.Lit_Chars val:'\n' span_id:697) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:698) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:699) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:700) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:701) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:702) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n'
            span_id: 703
          ) (Token id:Id.Lit_Chars val:'\t\t1 AM S.MU 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:704) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:705) (Token id:Id.Lit_Chars val:'\n' span_id:706) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 707
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:708) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:709)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'commit within the submodule appears as new commit in super (AM SC..)'
            span_id: 716
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:720) 
          (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:721) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:722) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\t## Make a new commit in the submodule.\n'
            span_id: 723
          ) (Token id:Id.Lit_Chars val:'\t\t\tgit add file_in_sub &&\n' span_id:724) 
          (Token id:Id.Lit_Chars val:'\t\t\trm -f another_file_in_sub &&\n' span_id:725) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "new commit"\n' span_id:726) 
          (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:727) (Token id:Id.Lit_Chars val:'\n' span_id:728) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n'
            span_id: 729
          ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:730) 
          (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:731) (Token id:Id.Lit_Chars val:'\n' span_id:732) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:733) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:734) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:735) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:736) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:737) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n'
            span_id: 738
          ) (Token id:Id.Lit_Chars val:'\t\t1 AM SC.. 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:739) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:740) (Token id:Id.Lit_Chars val:'\n' span_id:741) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 742
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:743) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:744)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stage submodule in super and commit' span_id:751))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:755) 
          (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:756) (Token id:Id.Lit_Chars val:'\t\t## Stage the new submodule commit in the super.\n' span_id:757) 
          (Token id:Id.Lit_Chars val:'\t\tgit add sub1 &&\n' span_id:758) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t## Commit the super so that the sub no longer appears as added.\n'
            span_id: 759
          ) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "super commit" &&\n' span_id:760) 
          (Token id:Id.Lit_Chars val:'\n' span_id:761) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:762) 
          (Token id:Id.Lit_Chars val:'\n' span_id:763) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:764) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:765) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:766) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:767) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +1 -0\n' span_id:768) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:769) (Token id:Id.Lit_Chars val:'\n' span_id:770) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 771
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:772) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:773)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'make unstaged changes in existing submodule (.M S.M.)'
            span_id: 780
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:784) 
          (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:785) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:786) 
          (Token id:Id.Lit_Chars val:'\t\t\techo "zzzz" >>file_in_sub\n' span_id:787) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:788) (Token id:Id.Lit_Chars val:'\n' span_id:789) 
          (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:790) (Token id:Id.Lit_Chars val:'\t\tHSUB=$(cd sub1 && git rev-parse HEAD) &&\n' span_id:791) 
          (Token id:Id.Lit_Chars val:'\n' span_id:792) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:793) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:794) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:795) 
          (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:796) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +1 -0\n' span_id:797) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t1 .M S.M. 160000 160000 160000 $HSUB $HSUB sub1\n'
            span_id: 798
          ) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:799) (Token id:Id.Lit_Chars val:'\n' span_id:800) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n'
            span_id: 801
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:802) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:803)
        )
      }
    )
    (C {(test_done)})
  ]
)