mercurial/dirstate.py
changeset 4372 9edc2d6f7c10
parent 4371 abeb3edb2b4e
child 4373 109077e7048d
equal deleted inserted replaced
4371:abeb3edb2b4e 4372:9edc2d6f7c10
     8 """
     8 """
     9 
     9 
    10 from node import *
    10 from node import *
    11 from i18n import _
    11 from i18n import _
    12 import struct, os, time, bisect, stat, strutil, util, re, errno
    12 import struct, os, time, bisect, stat, strutil, util, re, errno
       
    13 import cStringIO
    13 
    14 
    14 class dirstate(object):
    15 class dirstate(object):
    15     format = ">cllll"
    16     format = ">cllll"
    16 
    17 
    17     def __init__(self, opener, ui, root):
    18     def __init__(self, opener, ui, root):
   334         self.markdirty()
   335         self.markdirty()
   335 
   336 
   336     def write(self):
   337     def write(self):
   337         if not self.dirty:
   338         if not self.dirty:
   338             return
   339             return
   339         st = self.opener("dirstate", "w", atomictemp=True)
   340         cs = cStringIO.StringIO()
   340         st.write("".join(self.pl))
   341         cs.write("".join(self.pl))
   341         for f, e in self.map.items():
   342         for f, e in self.map.iteritems():
   342             c = self.copied(f)
   343             c = self.copied(f)
   343             if c:
   344             if c:
   344                 f = f + "\0" + c
   345                 f = f + "\0" + c
   345             e = struct.pack(self.format, e[0], e[1], e[2], e[3], len(f))
   346             e = struct.pack(self.format, e[0], e[1], e[2], e[3], len(f))
   346             st.write(e + f)
   347             cs.write(e)
   347         st.rename()
   348             cs.write(f)
       
   349         st = self.opener("dirstate", "w", atomic=True)
       
   350         st.write(cs.getvalue())
   348         self.dirty = 0
   351         self.dirty = 0
   349 
   352 
   350     def filterfiles(self, files):
   353     def filterfiles(self, files):
   351         ret = {}
   354         ret = {}
   352         unknown = []
   355         unknown = []