Все еще нуждаясь во что-то, чтобы попытаться поддерживать порядок и соответствие различных сборок разработки, я сначала попытался использовать метку времени unix последнего коммита:
REV=$(hg tip --template '{date|hgdate}' | cut -f1 -d' ')
Это, однако, раздражающе долго (10 цифр). (И, конечно, это не гарантировано, чтобы быть уникальным, но в проекте, где я являюсь единственным разработчиком, вероятность двух коммитов в одну секунду, по сути, равна 0; фактически, вероятность двух коммитов в течение 1 минуты друг друга по сути 0.)
Поскольку «базовый» номер версии (часть, к которой добавляется этот номер редакции) изменяется только сразу после помеченного выпуска, я в итоге использовал количество минут между подсказкой и последним помеченным предком:
HG_LAST_TAG_TIMESTAMP=$(hg log -r "$(hg log -r '.' --template '{latesttag}')" --template "{date|hgdate}\n" | cut -f1 -d' ')
HG_TIP_TIMESTAMP=$(hg log -r '.' --template "{date|hgdate}\n" | cut -f1 -d' ')
REV=$(( ($HG_TIP_TIMESTAMP - $HG_LAST_TAG_TIMESTAMP) / 60 ))
( edit : использование tip
было ошибкой, поскольку оно относится к последней фиксации в любой ветви; использование log -r '.'
относится к ревизии, на которой основана рабочая копия.)