[PATCH 1 of 4] config: don't read the same config file twice

Mads Kiilerich mads at kiilerich.com
Fri Sep 26 12:11:11 CDT 2014


On 09/26/2014 03:25 AM, Pierre-Yves David wrote:
>
>
> On 09/25/2014 08:58 AM, Mads Kiilerich wrote:
>> On 09/25/2014 04:48 AM, Pierre-Yves David wrote:
>>>
>>>
>>> On 09/24/2014 06:33 PM, Mads Kiilerich wrote:
>>>> # HG changeset patch
>>>> # User Mads Kiilerich <madski at unity3d.com>
>>>> # Date 1409859395 -7200
>>>> #      Thu Sep 04 21:36:35 2014 +0200
>>>> # Node ID e04d746df4b9a7c5ef32b0bf70284e3dd8402791
>>>> # Parent  fa3181323c0aa9b2d2c2f81a7d68d57bd3a7a515
>>>> config: don't read the same config file twice
>>>>
>>>> In some cases some config files would be read twice and shown twice in
>>>> showconfig --debug.
>>>
>>> Can you details how the two changes fixes this bug? I'm curious.
>>>
>>>>
>>>> diff --git a/mercurial/scmposix.py b/mercurial/scmposix.py
>>>> --- a/mercurial/scmposix.py
>>>> +++ b/mercurial/scmposix.py
>>>> @@ -21,7 +21,8 @@ def systemrcpath():
>>>>       # old mod_python does not set sys.argv
>>>>       if len(getattr(sys, 'argv', [])) > 0:
>>>>           p = os.path.dirname(os.path.dirname(sys.argv[0]))
>>>> -        path.extend(_rcfiles(os.path.join(p, root)))
>>>> +        if p != '/':
>>>> +            path.extend(_rcfiles(os.path.join(p, root)))
>>>>       path.extend(_rcfiles('/' + root))
>>
>> The same paths were added twice if p == '/'.
>
> Well, I already assumed that your changed this in relation with the 
> patch description. But this does not explain how this double adding 
> was happening.
>

well ... if os.path.dirname(os.path.dirname(sys.argv[0])) == '/' ... 
which I guess can happen if hg is installed in /X/hg . As the confusing 
documentation shows, we have several different rules for finding config 
files. It is thus fair enough that they sometimes will give the same 
result - in the same place in the priority list. No matter what cases 
that is, there is no need to read the same twice.

In the other case it can happen if   os.path.expanduser('~') == 
os.environ.get('USERPROFILE')   - I have no idea when that can happen, 
but it sounds plausible that it can happen, and if it happens then it 
totally makes sense to only read the file once.

/Mads



More information about the Mercurial-devel mailing list