Calculate dependencies with fewer sqlite queries.
This commit is contained in:
parent
c339359f04
commit
fb79851530
2 changed files with 21 additions and 11 deletions
|
|
@ -25,13 +25,12 @@ def dirty_deps(f, depth, max_changed):
|
||||||
debug('%s-- DIRTY (mtime)\n' % depth)
|
debug('%s-- DIRTY (mtime)\n' % depth)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
for mode,name in f.deps():
|
for mode,f2 in f.deps():
|
||||||
if mode == 'c':
|
if mode == 'c':
|
||||||
if os.path.exists(name):
|
if os.path.exists(os.path.join(vars.BASE, f2.name)):
|
||||||
debug('%s-- DIRTY (created)\n' % depth)
|
debug('%s-- DIRTY (created)\n' % depth)
|
||||||
return True
|
return True
|
||||||
elif mode == 'm':
|
elif mode == 'm':
|
||||||
f2 = state.File(name=os.path.join(vars.BASE, name))
|
|
||||||
if dirty_deps(f2, depth = depth + ' ',
|
if dirty_deps(f2, depth = depth + ' ',
|
||||||
max_changed = f.changed_runid):
|
max_changed = f.changed_runid):
|
||||||
debug('%s-- DIRTY (sub)\n' % depth)
|
debug('%s-- DIRTY (sub)\n' % depth)
|
||||||
|
|
|
||||||
27
state.py
27
state.py
|
|
@ -112,8 +112,15 @@ class File(object):
|
||||||
__slots__ = ['id', 'name', 'is_generated',
|
__slots__ = ['id', 'name', 'is_generated',
|
||||||
'checked_runid', 'changed_runid',
|
'checked_runid', 'changed_runid',
|
||||||
'stamp', 'csum']
|
'stamp', 'csum']
|
||||||
|
|
||||||
|
def _init_from_cols(self, cols):
|
||||||
|
(self.id, self.name, self.is_generated,
|
||||||
|
self.checked_runid, self.changed_runid,
|
||||||
|
self.stamp, self.csum) = cols
|
||||||
|
|
||||||
def __init__(self, id=None, name=None):
|
def __init__(self, id=None, name=None, cols=None):
|
||||||
|
if cols:
|
||||||
|
return self._init_from_cols(cols)
|
||||||
q = ('select rowid, name, is_generated, checked_runid, changed_runid, '
|
q = ('select rowid, name, is_generated, checked_runid, changed_runid, '
|
||||||
' stamp, csum '
|
' stamp, csum '
|
||||||
' from Files ')
|
' from Files ')
|
||||||
|
|
@ -136,9 +143,7 @@ class File(object):
|
||||||
d.commit()
|
d.commit()
|
||||||
row = d.execute(q, l).fetchone()
|
row = d.execute(q, l).fetchone()
|
||||||
assert(row)
|
assert(row)
|
||||||
(self.id, self.name, self.is_generated,
|
self._init_from_cols(row)
|
||||||
self.checked_runid, self.changed_runid,
|
|
||||||
self.stamp, self.csum) = row
|
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
if not os.path.exists('%s/.redo' % vars.BASE):
|
if not os.path.exists('%s/.redo' % vars.BASE):
|
||||||
|
|
@ -180,11 +185,17 @@ class File(object):
|
||||||
and self.changed_runid >= self.checked_runid))
|
and self.changed_runid >= self.checked_runid))
|
||||||
|
|
||||||
def deps(self):
|
def deps(self):
|
||||||
q = "select mode, source from Deps where target=?"
|
q = ('select Deps.mode, Deps.source, '
|
||||||
for mode,source_id in db().execute(q, [self.id]).fetchall():
|
' name, is_generated, checked_runid, changed_runid, '
|
||||||
|
' stamp, csum '
|
||||||
|
' from Files '
|
||||||
|
' join Deps on Files.rowid = Deps.source '
|
||||||
|
' where target=?')
|
||||||
|
for row in db().execute(q, [self.id]).fetchall():
|
||||||
|
mode = row[0]
|
||||||
|
cols = row[1:]
|
||||||
assert(mode in ('c', 'm'))
|
assert(mode in ('c', 'm'))
|
||||||
name = File(id=source_id).name
|
yield mode,File(cols=cols)
|
||||||
yield mode,name
|
|
||||||
|
|
||||||
def zap_deps(self):
|
def zap_deps(self):
|
||||||
debug2('zap-deps: %r\n' % self.name)
|
debug2('zap-deps: %r\n' % self.name)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue