Mercurial > public > mercurial-scm > hg
diff 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 |
line wrap: on
line diff
--- a/mercurial/dirstate.py Mon Feb 20 01:12:03 2006 +0100 +++ b/mercurial/dirstate.py Mon Feb 20 19:04:56 2006 +0100 @@ -197,6 +197,19 @@ def clear(self): self.map = {} + self.copies = {} + self.markdirty() + + def rebuild(self, parent, files): + self.clear() + umask = os.umask(0) + os.umask(umask) + for f, mode in files: + if mode: + self.map[f] = ('n', ~umask, -1, 0) + else: + self.map[f] = ('n', ~umask & 0666, -1, 0) + self.pl = (parent, nullid) self.markdirty() def write(self): @@ -406,7 +419,8 @@ if type_ == 'n': if not st: st = os.stat(fn) - if size != st.st_size or (mode ^ st.st_mode) & 0100: + if size >= 0 and (size != st.st_size + or (mode ^ st.st_mode) & 0100): modified.append(fn) elif time != st.st_mtime: lookup.append(fn)