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.
--- 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)