Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/dirstate.py @ 4371:abeb3edb2b4e
dirstate: make parents() faster.
This allows localrepository.status() to avoid reading all but the
first 40 bytes of the dirstate in the common case of running "hg
status".
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Tue, 24 Apr 2007 11:46:15 -0700 |
parents | 1cc5fc1d0994 |
children | 9edc2d6f7c10 |
comparison
equal
deleted
inserted
replaced
4370:4ddc6d374265 | 4371:abeb3edb2b4e |
---|---|
18 self.opener = opener | 18 self.opener = opener |
19 self.root = root | 19 self.root = root |
20 self.dirty = 0 | 20 self.dirty = 0 |
21 self.ui = ui | 21 self.ui = ui |
22 self.map = None | 22 self.map = None |
23 self.fp = None | |
23 self.pl = None | 24 self.pl = None |
24 self.dirs = None | 25 self.dirs = None |
25 self.copymap = {} | 26 self.copymap = {} |
26 self.ignorefunc = None | 27 self.ignorefunc = None |
27 self._branch = None | 28 self._branch = None |
131 return self.map[key] | 132 return self.map[key] |
132 except TypeError: | 133 except TypeError: |
133 self.lazyread() | 134 self.lazyread() |
134 return self[key] | 135 return self[key] |
135 | 136 |
137 _unknown = ('?', 0, 0, 0) | |
138 | |
139 def get(self, key): | |
140 try: | |
141 return self[key] | |
142 except KeyError: | |
143 return self._unknown | |
144 | |
136 def __contains__(self, key): | 145 def __contains__(self, key): |
137 self.lazyread() | 146 self.lazyread() |
138 return key in self.map | 147 return key in self.map |
139 | 148 |
140 def parents(self): | 149 def parents(self): |
141 self.lazyread() | 150 if self.pl is None: |
151 self.pl = [nullid, nullid] | |
152 try: | |
153 self.fp = self.opener('dirstate') | |
154 st = self.fp.read(40) | |
155 if len(st) == 40: | |
156 self.pl = st[:20], st[20:40] | |
157 except IOError, err: | |
158 if err.errno != errno.ENOENT: raise | |
142 return self.pl | 159 return self.pl |
143 | 160 |
144 def branch(self): | 161 def branch(self): |
145 if not self._branch: | 162 if not self._branch: |
146 try: | 163 try: |
200 | 217 |
201 def read(self): | 218 def read(self): |
202 self.map = {} | 219 self.map = {} |
203 self.pl = [nullid, nullid] | 220 self.pl = [nullid, nullid] |
204 try: | 221 try: |
205 st = self.opener("dirstate").read() | 222 if self.fp: |
223 self.fp.seek(0) | |
224 st = self.fp.read() | |
225 self.fp = None | |
226 else: | |
227 st = self.opener("dirstate").read() | |
206 if st: | 228 if st: |
207 self.parse(st) | 229 self.parse(st) |
208 except IOError, err: | 230 except IOError, err: |
209 if err.errno != errno.ENOENT: raise | 231 if err.errno != errno.ENOENT: raise |
210 | 232 |