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