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")
大功告成!
我的目标是自动创建一个变更列表。我通过 运行 执行一些编辑命令并在代码序列末尾提交更改列表来完成此操作。
我 运行 以类似的顺序执行所有命令:
//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")
大功告成!