如何从sync-p4python获取所有更改号码

时间:2013-03-21 15:32:30

标签: python perforce p4python

我会定期获得p4同步,并想知道实际上已同步的内容。 所以我从p4.run_sync获得了返回,这是每次更改的一个dicts列表(据我所知)

sync = p4.run_sync()

当我打印键时,它看起来像是:

sync dict Nr: 0 --------------
* totalFileSize
* rev
* totalFileCount
* clientFile
* fileSize
* action
* depotFile
* change
sync dict Nr: 1 --------------
* action
* clientFile
* rev
* depotFile
* fileSize
sync dict Nr: 2 --------------
* action
* clientFile
* rev
* depotFile
* fileSize

所以只有在第一个字典中才会有更改数字!

我如何获得其他人?我目前正在浏览其他词组的depotFiles并从p4.fstat获得headChange ..但这看起来很笨拙......

我实际上喜欢同步的每个更改编号,以便立即获取描述。

或者有更合适的方式吗?谢谢!

1 个答案:

答案 0 :(得分:3)

首先p4.run_sync()或任何p4.run_COMMAND()返回列表而不是dict。列表中的每个元素可以是字典或字符串,具体取决于perforce服务器支持以及是否禁用了标记。

来自p4.run的文档:

Whether the elements of the array are strings or dictionaries depends on
(a) server support for tagged output for the command, and
(b) whether tagged output was disabled by calling p4.tagged = False.
  • 当您运行p4.run_sync()(相当于p4 sync ...)时,您将获得该目录下所有文件的最新信息。
  • 列表中的第一个文件包含perforce同步的最新更改编号,不一定是修改该文件的更改。
  • 更改编号只对应于该目录下的最新更改。
  • 列表中的其余文件省略了此冗余信息。这就是原因,键change不是文件列表中其他词组的一部分。

对于每个文件,您在rev密钥中获得的修订号与depotFile中的完整perforce路径相对应,与存储库中文件的唯一版本相对应(例如//depot/branch1/dir1/file1#4 })。

您可以使用fstat按照以下方式使用此信息。 (不,这不是一种hacky方式,这是获取对应于特定文件和修订版的更改编号的正确方法。)

>>> result = p4.run_fstat("//depot/branch1/dir1/file1#4")
>>> print result[0]['headChange']
12345

这表明//depot/branch1/dir1/file1的第4版是变更12345的一部分。