【兔头蒜笔记 | P4常用命令】p4 change
在开发基于 p4 的 publish 工具时,为了避免 default 里可能存在的更改项与当前需要提交的文件们混淆,因此需要为其创建一个干净的 changelist。
一些准备工作
import os
import stat
import subprocess
def connect_p4(data_pack):
"""
Connect to p4 according to data_pack and return p4 instance if successful
"""
# data_pack = [port, clnt, user, pswd]
p4 = P4()
p4.port = data_pack[0]
p4.client = data_pack[1]
p4.user = data_pack[2]
# NOTE: This is to avoid p4 raising warnings when the depo is up-to-date
# https://perforce-user.perforce.narkive.com/VbxnHKt2/p4-why-is-being-up-to-date-a-warning
p4.exception_level = 1
try:
p4.connect()
return p4
except P4Exception:
for e in p4.errors:
print(e)
p4.disconnect()
return None
通过 p4 change 命令 p4.run(“change”) 可以创建一个新的 changelist。
def test_change(data_pack):
p4 = connect_p4(data_pack)
if p4:
res = p4.run("change")
print(res)
return
运行后会弹出一个临时文件,可以在这个临时文件里编辑各种信息:把 Files 整个删掉即可,再填入 description (必填)。
完成后保存退出。
命令返回的 res 可以 print 出来,是一个列表,包含了创建的 changlist ID。
打开 p4,7291 就是我们刚刚创建的空的 changelist 了。
但是在工具中,不可能每次都弹出 tmp 文件让使用者手动输入,清除,这太鸡肋了。
在 官方的 p4 文档 中有一个 flag “-o”,可以将 changelist 规范输出,我们 print 出来看看。
def test_change(data_pack):
p4 = connect_p4(data_pack)
if p4:
# res = p4.run("change")
change = p4.run("change", "-o")
print('change :', change)
return
是个列表,里面是一个字典,写了 changelist 的详细信息。由此,我们可以对该字典值进行设置。
按下列执行后,除了 print 出信息后,p4 上并没有新创建的 changelist。
def test_change(data_pack):
p4 = connect_p4(data_pack)
if p4:
# res = p4.run("change")
change = p4.run("change", "-o")
change[0]['Description'] = "Just for test."
change[0]['Files'] = ""
print('change :', change)
return
再加一条将它 save了就 ok 啦。
change_list_id = p4.save_change(change)[0].split()[1]