2015-11-05 51 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

哇,这就是我一直在寻找! –