dispatch: change cwd when loading local config
Previously, the _getlocal
function would not correctly load the repo config
when given a relative rpath
and an alternate cwd via the wd
parameter.
Normally when --cwd
is specified, hg changes to the given directory before
attempting to load the local config (and therefore does not specify a wd
).
The only time the function is called with wd
set is when hg is running as a
command server (e.g., with chg), in which case each forked worker process will
attempt to configure itself via _getlocal
before responding to the client.
When given a relative repo path, the worker fails to load the repo config,
detects a config mismatch with the client, and enters a redirect/respawn loop.
To fix this, we can simply change to the desired working directory during
config loading. (Note that simply concatenating wd
and rpath
won't work
in all cases. The repo path could be something more complicated than a simple
relative path, such as a union:
repo.)