2015-08-13 335 views
1

我正试图编写一个集成了多个分支的批处理文件。我希望有一个包含所有更改的更改列表。P4:我如何将几个“p4集成”调用合并成一个更改列表(在批处理文件中)?

我最初的想法是首先创建更改列表,然后将其用于集成。但在我看来,这几乎是不可能的。
相反,它似乎需要先整合,然后创建一个更改列表。根据p4 help

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

我不喜欢这种方法,但事情是,它甚至不工作。我的批处理看起来是这样的:

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

p4 resolve -am -c default 

p4 change -i < changelistInfo.txt 

,其结果是,我已经有了一个新的但空变更列表和所有集成仍然是缺省的变更。
这与帮助中所说的内容完全相反。

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

回答

1

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

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

由“P4变化-o”产生的修改列表形式包括文件的用于改变列表的列表(默认情况下这是缺省的变更的所有文件),并且当“P4变化-i”读取形式看它的名单;如果那里没有文件,它会创建一个没有任何文件的更改列表。

如果您正在Windows上编写批处理脚本,那么具有挑战性的部分就像我在上例中对'sed'所做的一样,即时编辑窗体;我在Windows上,通过在我的%path%中使用Cygwin工具(sed,grep,cut等)处理类似的东西,以便我可以像cmd提示符,批处理文件等那样运行命令。

+0

所以,我花了一段时间才得到它,因为我没有使用cygwin工具,而是想出如何通过纯批量读取/写入文件。我已经在另一个答案中公布了最终结果,但接受了这个结果,因为它是解决问题的关键。顺便说一句,我将上述评论标记为过时,因为它们只是冗余信息。 – Em1

0

在您选择的更改列表中有多种方式来组装待处理的作业。

既然你不想在缺省的变更工作第一,这是你应该做的:

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

当你开发你的脚本,我建议您仔细阅读每个命令的输出作为您开发和测试,也洒你的脚本像p4 openedp4 status命令,这样你可以看到每个命令改变在你的工作区。

+0

嗯,我已经看到它打印出更改列表号。但是,如何在脚本中获得该数字?我不想亲手输入正确的更改号码。而p4集成并没有像-m1这样的东西。我可以将它写入文件,解析文件,获取数字,我不知道脚本可能会有多复杂...... – Em1

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单行命令,我迭代每行以更改默认描述文本。这是更多的代码,但具有相同的效果。
它需要删除文件。但除此之外,其他解决方案没有什么不同。

相关问题