subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From prabh...@apache.org
Subject svn commit: r1489765 [3/22] - in /subversion/branches/verify-keep-going: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ contrib/hook-scripts/ contrib/server-side/fsfsfixer/ contrib/server-side/fsfsfixer/fixer/ notes/ subversion/...
Date Wed, 05 Jun 2013 09:22:51 GMT
Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/Client.pm
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/Client.pm?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/Client.pm (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/Client.pm Wed Jun  5 09:22:43 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 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/verify-keep-going/subversion/bindings/swig/perl/native/Core.pm
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/Core.pm?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/Core.pm (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/Core.pm Wed Jun  5 09:22:43 2013
@@ -698,6 +698,47 @@ no previous history.
 
 =cut
 
+package _p_svn_log_changed_path2_t;
+use SVN::Base qw(Core svn_log_changed_path2_t_);
+
+=head2 svn_log_changed_path2_t
+
+An object to represent a path that changed for a log entry.
+
+=over 4
+
+=item $lcp-E<gt>action()
+
+'A'dd, 'D'elete, 'R'eplace, 'M'odify
+
+=item $lcp-E<gt>copyfrom_path()
+
+Source path of copy, or C<undef> if there isn't any previous revision
+history.
+
+=item $lcp-E<gt>copyfrom_rev()
+
+Source revision of copy, or C<$SVN::Core::INVALID_REVNUM> if there is
+no previous history.
+
+=item $lcp-E<gt>node_kind()
+
+The type of the node, a C<$SVN::Node> enum; may be C<$SVN::Node::unknown>.
+
+=item $lcp-E<gt>text_modified()
+
+Is the text modified, a C<SVN::Tristate> enum, 
+may be C<$SVN::Tristate::unknown>.
+
+=item $lcp-E<gt>props_modified()
+
+Are properties modified, a C<SVN::Tristate> enum,
+may be C<$SVN::Tristate::unknown>.
+
+=back
+
+=cut
+
 package SVN::Node;
 use SVN::Base qw(Core svn_node_);
 
@@ -710,6 +751,20 @@ $SVN::Node::dir, $SVN::Node::unknown.
 
 =cut
 
+package SVN::Tristate;
+use SVN::Base qw(Core svn_tristate_);
+
+=head2 svn_tristate_t - SVN::Tristate
+
+An enum of the following constants:
+
+$SVN::Tristate::true, $SVN::Tristate::false, $SVN::Tristate::unknown
+
+Note that these true/false values have nothing to do with Perl's concept 
+of truth. In fact, each constant would evaluate to true in a boolean context.
+
+=cut
+
 package SVN::Depth;
 use SVN::Base qw(Core svn_depth_);
 
@@ -772,11 +827,56 @@ use SVN::Base qw(Core svn_opt_revision_t
 
 =head2 svn_opt_revision_t
 
+A revision, specified in one of C<SVN::Core::opt_revision_*> ways.
+
+=over 4
+
+=item $rev-E<gt>kind()
+
+An enum denoting how the revision C<$rev> was specified.  One of 
+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<$SVN::Core::opt_revision_number> (where it contains the revision number)
+or C<$SVN::Core::opt_revision_date> (where it contains a date).
+
+=back
+
 =cut
 
 package _p_svn_opt_revision_value_t;
 use SVN::Base qw(Core svn_opt_revision_value_t_);
 
+package _p_svn_opt_revision_range_t;
+use SVN::Base qw(Core svn_opt_revision_range_t_);
+
+=head2 svn_opt_revision_range_t
+
+An object representing a range of revisions.
+
+=over 4
+
+=item $range-E<gt>start()
+
+The first revision in the range, a C<_p_svn_opt_revision_t> object.
+
+=item $range-E<gt>end()
+
+The last revision in the range, a C<_p_svn_opt_revision_t> object.
+
+=back
+
+=cut
+
 package _p_svn_config_t;
 use SVN::Base qw(Core svn_config_);
 
@@ -848,12 +948,48 @@ Error message from the post-commit hook,
 
 =item $commit-E<gt>repos_root()
 
-Repoistory root, may be undef if unknown.
+Repository root, may be C<undef> if unknown.
 
 =back
 
 =cut
 
+package _p_svn_log_entry_t;
+use SVN::Base qw(Core svn_log_entry_t_);
+
+=head2 svn_log_entry_t
+
+=item $entry-E<gt>revision()
+
+The revision of the commit.
+
+=item $entry-E<gt>revprops()
+
+A reference to a hash of requested revision properties, 
+which may be C<undef> if it would contain no revprops. 
+
+=item $entry-E<gt>has_children()
+
+Whether or not this message has children.
+
+=item $entry-E<gt>changed_paths2()
+
+A reference to hash containing as keys every path committed in 
+C<$entry-E<gt>revision()>; the values are C<_p_svn_log_changed_path2_t>
+objects.
+
+=item $entry-E<gt>non_inheritable()
+
+Whether C<$entry-E<gt>revision()> should be interpreted as non-inheritable 
+in the same sense of C<_p_svn_merge_range_t>.
+
+=item $entry-E<gt>subtractive_merge()
+
+Whether C<$entry-E<gt>revision()> is a merged revision resulting 
+from a reverse merge.
+
+=cut
+
 package _p_svn_auth_cred_simple_t;
 use SVN::Base qw(Core svn_auth_cred_simple_t_);
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/t/3client.t
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/t/3client.t?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/t/3client.t (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/perl/native/t/3client.t Wed Jun  5 09:22:43 2013
@@ -20,7 +20,7 @@
 #
 #
 
-use Test::More tests => 223;
+use Test::More tests => 297;
 use strict;
 
 # shut up about variables that are only used once.
@@ -346,69 +346,255 @@ isa_ok($svn_error, '_p_svn_error_t',
 $svn_error->clear(); #don't leak this
 
 # test getting the log
-# TEST
+
+sub test_log_message_receiver {
+  my ($changed_paths,$revision,
+      $author,$date,$message,$pool) = @_;
+  # TEST
+  isa_ok($changed_paths,'HASH',
+         'changed_paths param is a HASH');
+  # TEST
+  isa_ok($changed_paths->{'/dir1/new'},
+         '_p_svn_log_changed_path_t',
+         'Hash value is a _p_svn_log_changed_path_t');
+  # TEST
+  is($changed_paths->{'/dir1/new'}->action(),'A',
+     'action returns A for add');
+  # TEST
+  is($changed_paths->{'/dir1/new'}->copyfrom_path(),undef,
+     'copyfrom_path returns undef as it is not a copy');
+  # TEST
+  is($changed_paths->{'/dir1/new'}->copyfrom_rev(),
+     $SVN::Core::INVALID_REVNUM,
+     'copyfrom_rev is set to INVALID as it is not a copy');
+  # TEST
+  is($revision,$current_rev,
+     'revision param matches current rev');
+  # TEST
+  is($author,$username,
+     'author param matches expected username');
+  # TEST
+  ok($date,'date param is defined');
+  # TEST
+  is($message,'Add new',
+     'message param is the expected value');
+  # TEST
+  isa_ok($pool,'_p_apr_pool_t',
+         'pool param is _p_apr_pool_t');
+}
+ 
+# TEST  log range $current_rev:$current_rev
 is($ctx->log("$reposurl/dir1/new",$current_rev,$current_rev,1,0,
-             sub
-             {
-                 my ($changed_paths,$revision,
-                     $author,$date,$message,$pool) = @_;
-                 # TEST
-                 isa_ok($changed_paths,'HASH',
-                        'changed_paths param is a HASH');
-                 # TEST
-                 isa_ok($changed_paths->{'/dir1/new'},
-                        '_p_svn_log_changed_path_t',
-                        'Hash value is a _p_svn_log_changed_path_t');
-                 # TEST
-                 is($changed_paths->{'/dir1/new'}->action(),'A',
-                    'action returns A for add');
-                 # TEST
-                 is($changed_paths->{'/dir1/new'}->copyfrom_path(),undef,
-                    'copyfrom_path returns undef as it is not a copy');
-                 # TEST
-                 is($changed_paths->{'/dir1/new'}->copyfrom_rev(),
-                    $SVN::Core::INVALID_REVNUM,
-                    'copyfrom_rev is set to INVALID as it is not a copy');
-                 # TEST
-                 is($revision,$current_rev,
-                    'revision param matches current rev');
-                 # TEST
-                 is($author,$username,
-                    'author param matches expected username');
-                 # TEST
-                 ok($date,'date param is defined');
-                 # TEST
-                 is($message,'Add new',
-                    'message param is the expected value');
-                 # TEST
-                 isa_ok($pool,'_p_apr_pool_t',
-                        'pool param is _p_apr_pool_t');
-             }),
+             \&test_log_message_receiver), 
    undef,
    'log returns undef');
+# TEST  log2 range $current_rev:0 limit=1
+is($ctx->log2("$reposurl/dir1/new",$current_rev,0,1,1,0,
+              \&test_log_message_receiver), 
+   undef,
+   'log2 returns undef');
+# TEST  log3 range $current_rev:0 limit=1
+is($ctx->log3("$reposurl/dir1/new",'HEAD',$current_rev,0,1,1,0,
+              \&test_log_message_receiver), 
+   undef,
+   'log3 returns undef');
+
+my @new_paths = qw( dir1/new dir1/new2 dir1/new3 dir1/new4 );
+$ctx->log3([ $reposurl, @new_paths ],
+           'HEAD',$current_rev,0,1,1,0, sub {
+               my ($changed_paths,$revision,$author,$date,$message,$pool) = @_;
+               # TEST
+               is_deeply([sort keys %$changed_paths],
+                         [sort map { "/$_" } @new_paths],
+                         "changed_paths for multiple targets");
+});
+
+sub get_full_log {
+    my ($start, $end) = @_;
+    my @log;
+    $ctx->log($reposurl, $start, $end, 1, 0, sub { 
+        my ($changed_paths, $revision, $author, $date, $msg, undef) = @_; 
+        # "unpack" the values of the $changed_paths hash 
+        # (_p_svn_log_changed_path_t objects) so that
+        # we can use is_deeply() to compare results
+        my %hash;
+        while (my ($path, $changed) = each %$changed_paths) {
+            foreach (qw( action copyfrom_path copyfrom_rev )) {
+                $hash{$path}{$_} = $changed->$_()
+            }
+        }
+        push @log, [ \%hash, $revision, $author, $date, $msg ];
+    });
+    return \@log;
+}
+
+# TEST
+my $full_log = get_full_log('HEAD',1);
+is(scalar @$full_log, $current_rev, "history up to 'HEAD'");
 
 # TEST
 my $opt_revision_head = SVN::_Core::new_svn_opt_revision_t();
 $opt_revision_head->kind($SVN::Core::opt_revision_head);
-is_deeply(get_log2($opt_revision_head),      # got
-          get_log2("HEAD"));                 # expected
+is_deeply(get_full_log($opt_revision_head,1),   # got
+          $full_log,                            # expected
+          "history up to svn_opt_revision_t of kind head");
+
+# TEST
+is_deeply(get_full_log($current_rev,1),         # got
+          $full_log,                            # expected
+          "history up to number $current_rev");
+
 # TEST
 my $opt_revision_number = SVN::_Core::new_svn_opt_revision_t();
 $opt_revision_number->kind($SVN::Core::opt_revision_number);
 $opt_revision_number->value->number($current_rev);
-is_deeply(get_log2($opt_revision_number),    # got
-          get_log2($current_rev));           # expected
+is_deeply(get_full_log($opt_revision_number,1), # got
+          $full_log,                            # expected
+          "history up to svn_opt_revision_t of kind number and value $current_rev");
 
-sub get_log2 {
-    my ($rev) = @_;
-    my @log;
-    $ctx->log2($reposurl, $rev, $rev, 0, 0, 0, sub { 
-        my (undef, $revision, $author, $date, $msg, undef) = @_; 
-        push @log, [ $revision, $author, $date, $msg ];
+sub test_log_entry_receiver {
+  my ($log_entry,$pool) = @_;
+  # TEST
+  isa_ok($log_entry, '_p_svn_log_entry_t',
+         'log_entry param');
+  # TEST
+  isa_ok($pool,'_p_apr_pool_t',
+         'pool param');
+  # TEST
+  is($log_entry->revision,$current_rev,
+     'log_entry->revision matches current rev');
+
+  my $revprops = $log_entry->revprops;
+  # TEST
+  isa_ok($revprops,'HASH',
+         'log_entry->revprops');
+  # TEST
+  is($revprops->{"svn:author"},$username,
+     'svn:author revprop matches expected username');
+  # TEST
+  ok($revprops->{"svn:date"},'svn:date revprop is defined');
+  # TEST
+  is($revprops->{"svn:log"},'Add new',
+     'svn:log revprop is the expected value');
+
+  my $changed_paths = $log_entry->changed_paths2;
+  # TEST
+  isa_ok($changed_paths,'HASH',
+         'log_entry->changed_paths2');
+  # TEST
+  isa_ok($changed_paths->{'/dir1/new'},
+         '_p_svn_log_changed_path2_t',
+         'log_entry->changed_paths2 value');
+  # TEST
+  is($changed_paths->{'/dir1/new'}->action(),'A',
+     'action returns A for add');
+  # TEST
+  is($changed_paths->{'/dir1/new'}->node_kind(),$SVN::Node::file,
+     'node_kind returns $SVN::Node::file');
+  # TEST
+  is($changed_paths->{'/dir1/new'}->text_modified(),$SVN::Tristate::true,
+     'text_modified returns true');
+  # TEST
+  is($changed_paths->{'/dir1/new'}->props_modified(),$SVN::Tristate::false,
+     'props_modified returns false');
+  # TEST
+  is($changed_paths->{'/dir1/new'}->copyfrom_path(),undef,
+     'copyfrom_path returns undef as it is not a copy');
+  # TEST
+  is($changed_paths->{'/dir1/new'}->copyfrom_rev(),
+     $SVN::Core::INVALID_REVNUM,
+     'copyfrom_rev is set to INVALID as it is not a copy');
+}
+
+# TEST
+is($ctx->log4("$reposurl/dir1/new",
+              'HEAD',$current_rev,0,1, # peg rev, start rev, end rev, limit
+              1,1,0, # discover_changed_paths, strict_node_history, include_merged_revisions
+              undef, # revprops
+              \&test_log_entry_receiver), 
+   undef,
+   'log4 returns undef');
+
+# TEST
+is($ctx->log5("$reposurl/dir1/new",
+              'HEAD',[$current_rev,0],1, # peg rev, rev ranges, limit
+              1,1,0, # discover_changed_paths, strict_node_history, include_merged_revisions
+              undef, # revprops
+              \&test_log_entry_receiver), 
+   undef,
+   'log5 returns undef');
+
+# test the different forms to specify revision ranges
+sub get_revs {
+    my ($rev_ranges) = @_;
+    my @revs;
+    $ctx->log5($reposurl, 'HEAD', $rev_ranges, 0, 0, 0, 0, undef, sub { 
+        my ($log_entry,$pool) = @_;
+        push @revs, $log_entry->revision;
     });
-    return \@log;
+    return \@revs;
 }
 
+my $top = SVN::_Core::new_svn_opt_revision_range_t();
+$top->start('HEAD');
+$top->end('HEAD');
+my $bottom = SVN::_Core::new_svn_opt_revision_range_t();
+$bottom->start(1);
+$bottom->end($current_rev-1);
+
+# TEST
+is_deeply(get_revs($top),   
+          [ $current_rev ], 'single svn_opt_revision_range_t');
+# TEST
+is_deeply(get_revs([$top]), 
+          [ $current_rev ], 'list of svn_opt_revision_range_t');
+# TEST
+is_deeply(get_revs(['HEAD', 'HEAD']),
+          [ $current_rev ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([['HEAD', 'HEAD']]),
+          [ $current_rev ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs([$current_rev, $current_rev]),
+          [ $current_rev ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([[$current_rev, $current_rev]]),
+          [ $current_rev ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs([1, 'HEAD']),
+          [ 1..$current_rev ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([[1, 'HEAD']]),
+          [ 1..$current_rev ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs([1, $opt_revision_head]),
+          [ 1..$current_rev ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([[1, $opt_revision_head]]),
+          [ 1..$current_rev ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs($bottom), 
+          [ 1..$current_rev-1 ], 'single svn_opt_revision_range_t');
+# TEST
+is_deeply(get_revs([$bottom]), 
+          [ 1..$current_rev-1 ], 'list of svn_opt_revision_range_t');
+# TEST
+is_deeply(get_revs([1, $current_rev-1]),
+          [ 1..$current_rev-1 ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([[1, $current_rev-1]]),
+          [ 1..$current_rev-1 ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs([[1, $current_rev-1], $top]),
+          [ 1..$current_rev ], 'mixed list of ranges');
+# TEST
+is_deeply(get_revs([$bottom, ['HEAD', 'HEAD']]),
+          [ 1..$current_rev ], 'mixed list of ranges');
+# TEST
+is_deeply(get_revs([$bottom, $top]),
+          [ 1..$current_rev ], 'mixed list of ranges');
+          
+
 # TEST
 is($ctx->update($wcpath,'HEAD',1),$current_rev,
    'Return from update is the current rev');
@@ -461,8 +647,7 @@ is($ctx->status($wcpath, undef, sub {
                                          ' the correct path.');
                                       # TEST
                                       isa_ok($wc_status,'_p_svn_wc_status_t',
-                                             'wc_stats param is a' .
-                                             ' _p_svn_wc_status_t');
+                                             'wc_stats param');
                                       # TEST
                                       is($wc_status->text_status(),
                                          $SVN::Wc::Status::normal,
@@ -783,7 +968,7 @@ my($pl) = $ctx->proplist($reposurl,$curr
 isa_ok($pl,'ARRAY','proplist returns an ARRAY');
 # TEST
 isa_ok($pl->[0], '_p_svn_client_proplist_item_t',
-       'array element is a _p_svn_client_proplist_item_t');
+       'proplist array element');
 # TEST
 is($pl->[0]->node_name(),"$reposurl/dir1",
    'node_name is the expected value');
@@ -874,8 +1059,7 @@ is($ctx->blame("$reposurl/foo",'HEAD','H
                                               }
                                               # TEST
                                               isa_ok($pool,'_p_apr_pool_t',
-                                                     'pool param is ' .
-                                                     '_p_apr_pool_t');
+                                                     'pool param');
                                             }),
    undef,
    'blame returns undef');
@@ -902,7 +1086,7 @@ my ($dirents) = $ctx->ls($reposurl,"$cur
 isa_ok($dirents, 'HASH','ls returns a HASH');
 # TEST
 isa_ok($dirents->{'dir1'},'_p_svn_dirent_t',
-       'hash value is a _p_svn_dirent_t');
+       'dirents hash value');
 # TEST
 is($dirents->{'dir1'}->kind(),$SVN::Core::node_dir,
    'kind() returns a dir node');

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c Wed Jun  5 09:22:43 2013
@@ -2637,8 +2637,9 @@ svn_error_t *svn_swig_py_repos_history_f
   return err;
 }
 
-svn_error_t *svn_swig_py_repos_freeze_func(void *baton,
-                                           apr_pool_t *pool)
+static svn_error_t *
+freeze_func(void *baton,
+            apr_pool_t *pool)
 {
   PyObject *receiver = baton;
   PyObject *py_pool;
@@ -2670,12 +2671,24 @@ svn_error_t *svn_swig_py_repos_freeze_fu
     }
 
   Py_DECREF(py_pool);
-                                 
+
 finished:
   svn_swig_py_release_py_lock();
   return err;
 }
 
+svn_error_t *svn_swig_py_repos_freeze_func(void *baton,
+                                           apr_pool_t *pool)
+{
+  return freeze_func(baton, pool);
+}
+
+svn_error_t *svn_swig_py_fs_freeze_func(void *baton,
+                                        apr_pool_t *pool)
+{
+  return freeze_func(baton, pool);
+}
+
 svn_error_t *svn_swig_py_proplist_receiver2(void *baton,
                                             const char *path,
                                             apr_hash_t *prop_hash,
@@ -2716,7 +2729,7 @@ svn_error_t *svn_swig_py_proplist_receiv
       py_props = Py_None;
       Py_INCREF(Py_None);
     }
-  
+
   if (inherited_props)
     {
       py_iprops = svn_swig_py_propinheriteditemarray_to_dict(inherited_props);
@@ -2751,12 +2764,12 @@ svn_error_t *svn_swig_py_proplist_receiv
   Py_DECREF(py_props);
   Py_DECREF(py_iprops);
   Py_DECREF(py_pool);
-                                 
+
 finished:
   svn_swig_py_release_py_lock();
   return err;
 }
-                                            
+
 
 svn_error_t *svn_swig_py_log_receiver(void *baton,
                                       apr_hash_t *changed_paths,
@@ -3285,16 +3298,16 @@ svn_swig_py_auth_ssl_client_cert_pw_prom
 }
 
 svn_error_t *
-svn_swig_py_auth_cleanup_func(svn_boolean_t *delete_cred,
-                              void *cleanup_baton,
-                              const char *cred_kind,
-                              const char *realmstring,
-                              const char *provider,
-                              apr_pool_t *scratch_pool)
+svn_swig_py_config_auth_walk_func(svn_boolean_t *delete_cred,
+                                  void *walk_baton,
+                                  const char *cred_kind,
+                                  const char *realmstring,
+                                  apr_hash_t *hash,
+                                  apr_pool_t *scratch_pool)
 {
-  PyObject *function = cleanup_baton;
+  PyObject *function = walk_baton;
   PyObject *result;
-  PyObject *py_scratch_pool;
+  PyObject *py_scratch_pool, *py_hash;
   svn_error_t *err = SVN_NO_ERROR;
 
   *delete_cred = FALSE;
@@ -3310,11 +3323,17 @@ svn_swig_py_auth_cleanup_func(svn_boolea
       err = callback_exception_error();
       goto finished;
     }
+  py_hash = svn_swig_py_prophash_to_dict(hash);
+  if (py_hash == NULL)
+    {
+      Py_DECREF(py_scratch_pool);
+      err = callback_exception_error();
+      goto finished;
+    }
 
-  if ((result = PyObject_CallFunction(function,
-                                      (char *)"sssO",
+  if ((result = PyObject_CallFunction(function, (char *)"ssOO",
                                       cred_kind, realmstring,
-                                      provider, py_scratch_pool)) == NULL)
+                                      py_hash, py_scratch_pool)) == NULL)
     {
       err = callback_exception_error();
     }
@@ -3328,8 +3347,9 @@ svn_swig_py_auth_cleanup_func(svn_boolea
         err = callback_bad_return_error("Not an integer");
       Py_DECREF(result);
     }
+  Py_DECREF(py_hash);
   Py_DECREF(py_scratch_pool);
-  
+
 finished:
   svn_swig_py_release_py_lock();
   return err;

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h Wed Jun  5 09:22:43 2013
@@ -406,11 +406,16 @@ svn_error_t *svn_swig_py_log_entry_recei
                                             svn_log_entry_t *log_entry,
                                             apr_pool_t *pool);
 
-/* thunked freeze function */
+/* thunked repos freeze function */
 SVN_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_py_repos_freeze_func(void *baton,
                                            apr_pool_t *pool);
 
+/* thunked fs freeze function */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_fs_freeze_func(void *baton,
+                                        apr_pool_t *pool);
+
 /* thunked proplist receiver2 function */
 SVN_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_py_proplist_receiver2(void *baton,
@@ -503,12 +508,12 @@ svn_error_t *svn_swig_py_auth_ssl_client
 
 /* auth cleanup callback */
 SVN_SWIG_SWIGUTIL_EXPORT
-svn_error_t *svn_swig_py_auth_cleanup_func(svn_boolean_t *delete_cred,
-                                           void *cleanup_baton,
-                                           const char *cred_kind,
-                                           const char *realmstring,
-                                           const char *provider,
-                                           apr_pool_t *scratch_pool);
+svn_error_t *svn_swig_py_config_auth_walk_func(svn_boolean_t *delete_cred,
+                                               void *walk_baton,
+                                               const char *cred_kind,
+                                               const char *realmstring,
+                                               apr_hash_t *hash,
+                                               apr_pool_t *scratch_pool);
 
 SVN_SWIG_SWIGUTIL_EXPORT
 void

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/checksum.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/checksum.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/checksum.py (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/checksum.py Wed Jun  5 09:22:43 2013
@@ -42,7 +42,7 @@ def suite():
 if __name__ == '__main__':
     runner = unittest.TextTestRunner()
     runner.run(suite())
-    
+
 
 
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/core.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/core.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/core.py (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/core.py Wed Jun  5 09:22:43 2013
@@ -135,7 +135,7 @@ class SubversionCoreTestCase(unittest.Te
 
     def enumerator(name, value, pool):
       raise Exception
-    
+
     # the exception will be swallowed, but enumeration must be stopped
     self.assertEqual(
       svn.core.svn_config_enumerate2(cfg, "section", enumerator), 1)

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c Wed Jun  5 09:22:43 2013
@@ -735,7 +735,9 @@ svn_swig_rb_get_pool(int argc, VALUE *ar
 static svn_boolean_t
 rb_set_pool_if_swig_type_object(VALUE target, VALUE pool)
 {
-  VALUE targets[1] = {target};
+  VALUE targets[1];
+  
+  targets[0] = target;
 
   if (!NIL_P(find_swig_type_object(1, targets))) {
     rb_set_pool(target, pool);
@@ -1530,15 +1532,14 @@ r2c_hash(VALUE hash, r2c_func func, void
     return NULL;
   } else {
     apr_hash_t *apr_hash;
-    hash_to_apr_hash_data_t data = {
-      NULL,
-      func,
-      ctx,
-      pool
-    };
+    hash_to_apr_hash_data_t data;
 
     apr_hash = apr_hash_make(pool);
     data.apr_hash = apr_hash;
+    data.ctx = ctx;
+    data.func = func;
+    data.pool = pool;
+
     rb_hash_foreach(hash, r2c_hash_i, (VALUE)&data);
 
     return apr_hash;
@@ -1637,8 +1638,9 @@ invoke_callback(VALUE baton, VALUE pool)
 {
   callback_baton_t *cbb = (callback_baton_t *)baton;
   VALUE sub_pool;
-  VALUE argv[] = {pool};
+  VALUE argv[1];
 
+  argv[0] = pool;
   svn_swig_rb_get_pool(1, argv, Qnil, &sub_pool, NULL);
   cbb->pool = sub_pool;
   return rb_ensure(callback, baton, callback_ensure, sub_pool);

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h Wed Jun  5 09:22:43 2013
@@ -74,7 +74,12 @@
 extern "C" {
 #endif /* __cplusplus */
 
+/* Ruby 1.9 changed the file name of this header */
+#ifdef HAVE_RUBY_IO_H
+#include <ruby/io.h>
+#else
 #include <rubyio.h>
+#endif
 
 typedef struct apr_pool_wrapper_t
 {

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/greek_tree.rb
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/greek_tree.rb?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/greek_tree.rb (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/greek_tree.rb Wed Jun  5 09:22:43 2013
@@ -47,15 +47,16 @@ module SvnTestUtil
       const_set(path.split("/").last.upcase, path)
     end
 
-    def initialize(tmp_path, wc_path, repos_uri)
+    def initialize(tmp_path, import_path, wc_path, repos_uri)
       @tmp_path = tmp_path
+      @import_path = import_path
       @wc_path = wc_path
       @repos_uri = repos_uri
     end
 
     def setup(context)
       TREE.each do |path, contents|
-        entry = File.expand_path(File.join(@tmp_path, path))
+        entry = File.expand_path(File.join(@import_path, path))
         if contents
           File.open(entry, 'w') {|f| f.print(contents)}
         else
@@ -63,7 +64,7 @@ module SvnTestUtil
         end
       end
 
-      context.import(@tmp_path, @repos_uri)
+      context.import(@import_path, @repos_uri)
       context.update(@wc_path)
     end
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_client.rb
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_client.rb?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_client.rb (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_client.rb Wed Jun  5 09:22:43 2013
@@ -334,7 +334,7 @@ class SvnClientTest < Test::Unit::TestCa
     file = "sample.txt"
     deep_dir_path = File.join(@wc_path, deep_dir)
     path = File.join(deep_dir_path, file)
-    tmp_deep_dir_path = File.join(@tmp_path, deep_dir)
+    tmp_deep_dir_path = File.join(@import_path, deep_dir)
     tmp_path = File.join(tmp_deep_dir_path, file)
 
     make_context(log) do |ctx|
@@ -342,7 +342,7 @@ class SvnClientTest < Test::Unit::TestCa
       FileUtils.mkdir_p(tmp_deep_dir_path)
       File.open(tmp_path, "w") {|f| f.print(src)}
 
-      ctx.import(@tmp_path, @repos_uri)
+      ctx.import(@import_path, @repos_uri)
 
       ctx.up(@wc_path)
       assert_equal(src, File.open(path){|f| f.read})
@@ -356,7 +356,7 @@ class SvnClientTest < Test::Unit::TestCa
     file = "sample.txt"
     deep_dir_path = File.join(@wc_path, deep_dir)
     path = File.join(deep_dir_path, file)
-    tmp_deep_dir_path = File.join(@tmp_path, deep_dir)
+    tmp_deep_dir_path = File.join(@import_path, deep_dir)
     tmp_path = File.join(tmp_deep_dir_path, file)
 
     make_context(log) do |ctx|
@@ -364,7 +364,7 @@ class SvnClientTest < Test::Unit::TestCa
       FileUtils.mkdir_p(tmp_deep_dir_path)
       File.open(tmp_path, "w") {|f| f.print(src)}
 
-      new_rev = ctx.import(@tmp_path, @repos_uri, true, false,
+      new_rev = ctx.import(@import_path, @repos_uri, true, false,
                            {"custom-prop" => "some-value"}).revision
       assert_equal(["some-value", new_rev],
                    ctx.revprop_get("custom-prop", @repos_uri, new_rev))
@@ -2204,7 +2204,7 @@ class SvnClientTest < Test::Unit::TestCa
     make_context(log) do |ctx|
       items = nil
       ctx.set_log_msg_func do |l_items|
-        # ruby 1.8 will carry the assignment of items out of the 
+        # ruby 1.8 will carry the assignment of items out of the
         # scope of this block, 1.9 will not, so we must assign.
         items = l_items
         [true, log]

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_delta.rb
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_delta.rb?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_delta.rb (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_delta.rb Wed Jun  5 09:22:43 2013
@@ -174,8 +174,8 @@ class SvnDeltaTest < Test::Unit::TestCas
     source = StringIO.new(source_text)
     target = StringIO.new(target_text)
     stream = Svn::Delta::TextDeltaStream.new(source, target)
-    
-    if RUBY_VERSION > '1.9' 
+
+    if RUBY_VERSION > '1.9'
       output = StringIO.new("".encode('ASCII-8BIT'))
     else
       output = StringIO.new("")
@@ -185,7 +185,7 @@ class SvnDeltaTest < Test::Unit::TestCas
     Svn::Delta.send(target_text, handler)
     output.rewind
     result = output.read
-    if RUBY_VERSION > '1.9' 
+    if RUBY_VERSION > '1.9'
       regex = get_regex("\\ASVN.*#{target_text}\\Z".encode('utf-8'),result.encoding,16)
       assert_match(regex, result)
     else

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_wc.rb
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_wc.rb?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_wc.rb (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_wc.rb Wed Jun  5 09:22:43 2013
@@ -327,7 +327,7 @@ class SvnWcTest < Test::Unit::TestCase
         callbacks.ignored_errors = ignored_errors
         access.walk_entries(@wc_path, callbacks)
         sorted_ignored_errors = ignored_errors.sort_by {|path, err| path}
-        sorted_ignored_errors = sorted_ignored_errors.collect! do |path, err| 
+        sorted_ignored_errors = sorted_ignored_errors.collect! do |path, err|
           [path, err.class]
         end
         assert_equal([

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/util.rb
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/util.rb?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/util.rb (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/util.rb Wed Jun  5 09:22:43 2013
@@ -1,4 +1,4 @@
-# ====================================================================
+# ==================================================================== 
 #    Licensed to the Apache Software Foundation (ASF) under one
 #    or more contributor license agreements.  See the NOTICE file
 #    distributed with this work for additional information
@@ -19,7 +19,7 @@
 
 require "fileutils"
 require "pathname"
-require "svn/util"
+require "./svn/util"
 require "tmpdir"
 
 require "my-assertions"
@@ -43,19 +43,20 @@ module SvnTestUtil
 
     @tmp_path = Dir.mktmpdir
     @wc_path = File.join(@tmp_path, "wc")
-    @full_wc_path = File.expand_path(@wc_path)
+    @import_path = File.join(@tmp_path, "import")
     @repos_path = File.join(@tmp_path, "repos")
     @full_repos_path = File.expand_path(@repos_path)
     @repos_uri = "file://#{@full_repos_path.sub(/^\/?/, '/')}"
 
     @config_path = "config"
-    @greek = Greek.new(@tmp_path, @wc_path, @repos_uri)
+    @greek = Greek.new(@tmp_path, @import_path, @wc_path, @repos_uri)
   end
 
   def setup_basic(need_svnserve=false)
     @need_svnserve = need_svnserve
     setup_default_variables
     setup_tmp
+    setup_tmp(@import_path) 
     setup_repository
     add_hooks
     setup_svnserve if @need_svnserve

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/windows_util.rb
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/windows_util.rb?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/windows_util.rb (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/windows_util.rb Wed Jun  5 09:22:43 2013
@@ -93,27 +93,62 @@ module SvnTestUtil
           %r'^\s*#define\s+APR_MAJOR_VERSION\s+(\d+)' =~ apr_version_include.read
           apr_major_version = $1 == '0' ? '' : "-#{$1}"
 
+          cwd = Dir.getwd
           targets = %W(svnserve.exe libsvn_subr-1.dll libsvn_repos-1.dll
                        libsvn_fs-1.dll libsvn_delta-1.dll
                        libaprutil#{apr_major_version}.dll
                        libapr#{apr_major_version}.dll
                        libapriconv#{apr_major_version}.dll
-                       libdb44.dll libdb44d.dll)
+                       libdb??.dll libdb??d.dll)
           ENV["PATH"].split(";").each do |path|
+
+            # Change the cwd to path, but ignore non-existent paths.
+            begin
+              Dir.chdir(path)
+            rescue Errno::ENOENT
+              next
+            end
+
             found_targets = []
             targets.each do |target|
-              target_path = "#{path}\\#{target}"
-              if File.exists?(target_path)
-                found_targets << target
-                FileUtils.cp(target_path, svnserve_dir)
+              matching_paths = Dir.glob(target)
+              matching_paths.each do |target_path|
+                target_path = File.join(path.tr('\\', '/'), target_path)
+                if File.exists?(target_path)
+                  found_targets << target
+                  retried = 0
+                  begin
+                    FileUtils.cp(target_path, svnserve_dir)
+                  rescue Errno::EACCES
+                    # On Windows the tests frequently fail spuriously with a
+                    # 'Errno::EACCES: Permission denied - svnserve.exe' error.
+                    # Sleeping for a few seconds avoids this.
+                    if retried > 5
+                      # Give up!
+                      raise
+                    else
+                      # Wait a sec...
+                      sleep(1)
+                      retried += 1
+                      retry
+                    end
+                  end
+                end
               end
             end
             targets -= found_targets
             break if targets.empty?
           end
+          Dir.chdir(cwd)
           # Remove optional targets instead of raising below.  If they are really
           # needed, svnserve won't start anyway.
           targets -= %W[libapriconv#{apr_major_version}.dll]
+          # Ditto these four, since svnserve.exe might be a static build.
+          targets -= %W[libsvn_subr-1.dll]
+          targets -= %W[libsvn_repos-1.dll]
+          targets -= %W[libsvn_fs-1.dll]
+          targets -= %W[libsvn_delta-1.dll]
+
           unless targets.empty?
             raise "can't find libraries to work svnserve: #{targets.join(' ')}"
           end
@@ -194,7 +229,8 @@ exit 1
         @gen_make_opts ||= begin
           lines = []
           gen_make_opts = File.join(@@top_dir, "gen-make.opts")
-          lines = File.read(gen_make_opts).to_a if File.exists?(gen_make_opts)
+          lines =
+            File.read(gen_make_opts).lines.to_a if File.exists?(gen_make_opts)
           config = Hash.new do |hash, key|
             if /^--with-(.*)$/ =~ key
               hash[key] = File.join(@@top_dir, $1)

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/svn_client.i
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/svn_client.i?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/svn_client.i (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/svn_client.i Wed Jun  5 09:22:43 2013
@@ -49,13 +49,7 @@
 %apply const char *MAY_BE_NULL {
     const char *native_eol,
     const char *comment,
-    const char *relative_to_dir,
-    apr_hash_t *revprop_table,
-    apr_array_header_t *changelists
-};
-
-%apply apr_hash_t *PROPHASH {
-    apr_hash_t *revprop_table
+    const char *relative_to_dir
 };
 
 #ifdef SWIGRUBY
@@ -70,12 +64,10 @@
 }
 #endif
 
-#if defined(SWIGRUBY) || defined(SWIGPYTHON)
 %apply apr_array_header_t *REVISION_RANGE_LIST {
   const apr_array_header_t *ranges_to_merge,
   const apr_array_header_t *revision_ranges
 }
-#endif
 
 #ifdef SWIGRUBY
 %apply const char *NOT_NULL {

Modified: subversion/branches/verify-keep-going/subversion/include/mod_authz_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/mod_authz_svn.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/mod_authz_svn.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/mod_authz_svn.h Wed Jun  5 09:22:43 2013
@@ -36,9 +36,20 @@ extern "C" {
 /*
  * mod_dav_svn to mod_authz_svn bypass mechanism
  */
+/** Provider group for subrequest bypass */
 #define AUTHZ_SVN__SUBREQ_BYPASS_PROV_GRP "dav2authz_subreq_bypass"
+/** Provider name for subrequest bypass */
 #define AUTHZ_SVN__SUBREQ_BYPASS_PROV_NAME "mod_authz_svn_subreq_bypass"
+/** Provider version for subrequest bypass */
 #define AUTHZ_SVN__SUBREQ_BYPASS_PROV_VER "00.00a"
+/** Provider to allow mod_dav_svn to bypass the generation of an apache
+ * request when checking GET access from "mod_dav_svn/auth.c".
+ *
+ * Uses @a r @a repos_path and @a repos_name to determine if the user
+ * making the request is authorized.
+ *
+ * If the access is allowed returns @c OK or @c HTTP_FORBIDDEN if it is not.
+ */
 typedef int (*authz_svn__subreq_bypass_func_t)(request_rec *r,
                                               const char *repos_path,
                                               const char *repos_name);

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_cache.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_cache.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_cache.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_cache.h Wed Jun  5 09:22:43 2013
@@ -275,7 +275,7 @@ svn_cache__make_memcache_from_config(svn
  * down to next lower power of two. Also, there is an implementation
  * specific upper limit and the setting will be capped there automatically.
  * If the number is 0, a default will be derived from @a total_size.
- * 
+ *
  * If access to the resulting cache object is guaranteed to be serialized,
  * @a thread_safe may be set to @c FALSE for maximum performance.
  *

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_client_private.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_client_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_client_private.h Wed Jun  5 09:22:43 2013
@@ -147,6 +147,37 @@ svn_client__ra_session_from_path2(svn_ra
                                  svn_client_ctx_t *ctx,
                                  apr_pool_t *pool);
 
+/* Given PATH_OR_URL, which contains either a working copy path or an
+   absolute URL, a peg revision PEG_REVISION, and a desired revision
+   REVISION, find the path at which that object exists in REVISION,
+   following copy history if necessary.  If REVISION is younger than
+   PEG_REVISION, then check that PATH_OR_URL is the same node in both
+   PEG_REVISION and REVISION, and return @c
+   SVN_ERR_CLIENT_UNRELATED_RESOURCES if it is not the same node.
+
+   If PEG_REVISION->kind is 'unspecified', the peg revision is 'head'
+   for a URL or 'working' for a WC path.  If REVISION->kind is
+   'unspecified', the operative revision is the peg revision.
+
+   Store the actual location of the object in *RESOLVED_LOC_P.
+
+   RA_SESSION should be an open RA session pointing at the URL of
+   PATH_OR_URL, or NULL, in which case this function will open its own
+   temporary session.
+
+   Use authentication baton cached in CTX to authenticate against the
+   repository.
+
+   Use POOL for all allocations. */
+svn_error_t *
+svn_client__resolve_rev_and_url(svn_client__pathrev_t **resolved_loc_p,
+                                svn_ra_session_t *ra_session,
+                                const char *path_or_url,
+                                const svn_opt_revision_t *peg_revision,
+                                const svn_opt_revision_t *revision,
+                                svn_client_ctx_t *ctx,
+                                apr_pool_t *pool);
+
 /** Return @c SVN_ERR_ILLEGAL_TARGET if TARGETS contains a mixture of
  * URLs and paths; otherwise return SVN_NO_ERROR.
  *
@@ -260,6 +291,39 @@ svn_client__copy_foreign(const char *url
                          svn_client_ctx_t *ctx,
                          apr_pool_t *scratch_pool);
 
+/* Same as the public svn_client_mergeinfo_log2 API, except for the addition
+ * of the TARGET_MERGEINFO_CATALOG and RESULT_POOL parameters.
+ *
+ * If TARGET_MERGEINFO_CATALOG is NULL then this acts exactly as the public
+ * API.  If *TARGET_MERGEINFO_CATALOG is NULL, then *TARGET_MERGEINFO_CATALOG
+ * is set to the a mergeinfo catalog representing the mergeinfo on
+ * TARGET_PATH_OR_URL@TARGET_PEG_REVISION at DEPTH, (like the public API only
+ * depths of svn_depth_empty or svn_depth_infinity are supported) allocated in
+ * RESULT_POOL.  Finally, if *TARGET_MERGEINFO_CATALOG is non-NULL, then it is
+ * assumed to be a mergeinfo catalog representing the mergeinfo on
+ * TARGET_PATH_OR_URL@TARGET_PEG_REVISION at DEPTH.
+ *
+ * The keys for the subtree mergeinfo are the repository root-relative
+ * paths of TARGET_PATH_OR_URL and/or its subtrees, regardless of whether
+ * TARGET_PATH_OR_URL is a URL or WC path.
+ */
+svn_error_t *
+svn_client__mergeinfo_log(svn_boolean_t finding_merged,
+                          const char *target_path_or_url,
+                          const svn_opt_revision_t *target_peg_revision,
+                          svn_mergeinfo_catalog_t *target_mergeinfo_catalog,
+                          const char *source_path_or_url,
+                          const svn_opt_revision_t *source_peg_revision,
+                          const svn_opt_revision_t *source_start_revision,
+                          const svn_opt_revision_t *source_end_revision,
+                          svn_log_entry_receiver_t log_receiver,
+                          void *log_receiver_baton,
+                          svn_boolean_t discover_changed_paths,
+                          svn_depth_t depth,
+                          const apr_array_header_t *revprops,
+                          svn_client_ctx_t *ctx,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_diff_tree.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_diff_tree.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_diff_tree.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_diff_tree.h Wed Jun  5 09:22:43 2013
@@ -34,7 +34,7 @@
 extern "C" {
 #endif /* __cplusplus */
 
-/* 
+/*
  *                   About the diff tree processor.
  *
  * Subversion uses two kinds of editors to describe changes. One to
@@ -68,7 +68,7 @@ extern "C" {
  *   * It should provide the information that was missing in the old interface,
  *     but required to close existing issues.
  *
- *     E.g. - properties and children on deleted directories. 
+ *     E.g. - properties and children on deleted directories.
  *          - revision numbers and copyfrom information on directories.
  *
  * To cleanup the implementation and make it easier on diff processors to

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_fs_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_fs_private.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_fs_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_fs_private.h Wed Jun  5 09:22:43 2013
@@ -87,7 +87,7 @@ svn_fs__path_valid(const char *path, apr
  * from the constants SVN_FS_TXN_* (#SVN_FS_TXN_CHECK_OOD etc.). It is a
  * property of the underlying transaction, and will not change if multiple
  * editors are used to refer to that transaction (see @a autocommit, below).
- * 
+ *
  * @note If you're building a txn for committing, you probably don't want
  * to call this directly.  Instead, call svn_repos__get_commit_ev2(), which
  * honors the repository's hook configurations.

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_mutex.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_mutex.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_mutex.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_mutex.h Wed Jun  5 09:22:43 2013
@@ -21,7 +21,7 @@
  * @endcopyright
  *
  * @file svn_mutex.h
- * @brief Strutures and functions for mutual exclusion
+ * @brief Structures and functions for mutual exclusion
  */
 
 #ifndef SVN_MUTEX_H
@@ -72,7 +72,7 @@ svn_mutex__init(svn_mutex__t **mutex,
  * thread to release the mutex again. Recursive locking are not supported.
  *
  * @note You should use #SVN_MUTEX__WITH_LOCK instead of explicit lock
- * aquisition and release.
+ * acquisition and release.
  */
 svn_error_t *
 svn_mutex__lock(svn_mutex__t *mutex);
@@ -88,19 +88,19 @@ svn_mutex__lock(svn_mutex__t *mutex);
  * reported in the return value.
  *
  * @note You should use #SVN_MUTEX__WITH_LOCK instead of explicit lock
- * aquisition and release.
+ * acquisition and release.
  */
 svn_error_t *
 svn_mutex__unlock(svn_mutex__t *mutex,
                   svn_error_t *err);
 
-/** Aquires the @a mutex, executes the expression @a expr and finally
+/** Acquires the @a mutex, executes the expression @a expr and finally
  * releases the @a mutex. If any of these steps fail, the function using
  * this macro will return an #svn_error_t. This macro guarantees that
  * the @a mutex will always be unlocked again if it got locked successfully
  * by the first step.
  *
- * @note Prefer using this macro instead of explicit lock aquisition and
+ * @note Prefer using this macro instead of explicit lock acquisition and
  * release.
  */
 #define SVN_MUTEX__WITH_LOCK(mutex, expr)               \



Mime
View raw message