Perforce-创建和编辑变更列表

时间:2018-11-30 20:01:28

标签: python command-line perforce p4python

我的目标是自动创建变更列表。我通过运行一些编辑命令并在代码序列末尾提交更改列表来做到这一点。

我以相似的顺序执行所有命令:

//Open all files in folder for edit in default changelist
p4.run(("edit", Folder + "..."))

//Move all files from default changelist to new changelist
changespec = p4.fetch_change()
changespec["Description"] = "test"
p4.save_change(changespec)

//Get changelist number
ChangeListNum = p4.run(("changes", "-m1", Folder + "..."))[0]['change']

//Run checks on files before submitting
p4.run("reconcile", "-a", "-c", ChangeListNum, Folder + "...")
p4.run("resolve", "-at", "-c", ChangeListNum, Folder + "...")
p4.run("revert", "-a", "-c", ChangeListNum, Folder + "...")

//Submit change list
p4.run("submit", "-c", ChangeListNum, "-f", "revertunchanged")

现在,在我的检查和提交过程中,记录器报告了此错误:

“更改#CL_Number已提交。”

我确定必须混合使用p4.fetch_change()p4.run()之类的P4Python函数。我不确定如何解决此问题,但是下面是我尝试的一种解决方案。

我尝试更改代码块:

changespec = p4.fetch_change()
changespec["Description"] = "test"
self.p4.save_change(changespec)

对此:

p4.run("change", "-i", "<", "P4ChangeList.txt")

该命令读取我所做的更改列表txt,并使用这些参数创建一个新的更改列表。但是,它只能在cmd中工作,而不能在python命令中工作。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:2)

脚本的问题是该命令:

//Get changelist number
ChangeListNum = p4.run(("changes", "-m1", Folder + "..."))[0]['change']

将为您提供最新的提交更改,因为您提供了文件规范(这意味着输出仅限于具有与该规范匹配的提交修订版的变更列表)。

即使将其放在一边,以这种方式构造脚本也会使您容易受到竞争状况的影响,在这种情况下,另一个用户可能会在您创建查询和运行该查询之间创建一个更改列表。相反,您要做的是在保存更改列表编号时捕获它(不允许另一个用户“窃取”您的更改编号,因此在这种情况下100%安全)。

但是,撇开这些,您的脚本使非常简单的事情变得非常复杂,这就是“提交我更改的文件”-因为脚本本身不会修改任何文件,所以我认为您已经编辑了文件运行之前。扔掉整个脚本,并替换为:

# Open all changed files in the default changelist.
p4.run_reconcile(Folder + "...")
# Submit the default changelist.
p4.run_submit("-d", "test")

您就完成了!