test-config.t
546 lines
| 11.8 KiB
| text/troff
|
Tads3Lexer
/ tests / test-config.t
Matt Harbison
|
r47626 | Windows needs ';' as a file separator in an environment variable, and MSYS | ||
doesn't automatically convert it in every case. | ||||
#if windows | ||||
$ path_list_var() { | ||||
> echo $1 | sed 's/:/;/' | ||||
> } | ||||
#else | ||||
$ path_list_var() { | ||||
> echo $1 | ||||
> } | ||||
#endif | ||||
FUJIWARA Katsunori
|
r19086 | hide outer repo | ||
$ hg init | ||||
Pierre-Yves David
|
r22275 | Invalid syntax: no value | ||
$ cat > .hg/hgrc << EOF | ||||
> novaluekey | ||||
> EOF | ||||
$ hg showconfig | ||||
Martin von Zweigbergk
|
r46506 | config error at $TESTTMP/.hg/hgrc:1: novaluekey | ||
[30] | ||||
Pierre-Yves David
|
r22275 | |||
Invalid syntax: no key | ||||
$ cat > .hg/hgrc << EOF | ||||
> =nokeyvalue | ||||
> EOF | ||||
$ hg showconfig | ||||
Martin von Zweigbergk
|
r46506 | config error at $TESTTMP/.hg/hgrc:1: =nokeyvalue | ||
[30] | ||||
Pierre-Yves David
|
r22275 | |||
Razvan Cojocaru
|
r22276 | Test hint about invalid syntax from leading white space | ||
$ cat > .hg/hgrc << EOF | ||||
> key=value | ||||
> EOF | ||||
$ hg showconfig | ||||
Martin von Zweigbergk
|
r46506 | config error at $TESTTMP/.hg/hgrc:1: unexpected leading whitespace: key=value | ||
[30] | ||||
Razvan Cojocaru
|
r22276 | |||
$ cat > .hg/hgrc << EOF | ||||
> [section] | ||||
> key=value | ||||
> EOF | ||||
$ hg showconfig | ||||
Martin von Zweigbergk
|
r46506 | config error at $TESTTMP/.hg/hgrc:1: unexpected leading whitespace: [section] | ||
[30] | ||||
Razvan Cojocaru
|
r22276 | |||
Pierre-Yves David
|
r22275 | Reset hgrc | ||
$ echo > .hg/hgrc | ||||
FUJIWARA Katsunori
|
r19086 | Test case sensitive configuration | ||
Yuya Nishihara
|
r23172 | $ cat <<EOF >> $HGRCPATH | ||
> [Section] | ||||
> KeY = Case Sensitive | ||||
> key = lower case | ||||
> EOF | ||||
FUJIWARA Katsunori
|
r19086 | |||
$ hg showconfig Section | ||||
Section.KeY=Case Sensitive | ||||
Section.key=lower case | ||||
Mathias De Maré
|
r29950 | $ hg showconfig Section -Tjson | ||
[ | ||||
{ | ||||
Navaneeth Suresh
|
r42934 | "defaultvalue": null, | ||
Mathias De Maré
|
r29950 | "name": "Section.KeY", | ||
Jun Wu
|
r30986 | "source": "*.hgrc:*", (glob) | ||
Mathias De Maré
|
r29950 | "value": "Case Sensitive" | ||
}, | ||||
{ | ||||
Navaneeth Suresh
|
r42934 | "defaultvalue": null, | ||
Mathias De Maré
|
r29950 | "name": "Section.key", | ||
Jun Wu
|
r30986 | "source": "*.hgrc:*", (glob) | ||
Mathias De Maré
|
r29950 | "value": "lower case" | ||
} | ||||
] | ||||
$ hg showconfig Section.KeY -Tjson | ||||
[ | ||||
{ | ||||
Navaneeth Suresh
|
r42933 | "defaultvalue": null, | ||
Mathias De Maré
|
r29950 | "name": "Section.KeY", | ||
Jun Wu
|
r30986 | "source": "*.hgrc:*", (glob) | ||
Mathias De Maré
|
r29950 | "value": "Case Sensitive" | ||
} | ||||
] | ||||
$ hg showconfig -Tjson | tail -7 | ||||
{ | ||||
Navaneeth Suresh
|
r42934 | "defaultvalue": null, | ||
Mathias De Maré
|
r29950 | "name": "*", (glob) | ||
"source": "*", (glob) | ||||
"value": "*" (glob) | ||||
} | ||||
] | ||||
Yuya Nishihara
|
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
|
r43645 | {"defaultvalue": null} | ||
Yuya Nishihara
|
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 | ||||
Simon Sapin
|
r48054 | $ hg config --config format.dotencode= format.dotencode -Tjson | ||
Yuya Nishihara
|
r43643 | [ | ||
{ | ||||
"defaultvalue": true, | ||||
"name": "format.dotencode", | ||||
"source": "--config", | ||||
"value": "" | ||||
} | ||||
] | ||||
Simon Sapin
|
r48054 | $ hg config --config format.dotencode= format.dotencode -T'json(defaultvalue)' | ||
Yuya Nishihara
|
r43643 | [ | ||
{"defaultvalue": true} | ||||
] | ||||
Simon Sapin
|
r48054 | $ hg config --config format.dotencode= format.dotencode -T'{defaultvalue}\n' | ||
Yuya Nishihara
|
r43643 | 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
|
r43644 | "defaultvalue": [], | ||
Yuya Nishihara
|
r43643 | "name": "commands.show.aliasprefix", | ||
"source": "--config", | ||||
"value": "" | ||||
} | ||||
] | ||||
$ hg config --config commands.show.aliasprefix= commands -T'json(defaultvalue)' | ||||
[ | ||||
Yuya Nishihara
|
r43644 | {"defaultvalue": []} | ||
Yuya Nishihara
|
r43643 | ] | ||
$ hg config --config commands.show.aliasprefix= commands -T'{defaultvalue}\n' | ||||
nonempty list | ||||
$ hg config --config progress.format= progress -Tjson | ||||
[ | ||||
{ | ||||
Yuya Nishihara
|
r43644 | "defaultvalue": ["topic", "bar", "number", "estimate"], | ||
Yuya Nishihara
|
r43643 | "name": "progress.format", | ||
"source": "--config", | ||||
"value": "" | ||||
} | ||||
] | ||||
$ hg config --config progress.format= progress -T'json(defaultvalue)' | ||||
[ | ||||
Yuya Nishihara
|
r43644 | {"defaultvalue": ["topic", "bar", "number", "estimate"]} | ||
Yuya Nishihara
|
r43643 | ] | ||
$ hg config --config progress.format= progress -T'{defaultvalue}\n' | ||||
Yuya Nishihara
|
r43644 | topic bar number estimate | ||
Yuya Nishihara
|
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
|
r30618 | Test empty config source: | ||
$ cat <<EOF > emptysource.py | ||||
> def reposetup(ui, repo): | ||||
Yuya Nishihara
|
r36748 | > ui.setconfig(b'empty', b'source', b'value') | ||
Yuya Nishihara
|
r30618 | > EOF | ||
$ cp .hg/hgrc .hg/hgrc.orig | ||||
$ cat <<EOF >> .hg/hgrc | ||||
> [extensions] | ||||
> emptysource = `pwd`/emptysource.py | ||||
> EOF | ||||
Martin von Zweigbergk
|
r47837 | $ hg config --source empty.source | ||
Yuya Nishihara
|
r30618 | none: value | ||
$ hg config empty.source -Tjson | ||||
[ | ||||
{ | ||||
Navaneeth Suresh
|
r42933 | "defaultvalue": null, | ||
Yuya Nishihara
|
r30618 | "name": "empty.source", | ||
"source": "", | ||||
"value": "value" | ||||
} | ||||
] | ||||
$ cp .hg/hgrc.orig .hg/hgrc | ||||
FUJIWARA Katsunori
|
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
|
r22316 | |||
Test exit code when no config matches | ||||
$ hg config Section.idontexist | ||||
[1] | ||||
Gregory Szorc
|
r29412 | |||
sub-options in [paths] aren't expanded | ||||
$ cat > .hg/hgrc << EOF | ||||
> [paths] | ||||
> foo = ~/foo | ||||
> foo:suboption = ~/foo | ||||
> EOF | ||||
$ hg showconfig paths | ||||
r48046 | paths.foo=~/foo | |||
Gregory Szorc
|
r29412 | paths.foo:suboption=~/foo | ||
r48046 | ||||
note: The path expansion no longer happens at the config level, but the path is | ||||
still expanded: | ||||
$ hg path | grep foo | ||||
foo = $TESTTMP/foo | ||||
Yuya Nishihara
|
r31108 | |||
edit failure | ||||
$ HGEDITOR=false hg config --edit | ||||
abort: edit failed: false exited with status 1 | ||||
Martin von Zweigbergk
|
r46431 | [10] | ||
Jun Wu
|
r31685 | |||
config affected by environment variables | ||||
Martin von Zweigbergk
|
r47837 | $ EDITOR=e1 VISUAL=e2 hg config --source | grep 'ui\.editor' | ||
Jun Wu
|
r31685 | $VISUAL: ui.editor=e2 | ||
Martin von Zweigbergk
|
r47837 | $ VISUAL=e2 hg config --source --config ui.editor=e3 | grep 'ui\.editor' | ||
Jun Wu
|
r31685 | --config: ui.editor=e3 | ||
Martin von Zweigbergk
|
r47837 | $ PAGER=p1 hg config --source | grep 'pager\.pager' | ||
Jun Wu
|
r31685 | $PAGER: pager.pager=p1 | ||
Martin von Zweigbergk
|
r47837 | $ PAGER=p1 hg config --source --config pager.pager=p2 | grep 'pager\.pager' | ||
Jun Wu
|
r31685 | --config: pager.pager=p2 | ||
David Demelier
|
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
|
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 | ||||
r47148 | ||||
r48208 | Listing all config options | |||
========================== | ||||
The feature is experimental and behavior may varies. This test exists to make sure the code is run. We grep it to avoid too much variability in its current experimental state. | ||||
Valentin Gatien-Baron
|
r48731 | $ hg config --exp-all-known | grep commit | grep -v ssh | ||
r48208 | commands.commit.interactive.git=False | |||
commands.commit.interactive.ignoreblanklines=False | ||||
commands.commit.interactive.ignorews=False | ||||
commands.commit.interactive.ignorewsamount=False | ||||
commands.commit.interactive.ignorewseol=False | ||||
commands.commit.interactive.nobinary=False | ||||
commands.commit.interactive.nodates=False | ||||
commands.commit.interactive.noprefix=False | ||||
commands.commit.interactive.showfunc=False | ||||
commands.commit.interactive.unified=None | ||||
commands.commit.interactive.word-diff=False | ||||
commands.commit.post-status=False | ||||
convert.git.committeractions=[*'messagedifferent'] (glob) | ||||
convert.svn.dangerous-set-commit-dates=False | ||||
experimental.copytrace.sourcecommitlimit=100 | ||||
phases.new-commit=draft | ||||
ui.allowemptycommit=False | ||||
ui.commitsubrepos=False | ||||
r47148 | Configuration priority | |||
====================== | ||||
setup necessary file | ||||
$ cat > file-A.rc << EOF | ||||
> [config-test] | ||||
> basic = value-A | ||||
r47149 | > pre-include= value-A | |||
> %include ./included.rc | ||||
> post-include= value-A | ||||
r47359 | > [command-templates] | |||
> log = "value-A\n" | ||||
r47148 | > EOF | |||
$ cat > file-B.rc << EOF | ||||
> [config-test] | ||||
> basic = value-B | ||||
r47359 | > [ui] | |||
> logtemplate = "value-B\n" | ||||
r47148 | > EOF | |||
r47149 | ||||
$ cat > included.rc << EOF | ||||
> [config-test] | ||||
> pre-include= value-included | ||||
> post-include= value-included | ||||
> EOF | ||||
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 | ||||
r47148 | Simple order checking | |||
--------------------- | ||||
If file B is read after file A, value from B overwrite value from A. | ||||
Matt Harbison
|
r47626 | $ HGRCPATH=`path_list_var "file-A.rc:file-B.rc"` hg config config-test.basic | ||
r47148 | value-B | |||
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 | ||||
r47150 | ||||
command line override | ||||
--------------------- | ||||
Matt Harbison
|
r47626 | $ HGRCPATH=`path_list_var "file-A.rc:file-B.rc"` hg config config-test.basic --config config-test.basic=value-CLI | ||
r47150 | value-CLI | |||
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 | ||||
Matt Harbison
|
r47626 | $ HGRCPATH=`path_list_var "file-A.rc:file-B.rc"` hg log -r . | ||
r47368 | value-B | |||
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 . | ||||
r47368 | value-C | |||
r47360 | $ HGRCPATH="file-D.rc" hg log -r . | |||
r47368 | value-included | |||
r47361 | ||||
command line override | ||||
--------------------- | ||||
Matt Harbison
|
r47626 | $ HGRCPATH=`path_list_var "file-A.rc:file-B.rc"` hg log -r . --config ui.logtemplate="value-CLI\n" | ||
r47368 | value-CLI | |||