store: invoke "os.path.isdir()" via vfs
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Tue, 09 Oct 2012 01:41:55 +0900
changeset 17728 004bd533880d
parent 17727 6492b39a44d5
child 17729 9a3cb3ce011e
store: invoke "os.path.isdir()" via vfs This patch invokes "os.path.isdir()" via "rawvfs" object to avoid filename encoding, because the path passed to "os.path.isdir()" shouldn't be encoded. This patch newly adds "self.rawvfs" field only to "basicstore" and "encodedstore", because "fncachestore" has "self.rawvfs" already.
mercurial/store.py
--- a/mercurial/store.py	Tue Oct 09 01:41:55 2012 +0900
+++ b/mercurial/store.py	Tue Oct 09 01:41:55 2012 +0900
@@ -295,6 +295,7 @@
         self.path = vfs.base
         self.createmode = _calcmode(vfs)
         vfs.createmode = self.createmode
+        self.rawvfs = vfs
         self.vfs = scmutil.filtervfs(vfs, encodedir)
         self.opener = self.vfs
 
@@ -308,7 +309,7 @@
             path += '/' + relpath
         striplen = len(self.path) + 1
         l = []
-        if os.path.isdir(path):
+        if self.rawvfs.isdir(path):
             visit = [path]
             while visit:
                 p = visit.pop()
@@ -346,6 +347,7 @@
         self.path = vfs.base
         self.createmode = _calcmode(vfs)
         vfs.createmode = self.createmode
+        self.rawvfs = vfs
         self.vfs = scmutil.filtervfs(vfs, encodefilename)
         self.opener = self.vfs