在我的工作场所,每当有人试图将文件签入SVN仓库以获取10-20个项目中的任何一个时,就会有一个在Unix机器上运行的Perl脚本。
它的工作方式是每个项目都有自己的“Hooks”文件夹,其中包含一个名为“pre-commit”的文件,SVN会在有人办理登机手续时自动执行该文件。除了“预提交”文件实际上是指向所有项目通用的一个中央Perl脚本的符号链接,这样如果需要对Perl脚本进行更改,则不需要为每个项目完成。< / p>
所以我的问题是:我需要在每个项目的“hooks”目录中放置一个文本文件,每个目录都包含一些特定于该项目的设置。因此,各自的“hooks”目录中将有10-20个设置文件(每个项目一个)。
问题是我需要在Perl脚本中打开这些文本文件并从中读取它们但是我遇到了让Perl知道在哪里找到它的问题。我尝试使用$ 0参数,它应该告诉我脚本的执行位置,但因为它是一个符号链接,它只是说“不是目录”,脚本终止。我需要获取“hooks”目录的路径,以便找到文本文件。
答案 0 :(得分:0)
SVN预提交脚本应该以存储库的路径作为其第一个参数来调用。在Perl脚本中,该参数应该以{{1}}的形式提供。您应该能够通过简单地附加到存储库路径来构建相应的 hooks 目录或该目录中的文件的路径,如下所示:
$ARGV[0]
虽然为了获得最大的可移植性,使用File :: Spec模块中的路径名操作函数来实现这一点会更清晰。
如果此方法不起作用,那么您将不得不解释有关如何调用Perl脚本的更多信息。例如,如果您的预提交脚本实际上是最终调用$repopath = $ARGV[0];
$hookspath = $repopath . "/hooks";
$myfilepath = $hookspath . "/myfile";
的shell脚本包装器,那么它可能没有正确地传递预提交参数。
向我们展示您当前失败的代码也是一件好事。