(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: 'git svn test (option --preserve-empty-dirs)\n'
                  span_id: 15
                ) (Token id:Id.Lit_Chars val:'\n' span_id:16) 
                (Token
                  id: Id.Lit_Chars
                  val: 'This test uses git to clone a Subversion repository that contains empty\n'
                  span_id: 17
                ) 
                (Token
                  id: Id.Lit_Chars
                  val: 'directories, and checks that corresponding directories are created in the\n'
                  span_id: 18
                ) (Token id:Id.Lit_Chars val:'local Git repository with placeholder files.' span_id:19)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_REPO)
          op: assign_op.Equal
          rhs: {(git-svn-repo)}
          spids: [28]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'initialize source svn repo containing empty dirs' span_id:35))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:39) 
          (Token
            id: Id.Lit_Chars
            val: '\tsvn_cmd mkdir -m x "$svnrepo"/trunk &&\n'
            span_id: 40
          ) (Token id:Id.Lit_Chars val:'\tsvn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:42) (Token id:Id.Lit_Chars val:'\t\tcd "$SVN_TREE" &&\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\t\tmkdir -p 1 2 3/a 3/b 4 5 6 &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\t\techo "First non-empty file"  > 2/file1.txt &&\n' span_id:45) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "Second non-empty file" > 2/file2.txt &&\n'
            span_id: 46
          ) (Token id:Id.Lit_Chars val:'\t\techo "Third non-empty file"  > 3/a/file1.txt &&\n' span_id:47) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "Fourth non-empty file" > 3/b/file1.txt &&\n'
            span_id: 48
          ) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd add 1 2 3 4 5 6 &&\n' span_id:49) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "initial commit" &&\n'
            span_id: 50
          ) (Token id:Id.Lit_Chars val:'\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\t\tmkdir 4/a &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd add 4/a &&\n' span_id:53) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "nested empty directory" &&\n'
            span_id: 54
          ) (Token id:Id.Lit_Chars val:'\t\tmkdir 4/a/b &&\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\t\tsvn_cmd add 4/a/b &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd commit -m "deeply nested empty directory" &&\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\t\tmkdir 4/a/b/c &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd add 4/a/b/c &&\n' span_id:59) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "really deeply nested empty directory" &&\n'
            span_id: 60
          ) (Token id:Id.Lit_Chars val:'\t\techo "Kill the placeholder file" > 4/a/b/c/foo &&\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\t\tsvn_cmd add 4/a/b/c/foo &&\n' span_id:62) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "Regular file to remove placeholder" &&\n'
            span_id: 63
          ) (Token id:Id.Lit_Chars val:'\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\t\tsvn_cmd del 2/file2.txt &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd del 3/b &&\n' span_id:66) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "delete non-last entry in directory" &&\n'
            span_id: 67
          ) (Token id:Id.Lit_Chars val:'\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\t\tsvn_cmd del 2/file1.txt &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd del 3/a &&\n' span_id:70) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "delete last entry in directory" &&\n'
            span_id: 71
          ) (Token id:Id.Lit_Chars val:'\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "Conflict file" > 5/.placeholder &&\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\t\tmkdir 6/.placeholder &&\n' span_id:74) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd add 5/.placeholder 6/.placeholder &&\n'
            span_id: 75
          ) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd commit -m "Placeholder Namespace conflict"\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\trm -rf "$SVN_TREE"\n' span_id:78)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clone svn repo with --preserve-empty-dirs' span_id:85))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit svn clone "$svnrepo"/trunk --preserve-empty-dirs "$GIT_REPO"\n'
            span_id: 90
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'directory empty from inception' span_id:100))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\ttest -f "$GIT_REPO"/1/.gitignore &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\ttest $(find "$GIT_REPO"/1 -type f | wc -l) = "1"\n' span_id:106)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'directory empty from subsequent svn commit' span_id:116))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\ttest -f "$GIT_REPO"/2/.gitignore &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\ttest $(find "$GIT_REPO"/2 -type f | wc -l) = "1" &&\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\ttest -f "$GIT_REPO"/3/.gitignore &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\ttest $(find "$GIT_REPO"/3 -type f | wc -l) = "1"\n' span_id:124)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'add entry to previously empty directory' span_id:137))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:141) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(find "$GIT_REPO"/4 -type f | wc -l) = "1" &&\n'
            span_id: 142
          ) (Token id:Id.Lit_Chars val:'\ttest -f "$GIT_REPO"/4/a/b/c/foo\n' span_id:143)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'remove non-last entry from directory' span_id:153))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:158) (Token id:Id.Lit_Chars val:'\t\tcd "$GIT_REPO" &&\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout HEAD~2\n' span_id:160) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:161) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail test -f "$GIT_REPO"/2/.gitignore &&\n'
            span_id: 162
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail test -f "$GIT_REPO"/3/.gitignore\n' span_id:163)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'clone svn repo with --placeholder-file specified'
            span_id: 176
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\trm -rf "$GIT_REPO" &&\n' span_id:181) (Token id:Id.Lit_Chars val:'\tgit svn clone "$svnrepo"/trunk --preserve-empty-dirs \\\n' span_id:182) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t--placeholder-file=.placeholder "$GIT_REPO" &&\n'
            span_id: 183
          ) (Token id:Id.Lit_Chars val:'\tfind "$GIT_REPO" -type f -name ".placeholder" &&\n' span_id:184) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(find "$GIT_REPO" -type f -name ".placeholder" | wc -l) = "5"\n'
            span_id: 185
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'placeholder namespace conflict with file' span_id:195))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) 
          (Token id:Id.Lit_Chars val:'\ttest -s "$GIT_REPO"/5/.placeholder\n' span_id:200)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'placeholder namespace conflict with directory' span_id:213))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:217) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -d "$GIT_REPO"/6/.placeholder &&\n'
            span_id: 218
          ) (Token id:Id.Lit_Chars val:'\ttest -f "$GIT_REPO"/6/.placeholder/.placeholder &&\n' span_id:219) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(find "$GIT_REPO"/6 -type f | wc -l) = "1"\n'
            span_id: 220
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'second set of svn commits and rebase' span_id:230))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:234) 
          (Token
            id: Id.Lit_Chars
            val: '\tsvn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&\n'
            span_id: 235
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:236) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$SVN_TREE" &&\n' span_id:237) (Token id:Id.Lit_Chars val:'\t\tmkdir -p 7 &&\n' span_id:238) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "This should remove placeholder" > 1/file1.txt &&\n'
            span_id: 239
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "This should not remove placeholder" > 5/file1.txt &&\n'
            span_id: 240
          ) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd add 7 1/file1.txt 5/file1.txt &&\n' span_id:241) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "subsequent svn commit for persistence tests"\n'
            span_id: 242
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\trm -rf "$SVN_TREE" &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\t(\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$GIT_REPO" &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\t\tgit svn rebase\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:248)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'flag persistence during subsqeuent rebase' span_id:261))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -f "$GIT_REPO"/7/.placeholder &&\n'
            span_id: 266
          ) (Token id:Id.Lit_Chars val:'\ttest $(find "$GIT_REPO"/7 -type f | wc -l) = "1"\n' span_id:267)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'placeholder list persistence during subsqeuent rebase'
            span_id: 280
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:284) 
          (Token id:Id.Lit_Chars val:'\ttest -f "$GIT_REPO"/1/file1.txt &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\ttest $(find "$GIT_REPO"/1 -type f | wc -l) = "1" &&\n' span_id:286) 
          (Token id:Id.Lit_Chars val:'\n' span_id:287) (Token id:Id.Lit_Chars val:'\ttest -f "$GIT_REPO"/5/file1.txt &&\n' span_id:288) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -f "$GIT_REPO"/5/.placeholder &&\n'
            span_id: 289
          ) (Token id:Id.Lit_Chars val:'\ttest $(find "$GIT_REPO"/5 -type f | wc -l) = "2"\n' span_id:290)
        )
      }
    )
    (C {(test_done)})
  ]
)