Как получить доступ к сообщению фиксации в обработчике Mercurial? - PullRequest
6 голосов
/ 16 марта 2010

Я пытался

def debug_hook(ui, repo, **kwargs):
    changectx = repo[None]
    ui.status('change.desc: %s\n' % changectx.description())
    return True

Но всегда печатается пустая строка. Это из-за того, что это ловушка предварительной передачи, а сообщение еще не доступно? Или я просто упускаю что-то очевидное?

Ответы [ 2 ]

8 голосов
/ 17 марта 2010

Оказывается, в моем первоначальном подходе есть две ошибки:

  1. Как указывало jk , событие precommit происходит до принятия, поэтому метаданные дляобрабатываемый коммит еще не существует.Вместо этого, используя pretxncommit, метаданные существуют, но транзакция еще не зафиксирована в базе данных.
  2. Использование changectx = repo[None] дает вам контекст изменения для рабочего каталога.Но нам нужна информация о текущем коммите, поэтому использование changectx = repo['tip'] дает нам самые последние метаданные.

Обратите внимание, что если вы используете changectx = repo['tip'] с событием precommit, вы будетефактически обрабатывается последний коммит, а не текущий, над которым вы работаете.

2 голосов
/ 17 марта 2010

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

...