You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/09/15 21:32:38 UTC

svn commit: r997472 [38/41] - in /subversion/branches/py-tests-as-modules: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ contrib/server-side/ notes/ notes/tree-conflicts/ notes/wc-ng/ subversion/bindings/javahl/native/ subversi...

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/copy-from-previous-version.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/copy-from-previous-version.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/copy-from-previous-version.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/copy-from-previous-version.dump Wed Sep 15 19:32:26 2010
@@ -16,11 +16,6 @@ Revision-number: 1
 Prop-content-length: 104
 Content-length: 104
 
-K 7
-svn:log
-V 4
-ttb
-
 K 10
 svn:author
 V 6
@@ -29,6 +24,11 @@ K 8
 svn:date
 V 27
 2005-11-15T20:53:08.484681Z
+K 7
+svn:log
+V 4
+ttb
+
 PROPS-END
 
 Node-path: branches
@@ -62,11 +62,6 @@ Revision-number: 2
 Prop-content-length: 119
 Content-length: 119
 
-K 7
-svn:log
-V 18
-Add first version
-
 K 10
 svn:author
 V 6
@@ -75,6 +70,11 @@ K 8
 svn:date
 V 27
 2005-11-15T20:53:34.716301Z
+K 7
+svn:log
+V 18
+Add first version
+
 PROPS-END
 
 Node-path: trunk/file.txt
@@ -94,11 +94,6 @@ Revision-number: 3
 Prop-content-length: 120
 Content-length: 120
 
-K 7
-svn:log
-V 19
-Add second version
-
 K 10
 svn:author
 V 6
@@ -107,6 +102,11 @@ K 8
 svn:date
 V 27
 2005-11-15T20:53:48.805239Z
+K 7
+svn:log
+V 19
+Add second version
+
 PROPS-END
 
 Node-path: trunk/file.txt
@@ -124,11 +124,6 @@ Revision-number: 4
 Prop-content-length: 149
 Content-length: 149
 
-K 7
-svn:log
-V 48
-Add a new file to create an uninvolved revision
-
 K 10
 svn:author
 V 6
@@ -137,6 +132,11 @@ K 8
 svn:date
 V 27
 2005-11-15T20:56:25.247172Z
+K 7
+svn:log
+V 48
+Add a new file to create an uninvolved revision
+
 PROPS-END
 
 Node-path: trunk/foo.txt
@@ -155,11 +155,6 @@ Revision-number: 5
 Prop-content-length: 131
 Content-length: 131
 
-K 7
-svn:log
-V 30
-copy from a previous revision
-
 K 10
 svn:author
 V 6
@@ -168,6 +163,11 @@ K 8
 svn:date
 V 27
 2005-11-15T20:56:46.198327Z
+K 7
+svn:log
+V 30
+copy from a previous revision
+
 PROPS-END
 
 Node-path: trunk/copy-of-file.txt

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/copy-parent-modify-prop.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/copy-parent-modify-prop.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/copy-parent-modify-prop.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/copy-parent-modify-prop.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 113
 Content-length: 113
 
-K 7
-svn:log
-V 16
-add dir and file
 K 10
 svn:author
 V 2
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2006-04-19T12:50:29.623828Z
+K 7
+svn:log
+V 16
+add dir and file
 PROPS-END
 
 Node-path: dir
@@ -55,10 +55,6 @@ Revision-number: 2
 Prop-content-length: 126
 Content-length: 126
 
-K 7
-svn:log
-V 29
-copy dir and modify prop of f
 K 10
 svn:author
 V 2
@@ -67,6 +63,10 @@ K 8
 svn:date
 V 27
 2006-04-19T12:51:15.837786Z
+K 7
+svn:log
+V 29
+copy dir and modify prop of f
 PROPS-END
 
 Node-path: dir2

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/delete-svn-props.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/delete-svn-props.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/delete-svn-props.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/delete-svn-props.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 137
 Content-length: 137
 
-K 7
-svn:log
-V 37
-adding file with prop 'svn:eol-style'
 K 10
 svn:author
 V 5
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2009-06-05T14:23:41.185914Z
+K 7
+svn:log
+V 37
+adding file with prop 'svn:eol-style'
 PROPS-END
 
 Node-path: file
@@ -51,10 +51,6 @@ Revision-number: 2
 Prop-content-length: 139
 Content-length: 139
 
-K 7
-svn:log
-V 39
-removing prop 'svn:eol-style' from file
 K 10
 svn:author
 V 5
@@ -63,6 +59,10 @@ K 8
 svn:date
 V 27
 2009-06-05T14:23:42.140849Z
+K 7
+svn:log
+V 39
+removing prop 'svn:eol-style' from file
 PROPS-END
 
 Node-path: file

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/dir_prop_change.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/dir_prop_change.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/dir_prop_change.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/dir_prop_change.dump Wed Sep 15 19:32:26 2010
@@ -16,11 +16,6 @@ Revision-number: 1
 Prop-content-length: 105
 Content-length: 105
 
-K 7
-svn:log
-V 5
-blah
-
 K 10
 svn:author
 V 6
@@ -29,6 +24,11 @@ K 8
 svn:date
 V 27
 2005-12-21T23:12:58.931794Z
+K 7
+svn:log
+V 5
+blah
+
 PROPS-END
 
 Node-path: 

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/file-dir-file.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/file-dir-file.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/file-dir-file.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/file-dir-file.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 105
 Content-length: 105
 
-K 7
-svn:log
-V 5
-stuff
 K 10
 svn:author
 V 6
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2006-04-14T22:50:10.459753Z
+K 7
+svn:log
+V 5
+stuff
 PROPS-END
 
 Node-path: a.txt

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/modified-in-place.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/modified-in-place.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/modified-in-place.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/modified-in-place.dump Wed Sep 15 19:32:26 2010
@@ -16,11 +16,6 @@ Revision-number: 1
 Prop-content-length: 114
 Content-length: 114
 
-K 7
-svn:log
-V 13
-Added a file
-
 K 10
 svn:author
 V 6
@@ -29,6 +24,11 @@ K 8
 svn:date
 V 27
 2005-11-09T19:58:23.561942Z
+K 7
+svn:log
+V 13
+Added a file
+
 PROPS-END
 
 Node-path: foo.txt
@@ -48,10 +48,6 @@ Revision-number: 2
 Prop-content-length: 112
 Content-length: 112
 
-K 7
-svn:log
-V 11
-modified it
 K 10
 svn:author
 V 6
@@ -60,6 +56,10 @@ K 8
 svn:date
 V 27
 2005-11-09T19:58:38.412025Z
+K 7
+svn:log
+V 11
+modified it
 PROPS-END
 
 Node-path: foo.txt

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/no-author.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/no-author.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/no-author.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/no-author.dump Wed Sep 15 19:32:26 2010
@@ -16,15 +16,15 @@ Revision-number: 1
 Prop-content-length: 77
 Content-length: 77
 
+K 8
+svn:date
+V 27
+2006-10-27T18:55:49.840787Z
 K 7
 svn:log
 V 4
 foo
 
-K 8
-svn:date
-V 27
-2006-10-27T18:55:49.840787Z
 PROPS-END
 
 Node-path: trunk

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/repo_with_copy_of_root_dir.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/repo_with_copy_of_root_dir.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/repo_with_copy_of_root_dir.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/repo_with_copy_of_root_dir.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 104
 Content-length: 104
 
-K 7
-svn:log
-V 4
-wwww
 K 10
 svn:author
 V 6
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2009-06-29T12:23:55.134926Z
+K 7
+svn:log
+V 4
+wwww
 PROPS-END
 
 Node-path: full

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/revprops.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/revprops.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/revprops.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/revprops.dump Wed Sep 15 19:32:26 2010
@@ -20,22 +20,22 @@ Revision-number: 1
 Prop-content-length: 132
 Content-length: 132
 
-K 7
-svn:log
-V 0
-
 K 10
 svn:author
 V 3
 lgo
-K 13
-svn:mergeinfo
-V 10
-/trunk:1:2
 K 8
 svn:date
 V 27
 2007-12-07T20:53:40.322712Z
+K 7
+svn:log
+V 0
+
+K 13
+svn:mergeinfo
+V 10
+/trunk:1:2
 PROPS-END
 
 Node-path: test.txt
@@ -64,10 +64,6 @@ Revision-number: 2
 Prop-content-length: 124
 Content-length: 124
 
-K 7
-svn:log
-V 26
-Import greek tree on trunk
 K 10
 svn:author
 V 3
@@ -76,6 +72,10 @@ K 8
 svn:date
 V 27
 2007-12-07T20:56:45.939703Z
+K 7
+svn:log
+V 26
+Import greek tree on trunk
 PROPS-END
 
 Node-path: trunk/A
@@ -310,10 +310,6 @@ Revision-number: 3
 Prop-content-length: 127
 Content-length: 127
 
-K 7
-svn:log
-V 29
-* trunk/A/D/H/psi: extra line
 K 10
 svn:author
 V 3
@@ -322,6 +318,10 @@ K 8
 svn:date
 V 27
 2007-12-07T21:12:26.232653Z
+K 7
+svn:log
+V 29
+* trunk/A/D/H/psi: extra line
 PROPS-END
 
 Node-path: trunk/A/D/H/psi

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-move-and-modify.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-move-and-modify.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-move-and-modify.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-move-and-modify.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 115
 Content-length: 115
 
-K 7
-svn:log
-V 17
-Add base folders.
 K 10
 svn:author
 V 3
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2008-01-02T20:33:05.279494Z
+K 7
+svn:log
+V 17
+Add base folders.
 PROPS-END
 
 Node-path: project1
@@ -70,10 +70,6 @@ Revision-number: 2
 Prop-content-length: 110
 Content-length: 110
 
-K 7
-svn:log
-V 12
-Add folders.
 K 10
 svn:author
 V 3
@@ -82,6 +78,10 @@ K 8
 svn:date
 V 27
 2008-01-02T20:33:06.265712Z
+K 7
+svn:log
+V 12
+Add folders.
 PROPS-END
 
 Node-path: project1/trunk/A
@@ -115,10 +115,6 @@ Revision-number: 3
 Prop-content-length: 106
 Content-length: 106
 
-K 7
-svn:log
-V 9
-Add file.
 K 10
 svn:author
 V 3
@@ -127,6 +123,10 @@ K 8
 svn:date
 V 27
 2008-01-02T20:33:07.283685Z
+K 7
+svn:log
+V 9
+Add file.
 PROPS-END
 
 Node-path: project1/trunk/A/B/C/file.txt
@@ -147,10 +147,6 @@ Revision-number: 4
 Prop-content-length: 117
 Content-length: 117
 
-K 7
-svn:log
-V 19
-Add file file2.txt.
 K 10
 svn:author
 V 3
@@ -159,6 +155,10 @@ K 8
 svn:date
 V 27
 2008-01-02T20:33:08.278330Z
+K 7
+svn:log
+V 19
+Add file file2.txt.
 PROPS-END
 
 Node-path: project1/trunk/A/B/C/file2.txt
@@ -179,10 +179,6 @@ Revision-number: 5
 Prop-content-length: 127
 Content-length: 127
 
-K 7
-svn:log
-V 29
-move project and modify file.
 K 10
 svn:author
 V 3
@@ -191,6 +187,10 @@ K 8
 svn:date
 V 27
 2008-01-02T20:33:12.238116Z
+K 7
+svn:log
+V 29
+move project and modify file.
 PROPS-END
 
 Node-path: branches
@@ -268,10 +268,6 @@ Revision-number: 6
 Prop-content-length: 115
 Content-length: 115
 
-K 7
-svn:log
-V 17
-removed project1.
 K 10
 svn:author
 V 3
@@ -280,6 +276,10 @@ K 8
 svn:date
 V 27
 2008-01-02T20:33:14.261412Z
+K 7
+svn:log
+V 17
+removed project1.
 PROPS-END
 
 Node-path: project1

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 97
 Content-length: 97
 
-K 7
-svn:log
-V 0
-
 K 10
 svn:author
 V 3
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2007-12-07T20:53:40.322712Z
+K 7
+svn:log
+V 0
+
 PROPS-END
 
 Node-path: test.txt
@@ -55,10 +55,6 @@ Revision-number: 2
 Prop-content-length: 124
 Content-length: 124
 
-K 7
-svn:log
-V 26
-Import greek tree on trunk
 K 10
 svn:author
 V 3
@@ -67,6 +63,10 @@ K 8
 svn:date
 V 27
 2007-12-07T20:56:45.939703Z
+K 7
+svn:log
+V 26
+Import greek tree on trunk
 PROPS-END
 
 Node-path: trunk/A
@@ -289,10 +289,6 @@ Revision-number: 3
 Prop-content-length: 127
 Content-length: 127
 
-K 7
-svn:log
-V 29
-* trunk/A/D/H/psi: extra line
 K 10
 svn:author
 V 3
@@ -301,6 +297,10 @@ K 8
 svn:date
 V 27
 2007-12-07T21:12:26.232653Z
+K 7
+svn:log
+V 29
+* trunk/A/D/H/psi: extra line
 PROPS-END
 
 Node-path: trunk/A/D/H/psi
@@ -318,10 +318,6 @@ Revision-number: 4
 Prop-content-length: 128
 Content-length: 128
 
-K 7
-svn:log
-V 26
-make changes on A and iota
 K 10
 svn:author
 V 7
@@ -330,6 +326,10 @@ K 8
 svn:date
 V 27
 2007-12-09T21:25:05.711998Z
+K 7
+svn:log
+V 26
+make changes on A and iota
 PROPS-END
 
 Node-path: trunk/A
@@ -362,10 +362,6 @@ Revision-number: 5
 Prop-content-length: 116
 Content-length: 116
 
-K 7
-svn:log
-V 14
-Renamed A to B
 K 10
 svn:author
 V 7
@@ -374,6 +370,10 @@ K 8
 svn:date
 V 27
 2007-12-09T21:26:14.639561Z
+K 7
+svn:log
+V 14
+Renamed A to B
 PROPS-END
 
 Node-path: trunk/B
@@ -391,10 +391,6 @@ Revision-number: 6
 Prop-content-length: 116
 Content-length: 116
 
-K 7
-svn:log
-V 14
-Moved B/D to A
 K 10
 svn:author
 V 7
@@ -403,6 +399,10 @@ K 8
 svn:date
 V 27
 2007-12-09T21:27:02.055549Z
+K 7
+svn:log
+V 14
+Moved B/D to A
 PROPS-END
 
 Node-path: trunk/A
@@ -420,10 +420,6 @@ Revision-number: 7
 Prop-content-length: 125
 Content-length: 125
 
-K 7
-svn:log
-V 23
-Added property to trunk
 K 10
 svn:author
 V 7
@@ -432,6 +428,10 @@ K 8
 svn:date
 V 27
 2007-12-09T21:28:07.300170Z
+K 7
+svn:log
+V 23
+Added property to trunk
 PROPS-END
 
 Node-path: trunk

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.expected.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.expected.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.expected.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.expected.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 97
 Content-length: 97
 
-K 7
-svn:log
-V 0
-
 K 10
 svn:author
 V 3
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2007-12-07T20:53:40.322712Z
+K 7
+svn:log
+V 0
+
 PROPS-END
 
 Node-path: trunk
@@ -43,10 +43,6 @@ Revision-number: 2
 Prop-content-length: 124
 Content-length: 124
 
-K 7
-svn:log
-V 26
-Import greek tree on trunk
 K 10
 svn:author
 V 3
@@ -55,6 +51,10 @@ K 8
 svn:date
 V 27
 2007-12-07T20:56:45.939703Z
+K 7
+svn:log
+V 26
+Import greek tree on trunk
 PROPS-END
 
 Node-path: trunk/A
@@ -276,10 +276,6 @@ Revision-number: 3
 Prop-content-length: 127
 Content-length: 127
 
-K 7
-svn:log
-V 29
-* trunk/A/D/H/psi: extra line
 K 10
 svn:author
 V 3
@@ -288,6 +284,10 @@ K 8
 svn:date
 V 27
 2007-12-07T21:12:26.232653Z
+K 7
+svn:log
+V 29
+* trunk/A/D/H/psi: extra line
 PROPS-END
 
 Node-path: trunk/A/D/H/psi
@@ -306,10 +306,6 @@ Revision-number: 4
 Prop-content-length: 128
 Content-length: 128
 
-K 7
-svn:log
-V 26
-make changes on A and iota
 K 10
 svn:author
 V 7
@@ -318,6 +314,10 @@ K 8
 svn:date
 V 27
 2007-12-09T21:25:05.711998Z
+K 7
+svn:log
+V 26
+make changes on A and iota
 PROPS-END
 
 Node-path: trunk/A
@@ -337,10 +337,6 @@ Revision-number: 5
 Prop-content-length: 116
 Content-length: 116
 
-K 7
-svn:log
-V 14
-Renamed A to B
 K 10
 svn:author
 V 7
@@ -349,6 +345,10 @@ K 8
 svn:date
 V 27
 2007-12-09T21:26:14.639561Z
+K 7
+svn:log
+V 14
+Renamed A to B
 PROPS-END
 
 Node-path: trunk/A
@@ -359,10 +359,6 @@ Revision-number: 6
 Prop-content-length: 116
 Content-length: 116
 
-K 7
-svn:log
-V 14
-Moved B/D to A
 K 10
 svn:author
 V 7
@@ -371,6 +367,10 @@ K 8
 svn:date
 V 27
 2007-12-09T21:27:02.055549Z
+K 7
+svn:log
+V 14
+Moved B/D to A
 PROPS-END
 
 Node-path: trunk/A
@@ -496,10 +496,6 @@ Revision-number: 7
 Prop-content-length: 125
 Content-length: 125
 
-K 7
-svn:log
-V 23
-Added property to trunk
 K 10
 svn:author
 V 7
@@ -508,6 +504,10 @@ K 8
 svn:date
 V 27
 2007-12-09T21:28:07.300170Z
+K 7
+svn:log
+V 23
+Added property to trunk
 PROPS-END
 
 Node-path: trunk

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 97
 Content-length: 97
 
-K 7
-svn:log
-V 0
-
 K 10
 svn:author
 V 3
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2007-12-07T20:53:40.322712Z
+K 7
+svn:log
+V 0
+
 PROPS-END
 
 Node-path: test.txt
@@ -55,10 +55,6 @@ Revision-number: 2
 Prop-content-length: 124
 Content-length: 124
 
-K 7
-svn:log
-V 26
-Import greek tree on trunk
 K 10
 svn:author
 V 3
@@ -67,6 +63,10 @@ K 8
 svn:date
 V 27
 2007-12-07T20:56:45.939703Z
+K 7
+svn:log
+V 26
+Import greek tree on trunk
 PROPS-END
 
 Node-path: trunk/A
@@ -289,10 +289,6 @@ Revision-number: 3
 Prop-content-length: 127
 Content-length: 127
 
-K 7
-svn:log
-V 29
-* trunk/A/D/H/psi: extra line
 K 10
 svn:author
 V 3
@@ -301,6 +297,10 @@ K 8
 svn:date
 V 27
 2007-12-07T21:12:26.232653Z
+K 7
+svn:log
+V 29
+* trunk/A/D/H/psi: extra line
 PROPS-END
 
 Node-path: trunk/A/D/H/psi

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.expected.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.expected.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.expected.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.expected.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 97
 Content-length: 97
 
-K 7
-svn:log
-V 0
-
 K 10
 svn:author
 V 3
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2007-12-07T20:53:40.322712Z
+K 7
+svn:log
+V 0
+
 PROPS-END
 
 Node-path: trunk
@@ -43,10 +43,6 @@ Revision-number: 2
 Prop-content-length: 124
 Content-length: 124
 
-K 7
-svn:log
-V 26
-Import greek tree on trunk
 K 10
 svn:author
 V 3
@@ -55,6 +51,10 @@ K 8
 svn:date
 V 27
 2007-12-07T20:56:45.939703Z
+K 7
+svn:log
+V 26
+Import greek tree on trunk
 PROPS-END
 
 Node-path: trunk/A
@@ -289,10 +289,6 @@ Revision-number: 3
 Prop-content-length: 127
 Content-length: 127
 
-K 7
-svn:log
-V 29
-* trunk/A/D/H/psi: extra line
 K 10
 svn:author
 V 3
@@ -301,6 +297,10 @@ K 8
 svn:date
 V 27
 2007-12-07T21:12:26.232653Z
+K 7
+svn:log
+V 29
+* trunk/A/D/H/psi: extra line
 PROPS-END
 
 Node-path: trunk/A/D/H/psi

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-empty-trunk.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-empty-trunk.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-empty-trunk.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-empty-trunk.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 105
 Content-length: 105
 
-K 7
-svn:log
-V 5
-setup
 K 10
 svn:author
 V 6
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2005-11-04T23:04:15.060966Z
+K 7
+svn:log
+V 5
+setup
 PROPS-END
 
 Node-path: tags
@@ -52,10 +52,6 @@ Revision-number: 2
 Prop-content-length: 106
 Content-length: 106
 
-K 7
-svn:log
-V 6
-tag it
 K 10
 svn:author
 V 6
@@ -64,6 +60,10 @@ K 8
 svn:date
 V 27
 2005-11-04T23:04:32.222710Z
+K 7
+svn:log
+V 6
+tag it
 PROPS-END
 
 Node-path: tags/an-empty-tag

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-dir.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-dir.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-dir.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-dir.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 105
 Content-length: 105
 
-K 7
-svn:log
-V 5
-stuff
 K 10
 svn:author
 V 6
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2005-11-05T00:11:07.194039Z
+K 7
+svn:log
+V 5
+stuff
 PROPS-END
 
 Node-path: tags
@@ -61,10 +61,6 @@ Revision-number: 2
 Prop-content-length: 111
 Content-length: 111
 
-K 7
-svn:log
-V 10
-more stuff
 K 10
 svn:author
 V 6
@@ -73,6 +69,10 @@ K 8
 svn:date
 V 27
 2005-11-05T00:11:18.910470Z
+K 7
+svn:log
+V 10
+more stuff
 PROPS-END
 
 Node-path: tags/a-tag

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-file.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-file.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-file.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-file.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 115
 Content-length: 115
 
-K 7
-svn:log
-V 14
-initial layout
 K 10
 svn:author
 V 6
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2005-11-07T20:22:08.601650Z
+K 7
+svn:log
+V 14
+initial layout
 PROPS-END
 
 Node-path: branches
@@ -61,10 +61,6 @@ Revision-number: 2
 Prop-content-length: 111
 Content-length: 111
 
-K 7
-svn:log
-V 10
-add a file
 K 10
 svn:author
 V 6
@@ -73,6 +69,10 @@ K 8
 svn:date
 V 27
 2005-11-07T20:22:25.607033Z
+K 7
+svn:log
+V 10
+add a file
 PROPS-END
 
 Node-path: trunk/foo.txt
@@ -92,11 +92,6 @@ Revision-number: 3
 Prop-content-length: 113
 Content-length: 113
 
-K 7
-svn:log
-V 12
-make a tag.
-
 K 10
 svn:author
 V 6
@@ -105,6 +100,11 @@ K 8
 svn:date
 V 27
 2005-11-07T20:22:46.490796Z
+K 7
+svn:log
+V 12
+make a tag.
+
 PROPS-END
 
 Node-path: tags/a-tag-with-file-contents

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-file2.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-file2.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-file2.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-trunk-with-file2.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 115
 Content-length: 115
 
-K 7
-svn:log
-V 14
-initial layout
 K 10
 svn:author
 V 6
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2005-11-07T22:09:30.282710Z
+K 7
+svn:log
+V 14
+initial layout
 PROPS-END
 
 Node-path: branches
@@ -58,13 +58,9 @@ PROPS-END
 
 
 Revision-number: 2
-Prop-content-length: 106
-Content-length: 106
+Prop-content-length: 111
+Content-length: 111
 
-K 7
-svn:log
-V 6
-a file
 K 10
 svn:author
 V 6
@@ -73,6 +69,10 @@ K 8
 svn:date
 V 27
 2005-11-07T22:09:44.146564Z
+K 7
+svn:log
+V 10
+add a file
 PROPS-END
 
 Node-path: trunk/foo.txt
@@ -92,11 +92,6 @@ Revision-number: 3
 Prop-content-length: 113
 Content-length: 113
 
-K 7
-svn:log
-V 12
-Make a tag.
-
 K 10
 svn:author
 V 6
@@ -105,6 +100,11 @@ K 8
 svn:date
 V 27
 2005-11-07T22:10:03.753668Z
+K 7
+svn:log
+V 12
+make a tag.
+
 PROPS-END
 
 Node-path: tags/a-tag

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-with-modified-file.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-with-modified-file.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-with-modified-file.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/tag-with-modified-file.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 115
 Content-length: 115
 
-K 7
-svn:log
-V 14
-initial layout
 K 10
 svn:author
 V 6
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2005-11-07T22:20:16.583093Z
+K 7
+svn:log
+V 14
+initial layout
 PROPS-END
 
 Node-path: branches
@@ -61,11 +61,6 @@ Revision-number: 2
 Prop-content-length: 112
 Content-length: 112
 
-K 7
-svn:log
-V 11
-add a file
-
 K 10
 svn:author
 V 6
@@ -74,6 +69,11 @@ K 8
 svn:date
 V 27
 2005-11-07T22:20:39.840815Z
+K 7
+svn:log
+V 11
+add a file
+
 PROPS-END
 
 Node-path: trunk/foo.txt
@@ -93,11 +93,6 @@ Revision-number: 3
 Prop-content-length: 126
 Content-length: 126
 
-K 7
-svn:log
-V 25
-tag with a modified file
-
 K 10
 svn:author
 V 6
@@ -106,6 +101,11 @@ K 8
 svn:date
 V 27
 2005-11-07T22:21:15.332479Z
+K 7
+svn:log
+V 25
+tag with a modified file
+
 PROPS-END
 
 Node-path: tags/a-tag-with-mods

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/url-encoding-bug.dump
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/url-encoding-bug.dump?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/url-encoding-bug.dump (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svnsync_tests_data/url-encoding-bug.dump Wed Sep 15 19:32:26 2010
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 101
 Content-length: 101
 
-K 7
-svn:log
-V 1
-,
 K 10
 svn:author
 V 6
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2006-10-23T20:26:00.932678Z
+K 7
+svn:log
+V 1
+,
 PROPS-END
 
 Node-path: foo%20bar.txt
@@ -47,10 +47,6 @@ Revision-number: 2
 Prop-content-length: 101
 Content-length: 101
 
-K 7
-svn:log
-V 1
-,
 K 10
 svn:author
 V 6
@@ -59,6 +55,10 @@ K 8
 svn:date
 V 27
 2006-10-23T20:26:12.565554Z
+K 7
+svn:log
+V 1
+,
 PROPS-END
 
 Node-path: foo bar.txt
@@ -78,10 +78,6 @@ Revision-number: 3
 Prop-content-length: 102
 Content-length: 102
 
-K 7
-svn:log
-V 1
-,
 K 10
 svn:author
 V 7
@@ -90,6 +86,10 @@ K 8
 svn:date
 V 27
 2006-10-23T20:52:11.378819Z
+K 7
+svn:log
+V 1
+,
 PROPS-END
 
 Node-path: foo%20bar.txt

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/actions.py
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/actions.py?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/actions.py (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/actions.py Wed Sep 15 19:32:26 2010
@@ -38,7 +38,13 @@ def no_sleep_for_timestamps():
 def do_sleep_for_timestamps():
   os.environ['SVN_I_LOVE_CORRUPTED_WORKING_COPIES_SO_DISABLE_SLEEP_FOR_TIMESTAMPS'] = 'no'
 
-def setup_pristine_repository():
+def no_relocate_validation():
+  os.environ['SVN_I_LOVE_CORRUPTED_WORKING_COPIES_SO_DISABLE_RELOCATE_VALIDATION'] = 'yes'
+
+def do_relocate_validation():
+  os.environ['SVN_I_LOVE_CORRUPTED_WORKING_COPIES_SO_DISABLE_RELOCATE_VALIDATION'] = 'no'
+
+def setup_pristine_greek_repository():
   """Create the pristine repository and 'svn import' the greek tree"""
 
   # these directories don't exist out of the box, so we may have to create them
@@ -49,8 +55,8 @@ def setup_pristine_repository():
     os.makedirs(main.general_repo_dir) # this also creates all the intermediate dirs
 
   # If there's no pristine repos, create one.
-  if not os.path.exists(main.pristine_dir):
-    main.create_repos(main.pristine_dir)
+  if not os.path.exists(main.pristine_greek_repos_dir):
+    main.create_repos(main.pristine_greek_repos_dir)
 
     # if this is dav, gives us access rights to import the greek tree.
     if main.is_ra_type_dav():
@@ -66,7 +72,7 @@ def setup_pristine_repository():
     exit_code, output, errput = main.run_svn(None, 'import', '-m',
                                              'Log message for revision 1.',
                                              main.greek_dump_dir,
-                                             main.pristine_url)
+                                             main.pristine_greek_repos_url)
 
     # check for any errors from the import
     if len(errput):
@@ -99,9 +105,9 @@ def setup_pristine_repository():
 
     # Finally, disallow any changes to the "pristine" repos.
     error_msg = "Don't modify the pristine repository"
-    create_failing_hook(main.pristine_dir, 'start-commit', error_msg)
-    create_failing_hook(main.pristine_dir, 'pre-lock', error_msg)
-    create_failing_hook(main.pristine_dir, 'pre-revprop-change', error_msg)
+    create_failing_hook(main.pristine_greek_repos_dir, 'start-commit', error_msg)
+    create_failing_hook(main.pristine_greek_repos_dir, 'pre-lock', error_msg)
+    create_failing_hook(main.pristine_greek_repos_dir, 'pre-revprop-change', error_msg)
 
 
 ######################################################################
@@ -110,7 +116,7 @@ def guarantee_empty_repository(path):
   """Guarantee that a local svn repository exists at PATH, containing
   nothing."""
 
-  if path == main.pristine_dir:
+  if path == main.pristine_greek_repos_dir:
     print("ERROR:  attempt to overwrite the pristine repos!  Aborting.")
     sys.exit(1)
 
@@ -121,19 +127,19 @@ def guarantee_empty_repository(path):
 # Used by every test, so that they can run independently of  one
 # another. Every time this routine is called, it recursively copies
 # the `pristine repos' to a new location.
-# Note: make sure setup_pristine_repository was called once before
+# Note: make sure setup_pristine_greek_repository was called once before
 # using this function.
 def guarantee_greek_repository(path):
   """Guarantee that a local svn repository exists at PATH, containing
   nothing but the greek-tree at revision 1."""
 
-  if path == main.pristine_dir:
+  if path == main.pristine_greek_repos_dir:
     print("ERROR:  attempt to overwrite the pristine repos!  Aborting.")
     sys.exit(1)
 
   # copy the pristine repository to PATH.
   main.safe_rmtree(path)
-  if main.copy_repos(main.pristine_dir, path, 1):
+  if main.copy_repos(main.pristine_greek_repos_dir, path, 1):
     print("ERROR:  copying repository failed.")
     sys.exit(1)
 
@@ -276,14 +282,29 @@ def run_and_verify_load(repo_dir, dump_f
                         None, expected_stderr)
 
 
-def run_and_verify_dump(repo_dir):
+def run_and_verify_dump(repo_dir, deltas=False):
   "Runs 'svnadmin dump' and reports any errors, returning the dump content."
-  exit_code, output, errput = main.run_svnadmin('dump', repo_dir)
+  if deltas:
+    exit_code, output, errput = main.run_svnadmin('dump', '--deltas',
+                                                  repo_dir)
+  else:
+    exit_code, output, errput = main.run_svnadmin('dump', repo_dir)
   verify.verify_outputs("Missing expected output(s)", output, errput,
                         verify.AnyOutput, verify.AnyOutput)
   return output
 
 
+def run_and_verify_svnrdump(dumpfile_content, expected_stdout,
+                            expected_stderr, expected_exit, *varargs):
+  """Runs 'svnrdump dump|load' depending on dumpfile_content and
+  reports any errors."""
+  exit_code, output, err = main.run_svnrdump(dumpfile_content, *varargs)
+
+  verify.verify_outputs("Unexpected output", output, err,
+                        expected_stdout, expected_stderr)
+  verify.verify_exit_code("Unexpected return code", exit_code, expected_exit)
+  return output
+
 def load_repo(sbox, dumpfile_path = None, dump_str = None):
   "Loads the dumpfile into sbox"
   if not dump_str:
@@ -310,12 +331,13 @@ def load_repo(sbox, dumpfile_path = None
 #
 
 
-def run_and_verify_checkout(URL, wc_dir_name, output_tree, disk_tree,
-                            singleton_handler_a = None,
-                            a_baton = None,
-                            singleton_handler_b = None,
-                            b_baton = None,
-                            *args):
+def run_and_verify_checkout2(do_remove,
+                             URL, wc_dir_name, output_tree, disk_tree,
+                             singleton_handler_a = None,
+                             a_baton = None,
+                             singleton_handler_b = None,
+                             b_baton = None,
+                             *args):
   """Checkout the URL into a new directory WC_DIR_NAME. *ARGS are any
   extra optional args to the checkout subcommand.
 
@@ -326,8 +348,8 @@ def run_and_verify_checkout(URL, wc_dir_
   function's doc string for more details.  Return if successful, raise
   on failure.
 
-  WC_DIR_NAME is deleted if present unless the '--force' option is passed
-  in *ARGS."""
+  WC_DIR_NAME is deleted if DO_REMOVE is True.
+  """
 
   if isinstance(output_tree, wc.State):
     output_tree = output_tree.old_tree()
@@ -337,7 +359,7 @@ def run_and_verify_checkout(URL, wc_dir_
   # Remove dir if it's already there, unless this is a forced checkout.
   # In that case assume we want to test a forced checkout's toleration
   # of obstructing paths.
-  if '--force' not in args:
+  if do_remove:
     main.safe_rmtree(wc_dir_name)
 
   # Checkout and make a tree of the output, using l:foo/p:bar
@@ -368,6 +390,28 @@ def run_and_verify_checkout(URL, wc_dir_
     tree.dump_tree_script(actual, wc_dir_name + os.sep)
     raise
 
+def run_and_verify_checkout(URL, wc_dir_name, output_tree, disk_tree,
+                            singleton_handler_a = None,
+                            a_baton = None,
+                            singleton_handler_b = None,
+                            b_baton = None,
+                            *args):
+  """Same as run_and_verify_checkout2(), but without the DO_REMOVE arg.
+  WC_DIR_NAME is deleted if present unless the '--force' option is passed
+  in *ARGS."""
+
+
+  # Remove dir if it's already there, unless this is a forced checkout.
+  # In that case assume we want to test a forced checkout's toleration
+  # of obstructing paths.
+  return run_and_verify_checkout2(('--force' not in args),
+                                  URL, wc_dir_name, output_tree, disk_tree,
+                                  singleton_handler_a,
+                                  a_baton,
+                                  singleton_handler_b,
+                                  b_baton,
+                                  *args)
+
 
 def run_and_verify_export(URL, export_dir_name, output_tree, disk_tree,
                           *args):
@@ -867,7 +911,12 @@ def run_and_verify_merge(dir, rev1, rev2
   If DRY_RUN is set then a --dry-run merge will be carried out first and
   the output compared with that of the full merge.
 
-  Return if successful, raise on failure."""
+  Return if successful, raise on failure.
+
+  *ARGS are any extra optional args to the merge subcommand.
+  NOTE: If *ARGS is specified at all, an explicit target path must be passed
+  in *ARGS as well. This allows the caller to merge into single items inside
+  the working copy, but still verify the entire working copy dir. """
 
   merge_command = [ "merge" ]
   if url2:
@@ -876,7 +925,8 @@ def run_and_verify_merge(dir, rev1, rev2
     if not (rev1 is None and rev2 is None):
       merge_command.append("-r" + str(rev1) + ":" + str(rev2))
     merge_command.append(url1)
-  merge_command.append(dir)
+  if len(args) == 0:
+    merge_command.append(dir)
   merge_command = tuple(merge_command)
 
   if dry_run:
@@ -1515,16 +1565,15 @@ def run_and_verify_resolved(expected_pat
 def make_repo_and_wc(sbox, create_wc = True, read_only = False):
   """Create a fresh 'Greek Tree' repository and check out a WC from it.
 
-  If read_only is False, a dedicated repository will be created, named
-  TEST_NAME. The repository will live in the global dir 'general_repo_dir'.
-  If read_only is True the pristine repository will be used.
+  If READ_ONLY is False, a dedicated repository will be created, at the path
+  SBOX.repo_dir.  If READ_ONLY is True, the pristine repository will be used.
+  In either case, SBOX.repo_url is assumed to point to the repository that
+  will be used.
 
   If create_wc is True, a dedicated working copy will be checked out from
-  the repository, named TEST_NAME. The wc directory will live in the global
-  dir 'general_wc_dir'.
+  the repository, at the path SBOX.wc_dir.
 
-  Both variables 'general_repo_dir' and 'general_wc_dir' are defined at the
-  top of this test suite.)  Returns on success, raises on failure."""
+  Returns on success, raises on failure."""
 
   # Create (or copy afresh) a new repos with a greek tree in it.
   if not read_only:
@@ -1576,25 +1625,28 @@ def get_virginal_state(wc_dir, rev):
 
   return state
 
-def remove_admin_tmp_dir(wc_dir):
-  "Remove the tmp directory within the administrative directory."
-
-  tmp_path = os.path.join(wc_dir, main.get_admin_name(), 'tmp')
-  ### Any reason not to use main.safe_rmtree()?
-  os.rmdir(os.path.join(tmp_path, 'prop-base'))
-  os.rmdir(os.path.join(tmp_path, 'props'))
-  os.rmdir(os.path.join(tmp_path, 'text-base'))
-  os.rmdir(tmp_path)
-
 # Cheap administrative directory locking
 def lock_admin_dir(wc_dir):
   "Lock a SVN administrative directory"
+  dot_svn = svntest.main.get_admin_name()
+  root_path = wc_dir
+  relpath = ''
+
+  while True:
+    db_path = os.path.join(root_path, dot_svn, 'wc.db')
+    try:
+      db = svntest.sqlite3.connect(db_path)
+      break
+    except: pass
+    head, tail = os.path.split(root_path)
+    if head == root_path:
+      raise svntest.Failure("No DB for " + wc_dir)
+    root_path = head
+    relpath = os.path.join(tail, relpath).replace(os.path.sep, '/').rstrip('/')
 
-  db = svntest.sqlite3.connect(os.path.join(wc_dir, main.get_admin_name(),
-                                            'wc.db'))
   db.execute('insert into wc_lock (wc_id, local_dir_relpath, locked_levels) '
              + 'values (?, ?, ?)',
-             (1, '', 0))
+             (1, relpath, 0))
   db.commit()
   db.close()
 
@@ -2022,6 +2074,13 @@ deep_trees_after_leaf_del = wc.State('',
   'DDD/D1/D2'       : Item(),
   })
 
+# deep trees state after a call to deep_trees_leaf_del with no commit
+def deep_trees_after_leaf_del_no_ci(wc_dir):
+  if svntest.main.wc_is_singledb(wc_dir):
+    return deep_trees_after_leaf_del
+  else:
+    return deep_trees_empty_dirs
+
 
 def deep_trees_tree_del(base):
   """Helper function for deep trees test cases.  Delete top-level dirs."""
@@ -2080,6 +2139,13 @@ deep_trees_empty_dirs = wc.State('', {
   'DDD/D1/D2/D3'    : Item(),
   })
 
+# deep trees state after a call to deep_trees_tree_del with no commit
+def deep_trees_after_tree_del_no_ci(wc_dir):
+  if svntest.main.wc_is_singledb(wc_dir):
+    return deep_trees_after_tree_del
+  else:
+    return deep_trees_empty_dirs
+
 def deep_trees_tree_del_repos(base):
   """Helper function for deep trees test cases.  Delete top-level dirs,
   directly in the repository."""
@@ -2265,7 +2331,8 @@ def deep_trees_run_tests_scheme_for_upda
 
   j = os.path.join
 
-  sbox.build()
+  if not sbox.is_built():
+    sbox.build()
   wc_dir = sbox.wc_dir
 
 
@@ -2506,7 +2573,8 @@ def deep_trees_run_tests_scheme_for_swit
 
   j = os.path.join
 
-  sbox.build()
+  if not sbox.is_built():
+    sbox.build()
   wc_dir = sbox.wc_dir
 
 
@@ -2612,7 +2680,9 @@ def deep_trees_run_tests_scheme_for_swit
 
 
 def deep_trees_run_tests_scheme_for_merge(sbox, greater_scheme,
-                                          do_commit_local_changes):
+                                          do_commit_local_changes,
+                                          do_commit_conflicts=True,
+                                          ignore_ancestry=False):
   """
   Runs a given list of tests for conflicts occuring at a merge operation.
 
@@ -2646,12 +2716,14 @@ def deep_trees_run_tests_scheme_for_merg
       Then, in effect, the local changes are committed as well.
 
    8) In each test case subdir, the "incoming" subdir is merged into the
-      "local" subdir.
-      This causes conflicts between the "local" state in the working
-      copy and the "incoming" state from the incoming subdir.
-
-   9) A commit is performed in each separate container, to verify
-      that each tree-conflict indeed blocks a commit.
+      "local" subdir.  If ignore_ancestry is True, then the merge is done
+      with the --ignore-ancestry option, so mergeinfo is neither considered
+      nor recorded.  This causes conflicts between the "local" state in the
+      working copy and the "incoming" state from the incoming subdir.
+
+   9) If do_commit_conflicts is True, then a commit is performed in each
+      separate container, to verify that each tree-conflict indeed blocks
+      a commit.
 
   The sbox parameter is just the sbox passed to a test function. No need
   to call sbox.build(), since it is called (once) within this function.
@@ -2665,7 +2737,8 @@ def deep_trees_run_tests_scheme_for_merg
 
   j = os.path.join
 
-  sbox.build()
+  if not sbox.is_built():
+    sbox.build()
   wc_dir = sbox.wc_dir
 
   # 1) Create directories.
@@ -2782,10 +2855,15 @@ def deep_trees_run_tests_scheme_for_merg
         x_skip.copy()
         x_skip.wc_dir = local
 
+      varargs = (local,)
+      if ignore_ancestry:
+        varargs = varargs + ('--ignore-ancestry',)
+
       run_and_verify_merge(local, None, None, incoming, None,
                            x_out, None, None, x_disk, None, x_skip,
-                           error_re_string = test_case.error_re_string,
-                           dry_run = False)
+                           test_case.error_re_string,
+                           None, None, None, None,
+                           False, False, *varargs)
       run_and_verify_unquiet_status(local, x_status)
     except:
       print("ERROR IN: Tests scheme for merge: "
@@ -2795,21 +2873,22 @@ def deep_trees_run_tests_scheme_for_merg
 
   # 9) Verify that commit fails.
 
-  for test_case in greater_scheme:
-    try:
-      local = j(wc_dir, test_case.name, 'local')
-
-      x_status = test_case.expected_status
-      if x_status != None:
-        x_status.copy()
-        x_status.wc_dir = local
+  if do_commit_conflicts:
+    for test_case in greater_scheme:
+      try:
+        local = j(wc_dir, test_case.name, 'local')
 
-      run_and_verify_commit(local, None, x_status,
-                            test_case.commit_block_string,
-                            local)
-    except:
-      print("ERROR IN: Tests scheme for merge: "
-          + "while checking commit-blocking in '%s'" % test_case.name)
-      raise
+        x_status = test_case.expected_status
+        if x_status != None:
+          x_status.copy()
+          x_status.wc_dir = local
+
+        run_and_verify_commit(local, None, x_status,
+                              test_case.commit_block_string,
+                              local)
+      except:
+        print("ERROR IN: Tests scheme for merge: "
+            + "while checking commit-blocking in '%s'" % test_case.name)
+        raise
 
 

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/factory.py
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/factory.py?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/factory.py (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/factory.py Wed Sep 15 19:32:26 2010
@@ -434,6 +434,9 @@ class TestFactory:
       if second in ['update','up']:
         return self.cmd_svn_update(args[2:])
 
+      if second in ['switch','sw']:
+        return self.cmd_svn_switch(args[2:])
+
       if second in ['copy', 'cp',
                     'move', 'mv', 'rename', 'ren']:
         return self.cmd_svn_copy_move(args[1:])
@@ -596,7 +599,7 @@ class TestFactory:
 
 
   def cmd_svn_update(self, update_args):
-    "Runs svnn update, looks what happened and writes the script for it."
+    "Runs svn update, looks what happened and writes the script for it."
 
     pyargs, runargs, do_chdir, targets = self.args2svntest(
                                   update_args, True, self.keep_args_of, 0)
@@ -637,6 +640,74 @@ class TestFactory:
     return py
 
 
+  def cmd_svn_switch(self, switch_args):
+    "Runs svn switch, looks what happened and writes the script for it."
+
+    pyargs, runargs, do_chdir, targets = self.args2svntest(
+                                  switch_args, True, self.keep_args_of, 0)
+
+    # Sort out the targets. We need one URL and one wc node, in that order.
+    if len(targets) < 2:
+      raise Failure("Sorry, I'm currently enforcing two targets for svn " +
+                    "switch. If you want to supply less, remove this " +
+                    "check and implement whatever seems appropriate.")
+
+    wc_arg = targets[1]
+    del pyargs[wc_arg.argnr]
+    del runargs[wc_arg.argnr]
+    url_arg = targets[0]
+    del pyargs[url_arg.argnr]
+    del runargs[url_arg.argnr]
+
+    wc = wc_arg.wc
+    if not wc:
+      raise Failure("Unexpected argument ordering to factory's 'svn switch'?")
+
+    pychdir = self.chdir(do_chdir, wc)
+
+    #if '--force' in runargs:
+    #  self.really_safe_rmtree(wc_arg.runarg)
+
+    code, output, err = main.run_svn('Maybe', 'sw',
+                                     url_arg.runarg, wc_arg.runarg,
+                                     *runargs)
+
+    py = ""
+
+    if code == 0 and len(err) < 1:
+      # write a test that expects success
+
+      actual_out = tree.build_tree_from_checkout(output)
+      py = ("expected_output = " +
+            self.tree2py(actual_out, wc) + "\n\n")
+
+      pydisk = self.get_current_disk(wc)
+      py += pydisk
+
+      pystatus = self.get_current_status(wc)
+      py += pystatus
+
+      py += pychdir
+      py += ("actions.run_and_verify_switch(" + wc.py + ", " +
+             wc_arg.pyarg + ", " + url_arg.pyarg + ", " +
+             "expected_output, expected_disk, expected_status, " +
+             "None, None, None, None, None, False")
+    else:
+      # write a test that expects error
+      py = "expected_error = " + self.strlist2py(err) + "\n\n"
+      py += pychdir
+      py += ("actions.run_and_verify_switch(" + wc.py + ", " +
+             wc_arg.pyarg + ", " + url_arg.pyarg + ", " +
+             "None, None, None, expected_error, None, None, None, None, False")
+
+    if len(pyargs) > 0:
+      py += ', ' + ', '.join(pyargs)
+    py += ")"
+    py += self.chdir_back(do_chdir)
+
+    return py
+
+
   def cmd_svn_checkout(self, checkout_args):
     "Runs svn checkout, looks what happened and writes the script for it."
 
@@ -661,8 +732,8 @@ class TestFactory:
 
     pychdir = self.chdir(do_chdir, wc)
 
-    if '--force' in runargs:
-      self.really_safe_rmtree(wc_arg.runarg)
+    #if '--force' in runargs:
+    #  self.really_safe_rmtree(wc_arg.runarg)
 
     code, output, err = main.run_svn('Maybe', 'co',
                                      url_arg.runarg, wc_arg.runarg,
@@ -761,7 +832,7 @@ class TestFactory:
           if i != len(echo_args)-1:
             raise Failure("don't understand: echo " + " ".join(echo_args))
 
-        contents = " ".join(echo_args[:i])
+        contents = " ".join(echo_args[:i]) + '\n'
 
     if target_arg is None:
       raise Failure("echo needs a '>' pipe to a file name: echo " +
@@ -801,8 +872,12 @@ class TestFactory:
     for arg in rm_args:
       if not arg.startswith('-'):
         target = self.path2svntest(arg)
-        self.really_safe_rmtree(target.runarg)
-        out += "main.safe_rmtree(" + target.pyarg + ")\n"
+        if os.path.isfile(target.runarg):
+          os.remove(target.runarg)
+          out += "os.remove(" + target.pyarg + ")\n"
+        else:
+          self.really_safe_rmtree(target.runarg)
+          out += "main.safe_rmtree(" + target.pyarg + ")\n"
     return out
 
 
@@ -1030,16 +1105,18 @@ class TestFactory:
   def get_sorted_vars_by_pathlen(self):
     """Compose a listing of variable names to be expanded in script output.
     This is intended to be stored in self.sorted_vars_by_pathlen."""
-    list = []
+    lst = []
 
     for dict in [self.vars, self.other_wc_dirs]:
       for name in dict:
         runpath = dict[name][1]
+        if not runpath:
+          continue
         strlen = len(runpath)
         item = [strlen, name, runpath]
-        bisect.insort(list, item)
+        bisect.insort(lst, item)
 
-    return list
+    return lst
 
 
   def get_sorted_var_names(self):
@@ -1275,6 +1352,10 @@ class TestFactory:
         # Check if the actual tree had this anyway all the way through.
         name = mod[0]
         val = mod[1]
+
+        if name == 'contents' and val is None:
+          continue;
+
         def check_node(node):
           if (
               (name == 'contents' and node.contents == val)
@@ -1397,7 +1478,7 @@ class TestFactory:
     return py
 
 
-  def path2svntest(self, path, argnr=None):
+  def path2svntest(self, path, argnr=None, do_remove_on_new_wc_path=True):
     """Given an input argument, do one hell of a path expansion on it.
     ARGNR is simply inserted into the resulting Target.
     Returns a self.Target instance.
@@ -1494,12 +1575,18 @@ class TestFactory:
     if varname in self.other_wc_dirs:
       return self.other_wc_dirs[varname][1]
 
-    # else, we must still create one.
-    path = self.sbox.add_wc_path(suffix, do_remove)
-    py = "sbox.add_wc_path(" + str2py(suffix)
-    if not do_remove:
-      py += ", remove=False"
-    py += ')'
+    # see if there is a wc already in the sbox
+    path = self.sbox.wc_dir + '.' + suffix
+    if path in self.sbox.test_paths:
+      py = "sbox.wc_dir + '." + suffix + "'"
+    else:
+      # else, we must still create one.
+      path = self.sbox.add_wc_path(suffix, do_remove)
+      py = "sbox.add_wc_path(" + str2py(suffix)
+      if not do_remove:
+        py += ", remove=False"
+      py += ')'
+
     value = [py, path]
     self.other_wc_dirs[varname] = [py, path]
     self.sorted_vars_by_pathlen = self.get_sorted_vars_by_pathlen()

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/main.py?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/main.py Wed Sep 15 19:32:26 2010
@@ -152,6 +152,7 @@ def url2pathname(path):
 svn_binary = os.path.abspath('../../svn/svn' + _exe)
 svnadmin_binary = os.path.abspath('../../svnadmin/svnadmin' + _exe)
 svnlook_binary = os.path.abspath('../../svnlook/svnlook' + _exe)
+svnrdump_binary = os.path.abspath('../../svnrdump/svnrdump' + _exe)
 svnsync_binary = os.path.abspath('../../svnsync/svnsync' + _exe)
 svnversion_binary = os.path.abspath('../../svnversion/svnversion' + _exe)
 svndumpfilter_binary = os.path.abspath('../../svndumpfilter/svndumpfilter' + \
@@ -160,7 +161,7 @@ entriesdump_binary = os.path.abspath('en
 
 # Location to the pristine repository, will be calculated from test_area_url
 # when we know what the user specified for --url.
-pristine_url = None
+pristine_greek_repos_url = None
 
 # Global variable to track all of our options
 options = None
@@ -186,7 +187,7 @@ general_wc_dir = os.path.join(work_dir, 
 temp_dir = os.path.join(work_dir, 'local_tmp')
 
 # (derivatives of the tmp dir.)
-pristine_dir = os.path.join(temp_dir, "repos")
+pristine_greek_repos_dir = os.path.join(temp_dir, "repos")
 greek_dump_dir = os.path.join(temp_dir, "greekfiles")
 default_config_dir = os.path.abspath(os.path.join(temp_dir, "config"))
 
@@ -268,6 +269,24 @@ def get_admin_name():
   else:
     return '.svn'
 
+def wc_is_singledb(wcpath):
+  """Temporary function that checks whether a working copy directory looks
+  like it is part of a single-db working copy."""
+
+  pristine = os.path.join(wcpath, get_admin_name(), 'pristine')
+  if not os.path.exists(pristine):
+    return True
+
+  # Now we must be looking at a multi-db WC dir or the root dir of a
+  # single-DB WC.  Sharded 'pristine' dir => single-db, else => multi-db.
+  for name in os.listdir(pristine):
+    if len(name) == 2:
+      return True
+    elif len(name) == 40:
+      return False
+
+  return False
+
 def get_start_commit_hook_path(repo_dir):
   "Return the path of the start-commit-hook conf file in REPO_DIR."
 
@@ -577,6 +596,16 @@ def run_svnlook(*varargs):
   list of lines (including line terminators)."""
   return run_command(svnlook_binary, 1, 0, *varargs)
 
+def run_svnrdump(stdin_input, *varargs):
+  """Run svnrdump with VARARGS, returns exit code as int; stdout, stderr as
+  list of lines (including line terminators)."""
+  if stdin_input:
+    return run_command_stdin(svnrdump_binary, 0, 1, 0, stdin_input,
+                             *(_with_auth(_with_config_dir(varargs))))
+  else:
+    return run_command(svnrdump_binary, 1, 0,
+                       *(_with_auth(_with_config_dir(varargs))))
+
 def run_svnsync(*varargs):
   """Run svnsync with VARARGS, returns exit code as int; stdout, stderr as
   list of lines (including line terminators)."""
@@ -593,9 +622,6 @@ def run_entriesdump(path):
   # to stdout in verbose mode.
   exit_code, stdout_lines, stderr_lines = spawn_process(entriesdump_binary,
                                                         0, 0, None, path)
-  if options.verbose:
-    ### finish the CMD output
-    print
   if exit_code or stderr_lines:
     ### report on this? or continue to just skip it?
     return None
@@ -606,6 +632,13 @@ def run_entriesdump(path):
   exec(''.join([line for line in stdout_lines if not line.startswith("DBG:")]))
   return entries
 
+def run_entriesdump_subdirs(path):
+  """Run the entries-dump helper, returning a list of directory names."""
+  # use spawn_process rather than run_command to avoid copying all the data
+  # to stdout in verbose mode.
+  exit_code, stdout_lines, stderr_lines = spawn_process(entriesdump_binary,
+                                                        0, 0, None, '--subdirs', path)
+  return [line.strip() for line in stdout_lines if not line.startswith("DBG:")]
 
 # Chmod recursively on a whole subtree
 def chmod_tree(path, mode, mask):
@@ -1010,6 +1043,9 @@ def is_fs_type_fsfs():
 def is_os_windows():
   return os.name == 'nt'
 
+def is_windows_type_dav():
+  return is_os_windows() and is_ra_type_dav()
+
 def is_posix_os():
   return os.name == 'posix'
 
@@ -1157,6 +1193,7 @@ class TestRunner:
                                       str(self.index)
 
     svntest.actions.no_sleep_for_timestamps()
+    svntest.actions.do_relocate_validation()
 
     saved_dir = os.getcwd()
     try:
@@ -1299,7 +1336,7 @@ def _create_parser():
   parser = optparse.OptionParser(usage=usage)
   parser.add_option('-l', '--list', action='store_true', dest='list_tests',
                     help='Print test doc strings instead of running them')
-  parser.add_option('-v', '--verbose', action='store_true',
+  parser.add_option('-v', '--verbose', action='store_true', dest='verbose',
                     help='Print binary command-lines (not with --quiet)')
   parser.add_option('-q', '--quiet', action='store_true',
                     help='Print only unexpected results (not with --verbose)')
@@ -1400,6 +1437,7 @@ def execute_tests(test_list, serial_only
   want the process to die."""
 
   global pristine_url
+  global pristine_greek_repos_url
   global svn_binary
   global svnadmin_binary
   global svnlook_binary
@@ -1466,8 +1504,8 @@ def execute_tests(test_list, serial_only
       parser.error("invalid test number, range of numbers, " +
                    "or function '%s'\n" % arg)
 
-  # Calculate pristine_url from test_area_url.
-  pristine_url = options.test_area_url + '/' + pathname2url(pristine_dir)
+  # Calculate pristine_greek_repos_url from test_area_url.
+  pristine_greek_repos_url = options.test_area_url + '/' + pathname2url(pristine_greek_repos_dir)
 
   if options.use_jsvn:
     if options.svn_bin is None:
@@ -1520,7 +1558,7 @@ def execute_tests(test_list, serial_only
     create_config_dir(default_config_dir)
 
     # Setup the pristine repository
-    svntest.actions.setup_pristine_repository()
+    svntest.actions.setup_pristine_greek_repository()
 
   # Run the tests.
   exit_code = _internal_run_tests(test_list, testnums, options.parallel,

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/sandbox.py
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/sandbox.py?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/sandbox.py (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/sandbox.py Wed Sep 15 19:32:26 2010
@@ -51,19 +51,21 @@ class Sandbox:
       self.repo_url = (svntest.main.options.test_area_url + '/'
                        + svntest.main.pathname2url(self.repo_dir))
     else:
-      self.repo_dir = svntest.main.pristine_dir
-      self.repo_url = svntest.main.pristine_url
+      self.repo_dir = svntest.main.pristine_greek_repos_dir
+      self.repo_url = svntest.main.pristine_greek_repos_url
 
     ### TODO: Move this into to the build() method
     # For dav tests we need a single authz file which must be present,
     # so we recreate it each time a sandbox is created with some default
-    # contents.
+    # contents, making sure that an empty file is never present
     if self.repo_url.startswith("http"):
       # this dir doesn't exist out of the box, so we may have to make it
       if not os.path.exists(svntest.main.work_dir):
         os.makedirs(svntest.main.work_dir)
       self.authz_file = os.path.join(svntest.main.work_dir, "authz")
-      open(self.authz_file, 'w').write("[/]\n* = rw\n")
+      tmp_authz_file = os.path.join(svntest.main.work_dir, "authz-" + self.name)
+      open(tmp_authz_file, 'w').write("[/]\n* = rw\n")
+      shutil.move(tmp_authz_file, self.authz_file)
 
     # For svnserve tests we have a per-repository authz file, and it
     # doesn't need to be there in order for things to work, so we don't
@@ -96,11 +98,8 @@ class Sandbox:
        and check out a WC from it (unless CREATE_WC is false). Change the
        sandbox's name to NAME. See actions.make_repo_and_wc() for details."""
     self._set_name(name, read_only)
-    if svntest.actions.make_repo_and_wc(self, create_wc, read_only):
-      raise svntest.Failure("Could not build repository and sandbox '%s'"
-                            % self.name)
-    else:
-      self._is_built = True
+    svntest.actions.make_repo_and_wc(self, create_wc, read_only)
+    self._is_built = True
 
   def add_test_path(self, path, remove=True):
     self.test_paths.append(path)
@@ -133,6 +132,20 @@ class Sandbox:
     self.add_test_path(path, remove)
     return path
 
+  tempname_offs = 0 # Counter for get_tempname
+
+  def get_tempname(self, prefix='tmp'):
+    """Get a stable name for a temporary file that will be removed after
+       running the test"""
+
+    dir = self.add_wc_path('tmp')
+    if not os.path.exists(dir):
+      os.mkdir(dir)
+
+    self.tempname_offs = self.tempname_offs + 1
+
+    return os.path.join(dir, '%s-%s' % (prefix, self.tempname_offs))
+
   def cleanup_test_paths(self):
     "Clean up detritus from this sandbox, and any dependents."
     if self.dependents:
@@ -141,7 +154,7 @@ class Sandbox:
         sbox.cleanup_test_paths()
     # cleanup all test specific working copies and repositories
     for path in self.test_paths:
-      if not path is svntest.main.pristine_dir:
+      if not path is svntest.main.pristine_greek_repos_dir:
         _cleanup_test_path(path)
 
   def is_built(self):
@@ -153,6 +166,25 @@ class Sandbox:
       wc_dir = self.wc_dir
     return os.path.join(wc_dir, svntest.wc.to_ospath(relpath))
 
+  def redirected_root_url(self, temporary=False):
+    """If TEMPORARY is set, return the URL which should be configured
+       to temporarily redirect to the root of this repository;
+       otherwise, return the URL which should be configured to
+       permanent redirect there.  (Assumes that the sandbox is not
+       read-only.)"""
+    assert not self.read_only
+    assert self.repo_url.startswith("http")
+    parts = self.repo_url.rsplit('/', 1)
+    return '%s/REDIRECT-%s-%s' % (parts[0],
+                                  temporary and 'TEMP' or 'PERM',
+                                  parts[1])
+    
+  def simple_update(self, target=None):
+    assert not self.read_only
+    if target is None:
+      target = self.wc_dir
+    svntest.main.run_svn(False, 'update', target)
+
   def simple_commit(self, target=None):
     assert not self.read_only
     if target is None:
@@ -220,6 +252,6 @@ def _cleanup_test_path(path, retrying=Fa
   try:
     svntest.main.safe_rmtree(path)
   except:
-    if svntest.main.verbose_mode:
+    if svntest.main.options.verbose:
       print("WARNING: cleanup failed, will try again later")
     _deferred_test_paths.append(path)

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/tree.py
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/tree.py?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/tree.py (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/tree.py Wed Sep 15 19:32:26 2010
@@ -257,7 +257,7 @@ class SVNTreeNode:
       path = path[1:]
 
     line = prepend
-    line += "%-20s: Item(" % ("'%s'" % path)
+    line += "%-20s: Item(" % ("'%s'" % path.replace(os.sep, '/'))
     comma = False
 
     mime_type = self.props.get("svn:mime-type")

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/verify.py
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/verify.py?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/verify.py (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/verify.py Wed Sep 15 19:32:26 2010
@@ -25,6 +25,7 @@
 ######################################################################
 
 import re, sys
+from difflib import unified_diff
 
 import svntest
 
@@ -279,19 +280,33 @@ def display_lines(message, label, expect
     output = 'EXPECTED %s' % label
     if expected_is_regexp:
       output += ' (regexp)'
+      expected = [expected + '\n']
     if expected_is_unordered:
       output += ' (unordered)'
     output += ':'
     print(output)
     for x in expected:
       sys.stdout.write(x)
-    if expected_is_regexp:
-      sys.stdout.write('\n')
   if actual is not None:
     print('ACTUAL %s:' % label)
     for x in actual:
       sys.stdout.write(x)
 
+  # Additionally print unified diff
+  if not expected_is_regexp:
+    print('DIFF ' + ' '.join(output.split(' ')[1:]))
+
+    if type(expected) is str:
+      expected = [expected]
+
+    if type(actual) is str:
+      actual = [actual]
+
+    for x in unified_diff(expected, actual,
+                          fromfile="EXPECTED %s" % label,
+                          tofile="ACTUAL %s" % label):
+      sys.stdout.write(x)
+
 def compare_and_display_lines(message, label, expected, actual,
                               raisable=None):
   """Compare two sets of output lines, and print them if they differ,

Modified: subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/wc.py
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/wc.py?rev=997472&r1=997471&r2=997472&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/wc.py (original)
+++ subversion/branches/py-tests-as-modules/subversion/tests/cmdline/svntest/wc.py Wed Sep 15 19:32:26 2010
@@ -323,6 +323,10 @@ class State:
           if item.entry_rev is not None:
             item.wc_rev = item.entry_rev
             item.entry_rev = None
+          # status might vary as well, e.g. when a directory is missing
+          if item.entry_status is not None:
+            item.status = item.entry_status
+            item.entry_status = None
       if item.writelocked:
         # we don't contact the repository, so our only information is what
         # is in the working copy. 'K' means we have one and it matches the
@@ -551,17 +555,14 @@ class State:
     desc = { }
     dot_svn = svntest.main.get_admin_name()
 
-    for dirpath, dirs, files in os.walk(base):
-      if dot_svn in dirs:
-        # don't visit the .svn subdir
-        dirs.remove(dot_svn)
-      else:
-        # this is not a versioned directory. remove all subdirectories since
-        # we don't want to visit them. then skip this directory.
-        dirs[:] = []
-        continue
+    for dirpath in svntest.main.run_entriesdump_subdirs(base):
+
+      if base == '.' and dirpath != '.':
+        dirpath = '.' + os.path.sep + dirpath
 
       entries = svntest.main.run_entriesdump(dirpath)
+      if entries is None:
+        continue
 
       if dirpath == '.':
         parent = ''
@@ -578,6 +579,9 @@ class State:
         # DELETED node lives.
         if entry.deleted and entry.schedule != 1:
           continue
+        # entries that are ABSENT don't show up in status
+        if entry.absent:
+          continue
         if name and entry.kind == 2:
           # stub subdirectory. leave a "missing" StateItem in here. note
           # that we can't put the status as "! " because that gets tweaked
@@ -603,12 +607,6 @@ class State:
         if implied_url and implied_url != entry.url:
           item.switched = 'S'
 
-      # only recurse into directories found in this entries. remove any
-      # which are not mentioned.
-      unmentioned = set(dirs) - set(entries.keys())
-      for subdir in unmentioned:
-        dirs.remove(subdir)
-
     return cls('', desc)
 
 
@@ -621,7 +619,8 @@ class StateItem:
   """
 
   def __init__(self, contents=None, props=None,
-               status=None, verb=None, wc_rev=None, entry_rev=None,
+               status=None, verb=None, wc_rev=None,
+               entry_rev=None, entry_status=None,
                locked=None, copied=None, switched=None, writelocked=None,
                treeconflict=None):
     # provide an empty prop dict if it wasn't provided
@@ -644,9 +643,10 @@ class StateItem:
     self.verb = verb
     # The base revision number of the node in the WC, as a string.
     self.wc_rev = wc_rev
-    # This one will be set when we expect the wc_rev to differ from the one
-    # found ni the entries code.
+    # These will be set when we expect the wc_rev/status to differ from those
+    # found in the entries code.
     self.entry_rev = entry_rev
+    self.entry_status = entry_status
     # For the following attributes, the value is the status character of that
     # field from 'svn status', except using value None instead of status ' '.
     self.locked = locked
@@ -820,8 +820,46 @@ def text_base_path(file_path):
   """Return the path to the text-base file for the versioned file
      FILE_PATH."""
   dot_svn = svntest.main.get_admin_name()
-  return os.path.join(os.path.dirname(file_path), dot_svn, 'text-base',
-                      os.path.basename(file_path) + '.svn-base')
+  root_path, relpath = os.path.split(file_path)
+
+  while True:
+    db_path = os.path.join(root_path, dot_svn, 'wc.db')
+    try:
+      if os.path.exists(db_path):
+        db = svntest.sqlite3.connect(db_path)
+        break
+    except: pass
+    head, tail = os.path.split(root_path)
+    if head == root_path:
+      raise svntest.Failure("No DB for " + file_path)
+    root_path = head
+    relpath = os.path.join(tail, relpath).replace(os.sep, '/')
+
+  c = db.cursor()
+  c.execute("""select checksum from working_node
+               where local_relpath = '""" + relpath + """'""")
+  checksum = c.fetchone()
+  if checksum is None:
+    c.execute("""select checksum from base_node
+                 where local_relpath = '""" + relpath + """'""")
+    checksum = c.fetchone()[0]
+  if checksum is not None and checksum[0:6] == "$md5 $":
+    c.execute("""select checksum from pristine
+                 where md5_checksum = '""" + checksum + """'""")
+    checksum = c.fetchone()[0]
+  if checksum is None:
+    raise svntest.Failure("No SHA1 checksum for " + relpath)
+  db.close()
+
+  checksum = checksum[6:]
+  # Calculate single DB location
+  fn = os.path.join(root_path, dot_svn, 'pristine', checksum[0:2], checksum)
+
+  if os.path.isfile(fn):
+    return fn
+
+  # Calculate per dir location
+  return os.path.join(root_path, dot_svn, 'pristine', checksum)
 
 
 # ------------