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