Perforce - 创建和编辑更改列表

Perforce - creating and editing a change list

我的目标是自动创建一个变更列表。我通过 运行 执行一些编辑命令并在代码序列末尾提交更改列表来完成此操作。

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

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

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

"Change #CL_Number is already committed."

我确定它必须通过混合 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 命令。

感谢您的帮助!

脚本的问题是这个命令:

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

将为您提供最新的 submitted 更改,因为您提供了文件规范(意味着输出仅限于 submitted 修订匹配的更改列表那个规格)。

即使撇开这一点,以这种方式构建脚本也会让您容易受到竞争条件的影响,在这种情况下,另一个用户可能会在您创建您的查询和您 运行 该查询之间创建一个更改列表。你想要做的是在你保存它时捕获更改列表编号(不允许另一个用户 "steal" 你的更改编号所以这是 100% 安全的比赛).

但是撇开这些不谈,您的脚本将非常简单的事情变得非常复杂,这就是 "submit the files I changed"——因为脚本本身不修改任何文件,我假设您已经编辑了运行 之前的文件。扔掉整个脚本并替换为:

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

大功告成!