Существует ли эквивалент функции git "описать" для Mercurial?
В настоящее время я добавляю упаковку к тому, что поддерживается в Mercurial. В настоящее время версия определена в Makefile. Я хотел бы изменить это, чтобы я мог создавать ежедневные пакеты или файлы с правильной версией.
Git предоставляет функцию "описать", которая может дать вам описание ближайшей помеченной сборки и текущей версии. Например, если я запустил это в ядре:
git describe HEAD
Git возвращает:
v3.0-rc7-68-g51414d4
сообщит мне, что ревизия позже v3.0-rc7, с git commitish из 51414d4
Есть ли что-то подобное в Mercurial?
Ответы
Ответ 1
Может быть, что-то вроде этого?
hg log -r . --template '{latesttag}-{latesttagdistance}-{node|short}\n'
Конечно, вы должны сделать псевдоним для AliasExtension.
Обратите внимание, однако, в отличие от "git описать", эта команда всегда будет показывать части "lasttagdistance" и "node | short" вместо того, чтобы опускать их, когда максимальное значение 0.
Ответ 2
Это близкая эмуляция git describe
:
hg log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}"
Функция {sub(...)}
гарантирует, что рабочая копия точно в теге v0.1.0
будет отображаться как v0.1.0
, а не v0.1.0-0-m123456789abc
.
Обратите внимание, что m
перед хешем для m ercurial, аналогично тому, как git describe
использует g
для g.
Для удобства создайте псевдоним, добавив следующее к вашему ~/.hgrc
:
[alias]
describe = log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}"
Затем используйте псевдоним, просто набрав hg describe
.
Если вы хотите эмулировать git describe --dirty
, все становится еще более грязным - но вы все равно можете скрыть все это в псевдониме hg:
[alias]
describe = !
dirtymark=;
case " $1 " in " --dirty ") dirtymark=-dirty; ;; esac;
echo $($HG log -r . --template "{latesttag}-{latesttagdistance}-m")$($HG id -i) |
sed -r -e "s/\+\$/${dirtymark}/" -e 's/-0-m[[:xdigit:]]+//'
Теперь работающий hg describe --dirty
будет создавать строки типа:
-
v0.1.0
-
v0.1.0-dirty
-
v0.1.0-1-mf6caaa650816
-
v0.1.0-1-mf6caaa650816-dirty
Опускание опции --dirty
означает, что вы никогда не получите суффикса -dirty
типа (2) и (4), даже если рабочая копия содержит незафиксированные изменения.