diff mercurial/streamclone.py @ 9506:49b62395e910

streamclone: partially encode filename over the wire, not for local read (issue1847) (Fixes issue1847, which was introduced by 810387f59696: stream clone of a repo with directory named *.d failed: server raises exception "IOError: [Errno 2] No such file or directory: /tmp/test/.hg/store/data/foo.d.hg.hg/foo".)
author Greg Ward <greg-hg@gerg.ca>
date Wed, 30 Sep 2009 16:08:11 -0400
parents 0289f384e1e5
children e2fd9b62349b
line wrap: on
line diff
--- a/mercurial/streamclone.py	Wed Sep 30 13:15:18 2009 -0500
+++ b/mercurial/streamclone.py	Wed Sep 30 16:08:11 2009 -0400
@@ -48,8 +48,7 @@
         try:
             repo.ui.debug(_('scanning\n'))
             for name, ename, size in repo.store.walk():
-                # for backwards compat, name was partially encoded
-                entries.append((store.encodedir(name), size))
+                entries.append((name, size))
                 total_bytes += size
         finally:
             lock.release()
@@ -62,6 +61,7 @@
     yield '%d %d\n' % (len(entries), total_bytes)
     for name, size in entries:
         repo.ui.debug(_('sending %s (%d bytes)\n') % (name, size))
-        yield '%s\0%d\n' % (name, size)
+        # partially encode name over the wire for backwards compat
+        yield '%s\0%d\n' % (store.encodedir(name), size)
         for chunk in util.filechunkiter(repo.sopener(name), limit=size):
             yield chunk