3

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

我以类似的顺序运行所有命令:

//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 已提交。”

我确信它必须与混合 P4Python 函数(如p4.fetch_change()p4.run(). 我不确定如何解决此问题,但以下是我尝试过的一种解决方案。

我尝试更改代码块:

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

对此:

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

该命令读取我所做的更改列表 txt,并使用这些参数创建一个新的更改列表。但是,它仅适用于 cmd 而不适用于 python 命令。

感谢您的任何帮助!

4

1 回答 1

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")

你就完成了!

于 2018-12-01T00:00:29.793 回答