Perl - Perforce 新工作区触发器:创建一个与父目录或 Perforce 具有相同权限的目录
Perl - Perforce new workspace Trigger: Create a directory with same permissions as parent directory or as Perforce would give
我们想要实现的是为每个创建的新工作区添加一个本地文件。
我目前所做的是 运行 触发 "form-commit client" 的脚本。
该触发器包含客户端计算机上应创建工作区的路径,但当用户尝试在网络驱动器上创建工作区时出现问题。
会发生什么情况是文件和目录已创建,但仅具有 "Root" 的权限,因为它们之前都不存在,因此在触发器的脚本完成后,perforce 无法将源代码推送到目录,因为它没有权限(由于同样的原因,用户无法编辑目录和文件)。
从我的角度来看有两个方向可以解决这个问题:
1) 确保 perl 脚本 "mkdir" 命令创建的目录与父目录具有相同的权限。(我该怎么做?)
无关紧要,我在另一个关于堆栈溢出的问题中问过它。
2) 仅在perforce完成"pull"命令并且工作区目录由perforce创建后创建触发器所针对的文件(那个触发器是什么)
提前致谢,
最大
编辑:(最后两点我都错了,它并没有像我想的那样工作)
我做了评论中建议的步骤,但没有成功。
我怀疑所有这些都与 perforce 服务用户直接相关,所以事情是这样的:
1) 网络驱动器的映射方式只有我可以写入我的用户文件夹(+ 网络管理员)。
2) perforce 触发器珍珠脚本在 perforce 服务器上运行(我怀疑是管理员用户。)
3) 当脚本创建文件夹时,它会向我(windows 域用户)+ UnixPermUid\root + UnixPermGid\root 授予权限,我不属于这些组。
4) 当我执行 chmod (07777, $dir) 或死时 "couldn't chmod $!";没有任何反应(也没有错误或权限)
5) 我无法从 "Windows explorer" 中删除文件夹,也无法使用删除它的触发器。
6) 接下来的步骤 + 触发器运行良好:
- 在 "windows explorer" 中手动创建文件夹。
- 从 Perforce 客户端创建一个工作区,该工作区将位于上面的目录中。
- 触发器在没有 chmod 的情况下以正确的权限在目录中创建所需的文件。
- 所有作品完美
编辑 2:
对问题 2 有什么想法吗?
2) Create the file that the trigger is for only after the "pull"
command is done by perforce and the workspace directory was created by
perforce(What's the trigger for that)
解决办法是调用icacls系统命令给作品创建者权限space.
$error = system("icacls $ToWriteToDir /grant domain\user:(OI)(CI)F /T");
上面的代码为触发脚本(创建新作品space)的用户添加了对网络驱动器目录的完全递归权限。
我发布了一个相关的更一般的问题 。
我决定分成两个问题,以防有人会为 perforce 的用例找到更相关的解决方案,或为任何类型的服务找到通用解决方案。
我们想要实现的是为每个创建的新工作区添加一个本地文件。
我目前所做的是 运行 触发 "form-commit client" 的脚本。
该触发器包含客户端计算机上应创建工作区的路径,但当用户尝试在网络驱动器上创建工作区时出现问题。
会发生什么情况是文件和目录已创建,但仅具有 "Root" 的权限,因为它们之前都不存在,因此在触发器的脚本完成后,perforce 无法将源代码推送到目录,因为它没有权限(由于同样的原因,用户无法编辑目录和文件)。
从我的角度来看有两个方向可以解决这个问题:
1) 确保 perl 脚本 "mkdir" 命令创建的目录与父目录具有相同的权限。(我该怎么做?)
无关紧要,我在另一个关于堆栈溢出的问题中问过它。
2) 仅在perforce完成"pull"命令并且工作区目录由perforce创建后创建触发器所针对的文件(那个触发器是什么)
提前致谢,
最大
编辑:(最后两点我都错了,它并没有像我想的那样工作)
我做了评论中建议的步骤,但没有成功。
我怀疑所有这些都与 perforce 服务用户直接相关,所以事情是这样的:
1) 网络驱动器的映射方式只有我可以写入我的用户文件夹(+ 网络管理员)。
2) perforce 触发器珍珠脚本在 perforce 服务器上运行(我怀疑是管理员用户。)
3) 当脚本创建文件夹时,它会向我(windows 域用户)+ UnixPermUid\root + UnixPermGid\root 授予权限,我不属于这些组。
4) 当我执行 chmod (07777, $dir) 或死时 "couldn't chmod $!";没有任何反应(也没有错误或权限)
5) 我无法从 "Windows explorer" 中删除文件夹,也无法使用删除它的触发器。
6) 接下来的步骤 + 触发器运行良好:
- 在 "windows explorer" 中手动创建文件夹。
- 从 Perforce 客户端创建一个工作区,该工作区将位于上面的目录中。
- 触发器在没有 chmod 的情况下以正确的权限在目录中创建所需的文件。
- 所有作品完美
编辑 2: 对问题 2 有什么想法吗?
2) Create the file that the trigger is for only after the "pull" command is done by perforce and the workspace directory was created by perforce(What's the trigger for that)
解决办法是调用icacls系统命令给作品创建者权限space.
$error = system("icacls $ToWriteToDir /grant domain\user:(OI)(CI)F /T");
上面的代码为触发脚本(创建新作品space)的用户添加了对网络驱动器目录的完全递归权限。
我发布了一个相关的更一般的问题