【发布时间】:2016-12-22 19:09:27
【问题描述】:
我们想要实现的是为每个创建的新工作区添加一个本地文件。
我目前所做的是在“表单提交客户端”的触发器上运行一个脚本。
该触发器包含应在其中创建工作区的客户端计算机上的路径,但当用户尝试在网络驱动器上创建工作区时会出现问题。
会发生什么是文件和目录已创建但仅具有“Root”权限,因为它们之前都不存在,因此在触发器的脚本完成后 perforce 无法将源代码推送到目录,因为它没有权限(同理用户不能编辑目录和文件)。
从我的角度来看,解决这个问题有两个方向:1)确保perl脚本“mkdir”命令创建的目录与父目录具有相同的权限。(如何才能我做吗?)
不相关,我在另一个关于堆栈溢出的问题中问过它。
2) 只有在 perforce 执行了“pull”命令并且 perforce 创建了工作区目录之后,才创建触发器所针对的文件(什么是触发器)
提前致谢,
最大。
编辑:(我在最后一个项目符号上错了,它并没有像我想象的那样起作用)
我执行了评论中建议的步骤,但没有成功。
我怀疑所有这些都与 perforce 服务用户直接相关,所以事情是这样的:
1)网络驱动器的映射方式只有我可以写入用户的文件夹(+网络管理员)。
2) perforce 触发珍珠脚本在 perforce 服务器上运行(我怀疑是管理员用户。)
3) 当脚本创建文件夹时,它授予我(Windows 域用户)+ UnixPermUid\root + UnixPermGid\root 的权限,我不属于这些组。
4) 当我执行 chmod (07777, $dir) 或死时“无法 chmod $!”;什么都没有发生(也没有错误或权限)
5) 我无法从“Windows 资源管理器”或使用删除它的触发器删除该文件夹。
6) 后续步骤 + 触发器运行良好:
- 在“Windows 资源管理器”中手动创建文件夹。
- 从 Perforce 客户端创建一个工作区,该工作区将位于上面的目录中。
- 触发器在没有 chmod 的情况下在具有正确权限的目录中创建所需文件。
- 一切完美
编辑 2: 对第 2 题有什么想法吗?
2) 仅在“拉动”之后创建触发器所针对的文件 命令由 perforce 完成,工作区目录由 perforce(触发的原因是什么)
【问题讨论】:
-
嗨,感谢您的快速回答,我也考虑过根据我认为正确的内容编辑权限,因为我不是这些网络目录的真正“所有者”,我有点有点害怕授予我认为应该授予的权限,并且更愿意授予与父级相同的权限。我目前正在研究使用“stat”函数获取父母权限并将其用于 mkdir 函数。
-
my ($perms, $uid, $gid) = (stat $dir)[2, 4, 5];...然后:$perms = sprintf "%04o", $perms & 07777; -
好的,这就是发生的事情:当我从我的 PC(Windows)运行脚本时,它一切正常。当我将脚本作为 perforce 的触发器运行时,它确实获取了用户,但没有获取正确的组并显示“gid=0”和“uid=0”,但当我检查 Windows 时,我的用户名仍然具有权限。这里有些奇怪。
-
好吧看起来我很愚蠢,我忘记了脚本在 Windows 机器上运行。这些命令在那里不起作用,因为 stat 没有提供正确的 perms 并且 chmod 在 Windows 上不起作用。