Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Perl中的SVN预提交符号链接路径_Linux_Svn_Unix_Symlink - Fatal编程技术网

Linux Perl中的SVN预提交符号链接路径

Linux Perl中的SVN预提交符号链接路径,linux,svn,unix,symlink,Linux,Svn,Unix,Symlink,在我的工作环境中,每当有人试图为10-20个项目中的任何一个向SVN repo签入文件时,都会在Unix机器上运行一个Perl脚本 它的工作方式是,每个项目都有自己的Hooks文件夹,其中包含一个名为pre-commit的文件,当有人签入某个文件时,SVN会自动执行该文件。除了预提交文件之外,它实际上是指向所有项目通用的一个中心Perl脚本的符号链接,这样,如果需要对Perl脚本进行更改,就不需要对每个项目进行更改 所以我的问题是:我需要在每个项目的hook目录中放置一个文本文件,每个文件都包含

在我的工作环境中,每当有人试图为10-20个项目中的任何一个向SVN repo签入文件时,都会在Unix机器上运行一个Perl脚本

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

所以我的问题是:我需要在每个项目的hook目录中放置一个文本文件,每个文件都包含特定于该项目的一些设置。因此,每个项目将有10-20个设置文件,每个文件位于各自的hooks目录中


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

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

$repopath = $ARGV[0];
$hookspath = $repopath . "/hooks";
$myfilepath = $hookspath . "/myfile";
尽管为了实现最大的可移植性,使用File::Spec模块中的路径名操纵函数来实现这一点会更简洁

如果这种方法不起作用,那么您必须进一步解释如何调用Perl脚本。例如,如果预提交脚本实际上是一个最终调用perl的shell脚本包装器,那么它可能没有正确地传递预提交参数

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