You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/06/05 14:40:28 UTC

svn commit: r1489839 - in /subversion/branches/fsfs-format7/subversion: bindings/swig/perl/libsvn_swig_perl/ bindings/swig/perl/native/ bindings/swig/ruby/test/ include/private/ libsvn_client/ libsvn_diff/ libsvn_fs_fs/ libsvn_ra_serf/ libsvn_ra_svn/ l...

Author: stefan2
Date: Wed Jun  5 12:40:27 2013
New Revision: 1489839

URL: http://svn.apache.org/r1489839
Log:
On the fsfs-format7 branch: sync with trunk up to and inclduing r1489831.

Modified:
    subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
    subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
    subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Client.pm
    subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Core.pm
    subversion/branches/fsfs-format7/subversion/bindings/swig/ruby/test/windows_util.rb
    subversion/branches/fsfs-format7/subversion/include/private/svn_string_private.h
    subversion/branches/fsfs-format7/subversion/libsvn_client/merge.c
    subversion/branches/fsfs-format7/subversion/libsvn_diff/parse-diff.c
    subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/revprops.c
    subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/util.c
    subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/commit.c
    subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/locks.c
    subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/ra_serf.h
    subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/util.c
    subversion/branches/fsfs-format7/subversion/libsvn_ra_svn/marshal.c
    subversion/branches/fsfs-format7/subversion/libsvn_repos/reporter.c
    subversion/branches/fsfs-format7/subversion/libsvn_subr/config_file.c
    subversion/branches/fsfs-format7/subversion/libsvn_subr/dirent_uri.c
    subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c
    subversion/branches/fsfs-format7/subversion/libsvn_subr/string.c
    subversion/branches/fsfs-format7/subversion/libsvn_subr/types.c
    subversion/branches/fsfs-format7/subversion/libsvn_wc/tree_conflicts.c
    subversion/branches/fsfs-format7/subversion/libsvn_wc/update_editor.c
    subversion/branches/fsfs-format7/subversion/mod_dav_svn/activity.c
    subversion/branches/fsfs-format7/subversion/mod_dav_svn/lock.c
    subversion/branches/fsfs-format7/subversion/svn/file-merge.c
    subversion/branches/fsfs-format7/subversion/svnserve/serve.c
    subversion/branches/fsfs-format7/subversion/tests/cmdline/lock_tests.py
    subversion/branches/fsfs-format7/subversion/tests/cmdline/svntest/sandbox.py

Modified: subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c (original)
+++ subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c Wed Jun  5 12:40:27 2013
@@ -29,6 +29,10 @@
 #include <perl.h>
 #include <XSUB.h>
 
+/* Perl defines a _ macro, but SVN uses it for translations.
+ * So undefine _ after including the Perl headers. */
+#undef _
+
 #include <stdarg.h>
 #ifdef WIN32
 #include <io.h>

Modified: subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h (original)
+++ subversion/branches/fsfs-format7/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h Wed Jun  5 12:40:27 2013
@@ -29,6 +29,10 @@
 #include <perl.h>
 #include <XSUB.h>
 
+/* Perl defines a _ macro, but SVN uses it for translations.
+ * So undefine _ after including the Perl headers. */
+#undef _
+
 #include <apr.h>
 #include <apr_pools.h>
 #include <apr_strings.h>

Modified: subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Client.pm
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Client.pm?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Client.pm (original)
+++ subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Client.pm Wed Jun  5 12:40:27 2013
@@ -8,25 +8,26 @@ package SVN::Client;
 my @_all_fns;
 BEGIN {
     @_all_fns =
-        qw( version diff_summarize_dup create_context checkout3
-            checkout2 checkout update4 update3 update2 update switch2 switch
-            add4 add3 add2 add mkdir4 mkdir3 mkdir2 mkdir delete3 delete2
-            delete import3 import2 import commit4 commit3 commit2
-            commit status4 status3 status2 status log5 log4 log3 log2 log 
-            blame4 blame3 blame2 blame diff4 diff3 diff2 diff diff_peg4
-            diff_peg3 diff_peg2 diff_peg diff_summarize2
-            diff_summarize diff_summarize_peg2 diff_summarize_peg
-            merge3 merge2 merge merge_peg3 merge_peg2 merge_peg
-            cleanup relocate revert2 revert resolve resolved copy4
-            copy3 copy2 copy move5 move4 move3 move2 move propset3
-            propset2 propset revprop_set propget3 propget2
-            propget revprop_get proplist3 proplist2 proplist
-            revprop_list export4 export3 export2 export list2 list
-            ls3 ls2 ls cat2 cat add_to_changelist
-            remove_from_changelist lock unlock info2 info
-            url_from_path uuid_from_url uuid_from_path open_ra_session
-            invoke_blame_receiver2 invoke_blame_receiver
-            invoke_diff_summarize_func
+        qw( add add2 add3 add4 add_to_changelist blame blame2 blame3 blame4
+            cat cat2 checkout checkout2 checkout3 cleanup
+            commit commit2 commit3 commit4 copy copy2 copy3 copy4
+            create_context delete delete2 delete3 diff diff2 diff3 diff4
+            diff_peg diff_peg2 diff_peg3 diff_peg4
+            diff_summarize diff_summarize2 diff_summarize_dup
+            diff_summarize_peg diff_summarize_peg2
+            export export2 export3 export4 import import2 import3
+            info info2 invoke_blame_receiver invoke_blame_receiver2
+            invoke_diff_summarize_func list list2 lock
+            log log2 log3 log4 log5 ls ls2 ls3
+            merge merge2 merge3 merge_peg merge_peg2 merge_peg3
+            mkdir mkdir2 mkdir3 mkdir4 move move2 move3 move4 move5
+            open_ra_session propget propget2 propget3
+            proplist proplist2 proplist3 propset propset2 propset3
+            relocate remove_from_changelist resolve resolved
+            revert revert2 revprop_get revprop_list revprop_set
+            status status2 status3 status4 switch switch2
+            unlock update update2 update3 update4
+            url_from_path uuid_from_path uuid_from_url version
           );
 
     require SVN::Base;
@@ -40,21 +41,18 @@ SVN::Client - Subversion client function
 =head1 SYNOPSIS
 
     use SVN::Client;
-    my $ctx = new SVN::Client(
-              auth => [SVN::Client::get_simple_provider(),
-              SVN::Client::get_simple_prompt_provider(\&simple_prompt,2),
-              SVN::Client::get_username_provider()]
-              );
+    my $client = new SVN::Client(
+      auth => [
+          SVN::Client::get_simple_provider(),
+          SVN::Client::get_simple_prompt_provider(\&simple_prompt,2),
+          SVN::Client::get_username_provider()
+      ]);
 
-    $ctx->cat(\*STDOUT, 'http://svn.apache.org/repos/asf/subversion/trunk/README',
-              'HEAD');
+    $client->cat(\*STDOUT, 
+              'http://svn.apache.org/repos/asf/subversion/trunk/README', 'HEAD');
 
     sub simple_prompt {
-      my $cred = shift;
-      my $realm = shift;
-      my $default_username = shift;
-      my $may_save = shift;
-      my $pool = shift;
+      my ($cred, $realm, $default_username, $may_save, $pool) = @_;
 
       print "Enter authentication info for realm: $realm\n";
       print "Username: ";
@@ -81,8 +79,8 @@ The Perl method calls take a SVN::Client
 This allows method call invocation of the methods to be possible.  For
 example, the following are equivalent:
 
-  SVN::Client::add($ctx,$path, $recursive, $pool);
-  $ctx->add($path, $recursive, $pool);
+  SVN::Client::add($client,$path, $recursive, $pool);
+  $client->add($path, $recursive, $pool);
 
 Many of the C API calls also take a apr_pool_t pointer as their last
 argument.  The Perl bindings generally deal with this for you and
@@ -103,7 +101,7 @@ the rules below or will be noted otherwi
 
 =over 4
 
-=item $ctx
+=item $client
 
 An SVN::Client object that you get from the constructor.
 
@@ -163,7 +161,7 @@ The following methods are available:
 
 =over 4
 
-=item $ctx = SVN::Client-E<gt>new( %options );
+=item $client = SVN::Client-E<gt>new( %options );
 
 This class method constructs a new C<SVN::Client> object and returns
 a reference to it.
@@ -252,21 +250,21 @@ sub new
     return $self;
 }
 
-=item $ctx-E<gt>add($path, $recursive, $pool);
+=item $client-E<gt>add($path, $recursive, $pool);
 
-Similar to $ctx-E<gt>add2(), but with $force always set to FALSE.
+Similar to $client-E<gt>add2(), but with $force always set to FALSE.
 
-=item $ctx-E<gt>add2($path, $recursive, $force, $ctx, $pool);
+=item $client-E<gt>add2($path, $recursive, $force, $pool);
 
-Similar to $ctx-E<gt>add3(), but with $no_ignore always set to FALSE.
+Similar to $client-E<gt>add3(), but with $no_ignore always set to FALSE.
 
-=item $ctx-E<gt>add3($path, $recursive, $force, $no_ignore, $pool);
+=item $client-E<gt>add3($path, $recursive, $force, $no_ignore, $pool);
 
-Similar to $ctx-E<gt>add4(), but with $add_parents always set to FALSE and
+Similar to $client-E<gt>add4(), but with $add_parents always set to FALSE and
 $depth set according to $recursive; if TRUE, then depth is
 $SVN::Depth::infinity, if FALSE, then $SVN::Depth::empty.
 
-=item $ctx-E<gt>add4($path, $depth, $force, $no_ignore, $add_parents, $pool);
+=item $client-E<gt>add4($path, $depth, $force, $no_ignore, $add_parents, $pool);
 
 Schedule a working copy $path for addition to the repository.
 
@@ -289,7 +287,7 @@ Calls the notify callback for each added
 If $no_ignore is FALSE, don't add any file or directory (or recurse into any
 directory) that is unversioned and found by recursion (as opposed to being the
 explicit target $path) and whose name matches the svn:ignore property on its
-parent directory or the global-ignores list in $ctx->config.  If $no_ignore is
+parent directory or the global-ignores list in $client->config.  If $no_ignore is
 TRUE, do include such files and directories.  (Note that an svn:ignore property
 can influence this behaviour only when recursing into an already versioned
 directory with $force).
@@ -300,11 +298,11 @@ found return $SVN::Error::NO_VERSIONED_P
 
 Important: this is a B<scheduling> operation.  No changes will happen
 to the repository until a commit occurs.  This scheduling can be
-removed with $ctx-E<gt>revert().
+removed with $client-E<gt>revert().
 
 No return.
 
-=item $ctx-E<gt>blame($target, $start, $end, \&receiver, $pool);
+=item $client-E<gt>blame($target, $start, $end, \&receiver, $pool);
 
 Invoke \&receiver subroutine on each line-blame item associated with revision
 $end of $target, using $start as the default source of all blame.
@@ -324,7 +322,7 @@ The blame receiver subroutine can return
 to return an error.  All other returns will be ignored.
 You can create an svn_error_t object with SVN::Error::create().
 
-=item $ctx-E<gt>cat(\*FILEHANDLE, $target, $revision, $pool);
+=item $client-E<gt>cat(\*FILEHANDLE, $target, $revision, $pool);
 
 Outputs the content of the file identified by $target and $revision to the
 FILEHANDLE.  FILEHANDLE is a reference to a filehandle.
@@ -333,17 +331,17 @@ If $target is not a local path and if $r
 other kind that requires a local path), then an error will be raised,
 because the desired revision can not be determined.
 
-=item $ctx-E<gt>checkout($url, $path, $revision, $recursive, $pool);
+=item $client-E<gt>checkout($url, $path, $revision, $recursive, $pool);
 
-Similar to $ctx-E<gt>checkout2(), but with $peg_revision always set to undef (unspecified) and $ignore_externals always set to FALSE.
+Similar to $client-E<gt>checkout2(), but with $peg_revision always set to undef (unspecified) and $ignore_externals always set to FALSE.
 
-=item $ctx-E<gt>checkout2($url, $path, $peg_revision, $revision, $recursive, $ignore_externals, $pool);
+=item $client-E<gt>checkout2($url, $path, $peg_revision, $revision, $recursive, $ignore_externals, $pool);
 
-Similar to $ctx-E<gt>checkout3(), but with $allow_unver_obstructions always set
+Similar to $client-E<gt>checkout3(), but with $allow_unver_obstructions always set
 to FALSE, and $depth set according to $recurse: if $recurse is TRUE, $depth is
 $SVN::Depth::infinity, if $recurse is FALSE, set $depth to $SVN::Depth::files.
 
-=item $ctx-E<gt>checkout3($url, $path, $preg_revision, $revision, $depth, $ignore_externals, $allow_unver_obstructions, $pool);
+=item $client-E<gt>checkout3($url, $path, $preg_revision, $revision, $depth, $ignore_externals, $allow_unver_obstructions, $pool);
 
 Checkout a working copy of $url at $revision using $path as the root directory
 of the newly checked out working copy.
@@ -370,12 +368,12 @@ obstructing items.
 
 Returns the value of the revision actually checked out of the repository.
 
-=item $ctx-E<gt>cleanup($dir, $pool);
+=item $client-E<gt>cleanup($dir, $pool);
 
 Recursively cleanup a working copy directory, $dir, finishing any incomplete
 operations, removing lockfiles, etc.
 
-=item $ctx-E<gt>commit($targets, $nonrecursive, $pool);
+=item $client-E<gt>commit($targets, $nonrecursive, $pool);
 
 Commit files or directories referenced by target.  Will use the log_msg
 callback to obtain the log message for the commit.
@@ -397,7 +395,7 @@ Returns a svn_client_commit_info_t objec
 commit information object is $SVN::Core::INVALID_REVNUM and no error was
 raised, then the commit was a no-op; nothing needed to be committed.
 
-=item $ctx-E<gt>copy($src_target, $src_revision, $dst_target, $pool);
+=item $client-E<gt>copy($src_target, $src_revision, $dst_target, $pool);
 
 Copies $src_target to $dst_target.
 
@@ -412,15 +410,15 @@ to the repository.  The log_msg callback
 log message.  If the commit succeeds, return a svn_client_commit_info_t
 object.
 
-If $dst_target is not a URL, then this is just a variant of $ctx-E<gt>add(),
+If $dst_target is not a URL, then this is just a variant of $client-E<gt>add(),
 where the $dst_path items are scheduled for addition as copies.  No changes
 will happen to the repository until a commit occurs.  This scheduling can be
-removed with $ctx-E<gt>revert().  undef will be returned in this case.
+removed with $client-E<gt>revert().  undef will be returned in this case.
 
 Calls the notify callback for each item added at the new location, passing
 the new, relative path of the added item.
 
-=item $ctx-E<gt>delete($targets, $force, $pool);
+=item $client-E<gt>delete($targets, $force, $pool);
 
 Delete items from a repository or working copy.
 
@@ -433,7 +431,7 @@ repository.
 Else, schedule the working copy paths in $targets for removal from the
 repository.  Each path's parent must be under revision control.  This is
 just a B<scheduling> operation.  No changes will happen to the repository
-until a commit occurs.  This scheduling can be removed with $ctx-E<gt>revert().
+until a commit occurs.  This scheduling can be removed with $client-E<gt>revert().
 If a path is a file it is immediately removed from the working copy.  If
 the path is a directory it will remain in the working copy but all the files,
 and all unversioned items it contains will be removed.  If $force is not set
@@ -445,7 +443,7 @@ the deleted item.
 
 Has no return.
 
-=item $ctx-E<gt>diff($diff_options, $target1, $revision1, $target2, $revision2, $recursive, $ignore_ancestry, $no_diff_deleted, $outfile, $errfile, $pool);
+=item $client-E<gt>diff($diff_options, $target1, $revision1, $target2, $revision2, $recursive, $ignore_ancestry, $no_diff_deleted, $outfile, $errfile, $pool);
 
 Produces diff output which describes the delta between $target1 at
 $revision1 and $target2 at $revision2.  They both must represent the same
@@ -469,7 +467,7 @@ pass an empty array to return a unified 
 
 Has no return.
 
-=item $ctx-E<gt>diff_summarize($target1, $revision1, $target2, $revision2, $recursive, $ignore_ancestry, \&summarize_func, $pool);
+=item $client-E<gt>diff_summarize($target1, $revision1, $target2, $revision2, $recursive, $ignore_ancestry, \&summarize_func, $pool);
 
 Produce a diff summary which lists the changed items between $target1
 at $revision1 and $target2 at $revision2 without creating text deltas.
@@ -486,7 +484,7 @@ See diff() for a description of the othe
 
 Has no return.
 
-=item $ctx-E<gt>export($from, $to, $revision, $force, $pool);
+=item $client-E<gt>export($from, $to, $revision, $force, $pool);
 
 Export the contents of either a subversion repository or a subversion
 working copy into a 'clean' directory (meaning a directory with no
@@ -506,7 +504,7 @@ The notify callback will be called for t
 Returns the value of the revision actually exported or
 $SVN::Core::INVALID_REVNUM for local exports.
 
-=item $ctx-E<gt>import($path, $url, $nonrecursive, $pool);
+=item $client-E<gt>import($path, $url, $nonrecursive, $pool);
 
 Import file or directory $path into repository directory $url at head.
 
@@ -534,7 +532,39 @@ one is needed.
 
 Returns a svn_client_commit_info_t object.
 
-=item $ctx-E<gt>log($targets, $start, $end, $discover_changed_paths, $strict_node_history, \&log_receiver, $pool);
+=item $client-E<gt>info($path_or_url, $peg_revision, $revision, \&receiver, $recurse);
+
+Invokes \&receiver passing it information about $path_or_url for $revision.
+The information returned is system-generated metadata, not the sort of
+"property" metadata created by users.  For methods available on the object
+passed to \&receiver, B<see svn_info_t>.
+
+If both revision arguments are either svn_opt_revision_unspecified or NULL,
+then information will be pulled solely from the working copy; no network
+connections will be made.
+
+Otherwise, information will be pulled from a repository.  The actual node
+revision selected is determined by the $path_or_url as it exists in
+$peg_revision.  If $peg_revision is undef, then it defaults to HEAD for URLs
+or WORKING for WC targets.
+
+If $path_or_url is not a local path, then if $revision is PREV (or some other
+kind that requires a local path), an error will be returned, because the
+desired revision cannot be determined.
+
+Uses the authentication baton cached in ctx to authenticate against the
+repository.
+
+If $recurse is true (and $path_or_url is a directory) this will be a recursive
+operation, invoking $receiver on each child.
+
+ my $receiver = sub {
+     my( $path, $info, $pool ) = @_;
+     print "Current revision of $path is ", $info->rev, "\n";
+ };
+ $client->info( 'foo/bar.c', undef, 'WORKING', $receiver, 0 );
+
+=item $client-E<gt>log($targets, $start, $end, $discover_changed_paths, $strict_node_history, \&log_receiver, $pool);
 
 Invoke the log_receiver subroutine on each log_message from $start to $end in
 turn, inclusive (but will never invoke receiver on a given log message more
@@ -577,7 +607,7 @@ If $changed_paths is defined it referenc
 every path committed in $revision; the values are svn_log_changed_path_t
 objects.
 
-=item $ctx-E<gt>ls($target, $revision, $recursive, $pool);
+=item $client-E<gt>ls($target, $revision, $recursive, $pool);
 
 Returns a hash of svn_dirent_t objects for $target at $revision.
 
@@ -589,7 +619,7 @@ If $target is a file only return an entr
 If $target is non-existent, raises the $SVN::Error::FS_NOT_FOUND
 error.
 
-=item $ctx-E<gt>merge($src1, $rev1, $src2, $rev2, $target_wcpath, $recursive, $ignore_ancestry, $force, $dry_run, $pool);
+=item $client-E<gt>merge($src1, $rev1, $src2, $rev2, $target_wcpath, $recursive, $ignore_ancestry, $force, $dry_run, $pool);
 
 Merge changes from $src1/$rev1 to $src2/$rev2 into the working-copy path
 $target_wcpath.
@@ -626,22 +656,22 @@ feedback is provided, but the working co
 
 Has no return.
 
-=item $ctx-E<gt>mkdir($targets, $pool);
+=item $client-E<gt>mkdir($targets, $pool);
 
-Similar to $ctx-E<gt>mkdir2() except it returns an svn_client_commit_info_t
+Similar to $client-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);
+=item $client-E<gt>mkdir2($targets, $pool);
 
-Similar to $ctx-E<gt>mkdir3(), but with $make_parents always FALSE, and
+Similar to $client-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);
+=item $client-E<gt>mkdir3($targets, $make_parents, $revprop_hash, $pool);
 
-Similar to $ctx-E<gt>mkdir4(), but returns a svn_commit_info_t object rather
+Similar to $client-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);
+=item $client-E<gt>mkdir4($targets, $make_parents, $revprop_hash, \&commit_callback, $pool);
 
 Create a directory, either in a repository or a working copy.
 
@@ -669,7 +699,7 @@ called for items added to the working co
 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);
+=item $client-E<gt>move($src_path, $src_revision, $dst_path, $force, $pool);
 
 Move $src_path to $dst_path.
 
@@ -696,7 +726,7 @@ If $src_path is a working copy path
 not be called.
 
 * This is a scheduling operation.  No changes will happen to the repository
-until a commit occurs.  This scheduling can be removed with $ctx-E<gt>revert().
+until a commit occurs.  This scheduling can be removed with $client-E<gt>revert().
 If $src_path is a file it is removed from the working copy immediately.
 If $src_path is a directory it will remain in the working copy but all
 files, and unversioned items, it contains will be removed.
@@ -709,13 +739,13 @@ The notify callback will be called twice
 indicate the deletion of the moved node, and once to indicate the addition
 of the new location of the node.
 
-=item $ctx-E<gt>propget($propname, $target, $revision, $recursive, $pool);
+=item $client-E<gt>propget($propname, $target, $revision, $recursive, $pool);
 
 Returns a reference to a hash containing paths or URLs, prefixed by $target (a
 working copy or URL), of items for which the property $propname is set, and
 whose values represent the property value for $propname at that path.
 
-=item $ctx-E<gt>proplist($target, $revision, $recursive, $pool);
+=item $client-E<gt>proplist($target, $revision, $recursive, $pool);
 
 Returns a reference to an array of svn_client_proplist_item_t objects.
 
@@ -732,7 +762,7 @@ versioned entry below (and including) $t
 
 If $target is not found, raises the $SVN::Error::ENTRY_NOT_FOUND error.
 
-=item $ctx-E<gt>propset($propname, $propval, $target, $recursive, $pool);
+=item $client-E<gt>propset($propname, $propval, $target, $recursive, $pool);
 
 Set $propname to $propval on $target (a working copy or URL path).
 
@@ -746,7 +776,7 @@ If $propname is an svn-controlled proper
 then the caller is responsible for ensuring that $propval is UTF8-encoded
 and uses LF line-endings.
 
-=item $ctx-E<gt>relocate($dir, $from, $to, $recursive, $pool);
+=item $client-E<gt>relocate($dir, $from, $to, $recursive, $pool);
 
 Modify a working copy directory $dir, changing any repository URLs that
 begin with $from to begin with $to instead, recursing into subdirectories if
@@ -754,7 +784,7 @@ $recursive is true.
 
 Has no return.
 
-=item $ctx-E<gt>resolved($path, $recursive, $pool);
+=item $client-E<gt>resolved($path, $recursive, $pool);
 
 Removed the 'conflicted' state on a working copy path.
 
@@ -768,7 +798,7 @@ If $path is not in a state of conflict t
 If $path's conflict state is removed, call the notify callback with the
 $path.
 
-=item $ctx-E<gt>revert($paths, $recursive, $pool);
+=item $client-E<gt>revert($paths, $recursive, $pool);
 
 Restore the pristine version of a working copy $paths, effectively undoing
 any local mods.
@@ -776,28 +806,28 @@ any local mods.
 For each path in $paths, if it is a directory and $recursive
 is true, this will be a recursive operation.
 
-=item $ctx-E<gt>revprop_get($propname, $url, $revision, $pool);
+=item $client-E<gt>revprop_get($propname, $url, $revision, $pool);
 
 Returns two values, the first of which is the value of $propname on revision
 $revision in the repository represented by $url.  The second value is the
 actual revision queried.
 
-Note that unlike its cousin $ctx-E<gt>propget(), this routine doesn't affect
+Note that unlike its cousin $client-E<gt>propget(), this routine doesn't affect
 working copy at all; it's a pure network operation that queries an
 B<unversioned> property attached to a revision.  This can be used to query
 log messages, dates, authors, and the like.
 
-=item $ctx-E<gt>revprop_list($url, $revision, $pool);
+=item $client-E<gt>revprop_list($url, $revision, $pool);
 
 Returns two values, the first of which is a reference to a hash containing
 the properties attached to $revision in the repository represented by $url.
 The second value is the actual revision queried.
 
-Note that unlike its cousin $ctx-E<gt>proplist(), this routine doesn't read a
+Note that unlike its cousin $client-E<gt>proplist(), this routine doesn't read a
 working copy at all; it's a pure network operation that reads B<unversioned>
 properties attached to a revision.
 
-=item $ctx-E<gt>revprop_set($propname, $propval, $url, $revision, $force, $pool);
+=item $client-E<gt>revprop_set($propname, $propval, $url, $revision, $force, $pool);
 
 Set $propname to $propval on revision $revision in the repository represented
 by $url.
@@ -811,7 +841,7 @@ If $propname is an svn-controlled proper
 the caller is responsible for ensuring that the value is UTF8-encoded and
 uses LF line-endings.
 
-Note that unlike its cousin $ctx-E<gt>propset(), this routine doesn't affect
+Note that unlike its cousin $client-E<gt>propset(), this routine doesn't affect
 the working copy at all; it's a pure network operation that changes an
 B<unversioned> property attached to a revision.  This can be used to tweak
 log messages, dates, authors, and the like.  Be careful: it's a lossy
@@ -821,19 +851,19 @@ with no way to retrieve the prior value.
 Also note that unless the administrator creates a pre-revprop-change hook
 in the repository, this feature will fail.
 
-=item $ctx-E<gt>status($path, $revision, \&status_func, $recursive, $get_all, $update, $no_ignore, $pool);
+=item $client-E<gt>status($path, $revision, \&status_func, $recursive, $get_all, $update, $no_ignore, $pool);
 
-Similar to $ctx-E<gt>status2(), but with ignore_externals always set to FALSE, and with the status_func receiving a svn_wc_status2_t instead of a svn_wc_status_t object.
+Similar to $client-E<gt>status2(), but with ignore_externals always set to FALSE, and with the status_func receiving a svn_wc_status2_t instead of a svn_wc_status_t object.
 
-=item $ctx-E<gt>status2($path, $revision, \&status_func, $recursive, $get_all, $update, $no_ignore, $ignore_externals, $pool);
+=item $client-E<gt>status2($path, $revision, \&status_func, $recursive, $get_all, $update, $no_ignore, $ignore_externals, $pool);
 
-Similar to $ctx-E<gt>status3(), but with the changelists passed as undef, and with recursive instead of depth.
+Similar to $client-E<gt>status3(), but with the changelists passed as undef, and with recursive instead of depth.
 
-=item $ctx-E<gt>status3($path, $revision, \&status_func, $depth, $get_all, $update, $no_ignore, $ignore_externals, $changelists, $pool);
+=item $client-E<gt>status3($path, $revision, \&status_func, $depth, $get_all, $update, $no_ignore, $ignore_externals, $changelists, $pool);
 
-Similar to $ctx-E<gt>status4(), without the pool parameter to the callback and the return of the callback is ignored. 
+Similar to $client-E<gt>status4(), without the pool parameter to the callback and the return of the callback is ignored. 
 
-=item $ctx-E<gt>status4($path, $revision, \&status_func, $depth, $get_all, $update, $no_ignore, $ignore_externals, $changelists, $pool);
+=item $client-E<gt>status4($path, $revision, \&status_func, $depth, $get_all, $update, $no_ignore, $ignore_externals, $changelists, $pool);
 
 Given $path to a working copy directory (or single file), call status_func()
 with a set of svn_wc_status2_t objects which describe the status of $path and
@@ -867,39 +897,7 @@ object which is cleaned beteween invocat
 The return of the status_func subroutine can be a svn_error_t object created by
 SVN::Error::create in order to propogate an error up.
 
-=item $ctx-E<gt>info($path_or_url, $peg_revision, $revision, \&receiver, $recurse);
-
-Invokes \&receiver passing it information about $path_or_url for $revision.
-The information returned is system-generated metadata, not the sort of
-"property" metadata created by users.  For methods available on the object
-passed to \&receiver, B<see svn_info_t>.
-
-If both revision arguments are either svn_opt_revision_unspecified or NULL,
-then information will be pulled solely from the working copy; no network
-connections will be made.
-
-Otherwise, information will be pulled from a repository.  The actual node
-revision selected is determined by the $path_or_url as it exists in
-$peg_revision.  If $peg_revision is undef, then it defaults to HEAD for URLs
-or WORKING for WC targets.
-
-If $path_or_url is not a local path, then if $revision is PREV (or some other
-kind that requires a local path), an error will be returned, because the
-desired revision cannot be determined.
-
-Uses the authentication baton cached in ctx to authenticate against the
-repository.
-
-If $recurse is true (and $path_or_url is a directory) this will be a recursive
-operation, invoking $receiver on each child.
-
- my $receiver = sub {
-     my( $path, $info, $pool ) = @_;
-     print "Current revision of $path is ", $info->rev, "\n";
- };
- $ctx->info( 'foo/bar.c', undef, 'WORKING', $receiver, 0 );
-
-=item $ctx-E<gt>switch($path, $url, $revision, $recursive, $pool);
+=item $client-E<gt>switch($path, $url, $revision, $recursive, $pool);
 
 Switch working tree $path to $url at $revision.
 
@@ -918,24 +916,24 @@ scratch.
 Returns the value of the revision to which the working copy was actually
 switched.
 
-=item $ctx-E<gt>update($path, $revision, $recursive, $pool)
+=item $client-E<gt>update($path, $revision, $recursive, $pool)
 
-Similar to $ctx-E<gt>update2() except that it accepts only a single target in
+Similar to $client-E<gt>update2() except that it accepts only a single target in
 $path, returns a single revision, and $ignore_externals is always set to FALSE.
 
-=item $ctx-E<gt>update2($paths, $revision, $recursive, $ignore_externals, $pool)
+=item $client-E<gt>update2($paths, $revision, $recursive, $ignore_externals, $pool)
 
-Similar to $ctx-E<gt>update3() but with $allow_unver_obstructions always set to
+Similar to $client-E<gt>update3() but with $allow_unver_obstructions always set to
 FALSE, $depth_is_sticky to FALSE, and $depth set according to $recursive: if
 $recursive is TRUE, set $depth to $SVN::Depth::infinity, if $recursive is
 FALSE, set $depth to $SVN::Depth::files.
 
-=item $ctx-E<gt>update3($paths, $revision, $depth, $depth_is_sticky, $ignore_externals, $allow_unver_obstructions, $pool)
+=item $client-E<gt>update3($paths, $revision, $depth, $depth_is_sticky, $ignore_externals, $allow_unver_obstructions, $pool)
 
-Similar to $ctx-E<gt>update4() but with $make_parents always set to FALSE and
+Similar to $client-E<gt>update4() but with $make_parents always set to FALSE and
 $adds_as_modification set to TRUE.
 
-=item $ctx-E<gt>update4($paths, $revision, $depth, $depth_is_sticky, $ignore_externals, $allow_unver_obstructions, $adds_as_modification, $make_parents)
+=item $client-E<gt>update4($paths, $revision, $depth, $depth_is_sticky, $ignore_externals, $allow_unver_obstructions, $adds_as_modification, $make_parents)
 
 Update working trees $paths to $revision.
 
@@ -989,7 +987,7 @@ set to the revision to which $revision w
 element of $paths.
 
 
-=item $ctx-E<gt>url_from_path($target, $pool); or SVN::Client::url_from_path($target, $pool);
+=item $client-E<gt>url_from_path($target, $pool); or SVN::Client::url_from_path($target, $pool);
 
 Returns the URL for $target.
 
@@ -999,21 +997,21 @@ If $target is a versioned item, it retur
 
 If $target is unversioned (has no entry), returns undef.
 
-=item $ctx-E<gt>uuid_from_path($path, $adm_access, $pool);
+=item $client-E<gt>uuid_from_path($path, $adm_access, $pool);
 
 Return the repository uuid for working-copy $path, allocated in $pool.
 
 Use $adm_access to retrieve the uuid from $path's entry; if not present in the
-entry, then call $ctx-E<gt>uuid_from_url() to retrieve, using the entry's URL.
+entry, then call $client-E<gt>uuid_from_url() to retrieve, using the entry's URL.
 
-Note: The only reason this function falls back on $ctx-E<gt>uuid_from_url is for
+Note: The only reason this function falls back on $client-E<gt>uuid_from_url is for
 compatibility purposes.  Old working copies may not have uuids in the entries
 files.
 
 Note: This method probably doesn't work right now without a lot of pain,
 because SVN::Wc is incomplete and it requires an adm_access object from it.
 
-=item $ctx-E<gt>uuid_from_url($url, $pool);
+=item $client-E<gt>uuid_from_url($url, $pool);
 
 Return repository uuid for url.
 
@@ -1022,7 +1020,7 @@ Return repository uuid for url.
 =cut
 
 # import methods into our name space and wrap them in a closure
-# to support method calling style $ctx->log()
+# to support method calling style $client->log()
 foreach my $function (@_all_fns)
 {
     no strict 'refs';
@@ -1102,7 +1100,7 @@ current value.
 
 =over 4
 
-=item $ctx-E<gt>auth(SVN::Client::get_username_provider());
+=item $client-E<gt>auth(SVN::Client::get_username_provider());
 
 Provides access to the auth_baton in the svn_client_ctx_t attached to the
 SVN::Client object.
@@ -1143,7 +1141,7 @@ sub auth
     return $self->{'ctx'}->auth_baton();
 }
 
-=item $ctx-E<gt>notify(\&notify);
+=item $client-E<gt>notify(\&notify);
 
 Sets the notify callback for the client context to a code reference that
 you pass.  It always returns the current codereference set.
@@ -1174,7 +1172,7 @@ sub notify {
     return ${$self->{'notify_callback'}};
 }
 
-=item $ctx-E<gt>log_msg(\&log_msg)
+=item $client-E<gt>log_msg(\&log_msg)
 
 Sets the log_msg callback for the client context to a code reference that you
 pass.  It always returns the current codereference set.
@@ -1207,7 +1205,7 @@ sub log_msg {
     return ${$self->{'log_msg_callback'}};
 }
 
-=item $ctx-E<gt>cancel(\&cancel)
+=item $client-E<gt>cancel(\&cancel)
 
 Sets the cancellation callback for the client context to a code reference that you
 pass.  It always returns the current codereference set.
@@ -1240,7 +1238,7 @@ sub cancel {
     return ${$self->{'cancel_callback'}};
 }
 
-=item $ctx-E<gt>pool(new SVN::Pool);
+=item $client-E<gt>pool(new SVN::Pool);
 
 Method that sets or gets the default pool that is passed to method calls
 requiring a pool, but which were not explicitly passed one.
@@ -1261,7 +1259,7 @@ sub pool
         return $self->{'pool'} = shift;
     }
 }
-=item $ctx-E<gt>config(SVN::Core::config_get_config(undef));
+=item $client-E<gt>config(SVN::Core::config_get_config(undef));
 
 Method that allows access to the config member of the svn_client_ctx_t.
 Accepts a Perl hash to set, which is what functions like
@@ -1509,11 +1507,11 @@ use SVN::Base qw(Client svn_client_commi
 
 =over 8
 
-=item $citem-E<gt>path()
+=item $commit_item-E<gt>path()
 
 Absolute working-copy path of item.
 
-=item $citem-E<gt>kind()
+=item $commit_item-E<gt>kind()
 
 An integer representing the type of node it is (file/dir).
 Can be one of the following constants:
@@ -1522,19 +1520,19 @@ $SVN::Node::file
 $SVN::Node::dir
 $SVN::Node::unknown
 
-=item $citem-E<gt>url()
+=item $commit_item-E<gt>url()
 
 Commit URL for this item.
 
-=item $citem-E<gt>revision()
+=item $commit_item-E<gt>revision()
 
 Revision (copyfrom_rev if state_flags has IS_COPY set).
 
-=item $citem-E<gt>copyform_url();
+=item $commit_item-E<gt>copyform_url();
 
 CopyFrom URL
 
-=item $citem-E<gt>state_flags();
+=item $commit_item-E<gt>state_flags();
 
 One of several state flags:
 $SVN::Client::COMMIT_ITEM_ADD
@@ -1543,12 +1541,12 @@ $SVN::Client::COMMIT_ITEM_TEXT_MODS
 $SVN::Client::COMMIT_ITEM_PROP_MODS
 $SVN::Client::COMMIT_ITEM_IS_COPY
 
-=item $citem-E<gt>incoming_prop_changes()
+=item $commit_item-E<gt>incoming_prop_changes()
 
 A reference to an array of svn_prop_t objects representing changes to
 WC properties.
 
-=item $citem-E<gt>outgoing_prop_changes()
+=item $commit_item-E<gt>outgoing_prop_changes()
 
 A reference to an array of svn_prop_t objects representing extra
 changes to properties in the repository (which are not necessarily
@@ -1565,15 +1563,15 @@ use SVN::Base qw(Client svn_client_commi
 
 =over 4
 
-=item $cinfo-E<gt>revision()
+=item $commit_info-E<gt>revision()
 
 Just committed revision.
 
-=item $cinfo-E<gt>date()
+=item $commit_info-E<gt>date()
 
 Server-Side date of the commit as a string.
 
-=item $cinfo-E<gt>author()
+=item $commit_info-E<gt>author()
 
 Author of the commit.
 
@@ -1641,6 +1639,144 @@ File or dir?
 
 =back
 
+=head2 ADDITIONAL METHODS
+
+The following methods work, but are not currently documented in this
+file.  Please consult the svn_client.h section in the Subversion API
+for more details.
+
+=over 4
+
+=item $client-E<gt>add_to_changelist(...)
+
+=item $client-E<gt>blame2(...)
+
+=item $client-E<gt>blame3(...)
+
+=item $client-E<gt>blame4(...)
+
+=item $client-E<gt>cat2(...)
+
+=item $client-E<gt>commit2(...)
+
+=item $client-E<gt>commit3(...)
+
+=item $client-E<gt>commit4(...)
+
+=item $client-E<gt>copy2(...)
+
+=item $client-E<gt>copy3(...)
+
+=item $client-E<gt>copy4(...)
+
+=item $client-E<gt>create_context(...)
+
+=item $client-E<gt>delete2(...)
+
+=item $client-E<gt>delete3(...)
+
+=item $client-E<gt>diff2(...)
+
+=item $client-E<gt>diff3(...)
+
+=item $client-E<gt>diff4(...)
+
+=item $client-E<gt>diff_peg(...)
+
+=item $client-E<gt>diff_peg2(...)
+
+=item $client-E<gt>diff_peg3(...)
+
+=item $client-E<gt>diff_peg4(...)
+
+=item $client-E<gt>diff_summarize2(...)
+
+=item $client-E<gt>diff_summarize_dup(...)
+
+=item $client-E<gt>diff_summarize_peg(...)
+
+=item $client-E<gt>diff_summarize_peg2(...)
+
+=item $client-E<gt>export2(...)
+
+=item $client-E<gt>export3(...)
+
+=item $client-E<gt>export4(...)
+
+=item $client-E<gt>import2(...)
+
+=item $client-E<gt>import3(...)
+
+=item $client-E<gt>info2(...)
+
+=item $client-E<gt>invoke_blame_receiver(...)
+
+=item $client-E<gt>invoke_blame_receiver2(...)
+
+=item $client-E<gt>invoke_diff_summarize_func(...)
+
+=item $client-E<gt>list(...)
+
+=item $client-E<gt>list2(...)
+
+=item $client-E<gt>log2(...)
+
+=item $client-E<gt>log3(...)
+
+=item $client-E<gt>log4(...)
+
+=item $client-E<gt>log5(...)
+
+=item $client-E<gt>ls2(...)
+
+=item $client-E<gt>ls3(...)
+
+=item $client-E<gt>merge2(...)
+
+=item $client-E<gt>merge3(...)
+
+=item $client-E<gt>merge_peg(...)
+
+=item $client-E<gt>merge_peg2(...)
+
+=item $client-E<gt>merge_peg3(...)
+
+=item $client-E<gt>move2(...)
+
+=item $client-E<gt>move3(...)
+
+=item $client-E<gt>move4(...)
+
+=item $client-E<gt>move5(...)
+
+=item $client-E<gt>open_ra_session(...)
+
+=item $client-E<gt>propget2(...)
+
+=item $client-E<gt>propget3(...)
+
+=item $client-E<gt>proplist2(...)
+
+=item $client-E<gt>proplist3(...)
+
+=item $client-E<gt>propset2(...)
+
+=item $client-E<gt>propset3(...)
+
+=item $client-E<gt>remove_from_changelist(...)
+
+=item $client-E<gt>resolve(...)
+
+=item $client-E<gt>revert2(...)
+
+=item $client-E<gt>switch2(...)
+
+=item $client-E<gt>unlock(...)
+
+=item $client-E<gt>version(...)
+
+=back
+
 =head1 TODO
 
 * Better support for the config.

Modified: subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Core.pm
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Core.pm?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Core.pm (original)
+++ subversion/branches/fsfs-format7/subversion/bindings/swig/perl/native/Core.pm Wed Jun  5 12:40:27 2013
@@ -834,20 +834,20 @@ A revision, specified in one of C<SVN::C
 =item $rev-E<gt>kind()
 
 An enum denoting how the revision C<$rev> was specified.  One of 
-C<$VN::Core::opt_revision_unspecified>,
-C<$VN::Core::opt_revision_number>,
-C<$VN::Core::opt_revision_date>,
-C<$VN::Core::opt_revision_committed>,
-C<$VN::Core::opt_revision_previous>,
-C<$VN::Core::opt_revision_base>,
-C<$VN::Core::opt_revision_working>
+C<$SVN::Core::opt_revision_unspecified>,
+C<$SVN::Core::opt_revision_number>,
+C<$SVN::Core::opt_revision_date>,
+C<$SVN::Core::opt_revision_committed>,
+C<$SVN::Core::opt_revision_previous>,
+C<$SVN::Core::opt_revision_base>,
+C<$SVN::Core::opt_revision_working>
 or C<$SVN::Core::opt_revision_head>.
 
 =item $rev-E<gt>value()
 
 Extra data about the revision. Only relevant if C<$rev-E<gt>kind> is
-C<$VN::Core::opt_revision_number> (where it contains the revision number)
-or C<$VN::Core::opt_revision_date> (where it contains a date).
+C<$SVN::Core::opt_revision_number> (where it contains the revision number)
+or C<$SVN::Core::opt_revision_date> (where it contains a date).
 
 =back
 

Modified: subversion/branches/fsfs-format7/subversion/bindings/swig/ruby/test/windows_util.rb
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/bindings/swig/ruby/test/windows_util.rb?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/bindings/swig/ruby/test/windows_util.rb (original)
+++ subversion/branches/fsfs-format7/subversion/bindings/swig/ruby/test/windows_util.rb Wed Jun  5 12:40:27 2013
@@ -106,6 +106,7 @@ module SvnTestUtil
             begin
               Dir.chdir(path)
             rescue Errno::ENOENT
+              next
             end
 
             found_targets = []

Modified: subversion/branches/fsfs-format7/subversion/include/private/svn_string_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/private/svn_string_private.h?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/private/svn_string_private.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/private/svn_string_private.h Wed Jun  5 12:40:27 2013
@@ -142,7 +142,7 @@ svn__strtoff(apr_off_t *offset, const ch
  * want to test for a more specific value range anyway.
  */
 unsigned long
-svn__strtoul(const char *buffer, char **end);
+svn__strtoul(const char *buffer, const char **end);
 
 /** Number of chars needed to represent signed (19 places + sign + NUL) or
  * unsigned (20 places + NUL) integers as strings.

Modified: subversion/branches/fsfs-format7/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_client/merge.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_client/merge.c Wed Jun  5 12:40:27 2013
@@ -12307,6 +12307,12 @@ find_automatic_merge(svn_client__pathrev
   SVN_ERR(svn_client__get_youngest_common_ancestor(
             &s_t->yca, s_t->source, &s_t->target->loc, s_t->source_ra_session,
             ctx, result_pool, result_pool));
+  if (! s_t->yca)
+    return svn_error_createf(SVN_ERR_CLIENT_NOT_READY_TO_MERGE, NULL,
+                             _("'%s@%ld' must be ancestrally related to "
+                               "'%s@%ld'"),
+                             s_t->source->url, s_t->source->rev,
+                             s_t->target->loc.url, s_t->target->loc.rev);
 
   /* Find the latest revision of A synced to B and the latest
    * revision of B synced to A.
@@ -12415,14 +12421,15 @@ client_find_automatic_merge(automatic_me
   source_and_target_t *s_t = apr_palloc(result_pool, sizeof(*s_t));
   automatic_merge_t *merge = apr_palloc(result_pool, sizeof(*merge));
 
-  /* "Open" the target WC.  We're not going to check the target WC for
-   * mixed-rev, local mods or switched subtrees yet.  After we find out
-   * what kind of merge is required, then if a reintegrate-like merge is
-   * required we'll do the stricter checks, in do_automatic_merge_locked(). */
+  /* "Open" the target WC.  Check the target WC for mixed-rev, local mods and
+   * switched subtrees yet to faster exit and notify user before contacting
+   * with server.  After we find out what kind of merge is required, then if a
+   * reintegrate-like merge is required we'll do the stricter checks, in
+   * do_automatic_merge_locked(). */
   SVN_ERR(open_target_wc(&s_t->target, target_abspath,
-                         TRUE /*allow_mixed_rev*/,
-                         TRUE /*allow_local_mods*/,
-                         TRUE /*allow_switched_subtrees*/,
+                         allow_mixed_rev,
+                         allow_local_mods,
+                         allow_switched_subtrees,
                          ctx, result_pool, scratch_pool));
 
   /* Open RA sessions to the source and target trees. */

Modified: subversion/branches/fsfs-format7/subversion/libsvn_diff/parse-diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_diff/parse-diff.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_diff/parse-diff.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_diff/parse-diff.c Wed Jun  5 12:40:27 2013
@@ -1146,8 +1146,9 @@ svn_diff_open_patch_file(svn_patch_file_
   svn_patch_file_t *p;
 
   p = apr_palloc(result_pool, sizeof(*p));
-  SVN_ERR(svn_io_file_open(&p->apr_file, local_abspath, APR_READ,
-                           APR_OS_DEFAULT, result_pool));
+  SVN_ERR(svn_io_file_open(&p->apr_file, local_abspath,
+                           APR_READ | APR_BUFFERED, APR_OS_DEFAULT,
+                           result_pool));
   p->next_patch_offset = 0;
   *patch_file = p;
 

Modified: subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/revprops.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/revprops.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/revprops.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/revprops.c Wed Jun  5 12:40:27 2013
@@ -203,20 +203,15 @@ write_revprop_generation_file(svn_fs_t *
                               apr_int64_t current,
                               apr_pool_t *pool)
 {
-  apr_file_t *file;
-  const char *tmp_path;
-
   char buf[SVN_INT64_BUFFER_SIZE];
   apr_size_t len = svn__i64toa(buf, current);
   buf[len] = '\n';
 
-  SVN_ERR(svn_io_open_unique_file3(&file, &tmp_path, fs->path,
-                                   svn_io_file_del_none, pool, pool));
-  SVN_ERR(svn_io_file_write_full(file, buf, len + 1, NULL, pool));
-  SVN_ERR(svn_io_file_close(file, pool));
+  SVN_ERR(svn_io_write_atomic(path_revprop_generation(fs, pool),
+                              buf, len + 1,
+                              NULL /* copy_perms */, pool));
 
-  return move_into_place(tmp_path, path_revprop_generation(fs, pool),
-                         tmp_path, pool);
+  return SVN_NO_ERROR;
 }
 
 /* Make sure the revprop_namespace member in FS is set. */

Modified: subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/util.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/util.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_fs_fs/util.c Wed Jun  5 12:40:27 2013
@@ -486,16 +486,16 @@ write_revnum_file(svn_fs_t *fs,
                   svn_revnum_t revnum,
                   apr_pool_t *scratch_pool)
 {
-  const char *final_path, *tmp_path;
-  svn_stream_t *tmp_stream;
+  const char *final_path;
+  char buf[SVN_INT64_BUFFER_SIZE];
+  apr_size_t len = svn__i64toa(buf, revnum);
+  buf[len] = '\n';
 
   final_path = path_min_unpacked_rev(fs, scratch_pool);
-  SVN_ERR(svn_stream_open_unique(&tmp_stream, &tmp_path, fs->path,
-                                 svn_io_file_del_none,
-                                 scratch_pool, scratch_pool));
-  SVN_ERR(svn_stream_printf(tmp_stream, scratch_pool, "%ld\n", revnum));
-  SVN_ERR(svn_stream_close(tmp_stream));
-  SVN_ERR(move_into_place(tmp_path, final_path, final_path, scratch_pool));
+
+  SVN_ERR(svn_io_write_atomic(final_path, buf, len + 1,
+                              final_path /* copy_perms */, scratch_pool));
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/commit.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/commit.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/commit.c Wed Jun  5 12:40:27 2013
@@ -804,8 +804,18 @@ maybe_set_lock_token_header(serf_bucket_
       if (token)
         {
           const char *token_header;
+          const char *token_uri;
+          apr_uri_t uri = commit_ctx->session->session_url;
 
-          token_header = apr_pstrcat(pool, "(<", token, ">)", (char *)NULL);
+          /* Supplying the optional URI affects apache response when
+             the lock is broken, see issue 4369.  When present any URI
+             must be absolute (RFC 2518 9.4). */
+          uri.path = (char *)svn_path_url_add_component2(uri.path, relpath,
+                                                         pool);
+          token_uri = apr_uri_unparse(pool, &uri, 0);
+
+          token_header = apr_pstrcat(pool, "<", token_uri, "> (<", token, ">)",
+                                     (char *)NULL);
           serf_bucket_headers_set(headers, "If", token_header);
         }
     }

Modified: subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/locks.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/locks.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/locks.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/locks.c Wed Jun  5 12:40:27 2013
@@ -214,29 +214,26 @@ static svn_error_t *
 determine_error(svn_ra_serf__handler_t *handler,
                 svn_error_t *err)
 {
-    {
-      apr_status_t errcode;
+  apr_status_t errcode;
 
-      if (handler->sline.code == 423)
-        errcode = SVN_ERR_FS_PATH_ALREADY_LOCKED;
-      else if (handler->sline.code == 403)
-        errcode = SVN_ERR_RA_DAV_FORBIDDEN;
-      else
-        return err;
-
-      /* Client-side or server-side error already. Return it.  */
-      if (err != NULL)
-        return err;
-
-      /* The server did not send us a detailed human-readable error.
-         Provide a generic error.  */
-      err = svn_error_createf(errcode, NULL,
-                              _("Lock request failed: %d %s"),
-                              handler->sline.code,
-                              handler->sline.reason);
-    }
+  if (err)
+    return err;
 
-  return err;
+  if (handler->sline.code == 200 || handler->sline.code == 207)
+    return SVN_NO_ERROR;
+  else if (handler->sline.code == 423)
+    errcode = SVN_ERR_FS_PATH_ALREADY_LOCKED;
+  else if (handler->sline.code == 403)
+    errcode = SVN_ERR_RA_DAV_FORBIDDEN;
+  else
+    errcode = SVN_ERR_RA_DAV_REQUEST_FAILED;
+
+  /* The server did not send us a detailed human-readable error.
+     Provide a generic error.  */
+  return svn_error_createf(errcode, NULL,
+                           _("Lock request failed: %d %s"),
+                           handler->sline.code,
+                           handler->sline.reason ? handler->sline.reason : "");
 }
 
 
@@ -406,7 +403,7 @@ svn_ra_serf__get_lock(svn_ra_session_t *
   lock_ctx->handler = handler;
 
   err = svn_ra_serf__context_run_one(handler, pool);
-  err = determine_error(handler, err);
+  err = svn_error_trace(determine_error(handler, err));
 
   if (handler->sline.code == 404)
     {
@@ -497,7 +494,7 @@ svn_ra_serf__lock(svn_ra_session_t *ra_s
       lock_ctx->handler = handler;
 
       err = svn_ra_serf__context_run_one(handler, iterpool);
-      err = determine_error(handler, err);
+      err = svn_error_trace(determine_error(handler, err));
 
       if (lock_func)
         new_err = lock_func(lock_baton, lock_ctx->path, TRUE, lock_ctx->lock,

Modified: subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/ra_serf.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/ra_serf.h?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/ra_serf.h (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/ra_serf.h Wed Jun  5 12:40:27 2013
@@ -50,8 +50,8 @@ extern "C" {
 
 
 /* Enforce the minimum version of serf. */
-#if !SERF_VERSION_AT_LEAST(0, 7, 1)
-#error Please update your version of serf to at least 0.7.1.
+#if !SERF_VERSION_AT_LEAST(1, 2, 1)
+#error Please update your version of serf to at least 1.2.1.
 #endif
 
 /** Use this to silence compiler warnings about unused parameters. */

Modified: subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/util.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_ra_serf/util.c Wed Jun  5 12:40:27 2013
@@ -373,10 +373,8 @@ conn_setup(apr_socket_t *sock,
         {
           conn->ssl_context = serf_bucket_ssl_encrypt_context_get(*read_bkt);
 
-#if SERF_VERSION_AT_LEAST(1,0,0)
           serf_ssl_set_hostname(conn->ssl_context,
                                 conn->session->session_url.hostname);
-#endif
 
           serf_ssl_client_cert_provider_set(conn->ssl_context,
                                             svn_ra_serf__handle_client_cert,
@@ -642,7 +640,6 @@ setup_serf_req(serf_request_t *request,
 {
   serf_bucket_alloc_t *allocator = serf_request_get_alloc(request);
 
-#if SERF_VERSION_AT_LEAST(1, 1, 0)
   svn_spillbuf_t *buf;
 
   if (session->http10 && body_bkt != NULL)
@@ -665,7 +662,6 @@ setup_serf_req(serf_request_t *request,
                                                request_pool,
                                                scratch_pool);
     }
-#endif
 
   /* Create a request bucket.  Note that this sucker is kind enough to
      add a "Host" header for us.  */
@@ -674,7 +670,6 @@ setup_serf_req(serf_request_t *request,
 
   /* Set the Content-Length value. This will also trigger an HTTP/1.0
      request (rather than the default chunked request).  */
-#if SERF_VERSION_AT_LEAST(1, 1, 0)
   if (session->http10)
     {
       if (body_bkt == NULL)
@@ -682,7 +677,6 @@ setup_serf_req(serf_request_t *request,
       else
         serf_bucket_request_set_CL(*req_bkt, svn_spillbuf__get_size(buf));
     }
-#endif
 
   *hdrs_bkt = serf_bucket_request_get_headers(*req_bkt);
 
@@ -696,10 +690,10 @@ setup_serf_req(serf_request_t *request,
       serf_bucket_headers_setn(*hdrs_bkt, "Content-Type", content_type);
     }
 
-#if SERF_VERSION_AT_LEAST(1, 1, 0)
   if (session->http10)
+    {
       serf_bucket_headers_setn(*hdrs_bkt, "Connection", "keep-alive");
-#endif
+    }
 
   if (accept_encoding)
     {
@@ -776,6 +770,8 @@ svn_ra_serf__context_run_wait(svn_boolea
       SVN_ERR(err);
       if (status)
         {
+          /* ### This omits SVN_WARNING, and possibly relies on the fact that
+             ### MAX(SERF_ERROR_*) < SVN_ERR_BAD_CATEGORY_START? */
           if (status >= SVN_ERR_BAD_CATEGORY_START && status < SVN_ERR_LAST)
             {
               /* apr can't translate subversion errors to text */

Modified: subversion/branches/fsfs-format7/subversion/libsvn_ra_svn/marshal.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_ra_svn/marshal.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_ra_svn/marshal.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_ra_svn/marshal.c Wed Jun  5 12:40:27 2013
@@ -1025,7 +1025,6 @@ static svn_error_t *read_item(svn_ra_svn
 {
   char c = first_char;
   apr_uint64_t val;
-  svn_stringbuf_t *str;
   svn_ra_svn_item_t *listitem;
 
   if (++level >= ITEM_NESTING_LIMIT)

Modified: subversion/branches/fsfs-format7/subversion/libsvn_repos/reporter.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_repos/reporter.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_repos/reporter.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_repos/reporter.c Wed Jun  5 12:40:27 2013
@@ -1140,12 +1140,9 @@ delta_dirs(report_baton_t *b, svn_revnum
            svn_boolean_t start_empty, svn_depth_t wc_depth,
            svn_depth_t requested_depth, apr_pool_t *pool)
 {
-  svn_fs_root_t *s_root;
   apr_hash_t *s_entries = NULL, *t_entries;
   apr_hash_index_t *hi;
   apr_pool_t *subpool;
-  const char *name, *s_fullpath, *t_fullpath, *e_fullpath;
-  path_info_t *info;
   apr_array_header_t *t_ordered_entries = NULL;
   int i;
 
@@ -1162,6 +1159,8 @@ delta_dirs(report_baton_t *b, svn_revnum
       /* Get the list of entries in each of source and target. */
       if (s_path && !start_empty)
         {
+          svn_fs_root_t *s_root;
+
           SVN_ERR(get_source_root(b, &s_root, s_rev));
           SVN_ERR(svn_fs_dir_entries(&s_entries, s_root, s_path, pool));
         }
@@ -1172,6 +1171,8 @@ delta_dirs(report_baton_t *b, svn_revnum
 
       while (1)
         {
+          path_info_t *info;
+          const char *name, *s_fullpath, *t_fullpath, *e_fullpath;
           const svn_fs_dirent_t *s_entry, *t_entry;
 
           svn_pool_clear(subpool);
@@ -1199,10 +1200,9 @@ delta_dirs(report_baton_t *b, svn_revnum
           t_fullpath = svn_fspath__join(t_path, name, subpool);
           t_entry = svn_hash_gets(t_entries, name);
           s_fullpath = s_path ? svn_fspath__join(s_path, name, subpool) : NULL;
-          s_entry = s_entries ?
-            svn_hash_gets(s_entries, name) : NULL;
+          s_entry = s_entries ? svn_hash_gets(s_entries, name) : NULL;
 
-          /* The only special cases here are
+          /* The only special cases where we don't process the entry are
 
              - When requested_depth is files but the reported path is
              a directory.  This is technically a client error, but we
@@ -1210,10 +1210,10 @@ delta_dirs(report_baton_t *b, svn_revnum
 
              - When the reported depth is svn_depth_exclude.
           */
-          if ((! info || info->depth != svn_depth_exclude)
-              && (requested_depth != svn_depth_files
-                  || ((! t_entry || t_entry->kind != svn_node_dir)
-                      && (! s_entry || s_entry->kind != svn_node_dir))))
+          if (! ((requested_depth == svn_depth_files
+                  && ((t_entry && t_entry->kind == svn_node_dir)
+                      || (s_entry && s_entry->kind == svn_node_dir)))
+                 || (info && info->depth == svn_depth_exclude)))
             SVN_ERR(update_entry(b, s_rev, s_fullpath, s_entry, t_fullpath,
                                  t_entry, dir_baton, e_fullpath, info,
                                  info ? info->depth
@@ -1242,13 +1242,13 @@ delta_dirs(report_baton_t *b, svn_revnum
                hi;
                hi = apr_hash_next(hi))
             {
-              const svn_fs_dirent_t *s_entry;
+              const svn_fs_dirent_t *s_entry = svn__apr_hash_index_val(hi);
 
               svn_pool_clear(subpool);
-              s_entry = svn__apr_hash_index_val(hi);
 
               if (svn_hash_gets(t_entries, s_entry->name) == NULL)
                 {
+                  const char *e_fullpath;
                   svn_revnum_t deleted_rev;
 
                   if (s_entry->kind == svn_node_file
@@ -1281,10 +1281,12 @@ delta_dirs(report_baton_t *b, svn_revnum
                                        t_entries, pool));
       for (i = 0; i < t_ordered_entries->nelts; ++i)
         {
-          const svn_fs_dirent_t *s_entry, *t_entry;
+          const svn_fs_dirent_t *t_entry
+             = APR_ARRAY_IDX(t_ordered_entries, i, svn_fs_dirent_t *);
+          const svn_fs_dirent_t *s_entry;
+          const char *s_fullpath, *t_fullpath, *e_fullpath;
 
           svn_pool_clear(subpool);
-          t_entry = APR_ARRAY_IDX(t_ordered_entries, i, svn_fs_dirent_t *);
 
           if (is_depth_upgrade(wc_depth, requested_depth, t_entry->kind))
             {
@@ -1305,11 +1307,9 @@ delta_dirs(report_baton_t *b, svn_revnum
                       || requested_depth == svn_depth_files))
                 continue;
 
-              /* Look for an entry with the same name
-                 in the source dirents. */
+              /* Look for an entry with the same name in the source dirents. */
               s_entry = s_entries ?
-                  svn_hash_gets(s_entries, t_entry->name)
-                  : NULL;
+                  svn_hash_gets(s_entries, t_entry->name) : NULL;
               s_fullpath = s_entry ?
                   svn_fspath__join(s_path, t_entry->name, subpool) : NULL;
             }
@@ -1325,8 +1325,6 @@ delta_dirs(report_baton_t *b, svn_revnum
                                subpool));
         }
 
-
-      /* Destroy iteration subpool. */
       svn_pool_destroy(subpool);
     }
   return SVN_NO_ERROR;

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/config_file.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/config_file.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/config_file.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/config_file.c Wed Jun  5 12:40:27 2013
@@ -401,10 +401,13 @@ svn_config__parse_file(svn_config_t *cfg
                        svn_boolean_t must_exist, apr_pool_t *result_pool)
 {
   svn_error_t *err = SVN_NO_ERROR;
+  apr_file_t *apr_file;
   svn_stream_t *stream;
   apr_pool_t *scratch_pool = svn_pool_create(result_pool);
 
-  err = svn_stream_open_readonly(&stream, file, scratch_pool, scratch_pool);
+  /* Use unbuffered IO since we use our own buffering. */
+  err = svn_io_file_open(&apr_file, file, APR_READ, APR_OS_DEFAULT,
+                         scratch_pool);
 
   if (! must_exist && err && APR_STATUS_IS_ENOENT(err->apr_err))
     {
@@ -415,6 +418,7 @@ svn_config__parse_file(svn_config_t *cfg
   else
     SVN_ERR(err);
 
+  stream = svn_stream_from_aprfile2(apr_file, FALSE, scratch_pool);
   err = svn_config__parse_stream(cfg, stream, result_pool, scratch_pool);
 
   if (err != SVN_NO_ERROR)

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/dirent_uri.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/dirent_uri.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/dirent_uri.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/dirent_uri.c Wed Jun  5 12:40:27 2013
@@ -1688,8 +1688,9 @@ svn_dirent_is_canonical(const char *dire
 static svn_boolean_t
 relpath_is_canonical(const char *relpath)
 {
-  const char *ptr = relpath;
+  const char *dot_pos, *ptr = relpath;
   apr_size_t i, len;
+  unsigned pattern = 0;
 
   /* RELPATH is canonical if it has:
    *  - no '.' segments
@@ -1713,16 +1714,23 @@ relpath_is_canonical(const char *relpath
   if (ptr[len-1] == '/' || (ptr[len-1] == '.' && ptr[len-2] == '/'))
     return FALSE;
 
+  /* '.' are rare. So, search for them globally. There will often be no 
+   * more than one hit.  Also note that we already checked for invalid 
+   * starts and endings, i.e. we only need to check for "/./"
+   */
+  for (dot_pos = memchr(ptr, '.', len);
+       dot_pos;
+       dot_pos = strchr(dot_pos+1, '.'))
+    if (dot_pos > ptr && dot_pos[-1] == '/' && dot_pos[1] == '/')
+      return FALSE;
+
   /* Now validate the rest of the path. */
   for (i = 0; i < len - 1; ++i)
-    if (ptr[i] == '/' && ptr[i+1] <= '/') /* '.' and '/' have smaller UTF-8
-                                             codes than most other chars */
-      {
-        if (ptr[i+1] == '/')
-          return FALSE;  /*  //   */
-        if (ptr[i+1] == '.' && ptr[i+2] == '/')
-          return FALSE;  /*  /./  */
-      }
+    {
+      pattern = ((pattern & 0xff) << 8) + (unsigned char)ptr[i];
+      if (pattern == 0x101 * (unsigned char)('/'))
+        return FALSE;
+    }
 
   return TRUE;
 }

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c Wed Jun  5 12:40:27 2013
@@ -2829,10 +2829,23 @@ svn_io_wait_for_cmd(apr_proc_t *cmd_proc
 
   if (exitwhy)
     *exitwhy = exitwhy_val;
+  else if (APR_PROC_CHECK_SIGNALED(exitwhy_val)
+           && APR_PROC_CHECK_CORE_DUMP(exitwhy_val))
+    return svn_error_createf
+      (SVN_ERR_EXTERNAL_PROGRAM, NULL,
+       _("Process '%s' failed (exitwhy %d, signal %d, core dumped)"),
+       cmd, exitwhy_val, exitcode_val);
+  else if (APR_PROC_CHECK_SIGNALED(exitwhy_val))
+    return svn_error_createf
+      (SVN_ERR_EXTERNAL_PROGRAM, NULL,
+       _("Process '%s' failed (exitwhy %d, signal %d)"),
+       cmd, exitwhy_val, exitcode_val);
   else if (! APR_PROC_CHECK_EXIT(exitwhy_val))
+    /* Don't really know what happened here. */
     return svn_error_createf
       (SVN_ERR_EXTERNAL_PROGRAM, NULL,
-       _("Process '%s' failed (exitwhy %d)"), cmd, exitwhy_val);
+       _("Process '%s' failed (exitwhy %d, exitcode %d)"),
+       cmd, exitwhy_val, exitcode_val);
 
   if (exitcode)
     *exitcode = exitcode_val;

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/string.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/string.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/string.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/string.c Wed Jun  5 12:40:27 2013
@@ -1039,7 +1039,7 @@ svn__strtoff(apr_off_t *offset, const ch
 }
 
 unsigned long
-svn__strtoul(const char *buffer, char **end)
+svn__strtoul(const char* buffer, const char** end)
 {
   unsigned long result = 0;
 
@@ -1063,7 +1063,7 @@ svn__strtoul(const char *buffer, char **
       ++buffer;
     }
 
-  *end = (char *)buffer;
+  *end = buffer;
   return result;
 }
 

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/types.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/types.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/types.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/types.c Wed Jun  5 12:40:27 2013
@@ -39,7 +39,7 @@ svn_revnum_parse(svn_revnum_t *rev,
                  const char *str,
                  const char **endptr)
 {
-  char *end;
+  const char *end;
 
   svn_revnum_t result = (svn_revnum_t)svn__strtoul(str, &end);
 
@@ -67,7 +67,7 @@ svn_revnum_parse(svn_revnum_t *rev,
       if (*str > '2' || (apr_uint32_t)result > APR_INT32_MAX)
         return svn_error_createf
                   (SVN_ERR_REVNUM_PARSE_FAILURE, NULL,
-                  _("Revision number too large or not normalized '%s'"), str);
+                  _("Revision number too large '%s'"), str);
     }
   
   if (endptr)

Modified: subversion/branches/fsfs-format7/subversion/libsvn_wc/tree_conflicts.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_wc/tree_conflicts.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_wc/tree_conflicts.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_wc/tree_conflicts.c Wed Jun  5 12:40:27 2013
@@ -506,6 +506,8 @@ svn_wc__get_tree_conflict(const svn_wc_c
           return SVN_NO_ERROR;
         }
     }
+
+  *tree_conflict = NULL;
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/fsfs-format7/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_wc/update_editor.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_wc/update_editor.c Wed Jun  5 12:40:27 2013
@@ -1706,7 +1706,7 @@ delete_entry(const char *path,
   const char *base = svn_relpath_basename(path, NULL);
   const char *local_abspath;
   const char *repos_relpath;
-  svn_node_kind_t kind, base_kind;
+  svn_node_kind_t kind;
   svn_revnum_t old_revision;
   svn_boolean_t conflicted;
   svn_boolean_t have_work;
@@ -1735,6 +1735,7 @@ delete_entry(const char *path,
   {
     svn_boolean_t is_root;
 
+
     SVN_ERR(svn_wc__db_is_wcroot(&is_root, eb->db, local_abspath,
                                  scratch_pool));
 
@@ -1762,10 +1763,9 @@ delete_entry(const char *path,
   if (!have_work)
     {
       base_status = status;
-      base_kind = kind;
     }
   else
-    SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, &old_revision,
+    SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL, &old_revision,
                                      &repos_relpath,
                                      NULL, NULL, NULL, NULL, NULL, NULL, NULL,
                                      NULL, NULL, NULL, NULL, NULL,
@@ -1836,9 +1836,7 @@ delete_entry(const char *path,
     {
       SVN_ERR(check_tree_conflict(&tree_conflict, eb, local_abspath,
                                   status, TRUE,
-                                  (kind == svn_node_dir)
-                                        ? svn_node_dir
-                                        : svn_node_file,
+                                  kind,
                                   svn_wc_conflict_action_delete,
                                   pb->pool, scratch_pool));
     }

Modified: subversion/branches/fsfs-format7/subversion/mod_dav_svn/activity.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/mod_dav_svn/activity.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/mod_dav_svn/activity.c (original)
+++ subversion/branches/fsfs-format7/subversion/mod_dav_svn/activity.c Wed Jun  5 12:40:27 2013
@@ -193,7 +193,6 @@ dav_svn__store_activity(const dav_svn_re
                         const char *txn_name)
 {
   const char *final_path;
-  const char *tmp_path;
   const char *activity_contents;
   svn_error_t *err;
 

Modified: subversion/branches/fsfs-format7/subversion/mod_dav_svn/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/mod_dav_svn/lock.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/mod_dav_svn/lock.c (original)
+++ subversion/branches/fsfs-format7/subversion/mod_dav_svn/lock.c Wed Jun  5 12:40:27 2013
@@ -647,7 +647,7 @@ append_locks(dav_lockdb *lockdb,
 
   /* We don't allow anonymous locks */
   if (! repos->username)
-    return dav_svn__new_error(resource->pool, HTTP_UNAUTHORIZED,
+    return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED,
                               DAV_ERR_LOCK_SAVE_LOCK,
                               "Anonymous lock creation is not allowed.");
 
@@ -776,7 +776,7 @@ append_locks(dav_lockdb *lockdb,
   if (serr && serr->apr_err == SVN_ERR_FS_NO_USER)
     {
       svn_error_clear(serr);
-      return dav_svn__new_error(resource->pool, HTTP_UNAUTHORIZED,
+      return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED,
                                 DAV_ERR_LOCK_SAVE_LOCK,
                                 "Anonymous lock creation is not allowed.");
     }
@@ -886,7 +886,7 @@ remove_lock(dav_lockdb *lockdb,
       if (serr && serr->apr_err == SVN_ERR_FS_NO_USER)
         {
           svn_error_clear(serr);
-          return dav_svn__new_error(resource->pool, HTTP_UNAUTHORIZED,
+          return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED,
                                     DAV_ERR_LOCK_SAVE_LOCK,
                                     "Anonymous lock removal is not allowed.");
         }
@@ -953,7 +953,7 @@ refresh_locks(dav_lockdb *lockdb,
      current lock on the incoming resource? */
   if ((! slock)
       || (strcmp(token->uuid_str, slock->token) != 0))
-    return dav_svn__new_error(resource->pool, HTTP_UNAUTHORIZED,
+    return dav_svn__new_error(resource->pool, HTTP_PRECONDITION_FAILED,
                               DAV_ERR_LOCK_SAVE_LOCK,
                               "Lock refresh request doesn't match existing "
                               "lock.");
@@ -974,7 +974,7 @@ refresh_locks(dav_lockdb *lockdb,
   if (serr && serr->apr_err == SVN_ERR_FS_NO_USER)
     {
       svn_error_clear(serr);
-      return dav_svn__new_error(resource->pool, HTTP_UNAUTHORIZED,
+      return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED,
                                 DAV_ERR_LOCK_SAVE_LOCK,
                                 "Anonymous lock refreshing is not allowed.");
     }

Modified: subversion/branches/fsfs-format7/subversion/svn/file-merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svn/file-merge.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svn/file-merge.c (original)
+++ subversion/branches/fsfs-format7/subversion/svn/file-merge.c Wed Jun  5 12:40:27 2013
@@ -853,13 +853,20 @@ svn_cl__merge_file(const char *base_path
   const char *merged_file_name;
   struct file_merge_baton fmb;
   svn_boolean_t executable;
+  const char *merged_path_local_style;
+  const char *merged_rel_path;
+  const char *wc_path_local_style;
+  const char *wc_rel_path = svn_dirent_skip_ancestor(path_prefix, wc_path);
+
+  /* PATH_PREFIX may not be an ancestor of WC_PATH, just use the
+     full WC_PATH in that case. */
+  if (wc_rel_path)
+    wc_path_local_style = svn_dirent_local_style(wc_rel_path, scratch_pool);
+  else
+    wc_path_local_style = svn_dirent_local_style(wc_path, scratch_pool);
 
-
-  SVN_ERR(svn_cmdline_printf(
-            scratch_pool, _("Merging '%s'.\n"),
-            svn_dirent_local_style(svn_dirent_skip_ancestor(path_prefix,
-                                                            wc_path),
-                                   scratch_pool)));
+  SVN_ERR(svn_cmdline_printf(scratch_pool, _("Merging '%s'.\n"),
+                             wc_path_local_style));
 
   SVN_ERR(svn_io_file_open(&original_file, base_path,
                            APR_READ | APR_BUFFERED,
@@ -905,29 +912,30 @@ svn_cl__merge_file(const char *base_path
   if (fmb.abort_merge)
     {
       SVN_ERR(svn_io_remove_file2(merged_file_name, TRUE, scratch_pool));
-      SVN_ERR(svn_cmdline_printf(
-                scratch_pool, _("Merge of '%s' aborted.\n"),
-                svn_dirent_local_style(svn_dirent_skip_ancestor(path_prefix,
-                                                                wc_path),
-                                       scratch_pool)));
-
+      SVN_ERR(svn_cmdline_printf(scratch_pool, _("Merge of '%s' aborted.\n"),
+                                 wc_path_local_style));
       return SVN_NO_ERROR;
     }
 
   SVN_ERR(svn_io_is_file_executable(&executable, merged_path, scratch_pool));
+
+  merged_rel_path = svn_dirent_skip_ancestor(path_prefix, merged_path);
+  if (merged_rel_path)
+    merged_path_local_style = svn_dirent_local_style(merged_rel_path,
+                                                     scratch_pool);
+  else
+    merged_path_local_style = svn_dirent_local_style(merged_path,
+                                                     scratch_pool);
+
   SVN_ERR_W(svn_io_copy_file(merged_file_name, merged_path, FALSE,
                              scratch_pool),
             apr_psprintf(scratch_pool,
                          _("Could not write merged result to '%s', saved "
                            "instead at '%s'.\n'%s' remains in conflict.\n"),
-                         svn_dirent_local_style(
-                           svn_dirent_skip_ancestor(path_prefix, merged_path),
-                           scratch_pool),
+                         merged_path_local_style,
                          svn_dirent_local_style(merged_file_name,
                                                 scratch_pool),
-                         svn_dirent_local_style(
-                           svn_dirent_skip_ancestor(path_prefix, wc_path),
-                           scratch_pool)));
+                         wc_path_local_style));
   SVN_ERR(svn_io_set_file_executable(merged_path, executable, FALSE,
                                      scratch_pool));
   SVN_ERR(svn_io_remove_file2(merged_file_name, TRUE, scratch_pool));
@@ -941,15 +949,11 @@ svn_cl__merge_file(const char *base_path
     SVN_ERR(svn_cmdline_printf(
               scratch_pool,
               _("Merge of '%s' completed (remains in conflict).\n"),
-              svn_dirent_local_style(svn_dirent_skip_ancestor(path_prefix,
-                                                              wc_path),
-                                     scratch_pool)));
+              wc_path_local_style));
   else
     SVN_ERR(svn_cmdline_printf(
               scratch_pool, _("Merge of '%s' completed.\n"),
-              svn_dirent_local_style(svn_dirent_skip_ancestor(path_prefix,
-                                                              wc_path),
-                                     scratch_pool)));
+              wc_path_local_style));
 
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/fsfs-format7/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svnserve/serve.c?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svnserve/serve.c (original)
+++ subversion/branches/fsfs-format7/subversion/svnserve/serve.c Wed Jun  5 12:40:27 2013
@@ -2090,7 +2090,6 @@ static svn_error_t *log_receiver(void *b
   svn_ra_svn_conn_t *conn = b->conn;
   apr_hash_index_t *h;
   svn_boolean_t invalid_revnum = FALSE;
-  char action[2];
   const svn_string_t *author, *date, *message;
   apr_uint64_t revprop_count;
 

Modified: subversion/branches/fsfs-format7/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/cmdline/lock_tests.py?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/fsfs-format7/subversion/tests/cmdline/lock_tests.py Wed Jun  5 12:40:27 2013
@@ -1815,6 +1815,31 @@ def lock_unlock_deleted(sbox):
   expected_status.tweak('A/mu', writelocked=None)
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
+@Issue(4369)
+def commit_stolen_lock(sbox):
+  "commit with a stolen lock"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  sbox.simple_append('A/mu', 'zig-zag')
+  sbox.simple_lock('A/mu')
+
+  expected_output = '\'mu\' locked by user \'jrandom\'.'
+  svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'lock', '--force',
+                                     sbox.repo_url + '/A/mu')
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('A/mu', status='M ', writelocked='T')
+  err_re = "(.*E160037: Cannot verify lock on path '/A/mu')|" + \
+           "(.*E160038: '/.*/A/mu': no lock token available)"
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        [],
+                                        expected_status,
+                                        err_re,
+                                        wc_dir)
+
 ########################################################################
 # Run the tests
 
@@ -1866,6 +1891,7 @@ test_list = [ None,
               lock_multi_wc,
               locks_stick_over_switch,
               lock_unlock_deleted,
+              commit_stolen_lock,
             ]
 
 if __name__ == '__main__':

Modified: subversion/branches/fsfs-format7/subversion/tests/cmdline/svntest/sandbox.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/cmdline/svntest/sandbox.py?rev=1489839&r1=1489838&r2=1489839&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/cmdline/svntest/sandbox.py (original)
+++ subversion/branches/fsfs-format7/subversion/tests/cmdline/svntest/sandbox.py Wed Jun  5 12:40:27 2013
@@ -362,6 +362,13 @@ class Sandbox:
        DEST is a relpath relative to the WC."""
     open(self.ospath(dest), truncate and 'w' or 'a').write(contents)
 
+  def simple_lock(self, *targets):
+    """Lock TARGETS in the WC.
+       TARGETS are relpaths relative to the WC."""
+    assert len(targets) > 0
+    targets = self.ospaths(targets)
+    svntest.main.run_svn(False, 'lock', *targets)
+
 
 def is_url(target):
   return (target.startswith('^/')