Mercurial > public > mercurial-scm > hg
diff mercurial/hg.py @ 786:902b12d55751
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.
author | mpm@selenic.com |
---|---|
date | Wed, 27 Jul 2005 18:50:32 -0800 |
parents | 46a8dd3145cc |
children | 64d2a558c943 445970ccf57a 80fd2958235a |
line wrap: on
line diff
--- 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)