Page MenuHomePhabricator

config: add defaultvalue template keyword

Authored by navaneeth.suresh on Thu, Aug 1, 1:42 PM.



This patch tries to fix one of the issues mentioned in issue6014.
This adds a new defaultvalue template keyword to be used with
hg showconfig to get the default value of the config item.

Diff Detail

rHG Mercurial
Automatic diff as part of commit; lint not applicable.
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

durin42 added a subscriber: durin42.Thu, Aug 1, 2:38 PM

I like the feature, I'll go ahead and queue it with the str/bytestr thing fixed in flight. Thanks!


you almost certainly want pycompat.bytestr() here and not str() for py3 compat reasons

This revision was not accepted when it landed; it landed in state Needs Review.
This revision was automatically updated to reflect the committed changes.
navaneeth.suresh marked an inline comment as done.Fri, Aug 2, 4:12 AM
navaneeth.suresh added inline comments.

thanks for the fix and queuing @durin42.

navaneeth.suresh marked an inline comment as done.Fri, Aug 2, 4:26 AM
yuja added a subscriber: yuja.Fri, Aug 2, 9:37 AM

+ def configdefault(self, section, name):
+ """returns the default value of the config item"""
+ item = self._knownconfig.get(section, {}).get(name)
+ itemdefault = None
+ if item is not None:
+ if callable(item.default):
+ itemdefault = item.default()
+ else:
+ itemdefault = item.default
+ return itemdefault

Need to handle configitems.dynamicdefault.

diff --git a/mercurial/ b/mercurial/

  • a/mercurial/

+++ b/mercurial/
@@ -1872,6 +1872,7 @@

for section, name, value in ui.walkconfig(untrusted=untrusted):
    source = ui.configsource(section, name, untrusted)
    value = pycompat.bytestr(value)

+ defaultvalue = pycompat.bytestr(ui.configdefault(section, name))

We'll probably want to keep None as itself. It's useless if an empty
default were mapped to truthy value, "None".

@@ -1881,7 +1882,7 @@

fm.condwrite(ui.debugflag, 'source', '%s: ', source)
if uniquesel:

+, defaultvalue=defaultvalue)

    fm.write('value', '%s\n', value)
    fm.write('name value', '%s=%s\n', entryname, value)

Missed for the else case. can be moved
out of the if block.

@yuja Thanks for the review. Will send a follow-up soon.