Check whether a configuration key is set globally, rather than on the current repository

Angel Ezquerra angel.ezquerra at gmail.com
Fri Feb 24 03:56:09 CST 2012


On Fri, Feb 24, 2012 at 9:59 AM, Angel Ezquerra
<angel.ezquerra at gmail.com> wrote:
> On Thu, Feb 23, 2012 at 7:25 PM, Matt Mackall <mpm at selenic.com> wrote:
>> On Thu, 2012-02-23 at 17:23 +0100, Angel Ezquerra Moreu wrote:
>>> Hi,
>>>
>>> I am working on an extension and I need to tell if a given
>>> configuration key is set globally, but is not set on the current
>>> repository's configuration file.
>>>
>>> The reason is that I want to use the global configuration as a
>>> fallback, and I want the extension to behave differently depending on
>>> whether the setting that is being used is the fallback, versus the
>>> case in which the setting has been explicitly set on the current
>>> repository.
>>
>> Sounds like too much magic.
>
> It is a bit magic indeed but I think it makes sense in my case.
>
> What I am trying to do is to mimic github's and bitbucket's "readme"
> feature in TortoiseHg (although this may be useful for bare mercurial
> as well).
>
> What they do is that they look for "README files" in your repository.
> "README files", are those that match a set of names such as "README",
> "read.me", "README.txt", etc. If such a file is found on a repository,
> they show it to you as the project documentation.
>
> I want to do a similar thing, but I also want to let the user modify
> the default behavior by setting the readme configuration key on a
> given repository. I also want to let the user set a default readme
> file that should only be used when the repository readme key has not
> been set and no "README file" has been found on the repo.
>
> So I want to check for a repository readme setting first, then for a
> repository readme file and if everything fails for a global config
> readme setting.
>
>>> As far as I know, there is no way to read the "current repo"
>>> configuration only using the mercurial ui API. The "config" methods of
>>> the repo.ui object try to read from the current repo config, and if
>>> they fail they seamlessly read from the global configuration (which is
>>> what you'd want 99.9...% of the time).
>>>
>>> Yet in my very particular case this is not what I need. The only way
>>> that I've come up with is to read both from the current repo.ui object
>>> and from the global ui object, and if both configuration values match
>>> assume that the configuration key is set globally. However this would
>>> not detect the case in which the same configuration value is set both
>>> globally and on the current repo.
>>
>> You can check the path information in the config key (see hg showconfig
>> --debug).
>
> OK, I see that there is an ui.configpath() function that I can use for this.
>
> Thanks,
>
> Angel

Correction: there is ui.configsource() that I can use for this :-)

Angel


More information about the Mercurial-devel mailing list