You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2012/10/16 21:41:20 UTC

svn commit: r1398951 [1/2] - in /subversion/branches/http-dynamic-prop-namespaces: ./ build/hudson/ notes/ notes/api-errata/1.8/ notes/obliterate/ notes/tree-conflicts/ subversion/bindings/javahl/native/ subversion/bindings/swig/include/ subversion/bin...

Author: cmpilato
Date: Tue Oct 16 19:41:17 2012
New Revision: 1398951

URL: http://svn.apache.org/viewvc?rev=1398951&view=rev
Log:
Sync the 'http-dynamic-prop-namespaces' branch with recent trunk changes.
(Merged /subversion/trunk:r1398337-1398941.)

Added:
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/util_error.c
      - copied unchanged from r1398941, subversion/trunk/subversion/libsvn_ra_serf/util_error.c
Modified:
    subversion/branches/http-dynamic-prop-namespaces/   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/build/hudson/README   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/api-changes-1.7.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/api-errata/1.8/fs001.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/diff-data-flows.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/design-audit.html   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/design-authz.html   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/design-repos.html   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/design-wc.html   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/plan-milestones.html   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/ra-serf-testing.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/tree-conflicts/all-add-vs-add-tree-conflicts.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/notes/wc_node_walkers.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/javahl/native/ClientContext.cpp
    subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/include/svn_types.swg
    subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Client.pm
    subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Core.pm
    subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/t/3client.t
    subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_client_private.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_pseudo_md5.h   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_subr_private.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_client.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_config.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_error_codes.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_io.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/ctx.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/merge.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/fs_fs.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/temp_serializer.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/ra_serf.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/replay.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/sb_bucket.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/serf.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/update.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/util.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_svn/client.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/cache-membuffer.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/config_file.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/pseudo_md5.c   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/sysinfo.c   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/sysinfo.h   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/version.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc-queries.sql
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_private.h
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_util.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_wcroot.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/svn/main.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/svn/merge-cmd.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/svn/mergeinfo-cmd.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/svnrdump/load_editor.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/tests/cmdline/svnadmin_tests.py
    subversion/branches/http-dynamic-prop-namespaces/subversion/tests/cmdline/tree_conflict_tests.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/subversion/tests/cmdline/wc_tests.py   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/subversion/tests/libsvn_delta/vdelta_1.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/subversion/tests/libsvn_subr/compat-test.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/tests/libsvn_wc/op-depth-test.c
    subversion/branches/http-dynamic-prop-namespaces/subversion/tests/libsvn_wc/utils.c
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/master/public_html/index.html   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/master/public_html/robots.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/win32-xp-VS2005/config.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/win32-xp-VS2005/do_all.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/win32-xp-VS2005/svnbuild.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/win32-xp-VS2005/svncheck.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/win32-xp-VS2005/svnclean.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/win32-xp-VS2005/svnlog.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/client-side/svn-bench/cl.h   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/client-side/svn-bench/client_errors.h   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/client-side/svn-bench/help-cmd.c   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/client-side/svn-bench/main.c   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/client-side/svn-bench/notify.c   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/client-side/svn-bench/null-export-cmd.c   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/client-side/svn-bench/null-list-cmd.c   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/client-side/svn-bench/null-log-cmd.c   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/client-side/svn-bench/util.c   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/dev/benchmarks/suite1/run.bat   (contents, props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/server-side/fsfs-reorg.c
    subversion/branches/http-dynamic-prop-namespaces/tools/server-side/svnpubsub/README.txt   (props changed)
    subversion/branches/http-dynamic-prop-namespaces/tools/server-side/svnpubsub/irkerbridge.py   (props changed)

Propchange: subversion/branches/http-dynamic-prop-namespaces/
------------------------------------------------------------------------------
  Merged /subversion/trunk:r1398337-1398941

Propchange: subversion/branches/http-dynamic-prop-namespaces/build/hudson/README
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/api-changes-1.7.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/api-errata/1.8/fs001.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/diff-data-flows.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/design-audit.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/design-authz.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/design-repos.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/design-wc.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/obliterate/plan-milestones.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/ra-serf-testing.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/tree-conflicts/all-add-vs-add-tree-conflicts.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/notes/wc_node_walkers.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/javahl/native/ClientContext.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/javahl/native/ClientContext.cpp?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/javahl/native/ClientContext.cpp (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/javahl/native/ClientContext.cpp Tue Oct 16 19:41:17 2012
@@ -71,7 +71,8 @@ ClientContext::ClientContext(jobject jsv
 
     env->DeleteLocalRef(jctx);
 
-    SVN_JNI_ERR(svn_client_create_context(&m_context, pool.getPool()),
+    SVN_JNI_ERR(svn_client_create_context2(&m_context, NULL,
+                                           pool.getPool()),
                 );
 
     /* Clear the wc_ctx as we don't want to maintain this unconditionally

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/include/svn_types.swg
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/include/svn_types.swg?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/include/svn_types.swg (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/include/svn_types.swg Tue Oct 16 19:41:17 2012
@@ -795,6 +795,14 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
    svn_repos_get_commit_editor4()
 */
 
+#ifdef SWIGPERL
+%typemap(in) (svn_commit_callback2_t callback, void *callback_baton) {
+    $1 = svn_swig_pl_thunk_commit_callback2;
+    $2 = (void *)$input;
+    svn_swig_pl_hold_ref_in_pool (_global_pool, $input);
+};
+#endif
+
 #ifdef SWIGRUBY
 %typemap(in) (svn_commit_callback2_t callback, void *callback_baton)
 {
@@ -817,6 +825,29 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
 #endif
 
 /* -----------------------------------------------------------------------
+   Callback: svn_commit_callback2_t
+   svn_client_mkdir4() 
+   svn_client_delete4() 
+   svn_client_import4() 
+   svn_client_commit5() 
+   svn_client_copy6() 
+   svn_client_move6() 
+   svn_client_propset_remote() 
+
+   A separate typemap is needed here because we used different variable names
+   in the client library functions than we used in the ra/repos library
+   functions.
+*/
+
+#ifdef SWIGPERL
+%typemap(in) (svn_commit_callback2_t commit_callback, void *commit_baton) {
+    $1 = svn_swig_pl_thunk_commit_callback2;
+    $2 = (void *)$input;
+    svn_swig_pl_hold_ref_in_pool (_global_pool, $input);
+};
+#endif
+
+/* -----------------------------------------------------------------------
    Callback: svn_cancel_func_t
 */
 

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c Tue Oct 16 19:41:17 2012
@@ -919,6 +919,22 @@ svn_error_t *svn_swig_pl_thunk_commit_ca
     return SVN_NO_ERROR;
 }
 
+svn_error_t *svn_swig_pl_thunk_commit_callback2(const svn_commit_info_t *commit_info, 
+                                                void *baton,
+                                                apr_pool_t *pool)
+{
+    if (!SvOK((SV *)baton))
+        return SVN_NO_ERROR;
+
+    svn_swig_pl_callback_thunk(CALL_SV, baton, NULL,
+                               "SS",
+                               commit_info, _SWIG_TYPE("svn_commit_info_t *"),
+                               pool, POOLINFO);
+
+    return SVN_NO_ERROR;
+}
+
+
 /* Wrap RA */
 
 static svn_error_t * thunk_open_tmp_file(apr_file_t **fp,

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h Tue Oct 16 19:41:17 2012
@@ -127,6 +127,11 @@ svn_error_t *svn_swig_pl_thunk_commit_ca
 					       const char *author,
 					       void *baton);
 
+/* thunked commit editor callback2. */
+svn_error_t *svn_swig_pl_thunk_commit_callback2(const svn_commit_info_t *commit_info,
+                                                void *baton,
+                                                apr_pool_t *pool);
+
 /* thunked repos_history callback. */
 svn_error_t *svn_swig_pl_thunk_history_func(void *baton,
                                             const char *path,

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Client.pm
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Client.pm?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Client.pm (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Client.pm Tue Oct 16 19:41:17 2012
@@ -10,7 +10,7 @@ BEGIN {
     @_all_fns =
         qw( version diff_summarize_dup create_context checkout3
             checkout2 checkout update4 update3 update2 update switch2 switch
-            add4 add3 add2 add mkdir3 mkdir2 mkdir delete3 delete2
+            add4 add3 add2 add mkdir4 mkdir3 mkdir2 mkdir delete3 delete2
             delete import3 import2 import commit4 commit3 commit2
             commit status4 status3 status2 status log4 log3 log2 log blame4
             blame3 blame2 blame diff4 diff3 diff2 diff diff_peg4
@@ -628,6 +628,21 @@ Has no return.
 
 =item $ctx-E<gt>mkdir($targets, $pool);
 
+Similar to $ctx-E<gt>mkdir2() except it returns an svn_client_commit_info_t
+object instead of a svn_commit_info_t object.
+
+=item $ctx-E<gt>mkdir2($targets, $pool);
+
+Similar to $ctx-E<gt>mkdir3(), but with $make_parents always FALSE, and
+$revprop_hash always undef.
+
+=item $ctx-E<gt>mkdir3($targets, $make_parents, $revprop_hash, $pool);
+
+Similar to $ctx-E<gt>mkdir4(), but returns a svn_commit_info_t object rather
+than through a callback function.
+
+=item $ctx-E<gt>mkdir4($targets, $make_parents, $revprop_hash, \&commit_callback, $pool);
+
 Create a directory, either in a repository or a working copy.
 
 If $targets contains URLs, immediately attempts to commit the creation of the
@@ -637,10 +652,23 @@ object.
 Else, create the directories on disk, and attempt to schedule them for addition.
 In this case returns undef.
 
+If $make_parents is TRUE, create any non-existant parent directories also.
+
+If not undef, $revprop_hash is a reference to a hash table holding additional
+custom revision properites (property names mapped to strings) to be set on the
+new revision in the event that this is a committing operation.  This hash
+cannot contain any standard Subversion properties.
+
+Calls the log message callback to query for a commit log message when one is
+needed.
+
 Calls the notify callback when the directory has been created (successfully)
 in the working copy, with the path of the new directory.  Note this is only
 called for items added to the working copy.
 
+If \&commit_callback is not undef, then for each successful commit, call
+\&commit_callback with the svn_commit_info_t object for the commit.
+
 =item $ctx-E<gt>move($src_path, $src_revision, $dst_path, $force, $pool);
 
 Move $src_path to $dst_path.

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Core.pm
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Core.pm?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Core.pm (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/Core.pm Tue Oct 16 19:41:17 2012
@@ -823,6 +823,37 @@ Author of created rev.
 
 =cut
 
+package _p_svn_commit_info_t;
+use SVN::Base qw(Core svn_commit_info_t_);
+
+=head2 svn_commit_info_t
+
+=over 4
+
+=item $commit-E<gt>revision()
+
+Just committed revision.
+
+=item $commit-E<gt>date()
+
+Server-side date of the commit.
+
+=item $commit-E<gt>author()
+
+Author of the commit.
+
+=item $commit-E<gt>post_commit_err()
+
+Error message from the post-commit hook, or undef.
+
+=item $commit-E<gt>repos_root()
+
+Repoistory root, may be undef if unknown.
+
+=back
+
+=cut
+
 package _p_svn_auth_cred_simple_t;
 use SVN::Base qw(Core svn_auth_cred_simple_t_);
 

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/t/3client.t
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/t/3client.t?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/t/3client.t (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/bindings/swig/perl/native/t/3client.t Tue Oct 16 19:41:17 2012
@@ -20,7 +20,7 @@
 #
 #
 
-use Test::More tests => 211;
+use Test::More tests => 221;
 use strict;
 
 # shut up about variables that are only used once.
@@ -101,6 +101,43 @@ $current_rev++;
 # TEST
 is($ci_dir1->revision,$current_rev,"commit info revision equals $current_rev");
 
+my ($ci_dir2) = $ctx->mkdir2(["$reposurl/dir2"]);
+# TEST
+isa_ok($ci_dir2,'_p_svn_commit_info_t');
+$current_rev++;
+# TEST
+is($ci_dir2->revision,$current_rev,"commit info revision equals $current_rev");
+
+my ($ci_dir3) = $ctx->mkdir3(["$reposurl/dir3"],0,undef);
+# TEST
+isa_ok($ci_dir3,'_p_svn_commit_info_t');
+$current_rev++;
+# TEST
+is($ci_dir3->revision,$current_rev,"commit info revision equals $current_rev");
+
+# TEST
+is($ctx->mkdir4(["$reposurl/dir4"],0,undef,sub {
+      my ($commit_info) = @_;
+
+      # TEST
+      isa_ok($commit_info,'_p_svn_commit_info_t','commit_info type check');
+
+      # TEST
+      is($commit_info->revision(),$current_rev + 1, 'commit info revision');
+
+      # TEST
+      like($commit_info->date(),
+           qr/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}Z$/,
+           'commit info date');
+
+      # TEST
+      is($commit_info->post_commit_err(),undef,'commit info post_commit_error');
+
+      # TEST
+      is($commit_info->repos_root(),$reposurl,'commit info repos_root');
+    }),
+    undef,'Returned undef from mkdir4 operation.');
+$current_rev++;
 
 
 my ($rpgval,$rpgrev) = $ctx->revprop_get('svn:author',$reposurl,$current_rev);
@@ -736,13 +773,13 @@ isa_ok($plh,'HASH',
 is_deeply($plh, {'perl-test' => 'test-val'}, 'test prop list prop_hash values');
 
 # add a dir to test update
-my ($ci_dir2) = $ctx->mkdir(["$reposurl/dir2"]);
+my ($ci_dir5) = $ctx->mkdir(["$reposurl/dir5"]);
 # TEST
-isa_ok($ci_dir2,'_p_svn_client_commit_info_t',
+isa_ok($ci_dir5,'_p_svn_client_commit_info_t',
        'mkdir returns a _p_svn_client_commit_info_t');
 $current_rev++;
 # TEST
-is($ci_dir2->revision(),$current_rev,
+is($ci_dir5->revision(),$current_rev,
    "commit info revision equals $current_rev");
 
 # Use explicit revnum to test that instead of just HEAD.

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_client_private.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_client_private.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_client_private.h Tue Oct 16 19:41:17 2012
@@ -226,54 +226,6 @@ svn_client__wc_node_get_origin(svn_clien
                                apr_pool_t *result_pool,
                                apr_pool_t *scratch_pool);
 
-
-/* Details of a symmetric merge. */
-typedef struct svn_client__symmetric_merge_t svn_client__symmetric_merge_t;
-
-/* Find the information needed to merge all unmerged changes from a source
- * branch into a target branch.  The information is the locations of the
- * youngest common ancestor, merge base, and such like.
- *
- * Set *MERGE to the information needed to merge all unmerged changes
- * (up to SOURCE_REVISION) from the source branch SOURCE_PATH_OR_URL @
- * SOURCE_REVISION into the target WC at TARGET_WCPATH.
- */
-svn_error_t *
-svn_client__find_symmetric_merge(svn_client__symmetric_merge_t **merge,
-                                 const char *source_path_or_url,
-                                 const svn_opt_revision_t *source_revision,
-                                 const char *target_wcpath,
-                                 svn_boolean_t allow_mixed_rev,
-                                 svn_boolean_t allow_local_mods,
-                                 svn_boolean_t allow_switched_subtrees,
-                                 svn_client_ctx_t *ctx,
-                                 apr_pool_t *result_pool,
-                                 apr_pool_t *scratch_pool);
-
-/* Find out what kind of symmetric merge would be needed, when the target
- * is only known as a repository location rather than a WC.
- *
- * Like svn_client__find_symmetric_merge() except that SOURCE_PATH_OR_URL @
- * SOURCE_REVISION should refer to a repository location and not a WC.
- *
- * ### The result, *MERGE_P, may not be suitable for passing to
- * svn_client__do_symmetric_merge().  The target WC state would not be
- * checked (as in the ALLOW_* flags).  We should resolve this problem:
- * perhaps add the allow_* params here, or provide another way of setting
- * them; and perhaps ensure __do_...() will accept the result iff given a
- * WC that matches the stored target location.
- */
-svn_error_t *
-svn_client__find_symmetric_merge_no_wc(
-                                 svn_client__symmetric_merge_t **merge_p,
-                                 const char *source_path_or_url,
-                                 const svn_opt_revision_t *source_revision,
-                                 const char *target_path_or_url,
-                                 const svn_opt_revision_t *target_revision,
-                                 svn_client_ctx_t *ctx,
-                                 apr_pool_t *result_pool,
-                                 apr_pool_t *scratch_pool);
-
 /* Set *YCA, *BASE, *RIGHT, *TARGET to the repository locations of the
  * youngest common ancestor of the branches, the base chosen for 3-way
  * merge, the right-hand side of the source diff, and the target WC.
@@ -286,45 +238,9 @@ svn_client__symmetric_merge_get_location
                                 svn_client__pathrev_t **base,
                                 svn_client__pathrev_t **right,
                                 svn_client__pathrev_t **target,
-                                const svn_client__symmetric_merge_t *merge,
+                                const svn_client_symmetric_merge_t *merge,
                                 apr_pool_t *result_pool);
 
-/* Perform a symmetric merge.
- *
- * Merge according to MERGE into the WC at TARGET_WCPATH.
- *
- * The other parameters are as in svn_client_merge4().
- *
- * ### TODO: There's little point in this function being the only way the
- * caller can use the result of svn_client__find_symmetric_merge().  The
- * contents of MERGE should be more public, or there should be other ways
- * the caller can use it, or these two functions should be combined into
- * one.  I want to make it more public, and also possibly have more ways
- * to use it in future (for example, do_symmetric_merge_with_step_by_-
- * step_confirmation).
- */
-svn_error_t *
-svn_client__do_symmetric_merge(const svn_client__symmetric_merge_t *merge,
-                               const char *target_wcpath,
-                               svn_depth_t depth,
-                               svn_boolean_t force,
-                               svn_boolean_t record_only,
-                               svn_boolean_t dry_run,
-                               const apr_array_header_t *merge_options,
-                               svn_client_ctx_t *ctx,
-                               apr_pool_t *scratch_pool);
-
-/* Return TRUE iff the symmetric merge represented by MERGE is going to be
- * a reintegrate-like merge: that is, merging in the opposite direction
- * from the last full merge.
- *
- * This function exists because the merge is NOT really symmetric and the
- * client can be more friendly if it knows something about the differences.
- */
-svn_boolean_t
-svn_client__symmetric_merge_is_reintegrate_like(
-        const svn_client__symmetric_merge_t *merge);
-
 
 #ifdef __cplusplus
 }

Propchange: subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_pseudo_md5.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_subr_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_subr_private.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_subr_private.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/include/private/svn_subr_private.h Tue Oct 16 19:41:17 2012
@@ -295,6 +295,36 @@ svn_hash__make(apr_pool_t *pool);
 
 /** @} */
 
+/**
+ * @defgroup svn_version Version number dotted triplet parsing
+ * @{
+ */
+
+/* Set @a *version to a version structure parsed from the version
+ * string representation in @a version_string.  Return 
+ * @c SVN_ERR_MALFORMED_VERSION_STRING if the string fails to parse
+ * cleanly.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_version__parse_version_string(svn_version_t **version,
+                                  const char *version_string,
+                                  apr_pool_t *result_pool);
+
+/* Return true iff @a version represents a version number of at least
+ * the level represented by @a major, @a minor, and @a patch.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_version__at_least(svn_version_t *version,
+                      int major,
+                      int minor,
+                      int patch);
+
+/** @} */
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_client.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_client.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_client.h Tue Oct 16 19:41:17 2012
@@ -990,7 +990,10 @@ typedef struct svn_client_ctx_t
 
 /** Initialize a client context.
  * Set @a *ctx to a client context object, allocated in @a pool, that
- * represents a particular instance of an svn client.
+ * represents a particular instance of an svn client. @a cfg_hash is used
+ * to initialise the config member of the returned context object and should
+ * remain valid for the lifetime of the object. @a cfg_hash may be @c NULL,
+ * in which case it is ignored.
  *
  * In order to avoid backwards compatibility problems, clients must
  * use this function to initialize and allocate the
@@ -999,7 +1002,20 @@ typedef struct svn_client_ctx_t
  *
  * The current implementation never returns error, but callers should
  * still check for error, for compatibility with future versions.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_create_context2(svn_client_ctx_t **ctx,
+                           apr_hash_t *cfg_hash,
+                           apr_pool_t *pool);
+
+
+/** Similar to svn_client_create_context but passes a NULL @a cfg_hash.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_create_context(svn_client_ctx_t **ctx,
                           apr_pool_t *pool);
@@ -3360,6 +3376,90 @@ svn_client_diff_summarize_peg(const char
  * @{
  */
 
+/* Details of a symmetric merge. */
+typedef struct svn_client_symmetric_merge_t svn_client_symmetric_merge_t;
+
+/* Find the information needed to merge all unmerged changes from a source
+ * branch into a target branch.  The information is the locations of the
+ * youngest common ancestor, merge base, and such like.
+ *
+ * Set *MERGE to the information needed to merge all unmerged changes
+ * (up to SOURCE_REVISION) from the source branch SOURCE_PATH_OR_URL @
+ * SOURCE_REVISION into the target WC at TARGET_WCPATH.
+ */
+svn_error_t *
+svn_client_find_symmetric_merge(svn_client_symmetric_merge_t **merge,
+                                const char *source_path_or_url,
+                                const svn_opt_revision_t *source_revision,
+                                const char *target_wcpath,
+                                svn_boolean_t allow_mixed_rev,
+                                svn_boolean_t allow_local_mods,
+                                svn_boolean_t allow_switched_subtrees,
+                                svn_client_ctx_t *ctx,
+                                apr_pool_t *result_pool,
+                                apr_pool_t *scratch_pool);
+
+/* Find out what kind of symmetric merge would be needed, when the target
+ * is only known as a repository location rather than a WC.
+ *
+ * Like svn_client_find_symmetric_merge() except that SOURCE_PATH_OR_URL @
+ * SOURCE_REVISION should refer to a repository location and not a WC.
+ *
+ * ### The result, *MERGE_P, may not be suitable for passing to
+ * svn_client_do_symmetric_merge().  The target WC state would not be
+ * checked (as in the ALLOW_* flags).  We should resolve this problem:
+ * perhaps add the allow_* params here, or provide another way of setting
+ * them; and perhaps ensure __do_...() will accept the result iff given a
+ * WC that matches the stored target location.
+ */
+svn_error_t *
+svn_client_find_symmetric_merge_no_wc(
+                                 svn_client_symmetric_merge_t **merge_p,
+                                 const char *source_path_or_url,
+                                 const svn_opt_revision_t *source_revision,
+                                 const char *target_path_or_url,
+                                 const svn_opt_revision_t *target_revision,
+                                 svn_client_ctx_t *ctx,
+                                 apr_pool_t *result_pool,
+                                 apr_pool_t *scratch_pool);
+
+/* Perform a symmetric merge.
+ *
+ * Merge according to MERGE into the WC at TARGET_WCPATH.
+ *
+ * The other parameters are as in svn_client_merge4().
+ *
+ * ### TODO: There's little point in this function being the only way the
+ * caller can use the result of svn_client_find_symmetric_merge().  The
+ * contents of MERGE should be more public, or there should be other ways
+ * the caller can use it, or these two functions should be combined into
+ * one.  I want to make it more public, and also possibly have more ways
+ * to use it in future (for example, do_symmetric_merge_with_step_by_-
+ * step_confirmation).
+ */
+svn_error_t *
+svn_client_do_symmetric_merge(const svn_client_symmetric_merge_t *merge,
+                              const char *target_wcpath,
+                              svn_depth_t depth,
+                              svn_boolean_t force,
+                              svn_boolean_t record_only,
+                              svn_boolean_t dry_run,
+                              const apr_array_header_t *merge_options,
+                              svn_client_ctx_t *ctx,
+                              apr_pool_t *scratch_pool);
+
+/* Return TRUE iff the symmetric merge represented by MERGE is going to be
+ * a reintegrate-like merge: that is, merging in the opposite direction
+ * from the last full merge.
+ *
+ * This function exists because the merge is NOT really symmetric and the
+ * client can be more friendly if it knows something about the differences.
+ */
+svn_boolean_t
+svn_client_symmetric_merge_is_reintegrate_like(
+        const svn_client_symmetric_merge_t *merge);
+
+
 /** Merge changes from @a source1/@a revision1 to @a source2/@a revision2 into
  * the working-copy path @a target_wcpath.
  *

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_config.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_config.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_config.h Tue Oct 16 19:41:17 2012
@@ -118,6 +118,10 @@ typedef struct svn_config_t svn_config_t
 #define SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE         "memory-cache-size"
 #define SVN_CONFIG_SECTION_TUNNELS              "tunnels"
 #define SVN_CONFIG_SECTION_AUTO_PROPS           "auto-props"
+/** @since New in 1.8. */
+#define SVN_CONFIG_SECTION_WORKING_COPY         "working-copy"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE      "exclusive-locking"
 /** @} */
 
 /** @name Repository conf directory configuration files strings

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_error_codes.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_error_codes.h Tue Oct 16 19:41:17 2012
@@ -1415,6 +1415,11 @@ SVN_ERROR_START
              SVN_ERR_MISC_CATEGORY_START + 36,
              "too many memcached servers configured")
 
+  /** @since New in 1.8. */
+  SVN_ERRDEF(SVN_ERR_MALFORMED_VERSION_STRING,
+             SVN_ERR_MISC_CATEGORY_START + 37,
+             "too many memcached servers configured")
+
   /* command-line client errors */
 
   SVN_ERRDEF(SVN_ERR_CL_ARG_PARSING_ERROR,

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_io.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_io.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/include/svn_io.h Tue Oct 16 19:41:17 2012
@@ -610,13 +610,13 @@ svn_io_filesizes_different_p(svn_boolean
 /** Set @a *different_p12 to non-zero if @a file1 and @a file2 have different
  * sizes, else set to zero.  Do the similar for @a *different_p23 with
  * @a file2 and @a file3, and @a *different_p13 for @a file1 and @a file3.
- * All three of @a file1, @a file2 and @a file3 are utf8-encoded.
+ * The filenames @a file1, @a file2 and @a file3 are utf8-encoded.
  *
  * Setting @a *different_p12 to zero does not mean the files definitely
  * have the same size, it merely means that the sizes are not
  * definitely different.  That is, if the size of one or both files
- * cannot be determined, then the sizes are not known to be different,
- * so @a *different_p12 is set to 0.
+ * cannot be determined (due to stat() returning an error), then the sizes
+ * are not known to be different, so @a *different_p12 is set to 0.
  */
 svn_error_t *
 svn_io_filesizes_three_different_p(svn_boolean_t *different_p12,

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/ctx.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/ctx.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/ctx.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/ctx.c Tue Oct 16 19:41:17 2012
@@ -76,9 +76,12 @@ call_conflict_func(svn_wc_conflict_resul
 }
 
 svn_error_t *
-svn_client_create_context(svn_client_ctx_t **ctx,
-                          apr_pool_t *pool)
+svn_client_create_context2(svn_client_ctx_t **ctx,
+                           apr_hash_t *cfg_hash,
+                           apr_pool_t *pool)
 {
+  svn_config_t *cfg_config;
+                                   
   *ctx = apr_pcalloc(pool, sizeof(svn_client_ctx_t));
 
   (*ctx)->notify_func2 = call_notify_func;
@@ -87,8 +90,23 @@ svn_client_create_context(svn_client_ctx
   (*ctx)->conflict_func2 = call_conflict_func;
   (*ctx)->conflict_baton2 = *ctx;
 
-  SVN_ERR(svn_wc_context_create(&(*ctx)->wc_ctx, NULL /* config */, pool,
+  (*ctx)->config = cfg_hash;
+
+  if (cfg_hash)
+    cfg_config = apr_hash_get(cfg_hash, SVN_CONFIG_CATEGORY_CONFIG,
+                              APR_HASH_KEY_STRING);
+  else
+    cfg_config = NULL;
+
+  SVN_ERR(svn_wc_context_create(&(*ctx)->wc_ctx, cfg_config, pool,
                                 pool));
 
   return SVN_NO_ERROR;
 }
+
+svn_error_t *
+svn_client_create_context(svn_client_ctx_t **ctx,
+                          apr_pool_t *pool)
+{
+  return svn_client_create_context2(ctx, NULL, pool);
+}

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/merge.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_client/merge.c Tue Oct 16 19:41:17 2012
@@ -11401,7 +11401,7 @@ find_base_on_target(svn_client__pathrev_
   return SVN_NO_ERROR;
 }
 
-/* The body of svn_client__find_symmetric_merge(), which see.
+/* The body of svn_client_find_symmetric_merge(), which see.
  */
 static svn_error_t *
 find_symmetric_merge(svn_client__pathrev_t **base_p,
@@ -11482,15 +11482,15 @@ find_symmetric_merge(svn_client__pathrev
 }
 
 /* Details of a symmetric merge. */
-struct svn_client__symmetric_merge_t
+struct svn_client_symmetric_merge_t
 {
   svn_client__pathrev_t *yca, *base, *mid, *right, *target;
   svn_boolean_t allow_mixed_rev, allow_local_mods, allow_switched_subtrees;
 };
 
 svn_error_t *
-svn_client__find_symmetric_merge_no_wc(
-                                 svn_client__symmetric_merge_t **merge_p,
+svn_client_find_symmetric_merge_no_wc(
+                                 svn_client_symmetric_merge_t **merge_p,
                                  const char *source_path_or_url,
                                  const svn_opt_revision_t *source_revision,
                                  const char *target_path_or_url,
@@ -11501,7 +11501,7 @@ svn_client__find_symmetric_merge_no_wc(
 {
   source_and_target_t *s_t = apr_palloc(scratch_pool, sizeof(*s_t));
   svn_client__pathrev_t *target_loc;
-  svn_client__symmetric_merge_t *merge = apr_palloc(result_pool, sizeof(*merge));
+  svn_client_symmetric_merge_t *merge = apr_palloc(result_pool, sizeof(*merge));
 
   /* Source */
   SVN_ERR(svn_client__ra_session_from_path2(
@@ -11531,20 +11531,20 @@ svn_client__find_symmetric_merge_no_wc(
 }
 
 svn_error_t *
-svn_client__find_symmetric_merge(svn_client__symmetric_merge_t **merge_p,
-                                 const char *source_path_or_url,
-                                 const svn_opt_revision_t *source_revision,
-                                 const char *target_wcpath,
-                                 svn_boolean_t allow_mixed_rev,
-                                 svn_boolean_t allow_local_mods,
-                                 svn_boolean_t allow_switched_subtrees,
-                                 svn_client_ctx_t *ctx,
-                                 apr_pool_t *result_pool,
-                                 apr_pool_t *scratch_pool)
+svn_client_find_symmetric_merge(svn_client_symmetric_merge_t **merge_p,
+                                const char *source_path_or_url,
+                                const svn_opt_revision_t *source_revision,
+                                const char *target_wcpath,
+                                svn_boolean_t allow_mixed_rev,
+                                svn_boolean_t allow_local_mods,
+                                svn_boolean_t allow_switched_subtrees,
+                                svn_client_ctx_t *ctx,
+                                apr_pool_t *result_pool,
+                                apr_pool_t *scratch_pool)
 {
   const char *target_abspath;
   source_and_target_t *s_t = apr_palloc(result_pool, sizeof(*s_t));
-  svn_client__symmetric_merge_t *merge = apr_palloc(result_pool, sizeof(*merge));
+  svn_client_symmetric_merge_t *merge = apr_palloc(result_pool, sizeof(*merge));
 
   SVN_ERR(svn_dirent_get_absolute(&target_abspath, target_wcpath, scratch_pool));
 
@@ -11588,7 +11588,7 @@ svn_client__find_symmetric_merge(svn_cli
   return SVN_NO_ERROR;
 }
 
-/* The body of svn_client__do_symmetric_merge(), which see.
+/* The body of svn_client_do_symmetric_merge(), which see.
  *
  * Five locations are inputs: YCA, BASE, MID, RIGHT, TARGET, as shown
  * depending on whether the base is on the source branch or the target
@@ -11616,7 +11616,7 @@ svn_client__find_symmetric_merge(svn_cli
  * eliminate already-cherry-picked revisions from the source.
  */
 static svn_error_t *
-do_symmetric_merge_locked(const svn_client__symmetric_merge_t *merge,
+do_symmetric_merge_locked(const svn_client_symmetric_merge_t *merge,
                           const char *target_abspath,
                           svn_depth_t depth,
                           svn_boolean_t force,
@@ -11735,15 +11735,15 @@ do_symmetric_merge_locked(const svn_clie
 }
 
 svn_error_t *
-svn_client__do_symmetric_merge(const svn_client__symmetric_merge_t *merge,
-                               const char *target_wcpath,
-                               svn_depth_t depth,
-                               svn_boolean_t force,
-                               svn_boolean_t record_only,
-                               svn_boolean_t dry_run,
-                               const apr_array_header_t *merge_options,
-                               svn_client_ctx_t *ctx,
-                               apr_pool_t *pool)
+svn_client_do_symmetric_merge(const svn_client_symmetric_merge_t *merge,
+                              const char *target_wcpath,
+                              svn_depth_t depth,
+                              svn_boolean_t force,
+                              svn_boolean_t record_only,
+                              svn_boolean_t dry_run,
+                              const apr_array_header_t *merge_options,
+                              svn_client_ctx_t *ctx,
+                              apr_pool_t *pool)
 {
   const char *target_abspath, *lock_abspath;
 
@@ -11767,8 +11767,8 @@ svn_client__do_symmetric_merge(const svn
 }
 
 svn_boolean_t
-svn_client__symmetric_merge_is_reintegrate_like(
-        const svn_client__symmetric_merge_t *merge)
+svn_client_symmetric_merge_is_reintegrate_like(
+        const svn_client_symmetric_merge_t *merge)
 {
   return merge->mid != NULL;
 }
@@ -11779,7 +11779,7 @@ svn_client__symmetric_merge_get_location
                                 svn_client__pathrev_t **base,
                                 svn_client__pathrev_t **right,
                                 svn_client__pathrev_t **target,
-                                const svn_client__symmetric_merge_t *merge,
+                                const svn_client_symmetric_merge_t *merge,
                                 apr_pool_t *result_pool)
 {
   if (yca)

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/fs_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/fs_fs.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/fs_fs.c Tue Oct 16 19:41:17 2012
@@ -10316,6 +10316,7 @@ hotcopy_copy_packed_shard(svn_revnum_t *
   const char *src_subdir_packed_shard;
   svn_revnum_t revprop_rev;
   apr_pool_t *iterpool;
+  fs_fs_data_t *src_ffd = src_fs->fsap_data;
 
   /* Copy the packed shard. */
   src_subdir = svn_dirent_join(src_fs->path, PATH_REVS_DIR, scratch_pool);
@@ -10333,18 +10334,43 @@ hotcopy_copy_packed_shard(svn_revnum_t *
   /* Copy revprops belonging to revisions in this pack. */
   src_subdir = svn_dirent_join(src_fs->path, PATH_REVPROPS_DIR, scratch_pool);
   dst_subdir = svn_dirent_join(dst_fs->path, PATH_REVPROPS_DIR, scratch_pool);
-  iterpool = svn_pool_create(scratch_pool);
-  for (revprop_rev = rev;
-       revprop_rev < rev + max_files_per_dir;
-       revprop_rev++)
+
+  if (   src_ffd->format < SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT
+      || src_ffd->min_unpacked_rev < rev + max_files_per_dir)
     {
-      svn_pool_clear(iterpool);
+      /* copy unpacked revprops rev by rev */
+      iterpool = svn_pool_create(scratch_pool);
+      for (revprop_rev = rev;
+           revprop_rev < rev + max_files_per_dir;
+           revprop_rev++)
+        {
+          svn_pool_clear(iterpool);
 
-      SVN_ERR(hotcopy_copy_shard_file(src_subdir, dst_subdir,
-                                      revprop_rev, max_files_per_dir,
-                                      iterpool));
+          SVN_ERR(hotcopy_copy_shard_file(src_subdir, dst_subdir,
+                                          revprop_rev, max_files_per_dir,
+                                          iterpool));
+        }
+      svn_pool_destroy(iterpool);
+    }
+  else
+    {
+      /* revprop for revision 0 will never be packed */
+      if (rev == 0)
+        SVN_ERR(hotcopy_copy_shard_file(src_subdir, dst_subdir,
+                                        0, max_files_per_dir,
+                                        scratch_pool));
+
+      /* packed revprops folder */
+      packed_shard = apr_psprintf(scratch_pool, "%ld" PATH_EXT_PACKED_SHARD,
+                                  rev / max_files_per_dir);
+      src_subdir_packed_shard = svn_dirent_join(src_subdir, packed_shard,
+                                                scratch_pool);
+      SVN_ERR(hotcopy_io_copy_dir_recursively(src_subdir_packed_shard,
+                                              dst_subdir, packed_shard,
+                                              TRUE /* copy_perms */,
+                                              NULL /* cancel_func */, NULL,
+                                              scratch_pool));
     }
-  svn_pool_destroy(iterpool);
 
   /* If necessary, update the min-unpacked rev file in the hotcopy. */
   if (*dst_min_unpacked_rev < rev + max_files_per_dir)

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/temp_serializer.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/temp_serializer.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/temp_serializer.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_fs_fs/temp_serializer.c Tue Oct 16 19:41:17 2012
@@ -1244,7 +1244,8 @@ svn_fs_fs__serialize_mergeinfo(void **da
   svn_temp_serializer__context_t *context;
   svn_stringbuf_t *serialized;
   apr_hash_index_t *hi;
-  int i, k;
+  unsigned i;
+  int k;
   apr_size_t range_count;
 
   /* initialize our auxiliary data structure */
@@ -1326,7 +1327,8 @@ svn_fs_fs__deserialize_mergeinfo(void **
                                  apr_size_t data_len,
                                  apr_pool_t *pool)
 {
-  int i, k, n;
+  unsigned i;
+  int k, n;
   mergeinfo_data_t *merges = (mergeinfo_data_t *)data;
   svn_mergeinfo_t mergeinfo;
   

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/ra_serf.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/ra_serf.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/ra_serf.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/ra_serf.h Tue Oct 16 19:41:17 2012
@@ -1735,6 +1735,21 @@ svn_ra_serf__create_sb_bucket(svn_spillb
                               apr_pool_t *result_pool,
                               apr_pool_t *scratch_pool);
 
+/** Wrap STATUS from an serf function. If STATUS is not serf error code,
+  * this is equivalent to svn_error_wrap_apr().
+ */
+svn_error_t *
+svn_ra_serf__wrap_err(apr_status_t status,
+                      const char *fmt,
+                      ...);
+
+
+#if defined(SVN_DEBUG)
+/* Wrapper macros to collect file and line information */
+#define svn_ra_serf__wrap_err \
+  (svn_error__locate(__FILE__,__LINE__), (svn_ra_serf__wrap_err))
+
+#endif
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/replay.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/replay.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/replay.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/replay.c Tue Oct 16 19:41:17 2012
@@ -904,9 +904,8 @@ svn_ra_serf__replay_range(svn_ra_session
       SVN_ERR(err);
       if (status)
         {
-          return svn_error_wrap_apr(status,
-                                    _("Error retrieving replay REPORT (%d)"),
-                                    status);
+          return svn_ra_serf__wrap_err(status,
+                                       _("Error retrieving replay REPORT"));
         }
       done_reports = NULL;
     }

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/sb_bucket.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/sb_bucket.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/sb_bucket.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/sb_bucket.c Tue Oct 16 19:41:17 2012
@@ -62,7 +62,7 @@ svn_ra_serf__copy_into_spillbuf(svn_spil
       status = serf_bucket_read(bkt, SERF_READ_ALL_AVAIL, &data, &len);
 
       if (status != APR_SUCCESS && status != APR_EOF)
-        return svn_error_wrap_apr(status, _("Failed to read the request"));
+        return svn_ra_serf__wrap_err(status, _("Failed to read the request"));
 
       SVN_ERR(svn_spillbuf__write(*spillbuf, data, len, scratch_pool));
 

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/serf.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/serf.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/serf.c Tue Oct 16 19:41:17 2012
@@ -307,9 +307,9 @@ load_config(svn_ra_serf__session_t *sess
                                      session->pool);
       if (status)
         {
-          return svn_error_wrap_apr(status,
-                                    _("Could not resolve proxy server '%s'"),
-                                    proxy_host);
+          return svn_ra_serf__wrap_err(
+                   status, _("Could not resolve proxy server '%s'"),
+                   proxy_host);
         }
       session->using_proxy = TRUE;
       serf_config_proxy(session->context, proxy_addr);
@@ -431,7 +431,7 @@ svn_ra_serf__open(svn_ra_session_t *sess
                             svn_ra_serf__conn_closed, serf_sess->conns[0],
                             serf_sess->pool);
   if (status)
-    return svn_error_wrap_apr(status, NULL);
+    return svn_ra_serf__wrap_err(status, NULL);
 
   /* Set the progress callback. */
   serf_context_set_progress_cb(serf_sess->context, svn_ra_serf__progress,

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/update.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/update.c Tue Oct 16 19:41:17 2012
@@ -979,7 +979,7 @@ handle_fetch(serf_request_t *request,
       status = serf_bucket_read(response, 8000, &data, &len);
       if (SERF_BUCKET_READ_ERROR(status))
         {
-          return svn_error_wrap_apr(status, NULL);
+          return svn_ra_serf__wrap_err(status, NULL);
         }
 
       fetch_ctx->read_size += len;
@@ -999,7 +999,7 @@ handle_fetch(serf_request_t *request,
               /* Skip on to the next iteration of this loop. */
               if (APR_STATUS_IS_EAGAIN(status))
                 {
-                  return svn_error_wrap_apr(status, NULL);
+                  return svn_ra_serf__wrap_err(status, NULL);
                 }
               continue;
             }
@@ -1075,11 +1075,11 @@ handle_fetch(serf_request_t *request,
           svn_pool_destroy(info->pool);
 
           if (status)
-            return svn_error_wrap_apr(status, NULL);
+            return svn_ra_serf__wrap_err(status, NULL);
         }
       if (APR_STATUS_IS_EAGAIN(status))
         {
-          return svn_error_wrap_apr(status, NULL);
+          return svn_ra_serf__wrap_err(status, NULL);
         }
     }
   /* not reached */
@@ -1121,7 +1121,7 @@ handle_stream(serf_request_t *request,
       status = serf_bucket_read(response, 8000, &data, &len);
       if (SERF_BUCKET_READ_ERROR(status))
         {
-          return svn_error_wrap_apr(status, NULL);
+          return svn_ra_serf__wrap_err(status, NULL);
         }
 
       fetch_ctx->read_size += len;
@@ -1140,7 +1140,7 @@ handle_stream(serf_request_t *request,
               /* Skip on to the next iteration of this loop. */
               if (APR_STATUS_IS_EAGAIN(status))
                 {
-                  return svn_error_wrap_apr(status, NULL);
+                  return svn_ra_serf__wrap_err(status, NULL);
                 }
               continue;
             }
@@ -1170,7 +1170,7 @@ handle_stream(serf_request_t *request,
 
       if (status)
         {
-          return svn_error_wrap_apr(status, NULL);
+          return svn_ra_serf__wrap_err(status, NULL);
         }
     }
   /* not reached */
@@ -2338,7 +2338,7 @@ open_connection_if_needed(svn_ra_serf__s
                                        sess->conns[cur],
                                        sess->pool);
       if (status)
-        return svn_error_wrap_apr(status, NULL);
+        return svn_ra_serf__wrap_err(status, NULL);
 
       sess->num_conns++;
     }
@@ -2515,8 +2515,7 @@ finish_report(void *report_baton,
       SVN_ERR(err);
       if (status)
         {
-          return svn_error_wrap_apr(status, _("Error retrieving REPORT (%d)"),
-                                    status);
+          return svn_ra_serf__wrap_err(status, _("Error retrieving REPORT"));
         }
 
       /* Open extra connections if we have enough requests to send. */

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/util.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_serf/util.c Tue Oct 16 19:41:17 2012
@@ -771,7 +771,7 @@ svn_ra_serf__context_run_wait(svn_boolea
                         _("Error running context"));
             }
 
-          return svn_error_wrap_apr(status, _("Error running context"));
+          return svn_ra_serf__wrap_err(status, _("Error running context"));
         }
 
       /* Debugging purposes only! */
@@ -954,7 +954,7 @@ svn_ra_serf__handle_discard_body(serf_re
 
   status = drain_bucket(response);
   if (status)
-    return svn_error_wrap_apr(status, NULL);
+    return svn_ra_serf__wrap_err(status, NULL);
 
   return SVN_NO_ERROR;
 }
@@ -1493,7 +1493,7 @@ handle_server_error(serf_request_t *requ
      surface. */
   err = drain_bucket(response);
   if (err && !SERF_BUCKET_READ_ERROR(err))
-    return svn_error_wrap_apr(err, NULL);
+    return svn_ra_serf__wrap_err(err, NULL);
 
   return SVN_NO_ERROR;
 }
@@ -1515,7 +1515,7 @@ svn_ra_serf__handle_xml_parser(serf_requ
   status = serf_bucket_response_status(response, &sl);
   if (SERF_BUCKET_READ_ERROR(status))
     {
-      return svn_error_wrap_apr(status, NULL);
+      return svn_ra_serf__wrap_err(status, NULL);
     }
 
   /* Woo-hoo.  Nothing here to see.  */
@@ -1567,7 +1567,7 @@ svn_ra_serf__handle_xml_parser(serf_requ
 
       if (SERF_BUCKET_READ_ERROR(status))
         {
-          return svn_error_wrap_apr(status, NULL);
+          return svn_ra_serf__wrap_err(status, NULL);
         }
 
       ctx->read_size += len;
@@ -1588,7 +1588,7 @@ svn_ra_serf__handle_xml_parser(serf_requ
               /* Skip on to the next iteration of this loop. */
               if (APR_STATUS_IS_EAGAIN(status))
                 {
-                  return svn_error_wrap_apr(status, NULL);
+                  return svn_ra_serf__wrap_err(status, NULL);
                 }
               continue;
             }
@@ -1632,7 +1632,7 @@ svn_ra_serf__handle_xml_parser(serf_requ
 
       if (APR_STATUS_IS_EAGAIN(status))
         {
-          return svn_error_wrap_apr(status, NULL);
+          return svn_ra_serf__wrap_err(status, NULL);
         }
 
       if (APR_STATUS_IS_EOF(status))
@@ -1653,7 +1653,7 @@ svn_ra_serf__handle_xml_parser(serf_requ
               add_done_item(ctx);
             }
 
-          return svn_error_wrap_apr(status, NULL);
+          return svn_ra_serf__wrap_err(status, NULL);
         }
 
       /* feed me! */
@@ -1843,7 +1843,7 @@ handle_response(serf_request_t *request,
           && handler->sline.code != 304)
         {
           err = svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA,
-                                  svn_error_wrap_apr(status, NULL),
+                                  svn_ra_serf__wrap_err(status, NULL),
                                   _("Premature EOF seen from server"
                                     " (http status=%d)"),
                                   handler->sline.code);
@@ -2445,7 +2445,7 @@ expat_response_handler(serf_request_t *r
 
       status = serf_bucket_read(response, PARSE_CHUNK_SIZE, &data, &len);
       if (SERF_BUCKET_READ_ERROR(status))
-        return svn_error_wrap_apr(status, NULL);
+        return svn_ra_serf__wrap_err(status, NULL);
 
 #if 0
       /* ### move restart/skip into the core handler  */
@@ -2499,7 +2499,7 @@ expat_response_handler(serf_request_t *r
 
       if (status && !SERF_BUCKET_READ_ERROR(status))
         {
-          return svn_error_wrap_apr(status, NULL);
+          return svn_ra_serf__wrap_err(status, NULL);
         }
     }
 

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_svn/client.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_svn/client.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_svn/client.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_ra_svn/client.c Tue Oct 16 19:41:17 2012
@@ -1003,11 +1003,11 @@ static svn_error_t *ra_svn_commit(svn_ra
       svn_ra_svn_has_capability(conn, SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS))
     {
       apr_hash_set(revprop_table,
-                   apr_pstrdup(pool, SVN_PROP_TXN_CLIENT_COMPAT_VERSION),
+                   SVN_PROP_TXN_CLIENT_COMPAT_VERSION,
                    APR_HASH_KEY_STRING,
                    svn_string_create(SVN_VER_NUMBER, pool));
       apr_hash_set(revprop_table,
-                   apr_pstrdup(pool, SVN_PROP_TXN_USER_AGENT),
+                   SVN_PROP_TXN_USER_AGENT,
                    APR_HASH_KEY_STRING,
                    svn_string_create(sess_baton->useragent, pool));
     }

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/cache-membuffer.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/cache-membuffer.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/cache-membuffer.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/cache-membuffer.c Tue Oct 16 19:41:17 2012
@@ -866,7 +866,7 @@ find_entry(svn_membuffer_t *cache,
 {
   entry_group_t *group;
   entry_t *entry = NULL;
-  int i;
+  apr_size_t i;
 
   /* get the group that *must* contain the entry
    */
@@ -1145,11 +1145,13 @@ svn_cache__membuffer_cache_create(svn_me
   apr_uint64_t data_size;
   apr_uint64_t max_entry_size;
 
-  /* Limit the total size
+  /* Limit the total size (only relevant if we can address > 4GB)
    */
+#if APR_SIZEOF_VOIDP > 4
   if (total_size > MAX_SEGMENT_SIZE * MAX_SEGMENT_COUNT)
     total_size = MAX_SEGMENT_SIZE * MAX_SEGMENT_COUNT;
-  
+#endif
+
   /* Limit the segment count
    */
   if (segment_count > MAX_SEGMENT_COUNT)

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/config_file.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/config_file.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/config_file.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/config_file.c Tue Oct 16 19:41:17 2012
@@ -1160,7 +1160,12 @@ svn_config_ensure(const char *config_dir
         "# *.png = svn:mime-type=image/png"                                  NL
         "# *.jpg = svn:mime-type=image/jpeg"                                 NL
         "# Makefile = svn:eol-style=native"                                  NL
-        ""                                                                   NL;
+        ""                                                                   NL
+        "### Section for configuring working copies."                        NL
+        "[working-copy]"                                                     NL
+        "### Set to true to enable exclusive SQLite locking.  Some clients"  NL
+        "### may not support exclusive locking."                             NL
+        "# exclusive-locking = false"                                        NL;
 
       err = svn_io_file_open(&f, path,
                              (APR_WRITE | APR_CREATE | APR_EXCL),

Propchange: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/pseudo_md5.c
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/sysinfo.c
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/sysinfo.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/version.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/version.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/version.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_subr/version.c Tue Oct 16 19:41:17 2012
@@ -28,6 +28,7 @@
 
 #include "sysinfo.h"
 #include "svn_private_config.h"
+#include "private/svn_subr_private.h"
 
 const svn_version_t *
 svn_subr_version(void)
@@ -193,3 +194,85 @@ svn_version_ext_loaded_libs(const svn_ve
 {
   return ext_info->loaded_libs;
 }
+
+svn_error_t *
+svn_version__parse_version_string(svn_version_t **version_p,
+                                  const char *version_string,
+                                  apr_pool_t *result_pool)
+{
+  svn_error_t *err;
+  svn_version_t *version;
+  apr_array_header_t *pieces = 
+    svn_cstring_split(version_string, ".", FALSE, result_pool);
+
+  if ((pieces->nelts < 2) || (pieces->nelts > 3))
+    return svn_error_create(SVN_ERR_MALFORMED_VERSION_STRING, NULL, NULL);
+
+  version = apr_pcalloc(result_pool, sizeof(*version));
+  version->tag = "";
+
+  /* Parse the major and minor integers strictly. */
+  err = svn_cstring_atoi(&(version->major),
+                         APR_ARRAY_IDX(pieces, 0, const char *));
+  if (err)
+    return svn_error_create(SVN_ERR_MALFORMED_VERSION_STRING, err, NULL);
+  err = svn_cstring_atoi(&(version->minor),
+                         APR_ARRAY_IDX(pieces, 1, const char *));
+  if (err)
+    return svn_error_create(SVN_ERR_MALFORMED_VERSION_STRING, err, NULL);
+
+  /* If there's a third component, we'll parse it, too.  But we don't
+     require that it be present. */
+  if (pieces->nelts == 3)
+    {
+      const char *piece = APR_ARRAY_IDX(pieces, 2, const char *);
+      char *hyphen = strchr(piece, '-');
+      if (hyphen)
+        {
+          version->tag = apr_pstrdup(result_pool, hyphen + 1);
+          *hyphen = '\0';
+        }
+      err = svn_cstring_atoi(&(version->patch), piece);
+      if (err)
+        return svn_error_create(SVN_ERR_MALFORMED_VERSION_STRING,
+                                err, NULL);
+    }
+
+  *version_p = version;
+  return SVN_NO_ERROR;
+}
+
+
+svn_boolean_t
+svn_version__at_least(svn_version_t *version,
+                      int major,
+                      int minor,
+                      int patch)
+{
+  /* Compare major versions. */
+  if (version->major < major)
+    return FALSE;
+  if (version->major > major)
+    return TRUE;
+
+  /* Major versions are the same.  Compare minor versions. */
+  if (version->minor < minor)
+    return FALSE;
+  if (version->minor > minor)
+    return TRUE;
+
+  /* Major and minor versions are the same.  Compare patch
+     versions. */
+  if (version->patch < patch)
+    return FALSE;
+  if (version->patch > patch)
+    return TRUE;
+
+  /* Major, minor, and patch versions are identical matches.  But tags
+     in our schema are always used for versions not yet quite at the
+     given patch level. */
+  if (version->tag && version->tag[0])
+    return FALSE;
+
+  return TRUE;
+}

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc-queries.sql?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc-queries.sql Tue Oct 16 19:41:17 2012
@@ -1040,6 +1040,9 @@ FROM nodes_current n
 WHERE (wc_id = ?1 AND local_relpath = ?2)
    OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
 
+-- STMT_PRAGA_LOCKING_MODE
+PRAGMA locking_mode = exclusive
+
 /* ------------------------------------------------------------------------- */
 
 /* these are used in entries.c  */

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.c Tue Oct 16 19:41:17 2012
@@ -1508,13 +1508,14 @@ create_db(svn_sqlite__db_t **sdb,
           const char *root_node_repos_relpath,
           svn_revnum_t root_node_revision,
           svn_depth_t root_node_depth,
+          svn_boolean_t exclusive,
           apr_pool_t *result_pool,
           apr_pool_t *scratch_pool)
 {
   struct init_db_baton idb;
 
   SVN_ERR(svn_wc__db_util_open_db(sdb, dir_abspath, sdb_fname,
-                                  svn_sqlite__mode_rwcreate,
+                                  svn_sqlite__mode_rwcreate, exclusive,
                                   NULL /* my_statements */,
                                   result_pool, scratch_pool));
 
@@ -1547,6 +1548,7 @@ svn_wc__db_init(svn_wc__db_t *db,
   apr_int64_t repos_id;
   apr_int64_t wc_id;
   svn_wc__db_wcroot_t *wcroot;
+  svn_boolean_t sqlite_exclusive = FALSE;
 
   SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
   SVN_ERR_ASSERT(repos_relpath != NULL);
@@ -1557,10 +1559,15 @@ svn_wc__db_init(svn_wc__db_t *db,
 
   /* ### REPOS_ROOT_URL and REPOS_UUID may be NULL. ... more doc: tbd  */
 
+  SVN_ERR(svn_config_get_bool((svn_config_t *)db->config, &sqlite_exclusive,
+                              SVN_CONFIG_SECTION_WORKING_COPY,
+                              SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE,
+                              FALSE));
+
   /* Create the SDB and insert the basic rows.  */
   SVN_ERR(create_db(&sdb, &repos_id, &wc_id, local_abspath, repos_root_url,
                     repos_uuid, SDB_FILE, 
-                    repos_relpath, initial_rev, depth,
+                    repos_relpath, initial_rev, depth, sqlite_exclusive,
                     db->state_pool, scratch_pool));
 
   /* Create the WCROOT for this directory.  */
@@ -11498,10 +11505,13 @@ svn_wc__db_upgrade_begin(svn_sqlite__db_
                          apr_pool_t *scratch_pool)
 {
   svn_wc__db_wcroot_t *wcroot;
+
+  /* Upgrade is inherently exclusive so specify exclusive locking. */
   SVN_ERR(create_db(sdb, repos_id, wc_id, dir_abspath,
                     repos_root_url, repos_uuid,
                     SDB_FILE,
                     NULL, SVN_INVALID_REVNUM, svn_depth_unknown,
+                    TRUE /* exclusive */,
                     wc_db->state_pool, scratch_pool));
 
   SVN_ERR(svn_wc__db_pdh_create_wcroot(&wcroot,

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db.h Tue Oct 16 19:41:17 2012
@@ -255,7 +255,7 @@ typedef struct svn_wc__db_lock_t {
 */
 svn_error_t *
 svn_wc__db_open(svn_wc__db_t **db,
-                const svn_config_t *config,
+                svn_config_t *config,
                 svn_boolean_t auto_upgrade,
                 svn_boolean_t enforce_empty_wq,
                 apr_pool_t *result_pool,

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_private.h?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_private.h (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_private.h Tue Oct 16 19:41:17 2012
@@ -36,7 +36,7 @@
 struct svn_wc__db_t {
   /* We need the config whenever we run into a new WC directory, in order
      to figure out where we should look for the corresponding datastore. */
-  const svn_config_t *config;
+  svn_config_t *config;
 
   /* Should we attempt to automatically upgrade the database when it is
      opened, and found to be not-current?  */
@@ -170,6 +170,7 @@ svn_wc__db_util_open_db(svn_sqlite__db_t
                         const char *dir_abspath,
                         const char *sdb_fname,
                         svn_sqlite__mode_t smode,
+                        svn_boolean_t exclusive,
                         const char *const *my_statements,
                         apr_pool_t *result_pool,
                         apr_pool_t *scratch_pool);

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_util.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_util.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_util.c Tue Oct 16 19:41:17 2012
@@ -114,6 +114,7 @@ svn_wc__db_util_open_db(svn_sqlite__db_t
                         const char *dir_abspath,
                         const char *sdb_fname,
                         svn_sqlite__mode_t smode,
+                        svn_boolean_t exclusive,
                         const char *const *my_statements,
                         apr_pool_t *result_pool,
                         apr_pool_t *scratch_pool)
@@ -140,6 +141,9 @@ svn_wc__db_util_open_db(svn_sqlite__db_t
                            my_statements ? my_statements : statements,
                            0, NULL, result_pool, scratch_pool));
 
+  if (exclusive)
+    SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_PRAGA_LOCKING_MODE));
+
   SVN_ERR(svn_sqlite__create_scalar_function(*sdb, "relpath_depth", 1,
                                              relpath_depth, NULL));
 

Modified: subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_wcroot.c
URL: http://svn.apache.org/viewvc/subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_wcroot.c?rev=1398951&r1=1398950&r2=1398951&view=diff
==============================================================================
--- subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_wcroot.c (original)
+++ subversion/branches/http-dynamic-prop-namespaces/subversion/libsvn_wc/wc_db_wcroot.c Tue Oct 16 19:41:17 2012
@@ -186,7 +186,7 @@ close_wcroot(void *data)
 
 svn_error_t *
 svn_wc__db_open(svn_wc__db_t **db,
-                const svn_config_t *config,
+                svn_config_t *config,
                 svn_boolean_t auto_upgrade,
                 svn_boolean_t enforce_empty_wq,
                 apr_pool_t *result_pool,
@@ -508,6 +508,18 @@ svn_wc__db_wcroot_parse_local_abspath(sv
 
       if (adm_subdir_kind == svn_node_dir)
         {
+          svn_boolean_t sqlite_exclusive = FALSE;
+
+          err = svn_config_get_bool(db->config, &sqlite_exclusive,
+                                    SVN_CONFIG_SECTION_WORKING_COPY,
+                                    SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE,
+                                    FALSE);
+          if (err)
+            {
+              svn_error_clear(err);
+              sqlite_exclusive = FALSE;
+            }
+
           /* We always open the database in read/write mode.  If the database
              isn't writable in the filesystem, SQLite will internally open
              it as read-only, and we'll get an error if we try to do a write
@@ -517,7 +529,8 @@ svn_wc__db_wcroot_parse_local_abspath(sv
              we're caching database handles, it make sense to be as permissive
              as the filesystem allows. */
           err = svn_wc__db_util_open_db(&sdb, local_abspath, SDB_FILE,
-                                        svn_sqlite__mode_readwrite, NULL,
+                                        svn_sqlite__mode_readwrite,
+                                        sqlite_exclusive, NULL,
                                         db->state_pool, scratch_pool);
           if (err == NULL)
             {
@@ -731,6 +744,9 @@ try_symlink_as_dir:
             {
               SVN_ERR(read_link_target(&local_abspath, original_abspath,
                                        scratch_pool));
+              /* This handle was opened in this function but is not going
+                 to be used further so close it. */
+              SVN_ERR(svn_sqlite__close(sdb));
               goto try_symlink_as_dir;
             }
         }