如何通过Perforce Python API检索当天提交的变更列表
我刚接触Perforce的Python API,还在摸索中。目前为止,我已经能够根据文件名获取一些变更列表的信息,比如编号、描述等。我想要获取一个指定日期/时间范围内所有已提交的变更列表,这样我就可以收集到像更改的文件和每个变更列表的描述等信息。请问有没有办法通过这个API来实现呢?
谢谢
4 个回答
0
你需要加上 -l 这个选项,才能显示完整的描述内容,而 desc 不能通过 .desc 来获取。
这个方法在我用 python3 的时候是有效的。
from P4 import P4, P4Exception
p4 = P4()
p4.port = "A"
p4.user = "B"
p4.client = "C"
try:
p4.connect()
changelist = p4.run_changes('-l', '//server/folder/...@yyyy/mm/dd,@now')
# p4.run("change","//server/folder/...@yyyy/mm/dd,@now") works as well
for c in changelist:
print(c['desc'])
# or whatever you want, including: status, client, user, changelist...
except P4Exception:
for e in p4.errors:
print e
finally:
p4.disconnect()
0
你也可以使用类似这样的代码:
from P4 import P4, P4Exception
p4 = P4()
p4.port = "A"
p4.user = "B"
p4.client = "C"
try:
p4.connect()
changelist = p4.run_changes('//server/folder/...@yyyy/mm/dd,@now')
# p4.run("change","//server/folder/...@yyyy/mm/dd,@now") works as well
for c in changelist:
print c.desc
# or whatever you want, including: status, client, user, changelist...
except P4Exception:
for e in p4.errors:
print e
finally:
p4.disconnect()
在我看来,这种方式更正确,因为它使用了P4Python的API和正确的运行方法(调用p4 change命令),而且你还可以获得关于每个变更列表的更多信息。
Chee
2
下面的代码会输出今天在file.c文件上的变更列表:
import subprocess
import datetime
curr = datetime.datetime.now()
file = "file.c"
cmd = 'p4 changes -s submitted %s@%s/%s/%s,@now' % (file, curr.year, curr.month, curr.day)
print subprocess.check_call(cmd)
请注意,在运行上面的脚本之前,你需要在环境中设置好P4PORT和P4USER。如果不想设置的话,可以在命令中使用-p和-u选项来设置它们。
在上面的代码中,创建了一个查询,用来获取今天在file.c文件上的变更列表。你可以调整日期和文件名,以达到你想要的结果。
1
根据对P4Python文档的阅读和Perforce论坛上的一个问题,这段代码可能可以解决问题,但请注意,这段代码完全没有经过测试,所以使用时要小心。
在filelog命令中,...
似乎是用来请求文件夹中所有文件的方式,所以你只需要把server
和folder
替换成合适的值就可以了。
from P4 import P4, P4Exception
p4 = P4()
p4.port = "1"
p4.user = "User"
p4.client = "Client"
try:
p4.connect()
changelist = p4.run_filelog('//server/folder/...@yyyy/mm/dd,@now')
for r in changelist:
print r.depotFile
print r.revisions[0].time
except P4Exception:
for e in p4.errors:
print e
finally:
p4.disconnect()
** 是的,我本可以下载Perforce,安装它,添加一些文件,然后测试这段代码,但那样做似乎有点过于复杂了。