mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
ed7b192f9a
Summary: Previously, only --config configs were pinned in the uiconfig. "pinned" means that no matter what values were loaded underneath, those pinned values would not be changed. This allows CLI specified configs to take precendence regardless of what and when config files are loaded. --configfile configs were not pinned in the same way, despite it seeming like they should be pinned. In fact, during clone we "reload" the config, which causes the --configfile value to be lost. Let's make --configfile pin all of it's configs as well. This has a bit of an unfortunate side effect. When we do clone via hg-clone we pass --configfile /etc/mercurial/repo-specific/$REPO.rc so the clone has the right configuration. This diff means that those values are now loaded in a pinned state, so dynamicconfig cannot overwrite them and the values cannot be deny-listed. The longterm solution to this would be to stop using --configfile during clone, and instead use --config remotefilelog.reponame=$REPO and allow dynamicconfig to generate the rest. But for now it's probably fine to let them be pinned. Reviewed By: quark-zju Differential Revision: D26677599 fbshipit-source-id: 2837a5b5d14bb42b49eaf9d1d0019f2ea0620a9e
130 lines
4.6 KiB
Python
130 lines
4.6 KiB
Python
from __future__ import absolute_import, print_function
|
|
|
|
from edenscm.mercurial import dispatch, error, ui as uimod
|
|
from hghave import require
|
|
|
|
|
|
testui = uimod.ui.load()
|
|
|
|
# disable the configuration registration warning
|
|
#
|
|
# the purpose of this test is to check the old behavior, not to validate the
|
|
# behavior from registered item. so we silent warning related to unregisted
|
|
# config.
|
|
testui.setconfig("devel", "warn-config-unknown", False, "test")
|
|
testui.setconfig("devel", "all-warnings", False, "test")
|
|
|
|
parsed = dispatch._parseconfig(
|
|
testui,
|
|
{
|
|
"config": [
|
|
"values.string=string value",
|
|
"values.bool1=true",
|
|
"values.bool2=false",
|
|
"values.boolinvalid=foo",
|
|
"values.int1=42",
|
|
"values.int2=-42",
|
|
"values.intinvalid=foo",
|
|
"lists.list1=foo",
|
|
"lists.list2=foo bar baz",
|
|
"lists.list3=alice, bob",
|
|
"lists.list4=foo bar baz alice, bob",
|
|
'lists.list5=abc d"ef"g "hij def"',
|
|
'lists.list6="hello world", "how are you?"',
|
|
'lists.list7=Do"Not"Separate',
|
|
'lists.list8="Do"Separate',
|
|
'lists.list9="Do\\"NotSeparate"',
|
|
'lists.list10=string "with extraneous" quotation mark"',
|
|
"lists.list11=x, y",
|
|
'lists.list12="x", "y"',
|
|
'lists.list13=""" key = "x", "y" """',
|
|
"lists.list14=,,,, ",
|
|
'lists.list15=" just with starting quotation',
|
|
'lists.list16="longer quotation" with "no ending quotation',
|
|
'lists.list17=this is \\" "not a quotation mark"',
|
|
"lists.list18=\n \n\nding\ndong",
|
|
"date.epoch=0 0",
|
|
"date.birth=2005-04-19T00:00:00",
|
|
"date.invalid=invalid",
|
|
],
|
|
"configfile": [],
|
|
},
|
|
)
|
|
|
|
print(repr(testui.configitems("values")))
|
|
print(repr(testui.configitems("lists")))
|
|
print("---")
|
|
print(repr(testui.config("values", "string")))
|
|
print(repr(testui.config("values", "bool1")))
|
|
print(repr(testui.config("values", "bool2")))
|
|
print(repr(testui.config("values", "unknown")))
|
|
print("---")
|
|
try:
|
|
print(repr(testui.configbool("values", "string")))
|
|
except error.ConfigError as inst:
|
|
print(inst)
|
|
print(repr(testui.configbool("values", "bool1")))
|
|
print(repr(testui.configbool("values", "bool2")))
|
|
print(repr(testui.configbool("values", "bool2", True)))
|
|
print(repr(testui.configbool("values", "unknown")))
|
|
print(repr(testui.configbool("values", "unknown", True)))
|
|
print("---")
|
|
print(repr(testui.configint("values", "int1")))
|
|
print(repr(testui.configint("values", "int2")))
|
|
print("---")
|
|
print(repr(testui.configlist("lists", "list1")))
|
|
print(repr(testui.configlist("lists", "list2")))
|
|
print(repr(testui.configlist("lists", "list3")))
|
|
print(repr(testui.configlist("lists", "list4")))
|
|
print(repr(testui.configlist("lists", "list4", ["foo"])))
|
|
print(repr(testui.configlist("lists", "list5")))
|
|
print(repr(testui.configlist("lists", "list6")))
|
|
print(repr(testui.configlist("lists", "list7")))
|
|
print(repr(testui.configlist("lists", "list8")))
|
|
print(repr(testui.configlist("lists", "list9")))
|
|
print(repr(testui.configlist("lists", "list10")))
|
|
print(repr(testui.configlist("lists", "list11")))
|
|
print(repr(testui.configlist("lists", "list12")))
|
|
print(repr(testui.configlist("lists", "list13")))
|
|
print(repr(testui.configlist("lists", "list14")))
|
|
print(repr(testui.configlist("lists", "list15")))
|
|
print(repr(testui.configlist("lists", "list16")))
|
|
print(repr(testui.configlist("lists", "list17")))
|
|
print(repr(testui.configlist("lists", "list18")))
|
|
print(repr(testui.configlist("lists", "unknown")))
|
|
print(repr(testui.configlist("lists", "unknown", "")))
|
|
print(repr(testui.configlist("lists", "unknown", "foo")))
|
|
print(repr(testui.configlist("lists", "unknown", ["foo"])))
|
|
print(repr(testui.configlist("lists", "unknown", "foo bar")))
|
|
print(repr(testui.configlist("lists", "unknown", "foo, bar")))
|
|
print(repr(testui.configlist("lists", "unknown", ["foo bar"])))
|
|
print(repr(testui.configlist("lists", "unknown", ["foo", "bar"])))
|
|
print("---")
|
|
print(repr(testui.configdate("date", "epoch")))
|
|
print(repr(testui.configdate("date", "birth")))
|
|
|
|
print(repr(testui.config("values", "String")))
|
|
|
|
|
|
def function():
|
|
pass
|
|
|
|
|
|
# values that aren't strings should work
|
|
testui.setconfig("hook", "commit", function)
|
|
print(function == testui.config("hook", "commit"))
|
|
|
|
# invalid values
|
|
try:
|
|
testui.configbool("values", "boolinvalid")
|
|
except error.ConfigError:
|
|
print("boolinvalid")
|
|
try:
|
|
testui.configint("values", "intinvalid")
|
|
except error.ConfigError:
|
|
print("intinvalid")
|
|
try:
|
|
testui.configdate("date", "invalid")
|
|
except error.ConfigError:
|
|
print("dateinvalid")
|