2015-11-05 53 views
1

我需要一個mercurail模板/關鍵字「主機名」來獲取回購所在計算機的名稱(或IP)。就我讀過的wiki而言,即「第11章定製Mercurial的輸出」,hg幫助模板和網絡,我認爲它應該與date關鍵字類似,動態擴展。我怎樣才能定義我自己的模板/關鍵字?Mercurial,定義我自己的模板/關鍵字:主機名

謝謝檸多

回答

0
  • 無論是存儲庫是本地機器(然後你就可以用hg root的絕對路徑),並通過正常的系統工具查詢名稱。你可以在你的模板還嵌入那些:

    $ hg log -r. --template="{branch}-{rev} from $(hostname) running debian $(cat /etc/debian_version)" trunk-22248 from MYHOSTNAME running debian 8.2

  • 或者你已經知道的URL(遠程路徑),以便當你需要指定它作爲參數傳遞給HG拉/克隆/去用它來操作/ incoming

  • 如果未在命令行中明確指定遠程URL,它將在[path]部分的.hgrc中指定。根本沒有遠程存儲庫時,通常在那裏定義default = URL

如果需要打印的URL,然後安裝掛鉤克隆,拉和推(也許呼出和呼入),它打印這些鉤子提供的$ URL - 或者只是changegroup鉤。檢查http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html#sec:hook:changegrouphg help config

1

下面的擴展應該做的伎倆:

from mercurial import templatekw 

testedwith = "3.5" 

_ipname = None 

def showipname(repo, ctx, templ, **args): 
    """:ipname: String. The hostname of the machine that the repository 
    resides on.""" 
    import socket 
    global _ipname 
    if not _ipname: 
    _ipname = socket.gethostname() 
    return _ipname 

def uisetup(ui): 
    templatekw.keywords["ipname"] = showipname 

然後使用(比方說):

hg log -r . -T '{node|short} at {ipname}\n' 

注意的socket.gethostname()價值可能取決於你的互聯網連接。如果您需要/etc/hostname或其他可識別您機器的值,請改用該方法。

使用擴展,把它放在一個文件,說ipnametempl.py某處,然後將下面的行添加到您的.hgrc

[extensions] 
ipnametempl=/path/to/ipnametempl.py 

這可以是您的用戶/全球hgrc或在你的倉庫中.hg/hgrc (後者如果你只想爲特定的存儲庫啓用它)。請參閱hg help hgrc以找出用戶/全局文件在您的系統上的位置。

+0

嗨雷默,聲音很好。我在哪裏必須放置這個擴展,在我的回購中的某處,或者在我的Windwos上安裝了TortoiseHG的地方的某處? –

+0

@RolandSchmitz:我已經更新了我的答案來解釋這部分。 –

+0

哇,這就是我一直在尋找! –