##// END OF EJS Templates
rhg: Remove `rhg.fallback-executable=hg` default configuration...
rhg: Remove `rhg.fallback-executable=hg` default configuration When `rhg.on-unsupported` is configured to `fallback` and an unsupported feature is encountered, the previous default was to look for an `hg` executable in `$PATH`. This default was fragile since it was easy to end up accidentally using an older version of Mercurial installed system-wide, when a local (perhaps patched) installation was intended. Instead, it is now an error to have `rhg.on-unsupported=fallback` without also configuring an explicit path or the fallback executable. Differential Revision: https://phab.mercurial-scm.org/D10189

File last commit:

r47368:b91a695b default
r47482:bde90e9b default
Show More
test-config.t
501 lines | 10.3 KiB | text/troff | Tads3Lexer
FUJIWARA Katsunori
tests: rename from test-config-case.t to test-config.t for centralization...
r19086 hide outer repo
$ hg init
Pierre-Yves David
test-config: add tests for invalid syntax...
r22275 Invalid syntax: no value
$ cat > .hg/hgrc << EOF
> novaluekey
> EOF
$ hg showconfig
Martin von Zweigbergk
errors: raise ConfigError on failure to parse config file...
r46506 config error at $TESTTMP/.hg/hgrc:1: novaluekey
[30]
Pierre-Yves David
test-config: add tests for invalid syntax...
r22275
Invalid syntax: no key
$ cat > .hg/hgrc << EOF
> =nokeyvalue
> EOF
$ hg showconfig
Martin von Zweigbergk
errors: raise ConfigError on failure to parse config file...
r46506 config error at $TESTTMP/.hg/hgrc:1: =nokeyvalue
[30]
Pierre-Yves David
test-config: add tests for invalid syntax...
r22275
Razvan Cojocaru
config: highlight parse error caused by leading spaces (issue3214)...
r22276 Test hint about invalid syntax from leading white space
$ cat > .hg/hgrc << EOF
> key=value
> EOF
$ hg showconfig
Martin von Zweigbergk
errors: raise ConfigError on failure to parse config file...
r46506 config error at $TESTTMP/.hg/hgrc:1: unexpected leading whitespace: key=value
[30]
Razvan Cojocaru
config: highlight parse error caused by leading spaces (issue3214)...
r22276
$ cat > .hg/hgrc << EOF
> [section]
> key=value
> EOF
$ hg showconfig
Martin von Zweigbergk
errors: raise ConfigError on failure to parse config file...
r46506 config error at $TESTTMP/.hg/hgrc:1: unexpected leading whitespace: [section]
[30]
Razvan Cojocaru
config: highlight parse error caused by leading spaces (issue3214)...
r22276
Pierre-Yves David
test-config: add tests for invalid syntax...
r22275 Reset hgrc
$ echo > .hg/hgrc
FUJIWARA Katsunori
tests: rename from test-config-case.t to test-config.t for centralization...
r19086 Test case sensitive configuration
Yuya Nishihara
tests: write hgrc of more than two lines by using shell heredoc...
r23172 $ cat <<EOF >> $HGRCPATH
> [Section]
> KeY = Case Sensitive
> key = lower case
> EOF
FUJIWARA Katsunori
tests: rename from test-config-case.t to test-config.t for centralization...
r19086
$ hg showconfig Section
Section.KeY=Case Sensitive
Section.key=lower case
Mathias De Maré
config: add template support...
r29950 $ hg showconfig Section -Tjson
[
{
Navaneeth Suresh
config: fix fm.data() handling of defaultvalue...
r42934 "defaultvalue": null,
Mathias De Maré
config: add template support...
r29950 "name": "Section.KeY",
Jun Wu
runtests: set web.ipv6 if we use IPv6...
r30986 "source": "*.hgrc:*", (glob)
Mathias De Maré
config: add template support...
r29950 "value": "Case Sensitive"
},
{
Navaneeth Suresh
config: fix fm.data() handling of defaultvalue...
r42934 "defaultvalue": null,
Mathias De Maré
config: add template support...
r29950 "name": "Section.key",
Jun Wu
runtests: set web.ipv6 if we use IPv6...
r30986 "source": "*.hgrc:*", (glob)
Mathias De Maré
config: add template support...
r29950 "value": "lower case"
}
]
$ hg showconfig Section.KeY -Tjson
[
{
Navaneeth Suresh
config: remove pycompat.bytestr() for defaultvalue...
r42933 "defaultvalue": null,
Mathias De Maré
config: add template support...
r29950 "name": "Section.KeY",
Jun Wu
runtests: set web.ipv6 if we use IPv6...
r30986 "source": "*.hgrc:*", (glob)
Mathias De Maré
config: add template support...
r29950 "value": "Case Sensitive"
}
]
$ hg showconfig -Tjson | tail -7
{
Navaneeth Suresh
config: fix fm.data() handling of defaultvalue...
r42934 "defaultvalue": null,
Mathias De Maré
config: add template support...
r29950 "name": "*", (glob)
"source": "*", (glob)
"value": "*" (glob)
}
]
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
r43643 Test config default of various types:
{"defaultvalue": ""} for -T'json(defaultvalue)' looks weird, but that's
how the templater works. Unknown keywords are evaluated to "".
dynamicdefault
$ hg config --config alias.foo= alias -Tjson
[
{
"name": "alias.foo",
"source": "--config",
"value": ""
}
]
$ hg config --config alias.foo= alias -T'json(defaultvalue)'
[
{"defaultvalue": ""}
]
$ hg config --config alias.foo= alias -T'{defaultvalue}\n'
null
$ hg config --config auth.cookiefile= auth -Tjson
[
{
"defaultvalue": null,
"name": "auth.cookiefile",
"source": "--config",
"value": ""
}
]
$ hg config --config auth.cookiefile= auth -T'json(defaultvalue)'
[
Yuya Nishihara
formatter: fix handling of None value in templater mapping...
r43645 {"defaultvalue": null}
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
r43643 ]
$ hg config --config auth.cookiefile= auth -T'{defaultvalue}\n'
false
$ hg config --config commands.commit.post-status= commands -Tjson
[
{
"defaultvalue": false,
"name": "commands.commit.post-status",
"source": "--config",
"value": ""
}
]
$ hg config --config commands.commit.post-status= commands -T'json(defaultvalue)'
[
{"defaultvalue": false}
]
$ hg config --config commands.commit.post-status= commands -T'{defaultvalue}\n'
False
true
$ hg config --config format.dotencode= format -Tjson
[
{
"defaultvalue": true,
"name": "format.dotencode",
"source": "--config",
"value": ""
}
]
$ hg config --config format.dotencode= format -T'json(defaultvalue)'
[
{"defaultvalue": true}
]
$ hg config --config format.dotencode= format -T'{defaultvalue}\n'
True
bytes
$ hg config --config commands.resolve.mark-check= commands -Tjson
[
{
"defaultvalue": "none",
"name": "commands.resolve.mark-check",
"source": "--config",
"value": ""
}
]
$ hg config --config commands.resolve.mark-check= commands -T'json(defaultvalue)'
[
{"defaultvalue": "none"}
]
$ hg config --config commands.resolve.mark-check= commands -T'{defaultvalue}\n'
none
empty list
$ hg config --config commands.show.aliasprefix= commands -Tjson
[
{
Yuya Nishihara
config: add support for defaultvalue of list of printable elements
r43644 "defaultvalue": [],
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
r43643 "name": "commands.show.aliasprefix",
"source": "--config",
"value": ""
}
]
$ hg config --config commands.show.aliasprefix= commands -T'json(defaultvalue)'
[
Yuya Nishihara
config: add support for defaultvalue of list of printable elements
r43644 {"defaultvalue": []}
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
r43643 ]
$ hg config --config commands.show.aliasprefix= commands -T'{defaultvalue}\n'
nonempty list
$ hg config --config progress.format= progress -Tjson
[
{
Yuya Nishihara
config: add support for defaultvalue of list of printable elements
r43644 "defaultvalue": ["topic", "bar", "number", "estimate"],
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
r43643 "name": "progress.format",
"source": "--config",
"value": ""
}
]
$ hg config --config progress.format= progress -T'json(defaultvalue)'
[
Yuya Nishihara
config: add support for defaultvalue of list of printable elements
r43644 {"defaultvalue": ["topic", "bar", "number", "estimate"]}
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
r43643 ]
$ hg config --config progress.format= progress -T'{defaultvalue}\n'
Yuya Nishihara
config: add support for defaultvalue of list of printable elements
r43644 topic bar number estimate
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
r43643
int
$ hg config --config profiling.freq= profiling -Tjson
[
{
"defaultvalue": 1000,
"name": "profiling.freq",
"source": "--config",
"value": ""
}
]
$ hg config --config profiling.freq= profiling -T'json(defaultvalue)'
[
{"defaultvalue": 1000}
]
$ hg config --config profiling.freq= profiling -T'{defaultvalue}\n'
1000
float
$ hg config --config profiling.showmax= profiling -Tjson
[
{
"defaultvalue": 0.999,
"name": "profiling.showmax",
"source": "--config",
"value": ""
}
]
$ hg config --config profiling.showmax= profiling -T'json(defaultvalue)'
[
{"defaultvalue": 0.999}
]
$ hg config --config profiling.showmax= profiling -T'{defaultvalue}\n'
0.999
Yuya Nishihara
ui: do not translate empty configsource() to 'none' (API)...
r30618 Test empty config source:
$ cat <<EOF > emptysource.py
> def reposetup(ui, repo):
Yuya Nishihara
py3: byte-stringify test-config.t and test-config-env.py
r36748 > ui.setconfig(b'empty', b'source', b'value')
Yuya Nishihara
ui: do not translate empty configsource() to 'none' (API)...
r30618 > EOF
$ cp .hg/hgrc .hg/hgrc.orig
$ cat <<EOF >> .hg/hgrc
> [extensions]
> emptysource = `pwd`/emptysource.py
> EOF
$ hg config --debug empty.source
read config from: * (glob)
none: value
$ hg config empty.source -Tjson
[
{
Navaneeth Suresh
config: remove pycompat.bytestr() for defaultvalue...
r42933 "defaultvalue": null,
Yuya Nishihara
ui: do not translate empty configsource() to 'none' (API)...
r30618 "name": "empty.source",
"source": "",
"value": "value"
}
]
$ cp .hg/hgrc.orig .hg/hgrc
FUJIWARA Katsunori
config: discard "%unset" values defined in the other files read in previously...
r19087 Test "%unset"
$ cat >> $HGRCPATH <<EOF
> [unsettest]
> local-hgrcpath = should be unset (HGRCPATH)
> %unset local-hgrcpath
>
> global = should be unset (HGRCPATH)
>
> both = should be unset (HGRCPATH)
>
> set-after-unset = should be unset (HGRCPATH)
> EOF
$ cat >> .hg/hgrc <<EOF
> [unsettest]
> local-hgrc = should be unset (.hg/hgrc)
> %unset local-hgrc
>
> %unset global
>
> both = should be unset (.hg/hgrc)
> %unset both
>
> set-after-unset = should be unset (.hg/hgrc)
> %unset set-after-unset
> set-after-unset = should be set (.hg/hgrc)
> EOF
$ hg showconfig unsettest
unsettest.set-after-unset=should be set (.hg/hgrc)
Aaron Kushner
config: exit non zero on non-existent config option (issue4247)...
r22316
Test exit code when no config matches
$ hg config Section.idontexist
[1]
Gregory Szorc
ui: don't fixup [paths] sub-options...
r29412
sub-options in [paths] aren't expanded
$ cat > .hg/hgrc << EOF
> [paths]
> foo = ~/foo
> foo:suboption = ~/foo
> EOF
$ hg showconfig paths
paths.foo:suboption=~/foo
paths.foo=$TESTTMP/foo
Yuya Nishihara
chg: deduplicate error handling of ui.system()...
r31108
edit failure
$ HGEDITOR=false hg config --edit
abort: edit failed: false exited with status 1
Martin von Zweigbergk
errors: introduce InputError and use it from commands and cmdutil...
r46431 [10]
Jun Wu
rcutil: let environ override system configs (BC)...
r31685
config affected by environment variables
$ EDITOR=e1 VISUAL=e2 hg config --debug | grep 'ui\.editor'
$VISUAL: ui.editor=e2
$ VISUAL=e2 hg config --debug --config ui.editor=e3 | grep 'ui\.editor'
--config: ui.editor=e3
$ PAGER=p1 hg config --debug | grep 'pager\.pager'
$PAGER: pager.pager=p1
$ PAGER=p1 hg config --debug --config pager.pager=p2 | grep 'pager\.pager'
--config: pager.pager=p2
David Demelier
configitems: add alias support in config...
r33329
verify that aliases are evaluated as well
$ hg init aliastest
$ cd aliastest
$ cat > .hg/hgrc << EOF
> [ui]
> user = repo user
> EOF
$ touch index
$ unset HGUSER
$ hg ci -Am test
adding index
$ hg log --template '{author}\n'
repo user
$ cd ..
alias has lower priority
$ hg init aliaspriority
$ cd aliaspriority
$ cat > .hg/hgrc << EOF
> [ui]
> user = alias user
> username = repo user
> EOF
$ touch index
$ unset HGUSER
$ hg ci -Am test
adding index
$ hg log --template '{author}\n'
repo user
$ cd ..
Martin von Zweigbergk
config: read configs from directories in lexicographical order...
r42262
configs should be read in lexicographical order
$ mkdir configs
$ for i in `$TESTDIR/seq.py 10 99`; do
> printf "[section]\nkey=$i" > configs/$i.rc
> done
$ HGRCPATH=configs hg config section.key
99
config: add a test for priority when includes are involved...
r47148
Configuration priority
======================
setup necessary file
$ cat > file-A.rc << EOF
> [config-test]
> basic = value-A
config: test priority involving include...
r47149 > pre-include= value-A
> %include ./included.rc
> post-include= value-A
config: test priority involving alias...
r47359 > [command-templates]
> log = "value-A\n"
config: add a test for priority when includes are involved...
r47148 > EOF
$ cat > file-B.rc << EOF
> [config-test]
> basic = value-B
config: test priority involving alias...
r47359 > [ui]
> logtemplate = "value-B\n"
config: add a test for priority when includes are involved...
r47148 > EOF
config: test priority involving include...
r47149
$ cat > included.rc << EOF
> [config-test]
> pre-include= value-included
> post-include= value-included
> EOF
config: test priority involving alias and include...
r47360 $ cat > file-C.rc << EOF
> %include ./included-alias-C.rc
> [ui]
> logtemplate = "value-C\n"
> EOF
$ cat > included-alias-C.rc << EOF
> [command-templates]
> log = "value-included\n"
> EOF
$ cat > file-D.rc << EOF
> [command-templates]
> log = "value-D\n"
> %include ./included-alias-D.rc
> EOF
$ cat > included-alias-D.rc << EOF
> [ui]
> logtemplate = "value-included\n"
> EOF
config: add a test for priority when includes are involved...
r47148 Simple order checking
---------------------
If file B is read after file A, value from B overwrite value from A.
$ HGRCPATH="file-A.rc:file-B.rc" hg config config-test.basic
value-B
config: test priority involving include...
r47149
Ordering from include
---------------------
value from an include overwrite value defined before the include, but not the one defined after the include
$ HGRCPATH="file-A.rc" hg config config-test.pre-include
value-included
$ HGRCPATH="file-A.rc" hg config config-test.post-include
value-A
config: test priority involving the command line...
r47150
command line override
---------------------
$ HGRCPATH="file-A.rc:file-B.rc" hg config config-test.basic --config config-test.basic=value-CLI
value-CLI
config: test priority involving alias...
r47359
Alias ordering
--------------
The official config is now `command-templates.log`, the historical
`ui.logtemplate` is a valid alternative for it.
When both are defined, The config value read the last "win", this should keep
being true if the config have other alias. In other word, the config value read
earlier will be considered "lower level" and the config read later would be
considered "higher level". And higher level values wins.
$ HGRCPATH="file-A.rc" hg log -r .
value-A
$ HGRCPATH="file-B.rc" hg log -r .
value-B
$ HGRCPATH="file-A.rc:file-B.rc" hg log -r .
config: use level to properly deal with value priority...
r47368 value-B
config: test priority involving alias and include...
r47360
Alias and include
-----------------
The pre/post include priority should also apply when tie-breaking alternatives.
See the case above for details about the two config options used.
$ HGRCPATH="file-C.rc" hg log -r .
config: use level to properly deal with value priority...
r47368 value-C
config: test priority involving alias and include...
r47360 $ HGRCPATH="file-D.rc" hg log -r .
config: use level to properly deal with value priority...
r47368 value-included
config: test priority involving alias and cli...
r47361
command line override
---------------------
$ HGRCPATH="file-A.rc:file-B.rc" hg log -r . --config ui.logtemplate="value-CLI\n"
config: use level to properly deal with value priority...
r47368 value-CLI