chgserver: spawn new process if schemes change
The schemes extension updates hg.schemes table. It's technically possible
for hg.repository() to look for e.g. ui.schemes instead of depending on
module-local table, but I don't think the change would make much sense
since [schemes] is usually specified in ~/.hgrc and thus it can be considered
static data.
--- a/mercurial/chgserver.py Mon Feb 10 15:52:52 2020 -0800
+++ b/mercurial/chgserver.py Tue Feb 11 19:53:56 2020 +0900
@@ -83,6 +83,7 @@
b'eol', # uses setconfig('eol', ...)
b'extdiff', # uisetup will register new commands
b'extensions',
+ b'schemes', # extsetup will update global hg.schemes
]
_configsectionitems = [
--- a/tests/test-chg.t Mon Feb 10 15:52:52 2020 -0800
+++ b/tests/test-chg.t Tue Feb 11 19:53:56 2020 +0900
@@ -245,6 +245,54 @@
YYYY/MM/DD HH:MM:SS (PID)> worker process exited (pid=...)
YYYY/MM/DD HH:MM:SS (PID)> $TESTTMP/extreload/chgsock/server-... is not owned, exiting.
+global data mutated by schems
+-----------------------------
+
+ $ hg init schemes
+ $ cd schemes
+
+initial state
+
+ $ cat > .hg/hgrc <<'EOF'
+ > [extensions]
+ > schemes =
+ > [schemes]
+ > foo = https://foo.example.org/
+ > EOF
+ $ hg debugexpandscheme foo://expanded
+ https://foo.example.org/expanded
+ $ hg debugexpandscheme bar://unexpanded
+ bar://unexpanded
+
+add bar
+
+ $ cat > .hg/hgrc <<'EOF'
+ > [extensions]
+ > schemes =
+ > [schemes]
+ > foo = https://foo.example.org/
+ > bar = https://bar.example.org/
+ > EOF
+ $ hg debugexpandscheme foo://expanded
+ https://foo.example.org/expanded
+ $ hg debugexpandscheme bar://expanded
+ https://bar.example.org/expanded
+
+remove foo
+
+ $ cat > .hg/hgrc <<'EOF'
+ > [extensions]
+ > schemes =
+ > [schemes]
+ > bar = https://bar.example.org/
+ > EOF
+ $ hg debugexpandscheme foo://unexpanded
+ foo://unexpanded
+ $ hg debugexpandscheme bar://expanded
+ https://bar.example.org/expanded
+
+ $ cd ..
+
repository cache
----------------
@@ -317,6 +365,8 @@
check server log:
$ cat log/server.log | filterlog
+ YYYY/MM/DD HH:MM:SS (PID)> worker process exited (pid=...)
+ YYYY/MM/DD HH:MM:SS (PID)> worker process exited (pid=...)
YYYY/MM/DD HH:MM:SS (PID)> init cached
YYYY/MM/DD HH:MM:SS (PID)> id -R cached
YYYY/MM/DD HH:MM:SS (PID)> loaded repo into cache: $TESTTMP/cached (in ...s)