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 = {}