与Mercurial生成合并日志



我们正在使用Mercurial进行源控制,并希望为我们的QA过程引入自动合并和更改。出于讨论的目的,让我们假设我们使用以下简单的3分流流程:

 = forward merge
| = back merge of fix
Default --O--A--*--B--*---
               ^      
               |       
QA      -----M--X--C--*--N---
                ^       
                |       
Master  --------H--------*---  

所以问题是:是否可以构建一个RevSet查询,在合并n,最好是之前,但实际上执行后,它将导致默认分支所有提交的日志,该分支尚未在QA分支中成为A和B)。

替代配方:是否可以构建一个将返回所有更改集的RevSet查询,如果我们将默认值合并到QA。

我只对默认分支上的提交感兴趣,而不是已经合并为默认的特征分支(图中未包含的特征分支)。我也不对质量保证分支的提交不感兴趣。

存储库维护得很好,但是几年了,包含大约13000个节点。

我一直在尝试祖先和祖先,但是我将X作为最新的共同祖先,或者是一些非常古老的节点。我了解获得X的逻辑,但我真的很追求。

我最幸运的是有什么变化:

hg log --rev "((heads(branch('Default')) and !closed()) % heads(branch('QA'))) and branch('Default') and p2(!branch('QA'))"
hg log --rev "((heads(branch('Default')) and !closed()) % heads(branch('QA'))) and branch('Default') and !children(branch('QA'))"

update

使用汤姆建议的" hg Merge -preview -rev xyz"会产生这样的输出:

changeset:   13070:7e59fc16aa4e
branch:      Default
parent:      13068:5b9409ad504f
parent:      13069:849bd43d2023
user:        *******
date:        Mon Dec 18 18:40:46 2017 +0200
summary:     Merged Feature branch A
changeset:   13071:07470ff919ff
branch:      Feature branch B
parent:      13061:540eda2c959b
parent:      13068:5b9409ad504f
user:        *****
date:        Mon Dec 18 18:49:42 2017 +0200
summary:     Merge with Default
changeset:   13072:a53260ffabca
branch:      Feature branch B
user:        *****
date:        Mon Dec 18 18:58:05 2017 +0200
summary:     Some text
changeset:   13073:37c895f2abf0
branch:      Default
parent:      13070:7e59fc16aa4e
parent:      13072:a53260ffabca
user:        *******
date:        Mon Dec 18 18:58:05 2017 +0200
summary:     Merged Feature branch B

还不错,但也不是超级有趣。至少比简单的GREP/SLS需要更多的逻辑才能解析。

预先感谢约翰

我找到了一个解决方案,该解决方案主要执行我想要的:

hg log --rev "branch('Default') & !ancestors(branch('QA')) & ancestors(heads(branch('Default')) & !closed()) & !children(branch('QA'))"

现在唯一缺少的是排除多个头部合并,因为它们只是在变形值中的噪音。


更新:

所以我再次挑选了这个项目,并在其他地方找到了一些很棒的答案。

以下产生的输出类似于HG合并 - 浏览,但可以模板:

hg log -r "ancestors('$sourceBranch') - ancestors(.)" --template $template

这过滤了所有提交,而不是在源分支上:

hg log -r "(ancestors('$sourceBranch') - ancestors(.)) and (branch('$sourceBranch'))" --template $template

最新更新