You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rs...@apache.org on 2015/01/01 16:27:22 UTC

svn commit: r1648853 - in /subversion/trunk/subversion/bindings/swig/perl/native: Client.pm Repos.pm t/1repos.t t/3client.t

Author: rschupp
Date: Thu Jan  1 15:27:22 2015
New Revision: 1648853

URL: http://svn.apache.org/r1648853
Log:
Perl bindings: document cancel callbacks and add some tests.

[in subversion/bindings/swig/perl/native]

* Client.pm: Move POD paragraphs about cancel calbacks into their own
  chapter so that we can refer to them from other PODs.
  Also fix the cancel arguments in an example.

* Repos.pm: Document cancel callbacks for dump_fs() and dump_fs2().

* t/1repos.t, t/3client.t: Add some tests for cancel callbacks.

Modified:
    subversion/trunk/subversion/bindings/swig/perl/native/Client.pm
    subversion/trunk/subversion/bindings/swig/perl/native/Repos.pm
    subversion/trunk/subversion/bindings/swig/perl/native/t/1repos.t
    subversion/trunk/subversion/bindings/swig/perl/native/t/3client.t

Modified: subversion/trunk/subversion/bindings/swig/perl/native/Client.pm
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/perl/native/Client.pm?rev=1648853&r1=1648852&r2=1648853&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/perl/native/Client.pm (original)
+++ subversion/trunk/subversion/bindings/swig/perl/native/Client.pm Thu Jan  1 15:27:22 2015
@@ -55,8 +55,7 @@ SVN::Client - Subversion client function
                                            0,           #no_auth_cache
                                            0,           #trust_server_cert
                                            $config_category,
-                                           undef,       #cancel_func
-                                           undef)       #cancel_baton
+                                           undef)       #cancel_callback
     );
 
     # Use first argument as target and canonicalize it before using
@@ -1286,24 +1285,8 @@ sub log_msg {
 =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.
-
-The subroutine pointed to by this value will be called to see if the operation
-should be canceled.  If the operation should be canceled, the function may
-return one of the following values:
-
-An svn_error_t object made with SVN::Error::create.
-
-Any true value, in which case the bindings will generate an svn_error_t object
-for you with the error code of SVN_ERR_CANCELLED and the string set to "By
-cancel callback".
-
-A string, in which case the bindings will generate an svn_error_t object for you
-with the error code of SVN_ERR_CANCELLED and the string set to the string you
-returned.
-
-Any other value will be interpreted as wanting to continue the operation.
-Generally, it's best to return 0 to continue the operation.
+pass. See L<"CANCELLATION CALLBACK"> below for details.
+It always returns the current codereference set.
 
 =cut
 
@@ -1489,6 +1472,25 @@ may_save.
 
 =back
 
+=head1 CANCELLATION CALLBACK
+
+This callback will be called periodically to see if the operation
+should be canceled.  If the operation should be canceled, the function may
+return one of the following values:
+
+An svn_error_t object made with SVN::Error::create.
+
+Any true value, in which case the bindings will generate an svn_error_t object
+for you with the error code of SVN_ERR_CANCELLED and the string set to "By
+cancel callback".
+
+A string, in which case the bindings will generate an svn_error_t object for you
+with the error code of SVN_ERR_CANCELLED and the string set to the string you
+returned.
+
+Any other value will be interpreted as wanting to continue the operation.
+Generally, it's best to return 0 to continue the operation.
+
 =head1 OBJECTS
 
 These are some of the object types that are returned from the methods

Modified: subversion/trunk/subversion/bindings/swig/perl/native/Repos.pm
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/perl/native/Repos.pm?rev=1648853&r1=1648852&r2=1648853&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/perl/native/Repos.pm (original)
+++ subversion/trunk/subversion/bindings/swig/perl/native/Repos.pm Thu Jan  1 15:27:22 2015
@@ -42,9 +42,9 @@ object.
 
 =over
 
-=item $repos-E<gt>dump_fs($dump_fh, $feedback_fh, $start_rev, $end_rev, $incremental, $cancel_func, $cancel_baton)
+=item $repos-E<gt>dump_fs($dump_fh, $feedback_fh, $start_rev, $end_rev, $incremental, $cancel_callback)
 
-=item $repos-E<gt>dump_fs2($dump_fh, $feedback_fh, $start_rev, $end_rev, $incremental, $deltify, $cancel_func, $cancel_baton)
+=item $repos-E<gt>dump_fs2($dump_fh, $feedback_fh, $start_rev, $end_rev, $incremental, $deltify, $cancel_callback)
 
 Create a dump file of the repository from revision C<$start_rev> to C<$end_rev>
 , store it into the filehandle C<$dump_fh>, and write feedback on the progress
@@ -61,10 +61,9 @@ this flag is set, the first revision of
 be done with full plain text.  A dump with @a use_deltas set cannot
 be loaded by Subversion 1.0.x.
 
-According to svn_repos.h, the C<$cancel_func> is a function that is called
-periodically and given C<$cancel_baton> as a parameter to determine whether
-the client wishes to cancel the dump.  You must supply C<undef> at the very
-least.
+If C<$cancel_callback> is not C<undef>, it must be a code reference
+that is called periodically to determine whether the client wishes 
+to cancel the dump.  See L<SVN::Client/"CANCELLATION CALLBACK"> for details.
 
 Example:
 
@@ -83,13 +82,13 @@ Example:
     $repos->dump_fs2($fh, \*STDOUT,          # Dump file => $fh, Feedback => STDOUT
                      $start_rev, $end_rev,   # Revision Range
                      $incremental, $deltify, # Options
-                     undef, undef);          # Cancel Function
+                     undef);                 # Cancel Callback
 
     close $fh;
 
-=item $repos-E<gt>load_fs($dumpfile_fh, $feedback_fh, $uuid_action, $parent_dir, $cancel_func, $cancel_baton);
+=item $repos-E<gt>load_fs($dumpfile_fh, $feedback_fh, $uuid_action, $parent_dir, $cancel_callback);
 
-=item $repos-E<gt>load_fs2($dumpfile_fh, $feedback_fh, $uuid_action, $parent_dir, $use_pre_commit_hook, $use_post_commit_hook, $cancel_func, $cancel_baton);
+=item $repos-E<gt>load_fs2($dumpfile_fh, $feedback_fh, $uuid_action, $parent_dir, $use_pre_commit_hook, $use_post_commit_hook, $cancel_callback);
 
 Loads a dumpfile specified by the C<$dumpfile_fh> filehandle into the repository.
 If the dumpstream contains copy history that is unavailable in the repository,
@@ -113,11 +112,11 @@ hook before committing each loaded revis
 If C<$use_post_commit_hook> is set, call the repository's
 post-commit hook after committing each loaded revision.
 
-If C<$cancel_func> is not NULL, it is called periodically with
-C<$cancel_baton> as argument to see if the client wishes to cancel
-the load.
+If C<$cancel_callback> is not C<undef>, it must be a code reference 
+that is called periodically to determine whether the client wishes
+to cancel the load.  See L<SVN::Client/"CANCELLATION CALLBACK"> for details.
 
-You must at least provide undef for these parameters for the method call
+You must at least provide C<undef> for these parameters for the method call
 to work.
 
 Example:

Modified: subversion/trunk/subversion/bindings/swig/perl/native/t/1repos.t
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/perl/native/t/1repos.t?rev=1648853&r1=1648852&r2=1648853&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/perl/native/t/1repos.t (original)
+++ subversion/trunk/subversion/bindings/swig/perl/native/t/1repos.t Thu Jan  1 15:27:22 2015
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
 #
 #
 # Licensed to the Apache Software Foundation (ASF) under one
@@ -20,16 +20,18 @@
 #
 #
 
-use Test::More tests => 6;
+use strict;
+use warnings;
+
+use Test::More tests => 8;
 use File::Temp qw(tempdir);
 use File::Path qw(rmtree);
-use strict;
+use File::Spec;
 
-require SVN::Core;
-require SVN::Repos;
-require SVN::Fs;
-require SVN::Delta;
-use File::Path;
+use SVN::Core;
+use SVN::Repos;
+use SVN::Fs;
+use SVN::Delta;
 
 my $repospath = tempdir('svn-perl-test-XXXXXX', TMPDIR => 1, CLEANUP => 1);
 
@@ -107,6 +109,26 @@ ok($main::something_destroyed, 'callback
 # TEST
 cmp_ok($fs->youngest_rev, '==', 3);
 
+open my $dump_fh, ">", File::Spec->devnull or die "open file sink: $!";
+
+my $feedback;
+open my $feedback_fh, ">", \$feedback or die "open string: $!";
+
+my $cancel_cb_called = 0;
+$repos->dump_fs2($dump_fh, $feedback_fh,
+                 0, $SVN::Core::INVALID_REVNUM,     # start_rev, end_rev
+                 0, 0,                              # incremental, deltify
+                 sub { $cancel_cb_called++; 0 });
+# TEST
+ok($cancel_cb_called, 'cancel callback was called');
+# TEST
+is($feedback, <<'...', 'dump feedback');
+* Dumped revision 0.
+* Dumped revision 1.
+* Dumped revision 2.
+* Dumped revision 3.
+...
+
 END {
 diag "cleanup";
 rmtree($repospath);

Modified: subversion/trunk/subversion/bindings/swig/perl/native/t/3client.t
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/perl/native/t/3client.t?rev=1648853&r1=1648852&r2=1648853&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/perl/native/t/3client.t (original)
+++ subversion/trunk/subversion/bindings/swig/perl/native/t/3client.t Thu Jan  1 15:27:22 2015
@@ -20,7 +20,7 @@
 #
 #
 
-use Test::More tests => 297;
+use Test::More tests => 301;
 use strict;
 
 # shut up about variables that are only used once.
@@ -1119,6 +1119,35 @@ isa_ok($ph2,'HASH','propget returns HASH
 is(scalar(keys %$ph2),0,
    'No properties after deleting a property');
 
+# test cancel callback
+my $cancel_cb_called = 0;
+$ctx->cancel(sub { $cancel_cb_called++; 0 });
+my $log_entries_received = 0;
+$ctx->log5($reposurl,
+              'HEAD',['HEAD',1],0, # peg rev, rev ranges, limit
+              1,1,0, # discover_changed_paths, strict_node_history, include_merged_revisions
+              undef, # revprops
+              sub { $log_entries_received++ });
+# TEST
+ok($cancel_cb_called, 'cancel callback was called');
+# TEST
+is($log_entries_received, $current_rev, 'log entries received');
+
+my $cancel_msg = "stop the presses";
+$ctx->cancel(sub { $cancel_msg });
+$svn_error = $ctx->log5($reposurl,
+              'HEAD',['HEAD',1],0, # peg rev, rev ranges, limit
+              1,1,0, # discover_changed_paths, strict_node_history, include_merged_revisions
+              undef, # revprops
+              sub { });
+# TEST
+isa_ok($svn_error, '_p_svn_error_t');
+# TEST
+is($svn_error->message, $cancel_msg, 'operation was cancelled');
+$svn_error->clear(); # don't leak this
+$ctx->cancel(undef); # reset callback
+
+
 SKIP: {
     # This is ugly.  It is included here as an aide to understand how
     # to test this and because it makes my life easier as I only have



Re: svn commit: r1648853 - in /subversion/trunk/subversion/bindings/swig/perl/native: Client.pm Repos.pm t/1repos.t t/3client.t

Posted by Roderich Schupp <ro...@gmail.com>.
On Thu, Jan 1, 2015 at 7:00 PM, Bert Huijben <be...@qqmail.nl> wrote:

> It looks like this test needs a bit of fixup before it supports running
> the tests in debug mode.
>
> In most cases it is easier to test for the error code than for the text.
> (The error text of our API calls is localized)
>

Fixed in r1648959.

Cheers, Roderich

RE: svn commit: r1648853 - in /subversion/trunk/subversion/bindings/swig/perl/native: Client.pm Repos.pm t/1repos.t t/3client.t

Posted by Bert Huijben <be...@qqmail.nl>.

> -----Original Message-----
> From: rschupp@apache.org [mailto:rschupp@apache.org]
> Sent: donderdag 1 januari 2015 16:27
> To: commits@subversion.apache.org
> Subject: svn commit: r1648853 - in
> /subversion/trunk/subversion/bindings/swig/perl/native: Client.pm Repos.pm
> t/1repos.t t/3client.t
> 
> Author: rschupp
> Date: Thu Jan  1 15:27:22 2015
> New Revision: 1648853
> 
> URL: http://svn.apache.org/r1648853
> Log:
> Perl bindings: document cancel callbacks and add some tests.
> 
> [in subversion/bindings/swig/perl/native]
> 
> * Client.pm: Move POD paragraphs about cancel calbacks into their own
>   chapter so that we can refer to them from other PODs.
>   Also fix the cancel arguments in an example.
> 
> * Repos.pm: Document cancel callbacks for dump_fs() and dump_fs2().
> 
> * t/1repos.t, t/3client.t: Add some tests for cancel callbacks.

This test fails on many buildbots with:

#   Failed test 'operation was cancelled'
#   at t\3client.t line 1146.
#          got: 'traced call'
#     expected: 'stop the presses'
# cleanup
# Looks like you failed 1 test of 301.

(From: http://ci.apache.org/builders/svn-windows-ra/builds/833/steps/Test%20Bindings/logs/stdio , see http://subversion.apache.org/buildbot/prod )

It looks like this test needs a bit of fixup before it supports running the tests in debug mode.

In most cases it is easier to test for the error code than for the text. (The error text of our API calls is localized)

	Bert