I'm trying to commit a file modification in a Subversion repository from
within a Perl CGI script, and the Perl SVN:Ra API looks like the right tool
for doing that, but I have early on run into a problem:

Using subversion-perl-1.5.7 (from openSUSE Linux 11.1), the test program

#!/usr/bin/perl
use SVN::Core;
use SVN::Ra;
use SVN::Delta;
my $ra = SVN::Ra->new('http://core.svn.wordpress.org/');
my $logmsg = "test commit via the SVN:Ra Perl API";
sub commit_callback {
    my ($arg) = @_;
    use Data::Dumper;
    print STDERR "commit_callback(".Dumper($arg).")\n";
}
my $editor = SVN::Delta::Editor->new(
    $ra->get_commit_editor2($logmsg, \&commit_callback, undef, {}, 0));

results in the error message

  TypeError in method 'svn_ra_get_commit_editor2', argument 5 of type 
'svn_commit_callback2_t'

being printed.

Any idea what I am doing wrong?

I had thought, the last lines follow closely the example given in "man SVN::Ra":

       $ra->get_commit_editor($logmsg, $callback, $callback_baton, 
$lock_tokens, $keep_locks)
       $ra->get_commit_editor2($logmsg, $callback, $callback_baton, 
$lock_tokens, $keep_locks)
           Return an opaque editor object for committing a new revision to the 
repository.  The
           return values should be passed to the SVN::Delta::Editor constructor 
to create an
           editor object you can actually use.  For example:

               my $editor = SVN::Delta::Editor->new(
                   $ra->get_commit_editor(
                       "I'm going to commit some changes from within my Perl 
code.",
                       \&commit_callback, undef, {}, 0));

           Now that you've got your editor you can call methods on it to 
describe changes in the
           tree you want to make, such as adding directories, changing file 
contents, etc.  See
           SVN::Delta for documentation of the editor interface.

           The $callback function will be called during your call to the 
"$ed->close_edit()"
           method, after the commit has succeeded.  It will not be called if 
there were no
           changes to commit.  If you don't need it, pass undef instead of a 
code ref.

           "get_commit_editor2" is identical to "get_commit_editor" except for 
the information
           passed to the callback function.  The new version, added in 
Subversion 1.4, will pass
           the callback a single value (TODO: I can' test this, but it's 
probably an object or
           hash ref) which contains all the information.  It also includes the 
error message
           from the post-commit hook script, which is not available with 
"get_commit_editor".

(The last TODO sentences above worry me somewhat: is this API actually ready 
for production use?)

Markus

-- 
Markus Kuhn, Computer Laboratory, University of Cambridge
http://www.cl.cam.ac.uk/~mgk25/ || CB3 0FD, Great Britain

Reply via email to