view tests/test-config-env.py @ 46758:7f6c002d7c0a

split: close transaction in the unlikely event of a conflict while rebasing `hg split` *should* never result in conflicts, but in case there are bugs, we should at least commit the transaction so they can continue the rebase. One of our users ran into the regression fixed by D10120. They fixed the conflict and the tried to continue the rebase, but it failed with "abort: cannot continue inconsistent rebase" because the rebase state referred to commits written in a transaction that was never committed. Side note: `hg split` should probably turn off copy tracing to reduce the impact of such bugs, and to speed it up as well. Copies made in the rebased commits should still be respected because `hg rebase` calls `copies.graftcopies()`. Differential Revision: https://phab.mercurial-scm.org/D10164
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 12 Mar 2021 09:15:40 -0800
parents 2d4cad94d08a
children 6000f5b25c9b
line wrap: on
line source

# Test the config layer generated by environment variables

from __future__ import absolute_import, print_function

import os

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

from mercurial.utils import procutil

testtmp = encoding.environ[b'TESTTMP']

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


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

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

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


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


extensions.wrapfunction(rcutil, 'default_rc_resources', lambda orig: [])

rcutil.systemrcpath = systemrcpath
rcutil.userrcpath = userrcpath

# 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)
        procutil.stdout.write(
            b'%s.%s=%s # %s\n' % (section, name, value, util.pconvert(source))
        )
    procutil.stdout.write(b'\n')


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