##// END OF EJS Templates
dirstate: use propertycache
Matt Mackall -
r8261:0fe1f57a default
parent child Browse files
Show More
@@ -12,6 +12,7 b' import cStringIO, osutil, sys, parsers'
12 12
13 13 _unknown = ('?', 0, 0, 0)
14 14 _format = ">cllll"
15 propertycache = util.propertycache
15 16
16 17 def _finddirs(path):
17 18 pos = path.rfind('/')
@@ -43,70 +44,77 b' class dirstate(object):'
43 44 self._dirtypl = False
44 45 self._ui = ui
45 46
46 def __getattr__(self, name):
47 if name == '_map':
48 self._read()
49 return self._map
50 elif name == '_copymap':
51 self._read()
52 return self._copymap
53 elif name == '_foldmap':
54 _foldmap = {}
55 for name in self._map:
56 norm = os.path.normcase(name)
57 _foldmap[norm] = name
58 self._foldmap = _foldmap
59 return self._foldmap
60 elif name == '_branch':
61 try:
62 self._branch = (self._opener("branch").read().strip()
63 or "default")
64 except IOError:
65 self._branch = "default"
66 return self._branch
67 elif name == '_pl':
68 self._pl = [nullid, nullid]
69 try:
70 st = self._opener("dirstate").read(40)
71 if len(st) == 40:
72 self._pl = st[:20], st[20:40]
73 except IOError, err:
74 if err.errno != errno.ENOENT: raise
75 return self._pl
76 elif name == '_dirs':
77 dirs = {}
78 for f,s in self._map.iteritems():
79 if s[0] != 'r':
80 _incdirs(dirs, f)
81 self._dirs = dirs
82 return self._dirs
83 elif name == '_ignore':
84 files = [self._join('.hgignore')]
85 for name, path in self._ui.configitems("ui"):
86 if name == 'ignore' or name.startswith('ignore.'):
87 files.append(os.path.expanduser(path))
88 self._ignore = ignore.ignore(self._root, files, self._ui.warn)
89 return self._ignore
90 elif name == '_slash':
91 self._slash = self._ui.configbool('ui', 'slash') and os.sep != '/'
92 return self._slash
93 elif name == '_checklink':
94 self._checklink = util.checklink(self._root)
95 return self._checklink
96 elif name == '_checkexec':
97 self._checkexec = util.checkexec(self._root)
98 return self._checkexec
99 elif name == '_checkcase':
100 self._checkcase = not util.checkcase(self._join('.hg'))
101 return self._checkcase
102 elif name == 'normalize':
103 if self._checkcase:
104 self.normalize = self._normalize
105 else:
106 self.normalize = lambda x, y=False: x
107 return self.normalize
108 else:
109 raise AttributeError(name)
47 @propertycache
48 def _map(self):
49 self._read()
50 return self._map
51
52 @propertycache
53 def _copymap(self):
54 self._read()
55 return self._copymap
56
57 @propertycache
58 def _foldmap(self):
59 f = {}
60 for name in self._map:
61 f[os.path.normcase(name)] = name
62 return f
63
64 @propertycache
65 def _branch(self):
66 try:
67 return self._opener("branch").read().strip() or "default"
68 except IOError:
69 return "default"
70
71 @propertycache
72 def _pl(self):
73 try:
74 st = self._opener("dirstate").read(40)
75 if len(st) == 40:
76 return st[:20], st[20:40]
77 except IOError, err:
78 if err.errno != errno.ENOENT: raise
79 return [nullid, nullid]
80
81 @propertycache
82 def _dirs(self):
83 dirs = {}
84 for f,s in self._map.iteritems():
85 if s[0] != 'r':
86 _incdirs(dirs, f)
87 return dirs
88
89 @propertycache
90 def _ignore(self):
91 files = [self._join('.hgignore')]
92 for name, path in self._ui.configitems("ui"):
93 if name == 'ignore' or name.startswith('ignore.'):
94 files.append(os.path.expanduser(path))
95 return ignore.ignore(self._root, files, self._ui.warn)
96
97 @propertycache
98 def _slash(self):
99 return self._ui.configbool('ui', 'slash') and os.sep != '/'
100
101 @propertycache
102 def _checklink(self):
103 return util.checklink(self._root)
104
105 @propertycache
106 def _checkexec(self):
107 return util.checkexec(self._root)
108
109 @propertycache
110 def _checkcase(self):
111 return not util.checkcase(self._join('.hg'))
112
113 @propertycache
114 def normalize(self):
115 if self._checkcase:
116 return self._normalize
117 return lambda x, y=False: x
110 118
111 119 def _join(self, f):
112 120 # much faster than os.path.join()
General Comments 0
You need to be logged in to leave comments. Login now