我需要一个mercurail模板/关键字“hostname”来获取repo所在计算机的名称(或IP)。至于我阅读维基,即“第11章自定义Mercurial的输出”,hg帮助模板和网页,我认为它应该类似于date关键字,动态扩展。如何定义自己的模板/关键字?
非常感谢你
答案 0 :(得分: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
以了解系统中用户/全局hgrc
文件的位置。
答案 1 :(得分: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 pull / clone / outgoing / incoming的参数
如果未在命令行中明确指定远程URL,则会在[path]部分的.hgrc中指定。当根本没有远程存储库时,通常会在那里定义default = URL
。
如果您需要打印的URL,则安装用于克隆,拉取和推送(以及可能是传出和传入)的挂钩,以打印这些挂钩中可用的$ URL - 或者可能只是更改组挂钩。查看http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html#sec:hook:changegroup和hg help config
。