22

あなたが遭遇したいくつかの有用なMercurialフックは何ですか?

いくつかのフックの例はMercurialの本にあります:

個人的には、これらはあまり役に立ちません。を見たいのですが:

  • 複数のヘッドを拒否する
  • マージを使用して変更グループを拒否します(ユーザーに常にリベースさせたい場合に便利です)
    • コミットメッセージに特別な文字列が含まれていない限り、マージを使用して変更グループを拒否します
  • FogbugzまたはTFSへの自動リンク(bugzillaフックと同様)
  • ブラックリストは、特定のチェンジセットIDを持つプッシュを拒否します。(MQを使用して他のクローンから変更をプルする場合に便利です)

batとbash、またはPythonのいずれかを持つフックに固執してください。そうすれば、*nixユーザーとWindowsユーザーの両方が使用できます。

4

4 に答える 4

16

正式なリポジトリの私のお気に入りのフックは、複数のヘッドを拒否するフックです。自動的に構築するためにマージ後のヒントが必要な継続的インテグレーションシステムがある場合に最適です。

いくつかの例を次に示します。MercurialWiki:TipsAndTricks-複数のヘッドを作成するプッシュを防止します

Netbeansのこのバージョンを使用します。

# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
#
# To forbid pushes which creates two or more headss
#
# [hooks]
# pretxnchangegroup.forbid_2heads = python:forbid2_head.forbid_2heads

from mercurial import ui
from mercurial.i18n import gettext as _

def forbid_2heads(ui, repo, hooktype, node, **kwargs):
    if len(repo.heads()) > 1:
        ui.warn(_('Trying to push more than one head, try run "hg merge" before it.\n'))
        return True
于 2009-11-10T16:12:43.463 に答える
9

タブと末尾の空白をチェックし、それをユーザーにかなりうまく報告する小さなpretxncommitフックを作成しました。また、これらのファイル(またはすべてのファイル)をクリーンアップするためのコマンドも提供します。

CheckFiles拡張機能を参照してください。

于 2010-11-26T21:36:09.977 に答える
5

もう一つの良いフックはこれです。複数のヘッドを使用できますが、それらが異なるブランチにある場合に限ります。

ブランチごとに単一のヘッド

def hook(ui, repo, **kwargs):
    for b in repo.branchtags():
        if len(repo.branchheads(b)) > 1:
            print "Two heads detected on branch '%s'" % b
            print "Only one head per branch is allowed!"
            return 1
    return 0
于 2011-05-11T17:12:56.947 に答える
0

私は上記のブランチごとのシングルヘッドフックが好きです。ただし、branchtags()は使用できなくなっbranchtags()たため、に置き換える必要があります。branchmap()(コメントできなかったので、ここに貼り付けました)。

また、 https: //bobhood.wordpress.com/2012/12/14/branch-freezing-with-mercurial/のFrozenBranchesのフックも気に入っています。次のようにhgrcにセクションを追加します。

[frozen_branches]
freeze_list = BranchFoo, BranchBar

フックを追加します。

def frozenbranches(ui, repo, **kwargs):
    hooktype = kwargs['hooktype']
    if hooktype != 'pretxnchangegroup':
        ui.warn('frozenbranches: Only "pretxnchangegroup" hooks are supported by this hook\n')
        return True
    frozen_list = ui.configlist('frozen_branches', 'freeze_list')
    if frozen_list is None:
        # no frozen branches listed; allow all changes
        return False
    try:
        ctx = repo[kwargs['node']]
        start = ctx.rev()
        end = len(repo)

        for rev in xrange(start, end):
            node = repo[rev]
            branch = node.branch()
            if branch in frozen_list:
                ui.warn("abort: %d:%s includes modifications to frozen branch: '%s'!\n" % (rev, node.hex()[:12], branch))
                # reject the entire changegroup
                return True
    except:
        e = sys.exc_info()[0]
        ui.warn("\nERROR !!!\n%s" % e)
        return True

    # allow the changegroup
    return False

凍結されたブランチ(BranchFoo、BranchBarなど)を更新しようとすると、トランザクションは中止されます。

于 2015-12-03T18:15:35.940 に答える