diff --git a/builder.py b/builder.py index b63fdb0..7b083f9 100644 --- a/builder.py +++ b/builder.py @@ -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) diff --git a/helpers.py b/helpers.py index 3765343..ef5f011 100644 --- a/helpers.py +++ b/helpers.py @@ -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: diff --git a/redo-ifchange.py b/redo-ifchange.py index 5267cfb..2a433cc 100755 --- a/redo-ifchange.py +++ b/redo-ifchange.py @@ -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): diff --git a/redo-ifcreate.py b/redo-ifcreate.py index 9d862c9..d4c190c 100755 --- a/redo-ifcreate.py +++ b/redo-ifcreate.py @@ -1,7 +1,7 @@ #!/usr/bin/python import sys, os import vars, state -from helpers import err, mkdirp +from helpers import err try: diff --git a/state.py b/state.py index 661ee3d..beac06e 100644 --- a/state.py +++ b/state.py @@ -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=? '