# HG changeset patch # User Martin Geisler # Date 1282217146 -7200 # Node ID f3075ffa6b30dcca549b8f5ada5570e44e8ee5f2 # Parent be33381882adcf9ab1d5b7280734db10f1528a23 subrepos: handle backslashes in subpaths diff -r be33381882ad -r f3075ffa6b30 mercurial/subrepo.py --- a/mercurial/subrepo.py Wed Aug 18 11:59:35 2010 +0200 +++ b/mercurial/subrepo.py Thu Aug 19 13:25:46 2010 +0200 @@ -50,6 +50,13 @@ kind = kind[1:] for pattern, repl in p.items('subpaths'): + # Turn r'C:\foo\bar' into r'C:\\foo\\bar' since re.sub + # does a string decode. + repl = repl.encode('string-escape') + # However, we still want to allow back references to go + # through unharmed, so we turn r'\\1' into r'\1'. Again, + # extra escapes are needed because re.sub string decodes. + repl = re.sub(r'\\\\([0-9]+)', r'\\\1', repl) try: src = re.sub(pattern, repl, src, 1) except re.error, e: diff -r be33381882ad -r f3075ffa6b30 tests/test-subrepo-paths.t --- a/tests/test-subrepo-paths.t Wed Aug 18 11:59:35 2010 +0200 +++ b/tests/test-subrepo-paths.t Thu Aug 19 13:25:46 2010 +0200 @@ -13,14 +13,12 @@ hg debugsub with remapping - $ cat > .hg/hgrc < [subpaths] - > http://example.net = ssh://localhost - > EOF + $ echo '[subpaths]' > .hg/hgrc + $ echo 'http://example.net/lib(.*) = C:\libs\\1-lib\' >> .hg/hgrc $ hg debugsub path sub - source ssh://localhost/libfoo + source C:\libs\foo-lib\ revision test bad subpaths pattern