python - Perforce API : Get Latest Revision of a Subdirectory

标签 python perforce

我已经下载并安装了 Perforce API for Python。

我可以运行此页面上的示例: http://www.perforce.com/perforce/doc.current/manuals/p4script/03_python.html#1127434

但不幸的是,文档似乎不完整。例如,P4 类有一个名为 run_sync 的方法,但它没有在任何地方记录(事实上,如果您运行 dir( p4) 在 Python 交互式解释器中,尽管事实上您可以在交互式解释器中很好地使用该方法。)

因此,除了我上面链接到的页面上的简单示例之外,我正在努力弄清楚如何使用 API 来完成其他事情。

我想编写一个脚本,它只是将子目录的最新版本下载到运行它的计算机的文件系统中,而不执行其他任何操作。我不希望服务器发生任何改变。我不希望有任何迹象表明这些文件来自 Perforce(与通过 Perforce 应用程序获取文件相反,它会将文件系统中的文件标记为只读,直到您 checkout 或执行其他操作) . 这很愚蠢 - 我只需要获取脚本运行时子目录的快照。)

最佳答案

Python API 遵循与命令行客户端相同的基本结构(两者都是相同底层 API 的非常薄的包装器),因此您需要查看命令行客户端文档;例如,查看“p4sync”以了解 P4Python 中的“run_sync”如何工作:

http://www.perforce.com/perforce/r14.2/manuals/cmdref/p4_sync.html

对于您所描述的任务,我将执行以下操作(我将用 Perforce 命令来描述它,因为我的 Python 有点生疏;一旦您知道您正在运行什么命令,翻译起来应该非常简单进入 Python,因为 P4Python 文档有创建和修改客户端规范之类的示例,这是最难的部分):

1) 创建一个客户端,将所需的仓库目录映射到所需的本地文件系统位置,例如如果您希望将目录“//depot/foo/...”下载到“/usr/team/foo”,您将创建一个如下所示的客户端:

Client: mytempclient123847
Root: /usr/team/foo
View:
    //depot/foo/... //mytempclient123847/...

您应该在客户端上设置“allwrite”选项,因为您说过不希望同步文件为只读:

Options: allwrite noclobber nocompress unlocked nomodtime rmdir

2) 同步,使用“-p”选项最大限度地减少对服务器的影响(服务器不会记录您“拥有”文件)。

3) 删除客户端。

(我省略了一些细节,例如确保您的身份验证正确 - 这是另一个潜在的挑战,具体取决于您的服务器的安全性以及它是否使用外部身份验证,但听起来这不是您所要做的部分遇到问题。)

关于python - Perforce API : Get Latest Revision of a Subdirectory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27991937/

相关文章:

python - 从列转换为日期时间

在 Perforce 中列出特定机器上用户的工作区

version-control - Perforce 和 Emacs

强制进度条

python - 为什么python类的函数被调用两次

python - 为什么多线程不加速用lxml解析HTML?

python - Django,更改settings.py的默认位置或使用其他文件

python - 如何在 pygame 中绘制类对象列表?

perforce - 如何在 Perforce 中使用命令行同步到特定文件夹

perforce - 在 perforce 中还原不在工作区中的文件