Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In mercurial, is there a way to disable ALL configurations (system, user, repo)?

Tags:

mercurial

On any non-trivial hg installation, the hgrc's tend to contain significant stuff.

Is there a way to completely ignore/bypass ALL configurations, from system, user, to repo-level?

The use case is to use some hg core functionalities in some automation scripts. Currently, if anything is misconfigured (and I mess with my ~/.hgrc a lot), the scripts will abort for something it doesn't use at all.

It'd be perfect is I can just hg <whatever> --config:none.

like image 268
Geoffrey Zheng Avatar asked Dec 23 '10 19:12

Geoffrey Zheng


2 Answers

You can do it by setting your HGRCPATH environment variable to something with no configuration in it.

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

Also if you're invoking from a script consider HGPLAIN too.

Both found here: https://www.mercurial-scm.org/repo/hg/file/e3b87fb34d00/mercurial/help/environment.txt

Which says:

    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.
like image 99
Ry4an Brase Avatar answered Sep 30 '22 20:09

Ry4an Brase


There doesn't seem to have any option to perform want you want. But since the documentation states that

(Unix, Windows) /.hg/hgrc

Per-repository configuration options that only apply in a particular repository. This file is not version-controlled, and will not get transferred during a "clone" operation. Options in this file override options in all other configuration files. On Unix, most of this file will be ignored if it doesn't belong to a trusted user or to a trusted group. See the documentation for the trusted section below for more details.

The following script will read the stdin and convert the output of hg -showconfig to an override config that could be written at <repo>/.hg/hgrc. Effectively it overrides all the current config found by hg. The script might have to be tweaked but it seems to work so far.

# 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 + "="

It can then be used as such:

> rm -f .hg/hgrc
> hg -showconfig | python override.py > .hg/hgrc
like image 28
Rod Avatar answered Sep 30 '22 19:09

Rod