2010-03-16 5 views
6

Я пыталсяКак вы получаете доступ к сообщению о совершении в транзакции Mercurial?

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

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

ответ

2

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

+0

Получается, что это часть ответа (с использованием pretxncommit). Я напишу ответ с подробностями. – davidavr

8

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

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

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

+0

да, я был немного обеспокоен этим из книги, хотя «этот крюк может получить доступ к метаданным, связанным с почти новым набором изменений, но он не должен делать ничего постоянного с этими данными. Он также не должен изменять рабочий каталог». –

+2

Именно поэтому запрос и ответ на ваш собственный вопрос рекомендуется для переполнения стека. Более года спустя этот ответ действительно помог мне, когда я просматривал [очень редкую документацию] (http://mercurial.selenic.com/wiki/MercurialApi), доступную для HG API. –

 Смежные вопросы

  • Нет связанных вопросов^_^