Как я могу установить или изменить сообщение коммита из расширения Mercurial? - PullRequest
3 голосов
/ 21 октября 2011

Я пытаюсь изменить это расширение Mercurial , чтобы предложить пользователю добавить номер дела FogBugz в его сообщение о коммите.В идеале я хотел бы, чтобы пользователь просто набирал число после запроса и автоматически добавлял его к сообщению о фиксации.

Вот что я получил до сих пор:

def pretxncommit(ui, repo, **kwargs):
    tip = repo.changectx(repo.changelog.tip())
    if not RE_CASE.search(tip.description()) and len(tip.parents()) < 2:
        casenumResponse = ui.prompt('*** Please specify a case number, x to abort, or hit enter to ignore:', '')
        casenum = RE_CASENUM.search(casenumResponse)        
        if casenum:
            # this doesn't work!
            # tip.description(tip.description() + ' (Case ' + casenum.group(0) + ')')
            return True
        elif (casenumResponse == 'x'):
            ui.warn('*** User aborted\n')
            return True
        return True
    return False

То, что я не смог найти, - это способ отредактировать сообщение коммита.tip.description, похоже, доступен только для чтения, и я не видел ничего в документации или примерах, которые позволили бы мне его изменить.Единственные ссылки, которые я видел для редактирования сообщений коммита, имеют отношение к исправлениям и расширению Mq, и, похоже, это не поможет.

Любые идеи относительно того, как я могу установить сообщение коммита

Ответы [ 2 ]

6 голосов
/ 22 октября 2011

Я не смог найти способ с помощью ловушки, но я смог сделать это, используя extensions.wrapcommand и изменив параметры.

Я включил источник полученного расширения здесь.

При обнаружении отсутствия сообщения в сообщении о фиксации моя версия предлагает пользователю ввести его, игнорировать предупреждение или отменить принятие.

Если пользователь отвечает на приглашениеуказав номер дела, он добавляется к существующему сообщению о фиксации.

Если пользователь отвечает «x», фиксация отменяется, а изменения остаются невыполненными.

Если ответ пользователяпросто нажав Enter, коммит продолжает исходное сообщение фиксации без учета регистра.

Я также добавил опцию nofb, которая пропускает запрос, если пользователь целенаправленно делает коммит без номера регистра.

Вот расширение:

"""fogbugzreminder

Reminds the user to include a FogBugz case reference in their commit message if none is specified
"""

from mercurial import commands, extensions
import re

RE_CASE = re.compile(r'(case):?\s*\d+', re.IGNORECASE)
RE_CASENUM = re.compile(r'\d+', re.IGNORECASE)

def commit(originalcommit, ui, repo, **opts):

    haschange = False   
    for changetype in repo.status():
        if len(changetype) > 0:
            haschange = True

    if not haschange and ui.config('ui', 'commitsubrepos', default=True):
        ctx = repo['.']
        for subpath in sorted(ctx.substate):
            subrepo = ctx.sub(subpath)
            if subrepo.dirty(): haschange = True

    if haschange and not opts["nofb"] and not RE_CASE.search(opts["message"]):

        casenumResponse = ui.prompt('*** Please specify a case number, x to abort, or hit enter to ignore:', '')
        casenum = RE_CASENUM.search(casenumResponse)        

        if casenum:         
            opts["message"] += ' (Case ' + casenum.group(0) + ')'
            print '*** Continuing with updated commit message: ' + opts["message"]          
        elif (casenumResponse == 'x'):
            ui.warn('*** User aborted\n')
            return False    

    return originalcommit(ui, repo, **opts)

def uisetup(ui):    
    entry = extensions.wrapcommand(commands.table, "commit", commit)
    entry[1].append(('', 'nofb', None, ('suppress the fogbugzreminder warning if no case number is present in the commit message')))

Чтобы использовать это расширение, скопируйте источник в файл с именем fogbugzreminder.py.Затем в файле Mercurial.ini (или hgrc, независимо от ваших предпочтений) добавьте следующую строку в раздел [extensions]:

fogbugzreminder=[path to the fogbugzreminder.py file]
0 голосов
/ 22 октября 2011

Вы не можете изменить сообщение коммита без изменения набора изменений.

Я бы посоветовал изучить ловушку предварительной фиксации, которая запрещает фиксацию, если ошибка отсутствует.

...