2011-01-10 101 views
1

任何人使用mercurial來管理Linux內核?這有點長,但我不確定是否有答案。我想舉一些例子求助使用mercurial來管理linux內核,標籤和hg ID

這裏是我所看到的:

在linux內核,還有建築稱爲腳本/ setlocalversion時使用的命令。在此腳本中,它根據存儲庫信息設置內核版本。目前,它瞭解git,mercurial和svn回購。

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」。

在善變的,然而,代碼即可獲得本地版本是這樣的:

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的發生。然而,似乎「汞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

+0

標籤默認添加一個額外的提交,也許嘗試localtags? `tag -l` – tonfa 2011-01-10 21:25:23

+0

希望我可以,但是這被推入持續集成服務器。不幸的是,需要全球標籤。 – 2011-01-10 21:29:27

回答

3

嘗試做:

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

我認爲,你想要做什麼。

還有{latesttagdistance}它可以讓你知道你是N通過一個標籤爲方便的版本字符串。