Mercurial > public > mercurial-scm > hg-stable
diff mercurial/utils/urlutil.py @ 47284:834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
When this option is set, a list of patch can be specifed as value for `[paths]`
entries. For the command who support it, this behave the same as providing
multiple destination of the command line.
Differential Revision: https://phab.mercurial-scm.org/D10452
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 16 Apr 2021 00:16:47 +0200 |
parents | a671832a8e41 |
children | 9cc9b4a25248 |
line wrap: on
line diff
--- a/mercurial/utils/urlutil.py Thu Apr 15 20:13:29 2021 +0200 +++ b/mercurial/utils/urlutil.py Fri Apr 16 00:16:47 2021 +0200 @@ -20,6 +20,10 @@ urllibcompat, ) +from . import ( + stringutil, +) + if pycompat.TYPE_CHECKING: from typing import ( @@ -639,19 +643,30 @@ home_path = os.path.expanduser(b'~') - for name, loc in ui.configitems(b'paths', ignoresub=True): + for name, value in ui.configitems(b'paths', ignoresub=True): # No location is the same as not existing. - if not loc: + if not value: continue _value, sub_opts = ui.configsuboptions(b'paths', name) s = ui.configsource(b'paths', name) - root_key = (name, loc, s) + root_key = (name, value, 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)] + + multi_url = sub_opts.get(b'multi-urls') + if multi_url is not None and stringutil.parsebool(multi_url): + base_locs = stringutil.parselist(value) + else: + base_locs = [value] + + paths = [] + for loc in base_locs: + 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)) + p = path(ui, name, rawloc=loc, suboptions=sub_opts) + paths.append(p) + self[name] = paths for name, old_paths in sorted(self.items()): new_paths = [] @@ -750,6 +765,17 @@ return value +@pathsuboption(b'multi-urls', b'multi_urls') +def multiurls_pathoption(ui, path, value): + res = stringutil.parsebool(value) + if res is None: + ui.warn( + _(b'(paths.%s:multi-urls not a boolean; ignoring)\n') % path.name + ) + res = False + return res + + def _chain_path(base_path, ui, paths): """return the result of "path://" logic applied on a given path""" new_paths = []