hg 操作似乎在 FreeBSD VM 上中止:wcache 由 root 拥有

hg 操作似乎在 FreeBSD VM 上中止:wcache 由 root 拥有

我正在使用虚拟机将 FreeBSD 11.2-RELEASE-p14 构建服务器作为无头虚拟机运行。我通过 ssh -Y 进入终端会话。

我使用的是 Mercurial 版本 5.1.1

当我执行 hg 操作时,我经常收到以下形式的错误消息:

中止:权限被拒绝:'/stg/cgrandits/rel-unicorn/Release/unicorn/chroot/tsc/sources/devel/.hg/wcache/.manifestfulltextcache-14uv9W~'

请注意,该存储库位于 chroot 环境中,这可能是一个影响因素?

当我随后检查该文件时,它永远不存在。

该操作实际上总是成功的,但这种行为破坏了我围绕版本控制构建的一些脚本和自动化。

有谁知道导致此问题的原因以及如何解决它?

答案1

问题是 .hg/wcache 文件夹归 root 所有。

所以事后看来,有点明显的一点似乎是

如果错误消息提到“权限被拒绝”,则检查相关文件夹的权限。在本例中,它由 root 拥有。我能够解决

[.hg]$ sudo chown cgrandits wcache

其中 cgrandits 是我的用户 ID。显然,我需要 sudo 能力来执行此修复,但我需要 sudo 能力来运行构建自动化脚本,这些脚本首先让我进入此状态。

我遇到这种情况是因为我使用构建自动化脚本(我承认我并不完全理解),它设置了 chroot 环境,因此必须以 root 身份执行。有时,这些构建自动化脚本会执行 Mercurial 命令。如果在以 root 身份执行构建自动化脚本时 wcache 文件夹不存在,则将创建 wcache 文件夹,但所有者为 root。但如果 wcache 文件夹已经存在,hg 操作将使用它按原样。因此,是否遇到此问题取决于直接在命令行上给出的 hg 命令的历史顺序以及某些构建自动化脚本的执行。

相关内容