# HG changeset patch # User Felipe Resende # Date 2024-03-17 00:02:19 # Node ID 08913487ae8038cc16af3df0ecada7fd096732e3 # Parent a2f1d97e5284b60b3a16cb071ccc015f6721bc29 subrepo: fix normalizing paths with scheme After revision 0afe96e374a7, subrepo paths were normalized using posixpath.normpath and that resulted in ssh paths being wrongly converted from ssh://host/path to ssh:/host/path This fix applies the same logic used in urlutil.url to split the path scheme from the rest and only use posixpath.normpath to the string after scheme:// diff --git a/mercurial/subrepoutil.py b/mercurial/subrepoutil.py --- a/mercurial/subrepoutil.py +++ b/mercurial/subrepoutil.py @@ -421,7 +421,18 @@ def repo_rel_or_abs_source(repo): chunks.reverse() path = posixpath.join(*chunks) - return posixpath.normpath(path) + matchscheme = re.compile(b'^[a-zA-Z0-9+.\\-]+:').match + if matchscheme(path): + scheme, path = path.split(b':', 1) + if path.startswith(b'//'): + path = path[2:] + sep = b'//' + else: + sep = b'' + normalized_path = scheme + b':' + sep + posixpath.normpath(path) + else: + normalized_path = posixpath.normpath(path) + return normalized_path def reporelpath(repo: "localrepo.localrepository") -> bytes: