Perl SVN::客户端提交(带有注释/消息选项)

Perl SVN::客户端提交(带有注释/消息选项),perl,svn,Perl,Svn,我正在尝试使用perlsvn::Client模块自动化一些svn任务 不幸的是,我找不到使用提交消息提交文件的选项。 目前我正在使用以下方法 $client->commit($targets, $nonrecursive, $pool); 有人知道如何使用svn::Client在svn commit中添加注释/消息吗? perl是否有其他选项可以实现这一点 提前感谢。说您需要使用log\u msg回调 $client->commit($targets,$nonrecursive,$poo

我正在尝试使用perlsvn::Client模块自动化一些svn任务

不幸的是,我找不到使用提交消息提交文件的选项。 目前我正在使用以下方法

$client->commit($targets, $nonrecursive, $pool);
有人知道如何使用svn::Client在svn commit中添加注释/消息吗? perl是否有其他选项可以实现这一点

提前感谢。

说您需要使用
log\u msg
回调

$client->commit($targets,$nonrecursive,$pool)

提交目标引用的文件或目录。将使用log_msg回调获取提交的日志消息

以下是医生对
log\u msg
的看法

$client->log\u msg(\&log\u msg)

设置客户端的日志消息回调 传递的代码引用的上下文。它总是返回 当前代码引用集

将调用此coderef指向的子例程以获取 任何将向repo提交修订的操作的日志消息

它接收4个参数。第一个参数是对 回调应在其中放置日志的标量值。如果你 要取消提交,可以将此标量设置为未定义。第二 值是指向可能保存该日志的任何临时文件的路径 消息,如果不存在这样的文件,则为undef(不过,如果log_msg为undef, 此值未定义)。日志消息必须是UTF8字符串,带有 低频线分离器。第三个参数是对数组的引用 svn\u客户端\u提交\u项3\t对象,可以是完全或仅 部分填写,具体取决于提交操作的类型。这个 第四个也是最后一个参数将是一个池

如果函数希望返回一个错误,它应该返回一个 svn\u error\t使用svn::error::create生成的对象。还有其他报税表吗 值将被解释为SVN\u无错误

根据这一点,可能最简单的方法就是在每次需要提交时调用它,然后安装一条新消息

$client->log_msg( sub { 
    my ( $msg_ref, $path, $array_of_commit_obj, $pool ) = @_;

    # set the message, beware the scalar reference
    $$msg_ref = "Initial commit\n\nFollowed by a wall of text...";

    return; # undef should be treated like SVN_NO_ERROR
});

$client->commit($targets, $nonrecursive, $pool);

# possibly call log_msg again to reset it. 
如果您希望这更简单,您可以安装同一个处理程序一次,但对消息使用一个(可能是全局或包)变量

our $commit_message;
$client->log_msg( sub { 
    my ( $msg_ref, $path, $array_of_commit_obj, $pool ) = @_;

    # set the message, beware the scalar reference
    $$msg_ref = $commit_message;

    return; # undef should be treated like SVN_NO_ERROR
});

# ...

for my $targets ( @list_of_targets ) {
    $commit_message = get_msg($targets); # or whatever
    $client->commit($targets, $nonrecursive, $pool);
}
这样,您可以重用回调,但每次都会更改消息


请注意,我没有尝试过这个。我所做的只是阅读文档并进行一些疯狂的猜测