在mercurial中,有没有办法禁用所有配置(系统,用户,回购)?

时间:2010-12-23 19:10:11

标签: mercurial

在任何非平凡的hg安装中,hgrc往往包含重要内容。

有没有办法完全忽略/绕过从系统,用户到回购级别的所有配置?

用例是在某些自动化脚本中使用一些hg核心功能。目前,如果有任何错误配置(我和我的〜/ .hgrc混乱),脚本将中止它根本不使用的东西。

这是完美的,我可以hg <whatever> --config:none

2 个答案:

答案 0 :(得分:8)

您可以通过将HGRCPATH环境变量设置为没有配置的内容来实现。

ry4an@hail [~/hg/crew] % hg showconfig | grep Ry4an
ui.username=Ry4an Brase <ry4an@msi.umn.edu>
ry4an@hail [~/hg/crew] % HGRCPATH=/dev/null hg showconfig | grep Ry4an
ry4an@hail [~/hg/crew] % 

另外,如果你从脚本调用也考虑HGPLAIN。

两者都在这里找到:https://www.mercurial-scm.org/repo/hg/file/e3b87fb34d00/mercurial/help/environment.txt

其中说:

    41 HGRCPATH
    42     A list of files or directories to search for configuration
    43     files. Item separator is ":" on Unix, ";" on Windows. If HGRCPATH
    44     is not set, platform default search path is used. If empty, only
    45     the .hg/hgrc from the current repository is read.
    46 
    47     For each element in HGRCPATH:
    48 
    49     - if it's a directory, all files ending with .rc are added
    50     - otherwise, the file itself will be added
    51 
    52 HGPLAIN
    53     When set, this disables any configuration settings that might
    54     change Mercurial's default output. This includes encoding,
    55     defaults, verbose mode, debug mode, quiet mode, tracebacks, and
    56     localization. This can be useful when scripting against Mercurial
    57     in the face of existing user configuration.
    58 
    59     Equivalent options set via command line flags or environment
    60     variables are not overridden.

答案 1 :(得分:2)

似乎没有任何想要执行的选项。但是因为文档说明了

  

(Unix,Windows)/.hg/hgrc

     

每个存储库配置选项   只适用于特定的   库。这个文件不是   版本控制,不会得到   在“克隆”期间转移   操作。 此文件中的选项   覆盖所有其他选项   配置文件。在Unix上,大多数   如果它,将忽略此文件   不属于受信任的用户或   一个受信任的组织请参阅文档   对于下面的可信部分了解更多信息   的信息。

以下脚本将读取stdin并将hg -showconfig的输出转换为可以在<repo>/.hg/hgrc写入的覆盖配置。实际上它会覆盖hg找到的所有当前配置。脚本可能需要调整,但到目前为止似乎有效。

# File override.py

import sys

config = dict()
for l in sys.stdin.readlines():
    section, sep, value = l.partition('.')
    if not section in config:
        config[section] = []
    config[section].append(value.split("=")[0])

for k in iter(config):
    print "[{0}]".format(k)
    for v in config[k]:
        print v + "="

然后可以这样使用:

> rm -f .hg/hgrc
> hg -showconfig | python override.py > .hg/hgrc