【问题标题】:svnlook changed -t "$rev" "$repos" not getting executedsvnlook 改变 -t "$rev" "$repos" 没有被执行
【发布时间】:2015-05-29 09:38:45
【问题描述】:

如标题所示,我是从我用 perl 编写的具有命令的提交后挂钩脚本调用的

$msg = `$svnlook changed -t "$rev" "$repos"`;

应该执行,然后我应该将$msg 发送给我的服务。但是当我跑步时

if ( length($msg) == 0 )
{
    print STDERR "msg length is 0";
    exit(1);
}

我在控制台上收到此错误消息,那么为什么没有执行此 svnlook 命令?

我正在使用 Windows 7 和 VisualSVN 服务器。

另一方面,我有其他理论可以在钩子本身中运行此命令,例如

@echo off
set repos=%1
set rev=%2
set changes=svnlook changed %repos% -r %rev% 
C:\Perl64\bin\perl C:\repositories\myproject\hooks\myhook.pl %1 %2 changes

但我不知道如何传递这个changes 参数,所以如果这可以工作,它也可以回答。

如何将参数从批处理传递到 perl 脚本?

【问题讨论】:

  • 我很困惑,如果您已经在 Perl 脚本中执行 svnlook 命令,为什么还需要传递 changes?似乎您需要传递给脚本的只是修订号和存储库路径。
  • 您还应该注意,svnlook 有两种形式,一种接受事务号,另一种接受修订号。出于某种原因,您似乎在这里同时使用两者。
  • 问题帖子中间有一行,第一部分是我试图在 perl 脚本中执行命令的地方,第二部分没有执行我试图批量执行命令然后将结果传递给我的脚本,但都不起作用
  • 我在哪里使用不同的 svnlooks?
  • 那么您的第一个示例可能只是一个错误,您正在使用接受事务号的-t 标志传递修订号。命令应该是`$svnlook changed -r "$rev" "$repos"`;你也从来没有解释过你的意思是什么不起作用?你得到你不期望的输出吗?你没有输出吗?您收到错误消息吗?

标签: perl batch-file svn visualsvn-server post-commit-hook


【解决方案1】:

运行 svnlook 将帮助显示有效选项列表为svnlook changed 及其预期格式:

$ svnlook help changed
changed: usage: svnlook changed REPOS_PATH

Print the paths that were changed.

Valid options:
  -r [--revision] ARG      : specify revision number ARG
  -t [--transaction] ARG   : specify transaction name ARG
  --copy-info              : show details for copies

通常您会使用-t 指定事务号或使用-r 指定修订号。您似乎传递了带有-t 的修订号,这将导致意外结果:没有结果或与您希望示例的修订无关的结果。

我相信您的正确用法是:

my $msg = `$svnlook changed -r "$rev" "$repos"`;

上面的命令会给你一个由换行符分隔的长字符串。您可以通过在列表上下文中使用相同的命令来获得这种更易于管理的数组格式:

my @changes = `$svnlook changed -r "$rev" "$repos"`;

此外,这些行都会有尾随换行符,您可以使用内置的chomp() 消除它们:

my @changes; 
chomp(@changes = `$svnlook changed -r "$rev" "$repos"`);

或者,您可以查看SVN::SVNLook,它是围绕svnlook 命令的Perl 包装器。

【讨论】:

  • 有什么快速的方法可以把这个输出从数组转成json,我对perl不是很熟悉?
  • 您希望 json 的密钥是什么?被更改的文件的名称?如果是这样,您可以使用{ filename => \@changes } 创建一个哈希引用并将其传递给JSON 模块的to_json 函数。
猜你喜欢
  • 2011-06-27
  • 2013-12-16
  • 2021-12-31
  • 2015-03-11
  • 2014-06-19
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多