Полезные ртутные крючки - PullRequest
23 голосов
/ 10 ноября 2009

Какие полезные крючки Mercurial вы встретили?

Несколько примеров крючков находятся в Mercurial book :

Лично я не нахожу это очень полезным. Я хотел бы видеть:

  • Отклонить несколько голов
  • Отклонить группы изменений со слияниями (полезно, если вы хотите, чтобы пользователи всегда перебазировали)
    • Отклонить группы изменений со слияниями, если в сообщении о фиксации нет специальной строки
  • Автоматические ссылки на Fogbugz или TFS (аналогично bugzilla hook)
  • Черный список, будет запрещать нажатия, которые имеют определенные идентификаторы изменений. (Полезно, если вы используете MQ для получения изменений из других клонов)

Пожалуйста, придерживайтесь крючков, которые имеют либо bat и bash, либо Python. Таким образом, они могут использоваться как * nix, так и пользователями Windows.

Ответы [ 4 ]

16 голосов
/ 10 ноября 2009

Мой любимый хук для официальных репозиториев - тот, который отказывается от нескольких голов. Здорово, когда у вас есть система непрерывной интеграции, для которой требуется автоматическая сборка после слияния.

Вот несколько примеров: 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
9 голосов
/ 27 ноября 2010

Я только что создал небольшой хук pretxncommit, который проверяет наличие вкладок и конечных пробелов и довольно хорошо сообщает об этом пользователю. Он также предоставляет команду для очистки этих файлов (или всех файлов).

См. Расширение CheckFiles .

5 голосов
/ 11 мая 2011

Это еще один хороший крючок. Это позволяет использовать несколько головок, но только если они находятся в разных ветвях.

Одна головка на ветвь

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
0 голосов
/ 03 декабря 2015

Мне нравится упомянутый выше крючок Single Head Per Branch; однако branchtags() следует заменить на branchmap(), поскольку branchtags () больше не доступен. (Я не мог прокомментировать этот вопрос, поэтому воткнул его сюда).

Мне также нравится крюк из https://bobhood.wordpress.com/2012/12/14/branch-freezing-with-mercurial/ для замороженных веток. Вы добавляете раздел в свою 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), транзакция будет прервана.

...