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

$ 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命令或事后过滤结果)?

最佳答案

好吧,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>锭转换为可用的解决方案,需要进行以下修改
  • hg log转换为参数化的Mercurial alias
  • ltb = hg log -r "sort(::$1 & tag(), branch)" --template "{branch} {tags}\n"
    (shell中的hg ltb 471694254d60 | <command>将产生结果)
  • 为了美化和缩短全管道命令,可以另外将其转换为shell别名,并且ltb变为
  • ltb = !$HG log -r "sort(::$1 & tag(), branch)" --template "{branch} {tags}\n" | <command>
    (现在仅用作hg ltb 471694254d60)

    预处理样式

    revset的术语中的“分支中最后标记的变更集”将是last(::REV & tag() & branch(BRANCH))(对于您而言)(last(::REV & tag() & branch(BRANCH1))) | (last(::REV & tag() & branch(BRANCH2)) | ... | (last(::REV & tag() & branch(BRANCHN)),每个分支或
    hg branches
    在一个巨大的命令中。主要问题是列出命令所需的所有分支,因为您尚未预定义列表。

    您可以
  • 获取分支列表(整个存储库)

  • 最简单的方法是hg log -r "last(::471694254d60 & tag() & branch(default))" > log.txt
    >hg branches
    default                     1196:878372849175
    stable                      1179:e4b737479302 (inactive)
    

    并手动将所有分支名称(第一个字段)插入日志(我的仓库和您的变更集的hg log -r "last(::471694254d60 & tag() & branch(stable))" >> log.txt + hg branch)
  • 获取纯分​​支列表(再次输入hg log)并将其通过管道传递到xargs,xargs将为单个分支执行hg branches | gawk {print $1} | \xargs -I BRANCH hg log -r "last(::471694254d60 & tag() & branch(BRANCH))" --template "{branch} {tags}\n",类似于(未测试!)

  • ojit_code

    (调试后还可以转换成shell别名)

    关于mercurial - Mercurial:确定每个合并分支上的最新标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23874500/

    10-14 04:02