Mercurial > public > mercurial-scm > hg
diff mercurial/subrepo.py @ 15150:91dc8878f888
subrepo: try remapping subpaths using the "final" path
Before, the right-hand side of a .hgsub entry was used, as is, to
match the left-hand side of a subpaths entry. This turned out to be
less useful than expected since a .hgsub file with
src/foo = src/foo
has little context to do remapping on. The new idea is therefore to
prefix the parent repo path *before* the remapping takes place.
If the parent repository path (as defined by _abssource) is
http://example.net/parent
then the remapping for the above .hgsub entry will be done on the
expanded path:
http://example.net/parent/src/foo
If this expanded path is not changed by the remapping, then we remap
src/foo
alone. This is the old behavior where the right-hand side is remapped
without context.
author | Martin Geisler <mg@aragost.com> |
---|---|
date | Thu, 22 Sep 2011 15:15:18 +0200 |
parents | eaec9cf91aea |
children | 6dc67dced8c1 |
line wrap: on
line diff
--- a/mercurial/subrepo.py Thu Sep 22 14:39:49 2011 +0200 +++ b/mercurial/subrepo.py Thu Sep 22 15:15:18 2011 +0200 @@ -74,6 +74,23 @@ raise util.Abort(_('missing ] in subrepo source')) kind, src = src.split(']', 1) kind = kind[1:] + src = src.lstrip() # strip any extra whitespace after ']' + + if not util.url(src).isabs(): + parent = _abssource(ctx._repo, abort=False) + if parent: + parent = util.url(parent) + parent.path = posixpath.join(parent.path or '', src) + parent.path = posixpath.normpath(parent.path) + joined = str(parent) + # Remap the full joined path and use it if it changes, + # else remap the original source. + remapped = remap(joined) + if remapped == joined: + src = remap(src) + else: + src = remapped + src = remap(src) state[path] = (src.strip(), rev.get(path, ''), kind)