mercurial/dirstate.py
changeset 2393 5083cba2a777
parent 2063 f1fda71e134e
child 2425 be2fd6398d50
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 = {}