tests/test-config-env.py
author Gregory Szorc <gregory.szorc@gmail.com>
Thu, 01 Mar 2018 08:27:30 -0800
changeset 36530 bde0bd50f368
parent 31857 08fbc97d1364
child 36730 a22915edc279
permissions -rw-r--r--
debugcommands: allow sending of simple commands with debugwireproto Previously, we only had support for low-level "raw" operations. A goal of `hg debugwireproto` is to allow easily performing higher-level primitives, such as sending a wire protocol command and reading its response. We implement a "command" action that does just this. Currently, we only support simple commands (those without payloads). We have basic support for sending command arguments. We don't yet support sending dictionary arguments. This will be implemented later. To prove it works, we add tests to test-ssh-proto.t that send some "listkeys" commands. Note: we don't observe/report os.read() events because these may not be deterministic. We instead observe/report the read() and readline() operations on the bufferedinputpipe. These *should* be deterministic. Differential Revision: https://phab.mercurial-scm.org/D2406

# Test the config layer generated by environment variables

from __future__ import absolute_import, print_function

import os

from mercurial import (
    encoding,
    rcutil,
    ui as uimod,
    util,
)

testtmp = encoding.environ['TESTTMP']

# prepare hgrc files
def join(name):
    return os.path.join(testtmp, name)

with open(join('sysrc'), 'w') as f:
    f.write('[ui]\neditor=e0\n[pager]\npager=p0\n')

with open(join('userrc'), 'w') as f:
    f.write('[ui]\neditor=e1')

# replace rcpath functions so they point to the files above
def systemrcpath():
    return [join('sysrc')]

def userrcpath():
    return [join('userrc')]

rcutil.systemrcpath = systemrcpath
rcutil.userrcpath = userrcpath
os.path.isdir = lambda x: False # hack: do not load default.d/*.rc

# utility to print configs
def printconfigs(env):
    encoding.environ = env
    rcutil._rccomponents = None # reset cache
    ui = uimod.ui.load()
    for section, name, value in ui.walkconfig():
        source = ui.configsource(section, name)
        print('%s.%s=%s # %s' % (section, name, value, util.pconvert(source)))
    print('')

# environment variable overrides
printconfigs({})
printconfigs({'EDITOR': 'e2', 'PAGER': 'p2'})