(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:'split index mode tests' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(sane_unset)} {(GIT_TEST_SPLIT_INDEX)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'enable split index' span_id:26))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --split-index &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\ttest-dump-split-index .git/index >actual &&\n' span_id:32) 
          (Token
            id: Id.Lit_Chars
            val: '\tindexversion=$(test-index-version <.git/index) &&\n'
            span_id: 33
          ) (Token id:Id.Lit_Chars val:'\tif test "$indexversion" = "4"\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:35) (Token id:Id.Lit_Chars val:'\t\town=432ef4b63f32193984f339431fd50ca796493569\n' span_id:36) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tbase=508851a7f0dfa8691e9f69c7f055865389012491\n'
            span_id: 37
          ) (Token id:Id.Lit_Chars val:'\telse\n' span_id:38) 
          (Token
            id: Id.Lit_Chars
            val: '\t\town=8299b0bcd1ac364e5f1d7768efb62fa2da79a339\n'
            span_id: 39
          ) (Token id:Id.Lit_Chars val:'\t\tbase=39d890139ee5356c7ef572216cebcd27aa41f9df\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'own $own\n' span_id:43) (Token id:Id.Lit_Chars val:'base $base\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'replacements:\n' span_id:45) (Token id:Id.Lit_Chars val:'deletions:\n' span_id:46) (Token id:Id.Lit_Chars val:'EOF\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:48)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add one file' span_id:55))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\t: >one &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tgit update-index --add one &&\n' span_id:61) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-files --stage >ls-files.actual &&\n'
            span_id: 62
          ) (Token id:Id.Lit_Chars val:'\tcat >ls-files.expect <<EOF &&\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\tone\n' span_id:64) (Token id:Id.Lit_Chars val:'EOF\n' span_id:65) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp ls-files.expect ls-files.actual &&\n'
            span_id: 66
          ) (Token id:Id.Lit_Chars val:'\n' span_id:67) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'
            span_id: 68
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'base $base\n' span_id:70) (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\tone\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'replacements:\n' span_id:72) (Token id:Id.Lit_Chars val:'deletions:\n' span_id:73) (Token id:Id.Lit_Chars val:'EOF\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:75)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'disable split index' span_id:82))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --no-split-index &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage >ls-files.actual &&\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\tcat >ls-files.expect <<EOF &&\n' span_id:89) (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\tone\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:91) (Token id:Id.Lit_Chars val:'\ttest_cmp ls-files.expect ls-files.actual &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\n' span_id:93) 
          (Token
            id: Id.Lit_Chars
            val: '\tBASE=$(test-dump-split-index .git/index | grep "^own" | sed "s/own/base/") &&\n'
            span_id: 94
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'
            span_id: 95
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'not a split index\n' span_id:97) (Token id:Id.Lit_Chars val:'EOF\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:99)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'enable split index again, "one" now belongs to base index"'
            span_id: 106
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:110) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --split-index &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage >ls-files.actual &&\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\tcat >ls-files.expect <<EOF &&\n' span_id:113) (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\tone\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:115) (Token id:Id.Lit_Chars val:'\ttest_cmp ls-files.expect ls-files.actual &&\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\n' span_id:117) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'
            span_id: 118
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'$BASE\n' span_id:120) (Token id:Id.Lit_Chars val:'replacements:\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'deletions:\n' span_id:122) (Token id:Id.Lit_Chars val:'EOF\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:124)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modify original file, base index untouched' span_id:131))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\techo modified >one &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\tgit update-index one &&\n' span_id:137) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-files --stage >ls-files.actual &&\n'
            span_id: 138
          ) (Token id:Id.Lit_Chars val:'\tcat >ls-files.expect <<EOF &&\n' span_id:139) 
          (Token
            id: Id.Lit_Chars
            val: '100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0\tone\n'
            span_id: 140
          ) (Token id:Id.Lit_Chars val:'EOF\n' span_id:141) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp ls-files.expect ls-files.actual &&\n'
            span_id: 142
          ) (Token id:Id.Lit_Chars val:'\n' span_id:143) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'
            span_id: 144
          ) (Token id:Id.Lit_Chars val:'\tq_to_tab >expect <<EOF &&\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'$BASE\n' span_id:146) (Token id:Id.Lit_Chars val:'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'replacements: 0\n' span_id:148) (Token id:Id.Lit_Chars val:'deletions:\n' span_id:149) (Token id:Id.Lit_Chars val:'EOF\n' span_id:150) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:151)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'add another file, which stays index' span_id:158))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:162) 
          (Token id:Id.Lit_Chars val:'\t: >two &&\n' span_id:163) (Token id:Id.Lit_Chars val:'\tgit update-index --add two &&\n' span_id:164) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-files --stage >ls-files.actual &&\n'
            span_id: 165
          ) (Token id:Id.Lit_Chars val:'\tcat >ls-files.expect <<EOF &&\n' span_id:166) 
          (Token
            id: Id.Lit_Chars
            val: '100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0\tone\n'
            span_id: 167
          ) (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\ttwo\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:169) (Token id:Id.Lit_Chars val:'\ttest_cmp ls-files.expect ls-files.actual &&\n' span_id:170) 
          (Token id:Id.Lit_Chars val:'\n' span_id:171) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'
            span_id: 172
          ) (Token id:Id.Lit_Chars val:'\tq_to_tab >expect <<EOF &&\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'$BASE\n' span_id:174) (Token id:Id.Lit_Chars val:'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\ttwo\n' span_id:176) (Token id:Id.Lit_Chars val:'replacements: 0\n' span_id:177) 
          (Token id:Id.Lit_Chars val:'deletions:\n' span_id:178) (Token id:Id.Lit_Chars val:'EOF\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:'remove file not in base index' span_id:187))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:191) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --force-remove two &&\n'
            span_id: 192
          ) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage >ls-files.actual &&\n' span_id:193) 
          (Token id:Id.Lit_Chars val:'\tcat >ls-files.expect <<EOF &&\n' span_id:194) (Token id:Id.Lit_Chars val:'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0\tone\n' span_id:195) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:196) (Token id:Id.Lit_Chars val:'\ttest_cmp ls-files.expect ls-files.actual &&\n' span_id:197) 
          (Token id:Id.Lit_Chars val:'\n' span_id:198) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'
            span_id: 199
          ) (Token id:Id.Lit_Chars val:'\tq_to_tab >expect <<EOF &&\n' span_id:200) 
          (Token id:Id.Lit_Chars val:'$BASE\n' span_id:201) (Token id:Id.Lit_Chars val:'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q\n' span_id:202) 
          (Token id:Id.Lit_Chars val:'replacements: 0\n' span_id:203) (Token id:Id.Lit_Chars val:'deletions:\n' span_id:204) (Token id:Id.Lit_Chars val:'EOF\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:'remove file in base index' span_id:213))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:217) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --force-remove one &&\n'
            span_id: 218
          ) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage >ls-files.actual &&\n' span_id:219) 
          (Token id:Id.Lit_Chars val:'\tcat >ls-files.expect <<EOF &&\n' span_id:220) (Token id:Id.Lit_Chars val:'EOF\n' span_id:221) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp ls-files.expect ls-files.actual &&\n'
            span_id: 222
          ) (Token id:Id.Lit_Chars val:'\n' span_id:223) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'
            span_id: 224
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:225) 
          (Token id:Id.Lit_Chars val:'$BASE\n' span_id:226) (Token id:Id.Lit_Chars val:'replacements:\n' span_id:227) 
          (Token id:Id.Lit_Chars val:'deletions: 0\n' span_id:228) (Token id:Id.Lit_Chars val:'EOF\n' span_id:229) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:230)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add original file back' span_id:237))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'\t: >one &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\tgit update-index --add one &&\n' span_id:243) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-files --stage >ls-files.actual &&\n'
            span_id: 244
          ) (Token id:Id.Lit_Chars val:'\tcat >ls-files.expect <<EOF &&\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\tone\n' span_id:246) (Token id:Id.Lit_Chars val:'EOF\n' span_id:247) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp ls-files.expect ls-files.actual &&\n'
            span_id: 248
          ) (Token id:Id.Lit_Chars val:'\n' span_id:249) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'
            span_id: 250
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:251) 
          (Token id:Id.Lit_Chars val:'$BASE\n' span_id:252) (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\tone\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'replacements:\n' span_id:254) (Token id:Id.Lit_Chars val:'deletions: 0\n' span_id:255) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:256) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:257)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add new file' span_id:264))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:268) 
          (Token id:Id.Lit_Chars val:'\t: >two &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\tgit update-index --add two &&\n' span_id:270) 
          (Token id:Id.Lit_Chars val:'\tgit ls-files --stage >actual &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:272) 
          (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\tone\n' span_id:273) (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\ttwo\n' span_id:274) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:275) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:276)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'unify index, two files remain' span_id:283))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:287) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --no-split-index &&\n'
            span_id: 288
          ) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage >ls-files.actual &&\n' span_id:289) 
          (Token id:Id.Lit_Chars val:'\tcat >ls-files.expect <<EOF &&\n' span_id:290) (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\tone\n' span_id:291) 
          (Token id:Id.Lit_Chars val:'100644 $EMPTY_BLOB 0\ttwo\n' span_id:292) (Token id:Id.Lit_Chars val:'EOF\n' span_id:293) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp ls-files.expect ls-files.actual &&\n'
            span_id: 294
          ) (Token id:Id.Lit_Chars val:'\n' span_id:295) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'
            span_id: 296
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:297) 
          (Token id:Id.Lit_Chars val:'not a split index\n' span_id:298) (Token id:Id.Lit_Chars val:'EOF\n' span_id:299) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:300)
        )
      }
    )
    (C {(test_done)})
  ]
)