(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: 
            {
              (SQ <"git rebase tests for -Xsubtree\n"> <"\n"> 
                <"This test runs git rebase and tests the subtree strategy.\n">
              )
            }
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/lib-rebase.sh)})
    (FuncDef
      name: commit_message
      body: 
        (BraceGroup
          children: [
            (C {(git)} {(log)} {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (s)} 
              {(-1)} {(DQ ($ VSub_Number "$1"))}
            )
          ]
          spids: [27]
        )
      spids: [23 26]
    )
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <"\n"> <"\ttest_commit README &&\n"> <"\tmkdir files &&\n"> <"\t(\n"> <"\t\tcd files &&\n"> 
          <"\t\tgit init &&\n"> <"\t\ttest_commit master1 &&\n"> <"\t\ttest_commit master2 &&\n"> <"\t\ttest_commit master3\n"> 
          <"\t) &&\n"> <"\tgit fetch files master &&\n"> <"\tgit branch files-master FETCH_HEAD &&\n"> 
          <"\tgit read-tree --prefix=files_subtree files-master &&\n"> <"\tgit checkout -- files_subtree &&\n"> <"\ttree=$(git write-tree) &&\n"> 
          <"\thead=$(git rev-parse HEAD) &&\n"> <"\trev=$(git rev-parse --verify files-master^0) &&\n"> 
          <"\tcommit=$(git commit-tree -p $head -p $rev -m \"Add subproject master\" $tree) &&\n"> <"\tgit update-ref HEAD $commit &&\n"> <"\t(\n"> <"\t\tcd files_subtree &&\n"> 
          <"\t\ttest_commit master4\n"> <"\t) &&\n"> <"\ttest_commit files_subtree/master5\n">
        )
      }
    )
    (C {(test_expect_failure)} {(SQ <"Rebase -Xsubtree --preserve-merges --onto commit 4">)} 
      {
        (SQ <"\n"> <"\treset_rebase &&\n"> <"\tgit checkout -b rebase-preserve-merges-4 master &&\n"> 
          <"\tgit filter-branch --prune-empty -f --subdirectory-filter files_subtree &&\n"> <"\tgit commit -m \"Empty commit\" --allow-empty &&\n"> 
          <
"\tgit rebase -Xsubtree=files_subtree --preserve-merges --onto files-master master &&\n"
          > <"\tverbose test \"$(commit_message HEAD~)\" = \"files_subtree/master4\"\n">
        )
      }
    )
    (C {(test_expect_failure)} {(SQ <"Rebase -Xsubtree --preserve-merges --onto commit 5">)} 
      {
        (SQ <"\n"> <"\treset_rebase &&\n"> <"\tgit checkout -b rebase-preserve-merges-5 master &&\n"> 
          <"\tgit filter-branch --prune-empty -f --subdirectory-filter files_subtree &&\n"> <"\tgit commit -m \"Empty commit\" --allow-empty &&\n"> 
          <
"\tgit rebase -Xsubtree=files_subtree --preserve-merges --onto files-master master &&\n"
          > <"\tverbose test \"$(commit_message HEAD)\" = \"files_subtree/master5\"\n">
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ <"Rebase -Xsubtree --keep-empty --preserve-merges --onto commit 4">)} 
      {
        (SQ <"\n"> <"\treset_rebase &&\n"> <"\tgit checkout -b rebase-keep-empty-4 master &&\n"> 
          <"\tgit filter-branch --prune-empty -f --subdirectory-filter files_subtree &&\n"> <"\tgit commit -m \"Empty commit\" --allow-empty &&\n"> 
          <
"\tgit rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&\n"
          > <"\tverbose test \"$(commit_message HEAD~2)\" = \"files_subtree/master4\"\n">
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ <"Rebase -Xsubtree --keep-empty --preserve-merges --onto commit 5">)} 
      {
        (SQ <"\n"> <"\treset_rebase &&\n"> <"\tgit checkout -b rebase-keep-empty-5 master &&\n"> 
          <"\tgit filter-branch --prune-empty -f --subdirectory-filter files_subtree &&\n"> <"\tgit commit -m \"Empty commit\" --allow-empty &&\n"> 
          <
"\tgit rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&\n"
          > <"\tverbose test \"$(commit_message HEAD~)\" = \"files_subtree/master5\"\n">
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ <"Rebase -Xsubtree --keep-empty --preserve-merges --onto empty commit">)} 
      {
        (SQ <"\n"> <"\treset_rebase &&\n"> <"\tgit checkout -b rebase-keep-empty-empty master &&\n"> 
          <"\tgit filter-branch --prune-empty -f --subdirectory-filter files_subtree &&\n"> <"\tgit commit -m \"Empty commit\" --allow-empty &&\n"> 
          <
"\tgit rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&\n"
          > <"\tverbose test \"$(commit_message HEAD)\" = \"Empty commit\"\n">
        )
      }
    )
    (C {(test_expect_failure)} {(SQ <"Rebase -Xsubtree --onto commit 4">)} 
      {
        (SQ <"\n"> <"\treset_rebase &&\n"> <"\tgit checkout -b rebase-onto-4 master &&\n"> 
          <"\tgit filter-branch --prune-empty -f --subdirectory-filter files_subtree &&\n"> <"\tgit commit -m \"Empty commit\" --allow-empty &&\n"> 
          <"\tgit rebase -Xsubtree=files_subtree --onto files-master master &&\n"> <"\tverbose test \"$(commit_message HEAD~2)\" = \"files_subtree/master4\"\n">
        )
      }
    )
    (C {(test_expect_failure)} {(SQ <"Rebase -Xsubtree --onto commit 5">)} 
      {
        (SQ <"\n"> <"\treset_rebase &&\n"> <"\tgit checkout -b rebase-onto-5 master &&\n"> 
          <"\tgit filter-branch --prune-empty -f --subdirectory-filter files_subtree &&\n"> <"\tgit commit -m \"Empty commit\" --allow-empty &&\n"> 
          <"\tgit rebase -Xsubtree=files_subtree --onto files-master master &&\n"> <"\tverbose test \"$(commit_message HEAD~)\" = \"files_subtree/master5\"\n">
        )
      }
    )
    (C {(test_expect_failure)} {(SQ <"Rebase -Xsubtree --onto empty commit">)} 
      {
        (SQ <"\n"> <"\treset_rebase &&\n"> <"\tgit checkout -b rebase-onto-empty master &&\n"> 
          <"\tgit filter-branch --prune-empty -f --subdirectory-filter files_subtree &&\n"> <"\tgit commit -m \"Empty commit\" --allow-empty &&\n"> 
          <"\tgit rebase -Xsubtree=files_subtree --onto files-master master &&\n"> <"\tverbose test \"$(commit_message HEAD)\" = \"Empty commit\"\n">
        )
      }
    )
    (C {(test_done)})
  ]
)