equal
deleted
inserted
replaced
14 |
14 |
15 _unknown = ('?', 0, 0, 0) |
15 _unknown = ('?', 0, 0, 0) |
16 _format = ">cllll" |
16 _format = ">cllll" |
17 |
17 |
18 def _finddirs(path): |
18 def _finddirs(path): |
19 pos = len(path) |
19 pos = path.rfind('/') |
20 while 1: |
20 while pos != -1: |
|
21 yield path[:pos] |
21 pos = path.rfind('/', 0, pos) |
22 pos = path.rfind('/', 0, pos) |
22 if pos == -1: |
|
23 break |
|
24 yield path[:pos] |
|
25 |
23 |
26 class dirstate(object): |
24 class dirstate(object): |
27 |
25 |
28 def __init__(self, opener, ui, root): |
26 def __init__(self, opener, ui, root): |
29 self._opener = opener |
27 self._opener = opener |
63 except IOError, err: |
61 except IOError, err: |
64 if err.errno != errno.ENOENT: raise |
62 if err.errno != errno.ENOENT: raise |
65 return self._pl |
63 return self._pl |
66 elif name == '_dirs': |
64 elif name == '_dirs': |
67 dirs = {} |
65 dirs = {} |
68 for f,s in self._map.items(): |
66 for f,s in self._map.iteritems(): |
69 if s[0] != 'r': |
67 if s[0] != 'r': |
70 for base in _finddirs(f): |
68 pos = f.rfind('/') |
71 dirs[base] = dirs.get(base, 0) + 1 |
69 while pos != -1: |
|
70 f = f[:pos] |
|
71 if f in dirs: |
|
72 dirs[f] += 1 |
|
73 break |
|
74 dirs[f] = 1 |
|
75 pos = f.rfind('/') |
72 self._dirs = dirs |
76 self._dirs = dirs |
73 return self._dirs |
77 return self._dirs |
74 elif name == '_ignore': |
78 elif name == '_ignore': |
75 files = [self._join('.hgignore')] |
79 files = [self._join('.hgignore')] |
76 for name, path in self._ui.configitems("ui"): |
80 for name, path in self._ui.configitems("ui"): |
240 if self[f] not in "?r" and "_dirs" in self.__dict__: |
244 if self[f] not in "?r" and "_dirs" in self.__dict__: |
241 dirs = self._dirs |
245 dirs = self._dirs |
242 for base in _finddirs(f): |
246 for base in _finddirs(f): |
243 if dirs[base] == 1: |
247 if dirs[base] == 1: |
244 del dirs[base] |
248 del dirs[base] |
245 else: |
249 return |
246 dirs[base] -= 1 |
250 dirs[base] -= 1 |
247 |
251 |
248 def _addpath(self, f, check=False): |
252 def _addpath(self, f, check=False): |
249 oldstate = self[f] |
253 oldstate = self[f] |
250 if check or oldstate == "r": |
254 if check or oldstate == "r": |
251 if '\r' in f or '\n' in f: |
255 if '\r' in f or '\n' in f: |