Don't check as often whether the .redo directory exists.
Just check it once after running a subprocess: that's the only way it ought to be able to disappear (ie. in a 'make clean' setup).
This commit is contained in:
parent
29d6c9a746
commit
3ef2bd7300
5 changed files with 21 additions and 31 deletions
|
|
@ -130,6 +130,7 @@ class BuildJob:
|
||||||
|
|
||||||
def _after(self, t, rv):
|
def _after(self, t, rv):
|
||||||
try:
|
try:
|
||||||
|
state.check_sane()
|
||||||
rv = self._after1(t, rv)
|
rv = self._after1(t, rv)
|
||||||
finally:
|
finally:
|
||||||
self._after2(rv)
|
self._after2(rv)
|
||||||
|
|
@ -211,7 +212,8 @@ def main(targets, shouldbuildfunc):
|
||||||
jwack.get_token(t)
|
jwack.get_token(t)
|
||||||
if retcode[0] and not vars.KEEP_GOING:
|
if retcode[0] and not vars.KEEP_GOING:
|
||||||
break
|
break
|
||||||
if not state.is_sane():
|
if not state.check_sane():
|
||||||
|
err('.redo directory disappeared; cannot continue.\n')
|
||||||
retcode[0] = 205
|
retcode[0] = 205
|
||||||
break
|
break
|
||||||
lock = state.Lock(t)
|
lock = state.Lock(t)
|
||||||
|
|
@ -234,7 +236,8 @@ def main(targets, shouldbuildfunc):
|
||||||
if retcode[0] and not vars.KEEP_GOING:
|
if retcode[0] and not vars.KEEP_GOING:
|
||||||
break
|
break
|
||||||
if locked:
|
if locked:
|
||||||
if not state.is_sane():
|
if not state.check_sane():
|
||||||
|
err('.redo directory disappeared; cannot continue.\n')
|
||||||
retcode[0] = 205
|
retcode[0] = 205
|
||||||
break
|
break
|
||||||
t = locked.pop(0)
|
t = locked.pop(0)
|
||||||
|
|
|
||||||
18
helpers.py
18
helpers.py
|
|
@ -15,24 +15,6 @@ def unlink(f):
|
||||||
pass # it doesn't exist, that's what you asked for
|
pass # it doesn't exist, that's what you asked for
|
||||||
|
|
||||||
|
|
||||||
def mkdirp(d, mode=None):
|
|
||||||
"""Recursively create directories on path 'd'.
|
|
||||||
|
|
||||||
Unlike os.makedirs(), it doesn't raise an exception if the last element of
|
|
||||||
the path already exists.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
if mode:
|
|
||||||
os.makedirs(d, mode)
|
|
||||||
else:
|
|
||||||
os.makedirs(d)
|
|
||||||
except OSError, e:
|
|
||||||
if e.errno == errno.EEXIST:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
|
|
||||||
def log_(s):
|
def log_(s):
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
if vars.DEBUG_PIDS:
|
if vars.DEBUG_PIDS:
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
import sys, os, errno, stat
|
import sys, os, errno, stat
|
||||||
import vars, state, builder, jwack
|
import vars, state, builder, jwack
|
||||||
from helpers import debug, debug2, err, mkdirp, unlink
|
from helpers import debug, debug2, err, unlink
|
||||||
|
|
||||||
|
|
||||||
def dirty_deps(f, depth, max_changed):
|
def dirty_deps(f, depth, max_changed):
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
import sys, os
|
import sys, os
|
||||||
import vars, state
|
import vars, state
|
||||||
from helpers import err, mkdirp
|
from helpers import err
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
23
state.py
23
state.py
|
|
@ -1,6 +1,6 @@
|
||||||
import sys, os, errno, glob, stat, sqlite3
|
import sys, os, errno, glob, stat, sqlite3
|
||||||
import vars
|
import vars
|
||||||
from helpers import unlink, err, debug2, debug3, mkdirp, close_on_exec
|
from helpers import unlink, err, debug2, debug3, close_on_exec
|
||||||
import helpers
|
import helpers
|
||||||
|
|
||||||
SCHEMA_VER=1
|
SCHEMA_VER=1
|
||||||
|
|
@ -13,7 +13,13 @@ def db():
|
||||||
return _db
|
return _db
|
||||||
dbdir = '%s/.redo' % vars.BASE
|
dbdir = '%s/.redo' % vars.BASE
|
||||||
dbfile = '%s/db.sqlite3' % dbdir
|
dbfile = '%s/db.sqlite3' % dbdir
|
||||||
mkdirp(dbdir)
|
try:
|
||||||
|
os.mkdir(dbdir)
|
||||||
|
except OSError, e:
|
||||||
|
if e.errno == errno.EEXIST:
|
||||||
|
pass # if it exists, that's okay
|
||||||
|
else:
|
||||||
|
raise
|
||||||
must_create = not os.path.exists(dbfile)
|
must_create = not os.path.exists(dbfile)
|
||||||
if not must_create:
|
if not must_create:
|
||||||
_db = sqlite3.connect(dbfile, timeout=TIMEOUT)
|
_db = sqlite3.connect(dbfile, timeout=TIMEOUT)
|
||||||
|
|
@ -72,6 +78,8 @@ def init():
|
||||||
|
|
||||||
_wrote = 0
|
_wrote = 0
|
||||||
def _write(q, l):
|
def _write(q, l):
|
||||||
|
if _insane:
|
||||||
|
return
|
||||||
global _wrote
|
global _wrote
|
||||||
_wrote += 1
|
_wrote += 1
|
||||||
#helpers.log_('W: %r %r\n' % (q,l))
|
#helpers.log_('W: %r %r\n' % (q,l))
|
||||||
|
|
@ -79,6 +87,8 @@ def _write(q, l):
|
||||||
|
|
||||||
|
|
||||||
def commit():
|
def commit():
|
||||||
|
if _insane:
|
||||||
|
return
|
||||||
global _wrote
|
global _wrote
|
||||||
if _wrote:
|
if _wrote:
|
||||||
#helpers.log_("COMMIT (%d)\n" % _wrote)
|
#helpers.log_("COMMIT (%d)\n" % _wrote)
|
||||||
|
|
@ -87,12 +97,10 @@ def commit():
|
||||||
|
|
||||||
|
|
||||||
_insane = None
|
_insane = None
|
||||||
def is_sane():
|
def check_sane():
|
||||||
global _insane
|
global _insane, _writable
|
||||||
if not _insane:
|
if not _insane:
|
||||||
_insane = not os.path.exists('%s/.redo' % vars.BASE)
|
_insane = not os.path.exists('%s/.redo' % vars.BASE)
|
||||||
if _insane:
|
|
||||||
err('.redo directory disappeared; cannot continue.\n')
|
|
||||||
return not _insane
|
return not _insane
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -161,9 +169,6 @@ class File(object):
|
||||||
self._init_from_cols(row)
|
self._init_from_cols(row)
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
if not os.path.exists('%s/.redo' % vars.BASE):
|
|
||||||
# this might happen if 'make clean' removes the .redo dir
|
|
||||||
return
|
|
||||||
_write('update Files set '
|
_write('update Files set '
|
||||||
' is_generated=?, checked_runid=?, changed_runid=?, '
|
' is_generated=?, checked_runid=?, changed_runid=?, '
|
||||||
' stamp=?, csum=? '
|
' stamp=?, csum=? '
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue