P4:如何将 "p4 integrate" 的多个调用合并到一个更改列表中(在批处理文件中)?

P4: How do I merge several calls of "p4 integrate" into a single changelist (in a batch-file)?

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

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

All files open in the default changelist are moved to the new changelist.

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

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

p4 resolve -am -c default

p4 change -i < changelistInfo.txt

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

我完全被困在这里了。我如何确保所有集成都移至更改列表?如果可能,不要先将它们放入默认更改列表。

有多种方法可以assemble您选择的更改列表中的待处理工作。

既然您不想先在默认更改列表中工作,那么您应该这样做:

  1. 首先,通过 运行ning p4 change -i < changelistDescription.txt
  2. 创建您的(空)待定变更列表
  3. 记下您的更改列表编号。 p4 change -i 为您打印出来,或者您可以在事后通过 p4 changes -s pending -u Em1 -m1 之类的操作获取它。假设它是 NNN。
  4. 接下来,通过 运行ning p4 integrate -c NNN 执行您的集成。包含 '-c NNN' 标志告诉 p4 integrate 打开指定编号的更改列表中的文件,而不是默认更改列表中的文件。在每个集成命令之后,新打开的文件将累积在该编号的更改列表中,您可以通过 运行ning p4 opened.
  5. 确认
  6. 然后你就可以运行 p4 resolve 和以前一样了。如果您将“-c”指定为 p4 resolve,请确保您指定了相同的更改列表编号“-c NNN”,但通常我会说只是省略 p4 resolve 的“-c”标志.

在开发脚本时,我建议您在开发和测试每个命令时仔细阅读每个命令的输出,并在脚本中加入 p4 openedp4 status 这样的命令,这样您可以看到每个命令在您的工作区中发生了什么变化。

当您创建待定更改列表时,请使用 "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 提示符下 运行 这样的命令,批处理文件等

我的解决方案是基于,但我没有使用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 单行命令,而是遍历每一行以更改默认描述文本。这段代码有点多,但效果一样。
它需要删除文件。但除此之外,与其他解决方案没有什么不同。