(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'split index mode tests'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(sane_unset)} {(GIT_TEST_SPLIT_INDEX)})
    (C {(test_expect_success)} {(SQ <'enable split index'>)} 
      {
        (SQ <'\n'> <'\tgit update-index --split-index &&\n'> 
          <'\ttest-dump-split-index .git/index >actual &&\n'> <'\tindexversion=$(test-index-version <.git/index) &&\n'> <'\tif test "$indexversion" = "4"\n'> 
          <'\tthen\n'> <'\t\town=432ef4b63f32193984f339431fd50ca796493569\n'> 
          <'\t\tbase=508851a7f0dfa8691e9f69c7f055865389012491\n'> <'\telse\n'> <'\t\town=8299b0bcd1ac364e5f1d7768efb62fa2da79a339\n'> 
          <'\t\tbase=39d890139ee5356c7ef572216cebcd27aa41f9df\n'> <'\tfi &&\n'> <'\tcat >expect <<EOF &&\n'> <'own $own\n'> <'base $base\n'> <'replacements:\n'> 
          <'deletions:\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add one file'>)} 
      {
        (SQ <'\n'> <'\t: >one &&\n'> <'\tgit update-index --add one &&\n'> 
          <'\tgit ls-files --stage >ls-files.actual &&\n'> <'\tcat >ls-files.expect <<EOF &&\n'> <'100644 $EMPTY_BLOB 0\tone\n'> <'EOF\n'> 
          <'\ttest_cmp ls-files.expect ls-files.actual &&\n'> <'\n'> <'\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'> <'\tcat >expect <<EOF &&\n'> 
          <'base $base\n'> <'100644 $EMPTY_BLOB 0\tone\n'> <'replacements:\n'> <'deletions:\n'> <'EOF\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'disable split index'>)} 
      {
        (SQ <'\n'> <'\tgit update-index --no-split-index &&\n'> 
          <'\tgit ls-files --stage >ls-files.actual &&\n'> <'\tcat >ls-files.expect <<EOF &&\n'> <'100644 $EMPTY_BLOB 0\tone\n'> <'EOF\n'> 
          <'\ttest_cmp ls-files.expect ls-files.actual &&\n'> <'\n'> <'\tBASE=$(test-dump-split-index .git/index | grep "^own" | sed "s/own/base/") &&\n'> 
          <'\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'> <'\tcat >expect <<EOF &&\n'> <'not a split index\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'enable split index again, "one" now belongs to base index"'>)} 
      {
        (SQ <'\n'> <'\tgit update-index --split-index &&\n'> 
          <'\tgit ls-files --stage >ls-files.actual &&\n'> <'\tcat >ls-files.expect <<EOF &&\n'> <'100644 $EMPTY_BLOB 0\tone\n'> <'EOF\n'> 
          <'\ttest_cmp ls-files.expect ls-files.actual &&\n'> <'\n'> <'\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'> <'\tcat >expect <<EOF &&\n'> 
          <'$BASE\n'> <'replacements:\n'> <'deletions:\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'modify original file, base index untouched'>)} 
      {
        (SQ <'\n'> <'\techo modified >one &&\n'> <'\tgit update-index one &&\n'> 
          <'\tgit ls-files --stage >ls-files.actual &&\n'> <'\tcat >ls-files.expect <<EOF &&\n'> <'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0\tone\n'> 
          <'EOF\n'> <'\ttest_cmp ls-files.expect ls-files.actual &&\n'> <'\n'> 
          <'\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'> <'\tq_to_tab >expect <<EOF &&\n'> <'$BASE\n'> <'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q\n'> 
          <'replacements: 0\n'> <'deletions:\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add another file, which stays index'>)} 
      {
        (SQ <'\n'> <'\t: >two &&\n'> <'\tgit update-index --add two &&\n'> 
          <'\tgit ls-files --stage >ls-files.actual &&\n'> <'\tcat >ls-files.expect <<EOF &&\n'> <'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0\tone\n'> 
          <'100644 $EMPTY_BLOB 0\ttwo\n'> <'EOF\n'> <'\ttest_cmp ls-files.expect ls-files.actual &&\n'> <'\n'> 
          <'\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'> <'\tq_to_tab >expect <<EOF &&\n'> <'$BASE\n'> <'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q\n'> 
          <'100644 $EMPTY_BLOB 0\ttwo\n'> <'replacements: 0\n'> <'deletions:\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remove file not in base index'>)} 
      {
        (SQ <'\n'> <'\tgit update-index --force-remove two &&\n'> 
          <'\tgit ls-files --stage >ls-files.actual &&\n'> <'\tcat >ls-files.expect <<EOF &&\n'> <'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0\tone\n'> 
          <'EOF\n'> <'\ttest_cmp ls-files.expect ls-files.actual &&\n'> <'\n'> 
          <'\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'> <'\tq_to_tab >expect <<EOF &&\n'> <'$BASE\n'> <'100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q\n'> 
          <'replacements: 0\n'> <'deletions:\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remove file in base index'>)} 
      {
        (SQ <'\n'> <'\tgit update-index --force-remove one &&\n'> 
          <'\tgit ls-files --stage >ls-files.actual &&\n'> <'\tcat >ls-files.expect <<EOF &&\n'> <'EOF\n'> <'\ttest_cmp ls-files.expect ls-files.actual &&\n'> 
          <'\n'> <'\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'> <'\tcat >expect <<EOF &&\n'> 
          <'$BASE\n'> <'replacements:\n'> <'deletions: 0\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add original file back'>)} 
      {
        (SQ <'\n'> <'\t: >one &&\n'> <'\tgit update-index --add one &&\n'> 
          <'\tgit ls-files --stage >ls-files.actual &&\n'> <'\tcat >ls-files.expect <<EOF &&\n'> <'100644 $EMPTY_BLOB 0\tone\n'> <'EOF\n'> 
          <'\ttest_cmp ls-files.expect ls-files.actual &&\n'> <'\n'> <'\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'> <'\tcat >expect <<EOF &&\n'> 
          <'$BASE\n'> <'100644 $EMPTY_BLOB 0\tone\n'> <'replacements:\n'> <'deletions: 0\n'> <'EOF\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add new file'>)} 
      {
        (SQ <'\n'> <'\t: >two &&\n'> <'\tgit update-index --add two &&\n'> 
          <'\tgit ls-files --stage >actual &&\n'> <'\tcat >expect <<EOF &&\n'> <'100644 $EMPTY_BLOB 0\tone\n'> <'100644 $EMPTY_BLOB 0\ttwo\n'> <'EOF\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'unify index, two files remain'>)} 
      {
        (SQ <'\n'> <'\tgit update-index --no-split-index &&\n'> 
          <'\tgit ls-files --stage >ls-files.actual &&\n'> <'\tcat >ls-files.expect <<EOF &&\n'> <'100644 $EMPTY_BLOB 0\tone\n'> <'100644 $EMPTY_BLOB 0\ttwo\n'> 
          <'EOF\n'> <'\ttest_cmp ls-files.expect ls-files.actual &&\n'> <'\n'> 
          <'\ttest-dump-split-index .git/index | sed "/^own/d" >actual &&\n'> <'\tcat >expect <<EOF &&\n'> <'not a split index\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)