(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)}) ] )