# HG changeset patch # User Matt Harbison # Date 2019-12-18 03:08:07 # Node ID 1ccf340acf14895aa7a6b66f3835f8b12769d11d # Parent 5685ce2ea3bfe2f82ba0119788e2fef853bcf97a windows: add a global equivalent to /etc/mercurial for *.rc processing This follows the Unix model of processing this directory immediately after /*.rc, and prior to the installation relative files. Since the Unix processing supports both a directory and a file (the former overriding the latter), and since %HOME% supports both `*.ini` and `.hgrc` (again, the former overriding the latter), this does too. The Unix file doesn't have a `.` prefix, so it's not used here either. Note that this is the opposite order of processing the exe relative paths. But since it's in agreement with Unix, %HOME% and %USERPROFILE%, it seems reasonable to ignore that. Maybe we can change that and take a BC, because that's something the installer should be controlling, and I can't imagine people having both paths *and* conflicting settings. Differential Revision: https://phab.mercurial-scm.org/D7692 diff --git a/mercurial/helptext/config.txt b/mercurial/helptext/config.txt --- a/mercurial/helptext/config.txt +++ b/mercurial/helptext/config.txt @@ -75,6 +75,9 @@ ones. - ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`` (per-installation) - ``\hgrc.d\*.rc`` (per-installation) - ``\Mercurial.ini`` (per-installation) + - ``%PROGRAMDATA%\Mercurial\hgrc`` (per-system) + - ``%PROGRAMDATA%\Mercurial\Mercurial.ini`` (per-system) + - ``%PROGRAMDATA%\Mercurial\hgrc.d\*.rc`` (per-system) - ``/*.rc`` (defaults) .. note:: diff --git a/mercurial/scmwindows.py b/mercurial/scmwindows.py --- a/mercurial/scmwindows.py +++ b/mercurial/scmwindows.py @@ -38,6 +38,20 @@ def systemrcpath(): # Use hgrc.d found in directory with hg.exe _processdir(os.path.join(os.path.dirname(filename), b'hgrc.d')) + # treat a PROGRAMDATA directory as equivalent to /etc/mercurial + programdata = encoding.environ.get(b'PROGRAMDATA') + if programdata: + programdata = os.path.join(programdata, b'Mercurial') + _processdir(os.path.join(programdata, b'hgrc.d')) + + ini = os.path.join(programdata, b'mercurial.ini') + if os.path.isfile(ini): + rcpath.append(ini) + + ini = os.path.join(programdata, b'hgrc') + if os.path.isfile(ini): + rcpath.append(ini) + # next look for a system rcpath in the registry value = util.lookupreg( b'SOFTWARE\\Mercurial', None, winreg.HKEY_LOCAL_MACHINE diff --git a/relnotes/next b/relnotes/next --- a/relnotes/next +++ b/relnotes/next @@ -1,5 +1,7 @@ == New Features == + * Windows will process hgrc files in %PROGRAMDATA%\Mercurial\hgrc.d. + == New Experimental Features ==