Ключевые слова могут раскрываться только в одну строку, поэтому вы не можете получить CVS-подобное поведение, когда сообщения журнала продолжают накапливать . Это задокументировано в hg help keyword
после включения расширения.
Сообщения коммита доступны с ключевым словом шаблона {desc}
в Mercurial, поэтому вы можете добавить
[keywordmaps]
Log = {desc}
[keyword]
**.c =
для расширенной строки $Log$
во всех .c
файлах.
Обратите внимание, что расширение ключевого слова дает CVS-подобный взгляд на мир в том, как он работает для каждого файла. Mercurial обычно работает на основе хранилища. Если вы делаете
$ hg commit -m "Fixed bug 123" foo.c # create changeset 10:84e0d0dc9ce5
$ hg commit -m "Fixed bug 234" bar.c # create changeset 11:2e85d7f2f93e
тогда верно, что foo.c
последний раз был изменен в 10-й ревизии, но нельзя сказать, что ревизия 11 содержит только bar.c
. Файл foo.c
также является частью ревизии 11 - вполне вероятно, что изменение на bar.c
зависит от предыдущего изменения на foo.c
, и поэтому снимок в ревизии 11 фиксирует состояние обоих foo.c
и bar.c
.
Расширение для ключевых слов работает по каждому файлу при расширении ключевых слов: оно будет записывать $Log: Fixed bug 123 $
в foo.c
и $Log: Fixed bug 234 $
в bar.c
при каждом обновлении до набора изменений 2e85d7f2f93e.
Если вы хотите увидеть, почему и когда каждый файл был последний раз затронут, тогда это будет делать то, что вы хотите. Если вы хотите знать глобальное состояние вашего хранилища - например, использовать его как строку версии! - тогда это неправильно. Проблема в том, что ваш файл version.h
не изменится в течение длительного периода времени, когда вы разрабатываете, и поэтому ключевые слова в этом файле также останутся неизменными.
В этом случае вы должны просто запустить hg id
как часть вашего Makefile
. Вы можете сделать это более причудливым с чем-то вроде:
$ hg parents --template '{latesttag}+{latesttagdistance}-{node|short}\n'
, которая выведет строку типа 2.1+117-eed1e5bba9a8
. Это означает, что ваша текущая версия (eed1e5bba9a8) составляет 117 коммитов после последнего тега (2.1). Это позволяет пользователям легко сравнивать сборки, сделанные из одного и того же центрального репозитория, и вы все равно можете однозначно воспроизвести сборку, если вам нужно.