Кто-нибудь использует Mercurial для управления ядром Linux? Это немного долго, но я не уверен, есть ли ответ на это. Я хотел бы привести несколько примеров помощи
Вот что я вижу:
Внутри ядра Linux есть команда, используемая при сборке, которая называется scripts / setlocalversion. Внутри этого скрипта он устанавливает версию ядра на основе информации о хранилище. В настоящее время он понимает git, mercurial и svn repo.
Для git он создает тег с таким кодом:
if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
# If we are at a tagged commit (like "v2.6.30-rc6"), we ignore it,
# because this version is defined in the top level Makefile.
if [ -z "`git describe --exact-match 2>/dev/null`" ]; then
# If we are past a tagged commit (like "v2.6.30-rc5-302-g72357d5"),
# we pretty print it.
if atag="`git describe 2>/dev/null`"; then
echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}'
.....
Итак, вот пример, который я сделал, чтобы понять, как это работает:
[1536][mcrowe:test]$ git tag -a -m"Creating a tag" KernelTest
[1537][mcrowe:test]$ git rev-parse --verify --short HEAD
d024e76
[1537][mcrowe:test]$ git describe --exact-match
KernelTest
[1537][mcrowe:test]$ git describe
KernelTest
Итак, в этом примере для локальной версии будет установлено значение «KernelTest» при сборке ядра.
Однако в Mercurial код для получения локальной версии выглядит так:
if hgid=`hg id 2>/dev/null`; then
tag=`printf '%s' "$hgid" | cut -d' ' -f2`
# Do we have an untagged version?
if [ -z "$tag" -o "$tag" = tip ]; then
id=`printf '%s' "$hgid" | sed 's/[+ ].*//'`
printf '%s%s' -hg "$id"
fi
....
Я ожидал, что смогу пометить релиз, и этот тег будет тем, что использует этот скрипт, как это происходит в git. Однако, похоже, что «hg id» никогда не печатает тег, как ожидает этот скрипт:
[1546][mcrowe:test2]$ hg tag -m"Creating a tag" KernelTest -r tip
[1548][mcrowe:test2]$ hg id
3ccda5e738ae+ tip
[1548][mcrowe:test2]$ hg tags
tip 115:3ccda5e738ae
KernelTest 114:be25df80ce76
Так что акт тегирования изменяет ревизию, так что hg id никогда не покажет, что это за тег.
Основной вопрос : AFAIK, это никогда не будет работать для ядра Linux. Вопрос в том, как это реализовать в дереве ядра, чтобы hg tag
работал как git tag
?