Mercurial > hg-stable
diff mercurial/subrepoutil.py @ 51461:08913487ae80 stable
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://
author | Felipe Resende <felipe@fcresende.dev.br> |
---|---|
date | Sat, 16 Mar 2024 21:02:19 -0300 |
parents | 7bd7fcc711f2 |
children | c6e4fec01775 |
line wrap: on
line diff
--- a/mercurial/subrepoutil.py Sat Mar 16 18:37:07 2024 -0300 +++ b/mercurial/subrepoutil.py Sat Mar 16 21:02:19 2024 -0300 @@ -421,7 +421,18 @@ 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: