P4:如何合并几个" p4整合"到一个更改列表(在批处理文件中)?

时间:2015-08-13 10:28:33

标签: batch-file perforce

我试图编写一个集成了多个分支的批处理文件。我想要一个包含所有更改的更改列表。

我最初的想法是首先创建更改列表,然后使用该列表进行集成。但在我看来,这几乎是不可能的 相反,您似乎需要先集成,然后创建更改列表。根据{{​​3}}:

  

默认更改列表中打开的所有文件都将移至新的更改列表。

我不喜欢这种方法,但问题是它甚至不起作用。我的批次看起来像这样:

p4 integrate //source1/... //target1/...
p4 integrate //source2/... //target2/...
p4 integrate //source3/... //target3/...

p4 resolve -am -c default

p4 change -i < changelistInfo.txt

结果是我有一个新的但空更改列表,所有集成仍然在默认的更改列表中。
这与帮助说的形成鲜明对比。

我完全被困在这里。如何确保将所有集成移动到更改列表?如果可能,请先将它们放入默认的更改列表中。

2 个答案:

答案 0 :(得分:1)

创建待定更改列表时,请使用“p4 change -o”为您生成的表单,例如:

p4 change -o | sed -e "s/<.*>/My Description/" | p4 change -i

“p4 change -o”生成的更改列表表单包含更改列表的文件列表(默认情况下,这是默认更改列表中的所有文件),当“p4 change -i”读取表单时,它会查看该表单列表;如果那里没有文件,它会创建一个没有任何文件的更改列表。

如果您在Windows上编写批处理脚本,那么具有挑战性的部分就是像在上面的示例中使用'sed'那样动态地编辑表单;我在Windows上,通过在我的%path%中使用Cygwin工具(sed,grep,cut等)来处理这样的事情,这样我就可以从cmd提示符,批处理文件等运行这样的命令。

答案 1 :(得分:0)

我的解决方案基于the answer of Sam Stafford,但我没有使用cygwin工具。所以这里的代码完全是纯粹的。

p4 integrate //source1/... //target1/...
p4 integrate //source2/... //target2/...
p4 integrate //source3/... //target3/...

SETLOCAL=ENABLEDELAYEDEXPANSION

p4 change -o > temp.txt

for /f "tokens=1,* delims=]" %%a in (temp.txt) do (
    set foo=%%a
    set foo=!foo:^<enter description here^>=Merging!
    echo !foo! >> changelist.txt)

p4 resolve -am -c default
p4 change -i < changelist.txt

del temp.txt
del changelist.txt

不是调用cygwin单行命令,而是遍历每一行来更改默认描述文本。这是更多的代码,但具有相同的效果 它需要删除文件。但除此之外,与其他解决方案没什么不同。