Perforce API:获取子目录的最新版本

时间:2015-01-16 20:03:50

标签: python perforce

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

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

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

所以我正在努力弄清楚如何使用API​​来处理我上面链接的页面上的一些简单例子。

我想编写一个脚本,它只是将最新版本的子目录下载到运行它的计算机的文件系统中,而不执行任何其他操作。我不希望服务器以任何方式改变。我不希望有任何迹象表明文件来自Perforce(相反,如果你通过Perforce应用程序获取文件,它会将文件系统中的文件标记为只读,直到你检查出来或者其他那太傻了 - 我只需要下载脚本运行时子目录的样子快照。)

1 个答案:

答案 0 :(得分:1)

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

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

对于您要描述的任务,我将执行以下操作(我将根据Perforce命令对其进行描述,因为我的Python有点生疏;一旦您知道了什么命令并且正在运行它应该很容易转换成Python,因为P4Python doc有一些例子,比如创建和修改客户端规范,这是最难的部分):

1)创建一个客户端,将所需的depot目录映射到所需的本地文件系统位置,例如:如果你想要目录" // 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)删除客户端。

(我省略了一些细节,例如确保您经过正确的身份验证 - 根据您的服务器的安全性以及是否具有相应的安全性,这是另一个潜在的挑战使用外部身份验证,但听起来并不是您遇到麻烦的部分。)