Использование Mercurial для управления ядром Linux, тегами и идентификатором hg - PullRequest
1 голос
/ 11 января 2011

Кто-нибудь использует 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?

1 Ответ

3 голосов
/ 11 января 2011

Попробуйте сделать:

hg log -r . --template '{latesttag}'

Я думаю, что делает то, что вы хотите.

Также есть {latesttagdistance}, который может дать вам знать, что вы N передали тег для удобной строки версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...