(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: 
            {
              (SQ <'git svn test (option --preserve-empty-dirs)\n'> <'\n'> 
                <'This test uses git to clone a Subversion repository that contains empty\n'> <'directories, and checks that corresponding directories are created in the\n'> 
                <'local Git repository with placeholder files.'>
              )
            }
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:GIT_REPO) op:Equal rhs:{(git-svn-repo)} spids:[28])]
      spids: [28]
    )
    (C {(test_expect_success)} {(SQ <'initialize source svn repo containing empty dirs'>)} 
      {
        (SQ <'\n'> <'\tsvn_cmd mkdir -m x "$svnrepo"/trunk &&\n'> 
          <'\tsvn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&\n'> <'\t(\n'> <'\t\tcd "$SVN_TREE" &&\n'> <'\t\tmkdir -p 1 2 3/a 3/b 4 5 6 &&\n'> 
          <'\t\techo "First non-empty file"  > 2/file1.txt &&\n'> <'\t\techo "Second non-empty file" > 2/file2.txt &&\n'> 
          <'\t\techo "Third non-empty file"  > 3/a/file1.txt &&\n'> <'\t\techo "Fourth non-empty file" > 3/b/file1.txt &&\n'> <'\t\tsvn_cmd add 1 2 3 4 5 6 &&\n'> 
          <'\t\tsvn_cmd commit -m "initial commit" &&\n'> <'\n'> <'\t\tmkdir 4/a &&\n'> <'\t\tsvn_cmd add 4/a &&\n'> 
          <'\t\tsvn_cmd commit -m "nested empty directory" &&\n'> <'\t\tmkdir 4/a/b &&\n'> <'\t\tsvn_cmd add 4/a/b &&\n'> 
          <'\t\tsvn_cmd commit -m "deeply nested empty directory" &&\n'> <'\t\tmkdir 4/a/b/c &&\n'> <'\t\tsvn_cmd add 4/a/b/c &&\n'> 
          <'\t\tsvn_cmd commit -m "really deeply nested empty directory" &&\n'> <'\t\techo "Kill the placeholder file" > 4/a/b/c/foo &&\n'> <'\t\tsvn_cmd add 4/a/b/c/foo &&\n'> 
          <'\t\tsvn_cmd commit -m "Regular file to remove placeholder" &&\n'> <'\n'> <'\t\tsvn_cmd del 2/file2.txt &&\n'> <'\t\tsvn_cmd del 3/b &&\n'> 
          <'\t\tsvn_cmd commit -m "delete non-last entry in directory" &&\n'> <'\n'> <'\t\tsvn_cmd del 2/file1.txt &&\n'> <'\t\tsvn_cmd del 3/a &&\n'> 
          <'\t\tsvn_cmd commit -m "delete last entry in directory" &&\n'> <'\n'> <'\t\techo "Conflict file" > 5/.placeholder &&\n'> <'\t\tmkdir 6/.placeholder &&\n'> 
          <'\t\tsvn_cmd add 5/.placeholder 6/.placeholder &&\n'> <'\t\tsvn_cmd commit -m "Placeholder Namespace conflict"\n'> <'\t) &&\n'> <'\trm -rf "$SVN_TREE"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'clone svn repo with --preserve-empty-dirs'>)} 
      {(SQ <'\n'> <'\tgit svn clone "$svnrepo"/trunk --preserve-empty-dirs "$GIT_REPO"\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'directory empty from inception'>)} 
      {
        (SQ <'\n'> <'\ttest -f "$GIT_REPO"/1/.gitignore &&\n'> 
          <'\ttest $(find "$GIT_REPO"/1 -type f | wc -l) = "1"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'directory empty from subsequent svn commit'>)} 
      {
        (SQ <'\n'> <'\ttest -f "$GIT_REPO"/2/.gitignore &&\n'> 
          <'\ttest $(find "$GIT_REPO"/2 -type f | wc -l) = "1" &&\n'> <'\ttest -f "$GIT_REPO"/3/.gitignore &&\n'> <'\ttest $(find "$GIT_REPO"/3 -type f | wc -l) = "1"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add entry to previously empty directory'>)} 
      {
        (SQ <'\n'> <'\ttest $(find "$GIT_REPO"/4 -type f | wc -l) = "1" &&\n'> 
          <'\ttest -f "$GIT_REPO"/4/a/b/c/foo\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remove non-last entry from directory'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd "$GIT_REPO" &&\n'> <'\t\tgit checkout HEAD~2\n'> <'\t) &&\n'> 
          <'\ttest_must_fail test -f "$GIT_REPO"/2/.gitignore &&\n'> <'\ttest_must_fail test -f "$GIT_REPO"/3/.gitignore\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'clone svn repo with --placeholder-file specified'>)} 
      {
        (SQ <'\n'> <'\trm -rf "$GIT_REPO" &&\n'> 
          <'\tgit svn clone "$svnrepo"/trunk --preserve-empty-dirs \\\n'> <'\t\t--placeholder-file=.placeholder "$GIT_REPO" &&\n'> 
          <'\tfind "$GIT_REPO" -type f -name ".placeholder" &&\n'> <'\ttest $(find "$GIT_REPO" -type f -name ".placeholder" | wc -l) = "5"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'placeholder namespace conflict with file'>)} 
      {(SQ <'\n'> <'\ttest -s "$GIT_REPO"/5/.placeholder\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'placeholder namespace conflict with directory'>)} 
      {
        (SQ <'\n'> <'\ttest -d "$GIT_REPO"/6/.placeholder &&\n'> 
          <'\ttest -f "$GIT_REPO"/6/.placeholder/.placeholder &&\n'> <'\ttest $(find "$GIT_REPO"/6 -type f | wc -l) = "1"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'second set of svn commits and rebase'>)} 
      {
        (SQ <'\n'> <'\tsvn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&\n'> <'\t(\n'> 
          <'\t\tcd "$SVN_TREE" &&\n'> <'\t\tmkdir -p 7 &&\n'> <'\t\techo "This should remove placeholder" > 1/file1.txt &&\n'> 
          <'\t\techo "This should not remove placeholder" > 5/file1.txt &&\n'> <'\t\tsvn_cmd add 7 1/file1.txt 5/file1.txt &&\n'> 
          <'\t\tsvn_cmd commit -m "subsequent svn commit for persistence tests"\n'> <'\t) &&\n'> <'\trm -rf "$SVN_TREE" &&\n'> <'\t(\n'> <'\t\tcd "$GIT_REPO" &&\n'> <'\t\tgit svn rebase\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'flag persistence during subsqeuent rebase'>)} 
      {
        (SQ <'\n'> <'\ttest -f "$GIT_REPO"/7/.placeholder &&\n'> 
          <'\ttest $(find "$GIT_REPO"/7 -type f | wc -l) = "1"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'placeholder list persistence during subsqeuent rebase'>)} 
      {
        (SQ <'\n'> <'\ttest -f "$GIT_REPO"/1/file1.txt &&\n'> 
          <'\ttest $(find "$GIT_REPO"/1 -type f | wc -l) = "1" &&\n'> <'\n'> <'\ttest -f "$GIT_REPO"/5/file1.txt &&\n'> <'\ttest -f "$GIT_REPO"/5/.placeholder &&\n'> 
          <'\ttest $(find "$GIT_REPO"/5 -type f | wc -l) = "2"\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)