From 560f95fd77af4d52423fce49a485aaa9f7eda426 Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Sun, 19 Dec 2010 03:39:37 -0800 Subject: [PATCH] Don't update the database during redo-ood. Makes it slightly faster. --- deps.py | 12 +++++++----- redo-ood.py | 13 ++++++++++++- state.py | 4 ++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/deps.py b/deps.py index ffedfc4..93063f9 100644 --- a/deps.py +++ b/deps.py @@ -5,7 +5,9 @@ from log import debug CLEAN = 0 DIRTY = 1 -def isdirty(f, depth, max_changed): +def isdirty(f, depth, max_changed, + is_checked=state.File.is_checked, + set_checked=state.File.set_checked_save): if vars.DEBUG >= 1: debug('%s?%s\n' % (depth, f.nicename())) @@ -18,7 +20,7 @@ def isdirty(f, depth, max_changed): if f.changed_runid > max_changed: debug('%s-- DIRTY (built)\n' % depth) return DIRTY # has been built more recently than parent - if f.is_checked(): + if is_checked(f): if vars.DEBUG >= 1: debug('%s-- CLEAN (checked)\n' % depth) return CLEAN # has already been checked during this session @@ -47,7 +49,8 @@ def isdirty(f, depth, max_changed): elif mode == 'm': sub = isdirty(f2, depth = depth + ' ', max_changed = max(f.changed_runid, - f.checked_runid)) + f.checked_runid), + is_checked=is_checked, set_checked=set_checked) if sub: debug('%s-- DIRTY (sub)\n' % depth) dirty = sub @@ -84,8 +87,7 @@ def isdirty(f, depth, max_changed): # if we get here, it's because the target is clean if f.is_override: state.warn_override(f.name) - f.set_checked() - f.save() + set_checked(f) return CLEAN diff --git a/redo-ood.py b/redo-ood.py index cbd4cf4..5b75871 100755 --- a/redo-ood.py +++ b/redo-ood.py @@ -11,7 +11,18 @@ if len(sys.argv[1:]) != 0: err('%s: no arguments expected.\n' % sys.argv[0]) sys.exit(1) + +cache = {} + +def is_checked(f): + return cache.get(f.id, 0) + +def set_checked(f): + cache[f.id] = 1 + + for f in state.files(): if f.is_generated and f.read_stamp() != state.STAMP_MISSING: - if deps.isdirty(f, depth='', max_changed=vars.RUNID): + if deps.isdirty(f, depth='', max_changed=vars.RUNID, + is_checked=is_checked, set_checked=set_checked): print f.nicename() diff --git a/state.py b/state.py index 3d3eaea..37363ea 100644 --- a/state.py +++ b/state.py @@ -199,6 +199,10 @@ class File(object): def set_checked(self): self.checked_runid = vars.RUNID + def set_checked_save(self): + self.set_checked() + self.save() + def set_changed(self): debug2('BUILT: %r (%r)\n' % (self.name, self.stamp)) self.changed_runid = vars.RUNID