4

簡単に

Mercurialの複数のチェンジセットに同じタグを付けるにはどうすればよいですか?おそらく同じブランチ上、おそらく異なるブランチ上。

たとえば、完全なQAテストが実行されたかどうかを示すタグのようなものです。

ファイルを編集することでタグの複数のインスタンスを作成できますが、hgツールはほとんどの場合最初のものを除いてすべてを無視します。

詳細

私はチェンジセットを「属性」と呼んでいるものを探しています。これは、他のCVSやDVCSで使用した概念ですが、Mercurialでは見つけることができないようです。

基本的に、属性はタグに非常によく似ていますが、タグが単一のチェンジセットのみを参照することになっている場合、属性は複数のチェンジセットに適用される場合があります。

Q:誰かがこれを行う方法を知っていますか?

同様に:チェンジセットが作成された後、チェンジセットに説明を添付する方法はありますか。履歴を書き直したくないことに注意してください。元のチェックインメッセージを削除、変更、または置き換えたくありません。さらにいくつか追加したいのですが、hglogなどのクエリにさらに多くのものを表示させます。例:「df..a3をコミットするためにファイルを追加するのを忘れました-代わりに、不足しているファイルをチェックインした8f..77をコミットするようにしてください。

詳細の説明

私は知っています-hgtag-fを実行して、タグを複数のチェンジセットに適用するように強制できます。しかし、他の多くのhgタグ関連機能は、実際にはタグごとに1つの変更でのみ機能します。または、降下線ごと、つまり頭ごとに少なくとも1つのチェンジセットのみ。

したがって、タグを永久に定義したままにしておくことができます。私はそのようなタグに日付や他のコンテキストを配置するのが好きです-例えばtests-pass-2012-01-14。

または、上に移動する「フローティングタグ」を設定することもできます。たとえば、「すべての低速テストに合格する最新のリビジョン」は、単に「テストパス」と呼ぶことがあります。

(ちなみに、チェックイン後にそのような属性またはタグを適用することができます-特にQAプロセスが遅い場合、おそらくスモークテストが速く、その後にテストの完全なセットが遅くなり、完了するまでに1週間かかる場合があります。 、その後、戻って属性である一意の日付付きタグを適用します。さらにテストが追加された場合など、後で戻ってそのようなタグを変更する必要がある場合があります。これにより、以前はすべてのテストに合格していたチェンジセットがたとえば、all-tests-pass-2012-01-14とall-tests-pass-2012-01-15は、同じチェンジセットに適用される場合があります。)

しかし、そのような固定タグを一意化する必要があるのは面倒です。したがって、私が属性と呼んでいるのは、バージョン管理されている複数のチェンジセットに適用されるタグです。したがって、all-tests-passをrev 105に適用し、後で106と107に適用することができます。しかし、新しいテストが106で失敗することに気付いたので、返信します。

その場合、属性履歴は次のようになります。

105:
    tagged all-tests-pass on 2012-01-14-10h00 (in changeset XXX)
    tagged all-tests-pass on 2012-01-15-10h00 (in changeset YYY)

106:
    tagged all-tests-pass on 2012-01-14-13h00 (in changeset XXX)
    tagged not-all-tests-pass on 2012-01-15-13h00 (in changeset YYY)

107:
    tagged all-tests-pass on 2012-01-14-14h00 (in changeset XXX)
    tagged all-tests-pass on 2012-01-15-10h00 (in changeset YYY)

とのようなrevsetクエリ

 105::107 and current_attribute_tag(all-tests-pass)

= YYYがリポジトリにあるときまたはその後の最新の105および107を返します=ただし、YYYを含まないように複製された場合は105、106、107を返します

その間

 105::107 and attribute_tag_at_any_time(all-tests-pass)

=リポジトリがXXXを保持している場合、いつでも105106と107を返します

===

こんなことができるようになりたい

  • hg bisectを実行しますが、tests-passとタグ付けされたチェンジセットでのみ実行します。

  • hglogおよびglogから特定のログメッセージを除外する

===

ちなみに、バージョン管理されていないため、この目的のためにフェーズとブックマークを拒否します。そして、これらの属性タグをVC化して、前述のように、すべてのテストに合格するまでの流れをたどることができるようにします。

Mercurialブランチは実際には変更セットの属性であり、ブランチではないため、ブランチはほとんど私が欲しいものです。しかし、変更セットに関連付けられているブランチは、コミット後に変更できるとは思いません。

(コミットした後、チェンジセットをブランチに切り替えることができることを本当に望んでいます。これを「レトロアクティブブランチ」機能と呼びます。)

===

これが私が属性を必要とする理由の典型的な例です:VCSにファイルを追加するのを忘れたことがありますか?そして、ビルドに失敗するチェンジセットがありますか?後続のchangestにファイルを追加しますか?..。

チェンジセットをwill-not-build--missing-filesとしてさかのぼってマークできるようにしたいと思います。そして、そのようなチェンジセットを見ることさえ気にしないでください。

4

1 に答える 1

3

これを見てください:Mercurialのカスタムリビジョンプロパティ?

属性のネイティブサポートはありません。拡張機能を書くことができます(extraチェンジセットで保存されるプロパティの辞書があります)。

または、タグごとに複数のチェンジセットを使用してハッキングすることもできます(提案したとおり)。

または、新しいall-tests-passブランチと一緒にハックして、すべてのテストに合格したときにCIサーバーをそのブランチにマージすることもできます(その場合、バイセクトはデフォルトのヒントであり、all-tests-passのヒントになります)。

しかし、簡単な答えは、それを行うための既存のネイティブな方法がないということです。

于 2012-07-10T08:12:40.033 に答える