Подтвердить что ты не робот

Полезные Mercurial Kooks

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

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

Я лично не считаю их очень полезными. Я хотел бы видеть:

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

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

4b9b3361

Ответ 1

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

Несколько примеров приведены здесь: 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

Ответ 2

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

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

Ответ 3

Другим хорошим крюком является этот. Он допускает несколько головок, но только если они находятся в разных ветвях.

Одиночная головка на ветку

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

Ответ 4

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

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