diff mercurial/utils/urlutil.py @ 47272:a671832a8e41

urlutil: move url "fixing" at the time of `ui.paths` initialization Doing such fixing at the time is simpler and will be necessary to deal with urls list in a sane manner. It also reduce the size of fix-config which is always better. I wish we could get ride of the hackish way to pass the root around, I suspect that the `root` variable could be stored as part of the config value, along side the source. However getting to the end of this `root` business is a far too large detours to make now. The test change to `tests/test-hgrc.t` and `test-config.t` are expectied since we are not longer altering the config itself, but the way it is interpreted when building path. This seems more correct. I also added a couple of test call to `test-config.t` and `test-globalopts.t` to clarify that the expanding process is properly happening a the right time. Differential Revision: https://phab.mercurial-scm.org/D10451
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 15 Apr 2021 20:13:29 +0200
parents 7531cc34713c
children 834f4e9d1af2
line wrap: on
line diff
--- a/mercurial/utils/urlutil.py	Mon May 17 15:15:44 2021 -0700
+++ b/mercurial/utils/urlutil.py	Thu Apr 15 20:13:29 2021 +0200
@@ -637,11 +637,20 @@
     def __init__(self, ui):
         dict.__init__(self)
 
+        home_path = os.path.expanduser(b'~')
+
         for name, loc in ui.configitems(b'paths', ignoresub=True):
             # No location is the same as not existing.
             if not loc:
                 continue
-            loc, sub_opts = ui.configsuboptions(b'paths', name)
+            _value, sub_opts = ui.configsuboptions(b'paths', name)
+            s = ui.configsource(b'paths', name)
+            root_key = (name, loc, s)
+            root = ui._path_to_root.get(root_key, home_path)
+            loc = os.path.expandvars(loc)
+            loc = os.path.expanduser(loc)
+            if not hasscheme(loc) and not os.path.isabs(loc):
+                loc = os.path.normpath(os.path.join(root, loc))
             self[name] = [path(ui, name, rawloc=loc, suboptions=sub_opts)]
 
         for name, old_paths in sorted(self.items()):