(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description) op: assign_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] ) ] redirects: [] ) (C {<.>} {<'./lib-git-svn.sh'>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_REPO='> name:GIT_REPO) op: assign_op.Equal rhs: {<git-svn-repo>} spids: [28] ) ] redirects: [] ) (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>}) ] )