diff --git a/mercurial/ui.py b/mercurial/ui.py index 6ed5ae6264c23323d154e7474deef19852791371_bWVyY3VyaWFsL3VpLnB5..7285b2824fb7c40d6f7569417cc10ac3e88ddf07_bWVyY3VyaWFsL3VpLnB5 100644 --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -98,7 +98,8 @@ self.fixconfig(root=root) def fixconfig(self, root=None): + # expand vars and ~ # translate paths relative to root (or home) into absolute paths root = root or os.getcwd() for c in self._tcfg, self._ucfg, self._ocfg: for n, p in c.items('paths'): @@ -101,9 +102,17 @@ # translate paths relative to root (or home) into absolute paths root = root or os.getcwd() for c in self._tcfg, self._ucfg, self._ocfg: for n, p in c.items('paths'): - if p and "://" not in p and not os.path.isabs(p): - c.set("paths", n, os.path.normpath(os.path.join(root, p))) + if not p: + continue + if '%%' in p: + self.warn(_("(deprecated '%%' in path %s=%s from %s)\n") + % (n, p, self.configsource('paths', n))) + p = p.replace('%%', '%') + p = util.expandpath(p) + if '://' not in p and not os.path.isabs(p): + p = os.path.normpath(os.path.join(root, p)) + c.set("paths", n, p) # update ui options self.debugflag = self.configbool('ui', 'debug') @@ -300,18 +309,8 @@ user = util.shortuser(user) return user - def _path(self, loc): - p = self.config('paths', loc) - if p: - if '%%' in p: - self.warn(_("(deprecated '%%' in path %s=%s from %s)\n") % - (loc, p, self.configsource('paths', loc))) - p = p.replace('%%', '%') - p = util.expandpath(p) - return p - def expandpath(self, loc, default=None): """Return repository location relative to cwd or from [paths]""" if "://" in loc or os.path.isdir(os.path.join(loc, '.hg')): return loc @@ -313,7 +312,7 @@ def expandpath(self, loc, default=None): """Return repository location relative to cwd or from [paths]""" if "://" in loc or os.path.isdir(os.path.join(loc, '.hg')): return loc - path = self._path(loc) + path = self.config('paths', loc) if not path and default is not None: @@ -319,5 +318,5 @@ if not path and default is not None: - path = self._path(default) + path = self.config('paths', default) return path or loc def pushbuffer(self): diff --git a/tests/test-paths.t b/tests/test-paths.t index 6ed5ae6264c23323d154e7474deef19852791371_dGVzdHMvdGVzdC1wYXRocy50..7285b2824fb7c40d6f7569417cc10ac3e88ddf07_dGVzdHMvdGVzdC1wYXRocy50 100644 --- a/tests/test-paths.t +++ b/tests/test-paths.t @@ -5,6 +5,7 @@ $ cd a $ echo '[paths]' >> .hg/hgrc $ echo 'dupe = ../b' >> .hg/hgrc + $ echo 'expand = $SOMETHING/bar' >> .hg/hgrc $ hg in dupe comparing with $TESTTMP/b no changes found @@ -14,3 +15,13 @@ comparing with $TESTTMP/b no changes found [1] + $ cd a + $ hg paths + dupe = $TESTTMP/b + expand = $TESTTMP/a/$SOMETHING/bar + $ SOMETHING=foo hg paths + dupe = $TESTTMP/b + expand = $TESTTMP/a/foo/bar + $ SOMETHING=/foo hg paths + dupe = $TESTTMP/b + expand = /foo/bar