我们有一个从主干流出的代码行 - > A - > B我们有人直接或在主干中工作,我们通过分支B合并公开发布。
现在我需要提供分支A中的更改列表,而不是分支B中的更改,以便我们可以传递给QA团队。为此,我运行此命令:
p4 interchanges -b integrate_branch_a_to_branch_b
但是我们已经在那里进行了更改,这些更改已经从一个大的更改列表中的主干到A集成(但实际上由多个提交的更改列表组成)。我需要将这些内容包含在我的更改说明中。根据Perforce文档(https://www.perforce.com/perforce/r15.1/manuals/cmdref/p4_changes.html),如果我传递-i标志,p4更改命令应该执行此操作。
所以我所拥有的是一个编号为12345的变更清单,已提交给分支机构A(作为集群的集成)。我想扩展它以列出提交给trunk的每个更改列表,正如p4交换将显示我已经运行它来预览CL#12345中的内容。
我试过这个命令:
p4 changes -i -s submitted //myproject/branches/a/...@12345,12345
我认为应该有用,给我这样的东西:
Change 12345 on 2015/10/30 by user@host 'trunk -> a'
Change 12344 on 2015/10/29 by user@host 'fixed bug two'
Change 12343 on 2015/10/29 by user@host 'fixed bug one'
但是它给了我成千上万的变化,其中大部分都超出了我所要求的变更清单范围,比这个项目的任何分支的第一次修订还要晚 - 从我们整合了一些共享来自// otherproject /到// myproject /的库代码。如果我删除" -i"旗帜,它按照我预期的方式运作 - 它仅列出更改列表12345。
这只是这个命令中的错误,还是我的语法错了?我似乎无法找到一种方法来获得我需要的东西。我可以回过头来找一下干线的最后一次整合 - >答:当然,我会在我的脚本中手动过滤旧的更改列表 - 但如果我不必这样做会更容易。
P4服务器版本字符串为:P4D / LINUX26X86_64 / 2014.2 / 962050(2014/11/13)
答案 0 :(得分:0)
因此,如果我理解正确,那么您正在寻找从A - >中集成的所有更改。 B,但是对于来自主干的任何集成 - >您希望看到单个更改而不是单个集成更改吗?
虽然您无法在单个表达式中执行此操作,但您可以运行两个交换命令:
p4 interchanges -b integrate_branch_a_to_branch_b
p4 interchanges -b integrate_trunk_to_branch_b
第二个命令将列出尚未集成到分支B中的主干中的所有个别更改。
这里你会有一些重复,因为第一个命令(A-> B)也会显示仅集成的更改,但这应该很容易过滤掉。
答案 1 :(得分:0)
这就是我最终的结果:
- p4 interchanges -b integrate_branch_a_to_branch_b
- for each change:
- p4 describe -s change, and figure out if there were any "branch"
or "integrate" actions
- if no, then it's a direct edit and we are interested in it
- if yes, then it's an integration from our source branch (trunk) and
we need to find the original changelists
- for each change where yes:
- p4 integrate -n //myproject/branches/a/...@change,change //myproject/branches/b/....
- if output (stderr) contains 'already integrated' then ignore
because it has already been integrated
- else run p4 changes -s submitted -i -l /myproject/branches/a/...
(this will give us a list of all changelists that made up the
single integrate changelist 12345 that I described above)
- for each change there:
- run p4 integrate -n //myproject/branches/trunk/...@change,change /myproject/branches/b/...
- if output (stderr) contains 'already integrated' then ignore
because it has already been integrated
- else run p4 describe -s change and check if standard output
contains //myproject/branches/trunk - if not then it was an integrate
*to* trunk from somewhere else and we don't care about it
(this is intended to fix the - issue where p4 changes goes
beyond the first revision that I am interested in)
首先运行p4交换以获取要使用的未集成更改的列表。然后,对于每次更改,我们都要处理,要么发现#1)它真的没有整合,而且#2)它对于我们的要求来说并不太旧。
我也知道一个更改列表,我们上次运行完整的QA测试,因此当我们开始读取比我感兴趣的更旧的更改时,可以在底部循环中提前中断(解决p4更改-i)问题)。
似乎工作。但是非常麻烦。
答案 2 :(得分:0)
您正在寻找的命令存在:
p4 interchanges -b integrate_trunk_to_branch_b @12345
我知道文档有点令人费解:
interchanges -- Report changes not yet integrated
p4 interchanges [options] fromFile[revRange] toFile
p4 interchanges [options] -b branch [toFile[revRange] ...]
p4 interchanges [options] -b branch -s fromFile[revRange] [toFile ...]
p4 interchanges [options] -S stream [-P parent] [file[revRange] ...]
toFile位引用目标,但revRange引用源,因此您只需在命令中指定上边界。
您是否在为脚本使用Python或Ruby等脚本语言?