##// END OF EJS Templates
config: gather the path to edit through rcutil...
config: gather the path to edit through rcutil Using the common logic helps to reduce potential error when it changes

File last commit:

r48731:a28a7dcb default
r53324:8c509a70 default
Show More
test-config.t
546 lines | 11.8 KiB | text/troff | Tads3Lexer
Matt Harbison
tests: handle Windows file separator differences in test-config.t...
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
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
Simon Sapin
dirstate-v2: Update the expected output of some tests for new requirement...
r48054 $ hg config --config format.dotencode= format.dotencode -Tjson
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
r43643 [
{
"defaultvalue": true,
"name": "format.dotencode",
"source": "--config",
"value": ""
}
]
Simon Sapin
dirstate-v2: Update the expected output of some tests for new requirement...
r48054 $ hg config --config format.dotencode= format.dotencode -T'json(defaultvalue)'
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
r43643 [
{"defaultvalue": true}
]
Simon Sapin
dirstate-v2: Update the expected output of some tests for new requirement...
r48054 $ hg config --config format.dotencode= format.dotencode -T'{defaultvalue}\n'
Yuya Nishihara
config: fix -Tjson to not crash due to unsupported defaultvalue types...
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
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
Martin von Zweigbergk
config: add --source option to include source of value...
r47837 $ hg config --source empty.source
Yuya Nishihara
ui: do not translate empty configsource() to 'none' (API)...
r30618 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
urlutil: move url "fixing" at the time of `ui.paths` initialization...
r48046 paths.foo=~/foo
Gregory Szorc
ui: don't fixup [paths] sub-options...
r29412 paths.foo:suboption=~/foo
urlutil: move url "fixing" at the time of `ui.paths` initialization...
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
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
Martin von Zweigbergk
config: add --source option to include source of value...
r47837 $ EDITOR=e1 VISUAL=e2 hg config --source | grep 'ui\.editor'
Jun Wu
rcutil: let environ override system configs (BC)...
r31685 $VISUAL: ui.editor=e2
Martin von Zweigbergk
config: add --source option to include source of value...
r47837 $ VISUAL=e2 hg config --source --config ui.editor=e3 | grep 'ui\.editor'
Jun Wu
rcutil: let environ override system configs (BC)...
r31685 --config: ui.editor=e3
Martin von Zweigbergk
config: add --source option to include source of value...
r47837 $ PAGER=p1 hg config --source | grep 'pager\.pager'
Jun Wu
rcutil: let environ override system configs (BC)...
r31685 $PAGER: pager.pager=p1
Martin von Zweigbergk
config: add --source option to include source of value...
r47837 $ PAGER=p1 hg config --source --config pager.pager=p2 | grep 'pager\.pager'
Jun Wu
rcutil: let environ override system configs (BC)...
r31685 --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
config: add an experimental option to list all known config...
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
tests: setup dummyssh as the default ssh...
r48731 $ hg config --exp-all-known | grep commit | grep -v ssh
config: add an experimental option to list all known config...
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
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.
Matt Harbison
tests: handle Windows file separator differences in test-config.t...
r47626 $ HGRCPATH=`path_list_var "file-A.rc:file-B.rc"` hg config config-test.basic
config: add a test for priority when includes are involved...
r47148 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
---------------------
Matt Harbison
tests: handle Windows file separator differences in test-config.t...
r47626 $ HGRCPATH=`path_list_var "file-A.rc:file-B.rc"` hg config config-test.basic --config config-test.basic=value-CLI
config: test priority involving the command line...
r47150 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
Matt Harbison
tests: handle Windows file separator differences in test-config.t...
r47626 $ HGRCPATH=`path_list_var "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
---------------------
Matt Harbison
tests: handle Windows file separator differences in test-config.t...
r47626 $ HGRCPATH=`path_list_var "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