2

ローカルでBADタグ名を追加しないように(処理中の)フックを作成します。

.hg / hgrc

pretag.badtagname = python:.hg / hgcheck.py:localbadtag

.hg / hgcheck.py

goodtag_re = r'(ver- \ d+\。\d+\。\d+ | tip)$'
def localbadtag(ui、repo、hooktype、node、** kwargs):
    assert(hooktype =='pretag')
    re_ = re.compile(goodtag_re)
    re_.match(tag)でない場合:
        ui.warn('無効なタグ名"%s"。\ n'%タグ)
        ui.warn('ヒントの1つ、ver-xx.xx.xxを使用\ n')
        Trueを返す
    Falseを返します

pretxnchangegroupフックのこのチェックをどのように行いますか?

私はこのコードを書いてみます:

def pushbadtag(ui、repo、hooktype、node、** kwargs):
    assert(hooktype =='pretxnchangegroup')
    re_ = re.compile(goodtag_re)
    xrange(repo [node] .rev()、len(repo))のrevの場合:
        ui.warn('rev:%d \ n'%rev)
        repo [rev] .tags()のタグの場合:
            ui.warn('タグ:'+タグ+'\ n')
            re_.match(tag)でない場合:
                ui.warn('revの無効なタグ名"%s": "%s"。\ n'%(tag、rev))
                ui.warn('ヒントの1つ、ver-xx.xx.xxを使用\ n')
                Trueを返す
    Falseを返します

しかし、私が(上部の pretxnchangegroupフックを有効にしてリポジトリにプッシュする場合:

  $hgタグgg
  $ hg push -f
/ cygdrive / d / home / tmp / hg/goodにプッシュ
変更を検索する
チェンジセットの追加
マニフェストの追加
ファイル変更の追加
1つのファイルに1つの変更を加えた1つのチェンジセットを追加しました(+1ヘッド)
rev:35
タグ:ヒント

rev.tags()がggタグを返さないことがわかります!

4

1 に答える 1

3

*解釈された質問:なぜタグをrev.tags()返さないのですか?gg

rev.tags()ggプッシュしたリビジョンにはそのタグがないため、はタグを返しません。デフォルトでhg tagは、作業ディレクトリの親にタグが付けられます。.hgtags新しいチェンジセットはファイルに追加するだけです。タグは、両方のリポジトリにすでにあるチェンジセットに追加されました。いくつかの変更を加えてコミットしてからタグを付けて、2つのチェンジセットをプッシュし、1つに不正なタグが付けられるようにします。

また、タグ付けの仕組みにより、どのリビジョンにタグが付いているかは実際にはわかりません。新しいチェンジセットは、はるかに以前のチェンジセットにタグを追加した可能性があります。おそらく、誰かが悪いタグを押しているかどうかを確認するためのより良い方法は、新しいチェンジセットがに加えた追加を調べること.hgtagsです。

への変更を解析する場合.hgtagsは、タグを削除しているエントリから誤検知が発生しないように、これらの変更を正しく解析する必要があります。また、最初の検索で壊れるのではなく、不良タグの完全なリストを収集することもできます。チェンジセットにタグを追加する行が見つかる場合がありますggが、後でそれを削除する2行があります。これにより、ユーザーがプッシュする前に不正なタグを削除したことを意味するため、検索も削除され、フックが正常に通過できるようになります。

于 2011-07-19T13:20:40.527 に答える