# HG changeset patch # User Vadim Gelfer # Date 1131133861 28800 # Node ID 32a4e6802864007096604956b561b4c10ac79752 # Parent cd8fadd8c6899583b1b5d1c399275ad2c90c4056 make mercurial look in more places for config files. now it searches /etc/mercurial, /etc/mercurial, and user hgrc. this allows site-wide configuration to be shared over automounted nfs partition, instead of chenging on every system. option of having local configuration on every system remains. old code for searching /etc/mercurial/hgrc.d never worked, this code is tested and works. diff --git a/doc/hgrc.5.txt b/doc/hgrc.5.txt --- a/doc/hgrc.5.txt +++ b/doc/hgrc.5.txt @@ -15,26 +15,38 @@ aspects of its behaviour. FILES ----- -Mercurial reads configuration data from up to three files, if they -exist. The names of these files depend on the system on which -Mercurial is installed. +Mercurial reads configuration data from several files, if they exist. +The names of these files depend on the system on which Mercurial is +installed. +(Unix) /etc/mercurial/hgrc.d/*.rc:: +(Unix) /etc/mercurial/hgrc:: + Per-installation configuration files, searched for in the + directory where Mercurial is installed. For example, if installed + in /shared/tools, Mercurial will look in + /shared/tools/etc/mercurial/hgrc. Options in these files apply to + all Mercurial commands executed by any user in any directory. + +(Unix) /etc/mercurial/hgrc.d/*.rc:: (Unix) /etc/mercurial/hgrc:: (Windows) C:\Mercurial\Mercurial.ini:: - Options in this global configuration file apply to all Mercurial - commands executed by any user in any directory. + Per-system configuration files, for the system on which Mercurial + is running. Options in these files apply to all Mercurial + commands executed by any user in any directory. Options in these + files override per-installation options. (Unix) $HOME/.hgrc:: (Windows) C:\Documents and Settings\USERNAME\Mercurial.ini - Per-user configuration options that apply to all Mercurial commands, - no matter from which directory they are run. Values in this file - override global settings. + Per-user configuration file, for the user running Mercurial. + Options in this file apply to all Mercurial commands executed by + any user in any directory. Options in this file override + per-installation and per-system options. (Unix, Windows) /.hg/hgrc:: Per-repository configuration options that only apply in a particular repository. This file is not version-controlled, and - will not get transferred during a "clone" operation. Values in - this file override global and per-user settings. + will not get transferred during a "clone" operation. Options in + this file override options in all other configuration files. SYNTAX ------ diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -13,7 +13,7 @@ platform-specific details from the core. import os, errno from i18n import gettext as _ from demandload import * -demandload(globals(), "re cStringIO shutil popen2 tempfile threading time") +demandload(globals(), "re cStringIO shutil popen2 sys tempfile threading time") def pipefilter(s, cmd): '''filter string S through command CMD, returning its output''' @@ -483,12 +483,18 @@ if os.name == 'nt': else: nulldev = '/dev/null' - hgrcd = '/etc/mercurial/hgrc.d' - hgrcs = [] - if os.path.isdir(hgrcd): - hgrcs = [f for f in os.listdir(hgrcd) if f.endswith(".rc")] - rcpath = map(os.path.normpath, hgrcs + - ['/etc/mercurial/hgrc', os.path.expanduser('~/.hgrc')]) + def rcfiles(path): + rcs = [os.path.join(path, 'hgrc')] + rcdir = os.path.join(path, 'hgrc.d') + try: + rcs.extend([os.path.join(rcdir, f) for f in os.listdir(rcdir) + if f.endswith(".rc")]) + except OSError, inst: pass + return rcs + rcpath = rcfiles(os.path.dirname(sys.argv[0]) + '/../etc/mercurial') + rcpath.extend(rcfiles('/etc/mercurial')) + rcpath.append(os.path.expanduser('~/.hgrc')) + rcpath = [os.path.normpath(f) for f in rcpath] def parse_patch_output(output_line): """parses the output produced by patch and returns the file name"""