Я пробовал
def debug_hook(ui, repo, **kwargs):
changectx = repo[None]
ui.status('change.desc: %s\n' % changectx.description())
return True
Но это всегда печатает пустую строку. Это вызвано тем, что это - рычаг перед фиксацией, и сообщение еще не доступно? Или я просто пропускаю что-то очевидное?
Оказалось, что в моем первоначальном подходе есть две ошибки:
precommit
происходит до фиксации, поэтому метаданные для фиксации обрабатывается еще не существует. При использовании pretxncommit
вместо этого метаданные существуют, но транзакция еще не зафиксирована в базе данных. changectx = repo [None]
дает вам контекст изменения для рабочего каталога. Но нам нужна информация о текущем коммите, поэтому использование changectx = repo ['tip']
вместо этого дает нам самые последние метаданные. Обратите внимание, что если вы используете changectx = repo ['tip']
с событием precommit
, вы фактически получите обработанный последний коммит, а не текущий, с которым вы работаете. на.
Думаю, вы правы, что в режиме предварительной фиксации сообщения еще не существует. если вы используете pretxncommit, он будет, но я не уверен на 100%, что он позволяет вам делать в этот момент, поскольку транзакция почти завершена.