linux - Perl 中的 SVN 预提交符号链接(symbolic link)路径

标签 linux svn unix symlink

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

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

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

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

最佳答案

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

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

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

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

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

关于linux - Perl 中的 SVN 预提交符号链接(symbolic link)路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952732/

相关文章:

svn - 从 SVN 存储库下载文件

svn - 转换为标准 svn 目录布局 tags/branches/trunk

python - Paramiko 未正确返回 grep

linux - 无法在 docker 文件中使用 Chown 更改文件夹所有权

linux - C# 资源暂时不可用,在 linux 上的 dotnet core 上阻塞套接字

c - task_struct 的struct 中的pwd 和root 有什么区别?

linux - PHP-FPM 进程突然卡住

svn - 将 svn 存储库 db 格式从 1.6 降级到 1.5

linux - $PATH 相对于别名的优势

c - 出现段错误的进程返回什么错误代码?