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:
Avery Pennarun 2010-12-09 03:01:26 -08:00
commit 3ef2bd7300
5 changed files with 21 additions and 31 deletions

View file

@ -130,6 +130,7 @@ class BuildJob:
def _after(self, t, rv):
try:
state.check_sane()
rv = self._after1(t, rv)
finally:
self._after2(rv)
@ -211,7 +212,8 @@ def main(targets, shouldbuildfunc):
jwack.get_token(t)
if retcode[0] and not vars.KEEP_GOING:
break
if not state.is_sane():
if not state.check_sane():
err('.redo directory disappeared; cannot continue.\n')
retcode[0] = 205
break
lock = state.Lock(t)
@ -234,7 +236,8 @@ def main(targets, shouldbuildfunc):
if retcode[0] and not vars.KEEP_GOING:
break
if locked:
if not state.is_sane():
if not state.check_sane():
err('.redo directory disappeared; cannot continue.\n')
retcode[0] = 205
break
t = locked.pop(0)

View file

@ -15,24 +15,6 @@ def unlink(f):
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):
sys.stdout.flush()
if vars.DEBUG_PIDS:

View file

@ -1,7 +1,7 @@
#!/usr/bin/python
import sys, os, errno, stat
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):

View file

@ -1,7 +1,7 @@
#!/usr/bin/python
import sys, os
import vars, state
from helpers import err, mkdirp
from helpers import err
try:

View file

@ -1,6 +1,6 @@
import sys, os, errno, glob, stat, sqlite3
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
SCHEMA_VER=1
@ -13,7 +13,13 @@ def db():
return _db
dbdir = '%s/.redo' % vars.BASE
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)
if not must_create:
_db = sqlite3.connect(dbfile, timeout=TIMEOUT)
@ -72,6 +78,8 @@ def init():
_wrote = 0
def _write(q, l):
if _insane:
return
global _wrote
_wrote += 1
#helpers.log_('W: %r %r\n' % (q,l))
@ -79,6 +87,8 @@ def _write(q, l):
def commit():
if _insane:
return
global _wrote
if _wrote:
#helpers.log_("COMMIT (%d)\n" % _wrote)
@ -87,12 +97,10 @@ def commit():
_insane = None
def is_sane():
global _insane
def check_sane():
global _insane, _writable
if not _insane:
_insane = not os.path.exists('%s/.redo' % vars.BASE)
if _insane:
err('.redo directory disappeared; cannot continue.\n')
return not _insane
@ -161,9 +169,6 @@ class File(object):
self._init_from_cols(row)
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 '
' is_generated=?, checked_runid=?, changed_runid=?, '
' stamp=?, csum=? '