comparison mercurial/dirstate.py @ 1755:a8f7791e3680

add 'debugrebuildstate' to rebuild the dirstate from a given revision - added and removed files will be lost while recreating the dirstate - modifications are not lost
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Mon, 20 Feb 2006 19:04:56 +0100
parents d457fec76ab0
children 98b6c1cad58b
comparison
equal deleted inserted replaced
1754:fdfe89a3962d 1755:a8f7791e3680
195 self.ui.warn(_("not in dirstate: %s!\n") % f) 195 self.ui.warn(_("not in dirstate: %s!\n") % f)
196 pass 196 pass
197 197
198 def clear(self): 198 def clear(self):
199 self.map = {} 199 self.map = {}
200 self.copies = {}
201 self.markdirty()
202
203 def rebuild(self, parent, files):
204 self.clear()
205 umask = os.umask(0)
206 os.umask(umask)
207 for f, mode in files:
208 if mode:
209 self.map[f] = ('n', ~umask, -1, 0)
210 else:
211 self.map[f] = ('n', ~umask & 0666, -1, 0)
212 self.pl = (parent, nullid)
200 self.markdirty() 213 self.markdirty()
201 214
202 def write(self): 215 def write(self):
203 st = self.opener("dirstate", "w", atomic=True) 216 st = self.opener("dirstate", "w", atomic=True)
204 st.write("".join(self.pl)) 217 st.write("".join(self.pl))
404 continue 417 continue
405 # check the common case first 418 # check the common case first
406 if type_ == 'n': 419 if type_ == 'n':
407 if not st: 420 if not st:
408 st = os.stat(fn) 421 st = os.stat(fn)
409 if size != st.st_size or (mode ^ st.st_mode) & 0100: 422 if size >= 0 and (size != st.st_size
423 or (mode ^ st.st_mode) & 0100):
410 modified.append(fn) 424 modified.append(fn)
411 elif time != st.st_mtime: 425 elif time != st.st_mtime:
412 lookup.append(fn) 426 lookup.append(fn)
413 elif type_ == 'm': 427 elif type_ == 'm':
414 modified.append(fn) 428 modified.append(fn)