Patchwork [1,of,2] config: introduce "built-in" default configuration settings in default-hgrc.d

login
register
mail settings
Submitter Mads Kiilerich
Date Oct. 16, 2014, 4:56 p.m.
Message ID <356c4ef428690d95cf0d.1413478611@ssl.google-analytics.com>
Download mbox | patch
Permalink /patch/6331/
State Changes Requested
Headers show

Comments

Mads Kiilerich - Oct. 16, 2014, 4:56 p.m.
# HG changeset patch
# User Mads Kiilerich <madski@unity3d.com>
# Date 1409859395 -7200
#      Thu Sep 04 21:36:35 2014 +0200
# Node ID 356c4ef428690d95cf0d98240ff76494ff25efb3
# Parent  da2758c0aca04fe20fef2797f80c6079099afca5
config: introduce "built-in" default configuration settings in default-hgrc.d

This helps providing a more consistent user experience on all platforms and
with all packaging.

The exact location of default-hgrc.d depends on how Mercurial is installed and
whether it is 'frozen'. The exact location should never be relevant to users
and is not explained in details in the documentation. It will however always
be next to the help and templates files.

Note that setting HGRCPATH also disables these defaults.

Patch

diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt
--- a/mercurial/help/config.txt
+++ b/mercurial/help/config.txt
@@ -38,6 +38,7 @@  ones.
   - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)
   - ``/etc/mercurial/hgrc`` (per-system)
   - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)
+  - ``<internal>/default-hgrc.d/*.rc`` (defaults)
 
 .. container:: verbose.windows
 
@@ -51,6 +52,7 @@  ones.
   - ``<install-dir>\Mercurial.ini`` (per-installation)
   - ``<install-dir>\hgrc.d\*.rc`` (per-installation)
   - ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`` (per-installation)
+  - ``<internal>/default-hgrc.d/*.rc`` (defaults)
 
   .. note::
 
@@ -67,6 +69,7 @@  ones.
   - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)
   - ``/lib/mercurial/hgrc`` (per-system)
   - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)
+  - ``<internal>/default-hgrc.d/*.rc`` (defaults)
 
 Per-repository configuration options only apply in a
 particular repository. This file is not version-controlled, and
@@ -102,6 +105,13 @@  is running. Options in these files apply
 executed by any user in any directory. Options in these files
 override per-installation options.
 
+Mercurial comes with some default configuration. The default configuration
+files are installed with Mercurial and will be overwritten on upgrades. Default
+configuration files should never be edited by users or administrators but can
+be overridden in other configuration files. So far the directory only contains
+merge tool configuration but packagers can also put other default configuration
+there.
+
 Syntax
 ======
 
diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -495,7 +495,13 @@  def walkrepos(path, followsym=False, see
 
 def osrcpath():
     '''return default os-specific hgrc search path'''
-    path = systemrcpath()
+    path = []
+    defaultpath = os.path.join(util.datapath, 'default-hgrc.d')
+    if os.path.isdir(defaultpath):
+        for f, kind in osutil.listdir(defaultpath):
+            if f.endswith('.rc'):
+                path.append(os.path.join(defaultpath, f))
+    path.extend(systemrcpath())
     path.extend(userrcpath())
     path = [os.path.normpath(f) for f in path]
     return path
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -517,6 +517,7 @@  cygwinccompiler.Mingw32CCompiler = Hacke
 
 packagedata = {'mercurial': ['locale/*/LC_MESSAGES/hg.mo',
                              'help/*.txt',
+                             'default-hgrc.d/*.rc',
                              'dummycert.pem']}
 
 def ordinarypath(p):