Don't update the database during redo-ood.

Makes it slightly faster.
This commit is contained in:
Avery Pennarun 2010-12-19 03:39:37 -08:00
commit 560f95fd77
3 changed files with 23 additions and 6 deletions

12
deps.py
View file

@ -5,7 +5,9 @@ from log import debug
CLEAN = 0 CLEAN = 0
DIRTY = 1 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: if vars.DEBUG >= 1:
debug('%s?%s\n' % (depth, f.nicename())) debug('%s?%s\n' % (depth, f.nicename()))
@ -18,7 +20,7 @@ def isdirty(f, depth, max_changed):
if f.changed_runid > max_changed: if f.changed_runid > max_changed:
debug('%s-- DIRTY (built)\n' % depth) debug('%s-- DIRTY (built)\n' % depth)
return DIRTY # has been built more recently than parent return DIRTY # has been built more recently than parent
if f.is_checked(): if is_checked(f):
if vars.DEBUG >= 1: if vars.DEBUG >= 1:
debug('%s-- CLEAN (checked)\n' % depth) debug('%s-- CLEAN (checked)\n' % depth)
return CLEAN # has already been checked during this session return CLEAN # has already been checked during this session
@ -47,7 +49,8 @@ def isdirty(f, depth, max_changed):
elif mode == 'm': elif mode == 'm':
sub = isdirty(f2, depth = depth + ' ', sub = isdirty(f2, depth = depth + ' ',
max_changed = max(f.changed_runid, max_changed = max(f.changed_runid,
f.checked_runid)) f.checked_runid),
is_checked=is_checked, set_checked=set_checked)
if sub: if sub:
debug('%s-- DIRTY (sub)\n' % depth) debug('%s-- DIRTY (sub)\n' % depth)
dirty = sub dirty = sub
@ -84,8 +87,7 @@ def isdirty(f, depth, max_changed):
# if we get here, it's because the target is clean # if we get here, it's because the target is clean
if f.is_override: if f.is_override:
state.warn_override(f.name) state.warn_override(f.name)
f.set_checked() set_checked(f)
f.save()
return CLEAN return CLEAN

View file

@ -11,7 +11,18 @@ if len(sys.argv[1:]) != 0:
err('%s: no arguments expected.\n' % sys.argv[0]) err('%s: no arguments expected.\n' % sys.argv[0])
sys.exit(1) 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(): for f in state.files():
if f.is_generated and f.read_stamp() != state.STAMP_MISSING: 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() print f.nicename()

View file

@ -199,6 +199,10 @@ class File(object):
def set_checked(self): def set_checked(self):
self.checked_runid = vars.RUNID self.checked_runid = vars.RUNID
def set_checked_save(self):
self.set_checked()
self.save()
def set_changed(self): def set_changed(self):
debug2('BUILT: %r (%r)\n' % (self.name, self.stamp)) debug2('BUILT: %r (%r)\n' % (self.name, self.stamp))
self.changed_runid = vars.RUNID self.changed_runid = vars.RUNID