(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'git rebase tests for -Xsubtree\n'> <'\n'> 
                <'This test runs git rebase and tests the subtree strategy.\n'>
              )
            }
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<.>} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) <'/lib-rebase.sh'>})
    (command.ShFunction
      name: commit_message
      body: 
        (BraceGroup
          children: [
            (C {<git>} {<log>} 
              {<--pretty> <Id.Lit_Equals '='> <format> <Id.Lit_Colon ':'> <Id.Lit_Other '%'> <s>} {<-1>} {(DQ ($ Id.VSub_Number '$1'))}
            )
          ]
        )
    )
    (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>})
  ]
)