Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/dirstate.py @ 2393:5083cba2a777
dirstate: refactor the dirstate binary format, remove magic numbers
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Sun, 04 Jun 2006 02:25:27 +0200 |
parents | f1fda71e134e |
children | be2fd6398d50 |
comparison
equal
deleted
inserted
replaced
2392:8238a3f039e6 | 2393:5083cba2a777 |
---|---|
12 from i18n import gettext as _ | 12 from i18n import gettext as _ |
13 from demandload import * | 13 from demandload import * |
14 demandload(globals(), "time bisect stat util re errno") | 14 demandload(globals(), "time bisect stat util re errno") |
15 | 15 |
16 class dirstate(object): | 16 class dirstate(object): |
17 format = ">cllll" | |
18 | |
17 def __init__(self, opener, ui, root): | 19 def __init__(self, opener, ui, root): |
18 self.opener = opener | 20 self.opener = opener |
19 self.root = root | 21 self.root = root |
20 self.dirty = 0 | 22 self.dirty = 0 |
21 self.ui = ui | 23 self.ui = ui |
162 except: return | 164 except: return |
163 | 165 |
164 self.pl = [st[:20], st[20: 40]] | 166 self.pl = [st[:20], st[20: 40]] |
165 | 167 |
166 pos = 40 | 168 pos = 40 |
169 e_size = struct.calcsize(self.format) | |
167 while pos < len(st): | 170 while pos < len(st): |
168 e = struct.unpack(">cllll", st[pos:pos+17]) | 171 e = struct.unpack(self.format, st[pos:pos+e_size]) |
169 l = e[4] | 172 l = e[4] |
170 pos += 17 | 173 pos += e_size |
171 f = st[pos:pos + l] | 174 f = st[pos:pos + l] |
172 if '\0' in f: | 175 if '\0' in f: |
173 f, c = f.split('\0') | 176 f, c = f.split('\0') |
174 self.copies[f] = c | 177 self.copies[f] = c |
175 self.map[f] = e[:4] | 178 self.map[f] = e[:4] |
239 st.write("".join(self.pl)) | 242 st.write("".join(self.pl)) |
240 for f, e in self.map.items(): | 243 for f, e in self.map.items(): |
241 c = self.copied(f) | 244 c = self.copied(f) |
242 if c: | 245 if c: |
243 f = f + "\0" + c | 246 f = f + "\0" + c |
244 e = struct.pack(">cllll", e[0], e[1], e[2], e[3], len(f)) | 247 e = struct.pack(self.format, e[0], e[1], e[2], e[3], len(f)) |
245 st.write(e + f) | 248 st.write(e + f) |
246 self.dirty = 0 | 249 self.dirty = 0 |
247 | 250 |
248 def filterfiles(self, files): | 251 def filterfiles(self, files): |
249 ret = {} | 252 ret = {} |