Mercurial,定义我自己的模板/关键字:hostname

时间:2015-11-05 12:32:14

标签: mercurial keyword

我需要一个mercurail模板/关键字“hostname”来获取repo所在计算机的名称(或IP)。至于我阅读维基,即“第11章自定义Mercurial的输出”,hg帮助模板和网页,我认为它应该类似于date关键字,动态扩展。如何定义自己的模板/关键字?

非常感谢你

2 个答案:

答案 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:changegrouphg help config