store: invoke "os.stat()" for "createmode" initialization via vfs
This just replaces "os.stat()" invocation: refactoring around
"self.createmode" and "vfs.createmode" initialization is omitted.
This patch also newly adds "stat()" function to "abstractvfs".
--- a/mercurial/scmutil.py Tue Oct 09 01:41:55 2012 +0900
+++ b/mercurial/scmutil.py Tue Oct 09 01:41:55 2012 +0900
@@ -219,6 +219,9 @@
def mkdir(self, path=None):
return os.mkdir(self.join(path))
+ def stat(self, path=None):
+ return os.stat(self.join(path))
+
class vfs(abstractvfs):
'''Operate files relative to a base directory
--- a/mercurial/store.py Tue Oct 09 01:41:55 2012 +0900
+++ b/mercurial/store.py Tue Oct 09 01:41:55 2012 +0900
@@ -274,10 +274,10 @@
def _plainhybridencode(f):
return _hybridencode(f, False)
-def _calcmode(path):
+def _calcmode(vfs):
try:
# files in .hg/ will be created using this mode
- mode = os.stat(path).st_mode
+ mode = vfs.stat().st_mode
# avoid some useless chmods
if (0777 & ~util.umask) == (0777 & mode):
mode = None
@@ -293,7 +293,7 @@
def __init__(self, path, vfstype):
vfs = vfstype(path)
self.path = vfs.base
- self.createmode = _calcmode(path)
+ self.createmode = _calcmode(vfs)
vfs.createmode = self.createmode
self.vfs = scmutil.filtervfs(vfs, encodedir)
self.opener = self.vfs
@@ -344,7 +344,7 @@
def __init__(self, path, vfstype):
vfs = vfstype(path + '/store')
self.path = vfs.base
- self.createmode = _calcmode(self.path)
+ self.createmode = _calcmode(vfs)
vfs.createmode = self.createmode
self.vfs = scmutil.filtervfs(vfs, encodefilename)
self.opener = self.vfs
@@ -457,7 +457,7 @@
vfs = vfstype(path + '/store')
self.path = vfs.base
self.pathsep = self.path + '/'
- self.createmode = _calcmode(self.path)
+ self.createmode = _calcmode(vfs)
vfs.createmode = self.createmode
fnc = fncache(vfs)
self.fncache = fnc