我需要一个mercurail模板/关键字“主机名”来获取回购所在计算机的名称(或IP)。就我读过的wiki而言,即“第11章定制Mercurial的输出”,hg帮助模板和网络,我认为它应该与date关键字类似,动态扩展。我怎样才能定义我自己的模板/关键字?Mercurial,定义我自己的模板/关键字:主机名
谢谢柠多
我需要一个mercurail模板/关键字“主机名”来获取回购所在计算机的名称(或IP)。就我读过的wiki而言,即“第11章定制Mercurial的输出”,hg帮助模板和网络,我认为它应该与date关键字类似,动态扩展。我怎样才能定义我自己的模板/关键字?Mercurial,定义我自己的模板/关键字:主机名
谢谢柠多
无论是存储库是本地机器(然后你就可以用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:changegroup和hg help config
。
下面的扩展应该做的伎俩:
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
以找出用户/全局文件在您的系统上的位置。
嗨雷默,声音很好。我在哪里必须放置这个扩展,在我的回购中的某处,或者在我的Windwos上安装了TortoiseHG的地方的某处? –
@RolandSchmitz:我已经更新了我的答案来解释这部分。 –
哇,这就是我一直在寻找! –