view tests/test-config-env.py @ 41304:76873548b051 stable

partialdiscovery: avoid `undecided` related computation sooner than necessary Changeset 1d30be90c move the update of the `undecided` set within the `partialdiscovery` object in order to clarify the API. The update to the `undecided` set was unconditional in 1d30be90c and the first access to the `self.undecided` property triggered the initial computation of the set of undecided revisions. As a result, the set was computed much earlier, at a time where less information is available, immediately followed by an update of this set to remove common revisions. To fix this regression, we ignore the `undecided` related logic in `addcommons` when that `undecided` set has not been computed yet. Code that actually needs to know the `undecided` set will trigger its computation later. The change has no effects on semantic because the initial computation `undecided` set takes all knowns `common` into account. Example performance running `hg debugdiscovery` from a pypy repo missing 10 changesets: 870a89c6909d: 52.3ms (regression parent) 1d30be90c9dc: 72.0ms (regression) 5a5f504a7175: 64.8ms (this fix parent) this fix: 52.6ms
author Boris Feld <boris.feld@octobus.net>
date Wed, 23 Jan 2019 18:07:42 -0500
parents d4a2e0d5d042
children 2372284d9457
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,
    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')]

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)
        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'})