0

在我的工作场所,每次有人尝试为 10-20 个项目中的任何一个将文件签入到 SVN 存储库时,都会在 Unix 机器上运行一个 Perl 脚本。

它的工作方式是每个项目都有自己的“Hooks”文件夹,其中包含一个名为“pre-commit”的文件,当有人签入某些东西时,SVN 会自动执行该文件。除了“预提交”文件实际上是所有项目通用的一个中央 Perl 脚本的符号链接,因此如果需要对 Perl 脚本进行更改,则不需要对每个项目都进行更改。

所以我的问题是这样的:我需要在每个项目的“钩子”目录中放置一个文本文件,每个文件都包含一些特定于该项目的设置。因此,在它们各自的“钩子”目录中将有 10-20 个设置文件(每个项目一个)。

问题是我需要在 Perl 脚本中打开这些文本文件并从中读取,但我在让 Perl 知道在哪里找到它时遇到了问题。我尝试使用 $0 参数,它应该告诉我从哪里执行脚本,但因为它是一个符号链接,它只是说“不是目录”并且脚本终止。我需要获取“钩子”目录的路径,以便找到文本文件。

4

1 回答 1

0

SVN 预提交脚本应该以存储库的路径作为其第一个参数来调用。在 Perl 脚本中,该参数应该以$ARGV[0]. 您应该能够通过简单地附加到存储库路径来构建到相应的钩子目录或该目录内的文件的路径,如下所示:

$repopath = $ARGV[0];
$hookspath = $repopath . "/hooks";
$myfilepath = $hookspath . "/myfile";

尽管为了获得最大的可移植性,使用 File::Spec 模块中的路径名操作函数来执行此操作会更简洁。

如果这种方法不起作用,那么您将不得不详细说明如何调用您的 Perl 脚本。例如,如果您的预提交脚本实际上是一个最终调用的 shell 脚本包装器,perl那么它可能没有正确传递预提交参数。

向我们展示您当前失败的代码也是一件好事。

于 2012-06-09T02:51:12.077 回答