Mercurial:确定每个合并分支上的最新标记

时间:2014-05-26 16:39:34

标签: mercurial mercurial-revsets

要确定哪些标签已合并到给定的修订版中,我使用如下命令:

$ hg log --style=xml -r "ancestors(471694254d60) and tag()" | grep "<tag>"
<tag>3.27.0.0</tag>
<tag>3.27.0.1</tag>
<tag>3.27.0.2</tag>
<tag>3.27.0.3</tag>
<tag>3.27.0.4</tag>
<tag>3.27.0.5</tag>
<tag>3.28.0.0</tag>
<tag>3.27.0.6</tag>
<tag>3.28.0.1</tag>
<tag>3.28.0.2</tag>
<tag>3.28.0.3</tag>
<tag>3.29.0.0</tag>
<tag>3.28.0.4</tag>
<tag>3.29.0.1</tag>
<tag>3.29.0.2</tag>
<tag>3.29.0.3</tag>
<tag>3.29.0.4</tag>
<tag>3.29.0.5</tag>
<tag>3.29.0.6</tag>

这没关系,但我想通过报告每个分支的最新标记来改进它:

$ hg log --style=xml -r "ancestors(471694254d60) and tag() and <MYSTERY CLAUSE>" | grep "<tag>"
<tag>3.27.0.6</tag>
<tag>3.28.0.4</tag>
<tag>3.29.0.6</tag>

希望隐含的分支结构足够明显。

这看起来是否可行(不使用多个hg命令或事后过滤结果)?

1 个答案:

答案 0 :(得分:1)

嗯,2(脏)解决方案

后处理风格

稍微更改了原始命令作为起点(使用了另一个存储库)

>hg log -r "::. & tag()" --template "{branch} {tags}\n"

(短语法和模板,用于测试的静态叶节点)。结果不适合后期处理

default 1.0
default 1.0.1
default 1.1
default 1.1.1
default 1.1.2
default 1.2
default 1.2.1
default 1.3
default 1.4
default 1.5
stable 1.5.1
default 1.6
stable 1.6.1

因为分支机构的特定标签是碎片化的。按分支排序将保存标签的内部顺序在每个分支内

>hg log -r "sort(::. & tag(), branch)" --template "{branch} {tags}\n"
default 1.0
default 1.0.1
default 1.1
default 1.1.1
default 1.1.2
default 1.2
default 1.2.1
default 1.3
default 1.4
default 1.5
default 1.6
stable 1.5.1
stable 1.6.1

输出每个分支的最后一条记录(+列表中的最后一个字符串)是任何语言中的简单任务。

为了将hg log | <command>元宝转换为可用解决方案,将应用下一个修改

ltb = hg log -r "sort(::$1 & tag(), branch)" --template "{branch} {tags}\n"

(shell中的hg ltb 471694254d60 | <command>将生成结果)

  • 为了美化和缩短完整的管道命令可能另外转换为shell-alias并且ltb变为

ltb = !$HG log -r "sort(::$1 & tag(), branch)" --template "{branch} {tags}\n" | <command>

(现在只用hg ltb 471694254d60

预处理风格

&#34;分支中的最后一个标记的变更集&#34;在revset的术语中(对于你的情况)last(::REV & tag() & branch(BRANCH)),为每个分支重复或

(last(::REV & tag() & branch(BRANCH1))) | (last(::REV & tag() & branch(BRANCH2)) | ... | (last(::REV & tag() & branch(BRANCHN))

在单一巨人指挥中。主要问题是为命令列出所有需要的分支,因为您还没有预定义的列表。

你可以

  • 获取分支列表(存储库范围)

最简单的方法是hg branches

>hg branches
default                     1196:878372849175
stable                      1179:e4b737479302 (inactive)

并将所有分支名称(第一个字段)手动插入日志(hg log -r "last(::471694254d60 & tag() & branch(default))" > log.txt + hg log -r "last(::471694254d60 & tag() & branch(stable))" >> log.txt以获取我的回购和您的变更集

  • 再次获取纯分支列表(hg branch)并将其传递给xargs,xargs为单个分支执行hg log,类似于( NOT TESTED !!

hg branches | gawk {print $1} | \ xargs -I BRANCH hg log -r "last(::471694254d60 & tag() & branch(BRANCH))" --template "{branch} {tags}\n"

(调试后也可以转换为shell-alias)