# HG changeset patch # User mpm@selenic.com # Date 1122519032 28800 # Node ID 902b12d55751b8414562544faafc7dc41807890b # Parent 46a8dd3145cc417af6643c291d794db75c5b8779 Fix the directory and revlog collision problem This adds escaping for directory names so that directory foo.i doesn't collide with the revision data for file foo. diff -r 46a8dd3145cc -r 902b12d55751 mercurial/hg.py --- a/mercurial/hg.py Wed Jul 27 18:16:20 2005 -0800 +++ b/mercurial/hg.py Wed Jul 27 18:50:32 2005 -0800 @@ -16,8 +16,22 @@ class filelog(revlog): def __init__(self, opener, path): revlog.__init__(self, opener, - os.path.join("data", path + ".i"), - os.path.join("data", path + ".d")) + os.path.join("data", self.encodedir(path + ".i")), + os.path.join("data", self.encodedir(path + ".d"))) + + # This avoids a collision between a file named foo and a dir named + # foo.i or foo.d + def encodedir(self, path): + path.replace(".hg/", ".hg.hg/") + path.replace(".i/", ".i.hg/") + path.replace(".d/", ".i.hg/") + return path + + def decodedir(self, path): + path.replace(".d.hg/", ".d/") + path.replace(".i.hg/", ".i/") + path.replace(".hg.hg/", ".hg/") + return path def read(self, node): t = self.revision(node)