3

特定のリビジョンにマージされたタグを特定するには、次のようなコマンドを使用します。

$ 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 コマンドを使用したり、事後に結果をフィルタリングしたりせずに)?

4

1 に答える 1

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"

(そしてhg ltb 471694254d60 | <command>シェル内で結果が生成されます)

  • 美化と短縮のために、完全なパイプ コマンド さらに shell-alias に変換され、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 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 にパイプします。これは、(テストされていません!!hg logのような単一のブランチに対して実行されます。

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

(デバッグ後も shell-alias に変換可能)

于 2014-06-03T06:46:36.043 に答える