changeset 30618:201b44c8875c

ui: do not translate empty configsource() to 'none' (API) It should be processed when displaying data, so we can get "source": "" in JSON output.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 23 Oct 2016 17:47:00 +0900
parents 32a07b8a9f77
children 88efb4fb1975
files mercurial/chgserver.py mercurial/commands.py mercurial/ui.py tests/test-config.t
diffstat 4 files changed, 34 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/chgserver.py	Sun Dec 18 16:20:04 2016 +0900
+++ b/mercurial/chgserver.py	Sun Oct 23 17:47:00 2016 +0900
@@ -271,9 +271,6 @@
         if ':' in source or source == '--config':
             # path:line or command line
             continue
-        if source == 'none':
-            # ui.configsource returns 'none' by default
-            source = ''
         newui.setconfig(section, name, value, source)
 
     # load wd and repo config, copied from dispatch.py
--- a/mercurial/commands.py	Sun Dec 18 16:20:04 2016 +0900
+++ b/mercurial/commands.py	Sun Oct 23 17:47:00 2016 +0900
@@ -1804,29 +1804,28 @@
             raise error.Abort(_('only one config item permitted'))
     matched = False
     for section, name, value in ui.walkconfig(untrusted=untrusted):
+        source = ui.configsource(section, name, untrusted)
         value = str(value)
         if fm.isplain():
+            source = source or 'none'
             value = value.replace('\n', '\\n')
         entryname = section + '.' + name
         if values:
             for v in values:
                 if v == section:
                     fm.startitem()
-                    fm.condwrite(ui.debugflag, 'source', '%s: ',
-                                 ui.configsource(section, name, untrusted))
+                    fm.condwrite(ui.debugflag, 'source', '%s: ', source)
                     fm.write('name value', '%s=%s\n', entryname, value)
                     matched = True
                 elif v == entryname:
                     fm.startitem()
-                    fm.condwrite(ui.debugflag, 'source', '%s: ',
-                                 ui.configsource(section, name, untrusted))
+                    fm.condwrite(ui.debugflag, 'source', '%s: ', source)
                     fm.write('value', '%s\n', value)
                     fm.data(name=entryname)
                     matched = True
         else:
             fm.startitem()
-            fm.condwrite(ui.debugflag, 'source', '%s: ',
-                         ui.configsource(section, name, untrusted))
+            fm.condwrite(ui.debugflag, 'source', '%s: ', source)
             fm.write('name value', '%s=%s\n', entryname, value)
             matched = True
     fm.end()
--- a/mercurial/ui.py	Sun Dec 18 16:20:04 2016 +0900
+++ b/mercurial/ui.py	Sun Oct 23 17:47:00 2016 +0900
@@ -249,8 +249,9 @@
                     if not p:
                         continue
                     if '%%' in p:
+                        s = self.configsource('paths', n) or 'none'
                         self.warn(_("(deprecated '%%' in path %s=%s from %s)\n")
-                                  % (n, p, self.configsource('paths', n)))
+                                  % (n, p, s))
                         p = p.replace('%%', '%')
                     p = util.expandpath(p)
                     if not util.hasscheme(p) and not os.path.isabs(p):
@@ -291,7 +292,7 @@
         return untrusted and self._ucfg or self._tcfg
 
     def configsource(self, section, name, untrusted=False):
-        return self._data(untrusted).source(section, name) or 'none'
+        return self._data(untrusted).source(section, name)
 
     def config(self, section, name, default=None, untrusted=False):
         if isinstance(name, list):
--- a/tests/test-config.t	Sun Dec 18 16:20:04 2016 +0900
+++ b/tests/test-config.t	Sun Oct 23 17:47:00 2016 +0900
@@ -84,6 +84,32 @@
    }
   ]
 
+Test empty config source:
+
+  $ cat <<EOF > emptysource.py
+  > def reposetup(ui, repo):
+  >     ui.setconfig('empty', 'source', 'value')
+  > EOF
+  $ cp .hg/hgrc .hg/hgrc.orig
+  $ cat <<EOF >> .hg/hgrc
+  > [extensions]
+  > emptysource = `pwd`/emptysource.py
+  > EOF
+
+  $ hg config --debug empty.source
+  read config from: * (glob)
+  none: value
+  $ hg config empty.source -Tjson
+  [
+   {
+    "name": "empty.source",
+    "source": "",
+    "value": "value"
+   }
+  ]
+
+  $ cp .hg/hgrc.orig .hg/hgrc
+
 Test "%unset"
 
   $ cat >> $HGRCPATH <<EOF