From 47edb9527d80fbcd58481b5301e621fa2a30c8d0 Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Sun, 21 Nov 2010 04:57:04 -0800 Subject: [PATCH] state.py: remove all the ugly fromdir= stuff. Instead, just change the target name to be more specific, in the one place in redo-ifchange that actually needed it. --- helpers.py | 15 ------------ redo-ifchange.py | 22 ++++++++--------- state.py | 61 +++++++++++++++++++++++++++++------------------- 3 files changed, 48 insertions(+), 50 deletions(-) diff --git a/helpers.py b/helpers.py index 1310aae..9c2b784 100644 --- a/helpers.py +++ b/helpers.py @@ -67,18 +67,3 @@ def debug2(s): log_('redo: %s%s' % (vars.DEPTH, s)) -def relpath(t, base): - t = os.path.abspath(t) - tparts = t.split('/') - bparts = base.split('/') - for tp,bp in zip(tparts,bparts): - if tp != bp: - break - tparts.pop(0) - bparts.pop(0) - while bparts: - tparts.insert(0, '..') - bparts.pop(0) - return '/'.join(tparts) - - diff --git a/redo-ifchange.py b/redo-ifchange.py index 99ffad3..62203b8 100755 --- a/redo-ifchange.py +++ b/redo-ifchange.py @@ -4,22 +4,22 @@ import vars, state, builder from helpers import debug, err, mkdirp, unlink -def _dirty_deps(t, depth, fromdir): +def _dirty_deps(t, depth): debug('%s?%s\n' % (depth, t)) - if state.isbuilt(t, fromdir): + if state.isbuilt(t): debug('%s-- DIRTY (built)\n' % depth) return True # has already been built during this session - if state.ismarked(t, fromdir): + if state.ismarked(t): debug('%s-- CLEAN (marked)\n' % depth) return False # has already been checked during this session - stamptime = state.stamped(t, fromdir) + stamptime = state.stamped(t) if stamptime == None: debug('%s-- DIRTY (no stamp)\n' % depth) return True try: - realtime = os.stat(os.path.join(fromdir or '', t)).st_mtime + realtime = os.stat(t).st_mtime except OSError: realtime = 0 @@ -27,22 +27,22 @@ def _dirty_deps(t, depth, fromdir): debug('%s-- DIRTY (mtime)\n' % depth) return True - for mode,name in state.deps(t, fromdir): + for mode,name in state.deps(t): if mode == 'c': if os.path.exists(name): debug('%s-- DIRTY (created)\n' % depth) return True elif mode == 'm': - if dirty_deps(name, depth + ' ', fromdir=vars.BASE): + if dirty_deps(os.path.join(vars.BASE, name), depth + ' '): debug('%s-- DIRTY (sub)\n' % depth) return True - state.mark(t, fromdir) + state.mark(t) return False -def dirty_deps(t, depth, fromdir=None): - if _dirty_deps(t, depth, fromdir): - state.unstamp(t, fromdir) +def dirty_deps(t, depth): + if _dirty_deps(t, depth): + state.unstamp(t) return True return False diff --git a/state.py b/state.py index 4c26769..f9c21f6 100644 --- a/state.py +++ b/state.py @@ -1,6 +1,6 @@ import sys, os, errno, glob import vars -from helpers import unlink, relpath, debug2, mkdirp +from helpers import unlink, debug2, mkdirp def init(): @@ -17,10 +17,23 @@ def init(): os.unlink(f) -def _sname(typ, t, fromdir=None): +def relpath(t, base): + t = os.path.normpath(os.path.join(os.getcwd(), t)) + tparts = t.split('/') + bparts = base.split('/') + for tp,bp in zip(tparts,bparts): + if tp != bp: + break + tparts.pop(0) + bparts.pop(0) + while bparts: + tparts.insert(0, '..') + bparts.pop(0) + return '/'.join(tparts) + + +def _sname(typ, t): # FIXME: t.replace(...) is non-reversible and non-unique here! - if fromdir: - t = os.path.join(fromdir, t) tnew = relpath(t, vars.BASE) v = vars.BASE + ('/.redo/%s^%s' % (typ, tnew.replace('/', '^'))) debug2('sname: (%r) %r -> %r\n' % (os.getcwd(), t, tnew)) @@ -33,8 +46,8 @@ def add_dep(t, mode, dep): % (mode, relpath(dep, vars.BASE))) -def deps(t, fromdir=None): - for line in open(_sname('dep', t, fromdir)).readlines(): +def deps(t): + for line in open(_sname('dep', t)).readlines(): assert(line[0] in ('c','m')) assert(line[1] == ' ') assert(line[-1] == '\n') @@ -43,8 +56,8 @@ def deps(t, fromdir=None): yield mode,name -def _stampname(t, fromdir=None): - return _sname('stamp', t, fromdir) +def _stampname(t): + return _sname('stamp', t) def stamp(t): @@ -66,13 +79,13 @@ def stamp(t): open(depfile, 'a').close() -def unstamp(t, fromdir=None): - unlink(_stampname(t, fromdir)) +def unstamp(t): + unlink(_stampname(t)) -def stamped(t, fromdir=None): +def stamped(t): try: - stamptime = os.stat(_stampname(t, fromdir)).st_mtime + stamptime = os.stat(_stampname(t)).st_mtime except OSError, e: if e.errno == errno.ENOENT: return None @@ -81,9 +94,9 @@ def stamped(t, fromdir=None): return stamptime -def built(t, fromdir=None): +def built(t): try: - open(_sname('built', t, fromdir), 'w').close() + open(_sname('built', t), 'w').close() except IOError, e: if e.errno == errno.ENOENT: pass # may happen if someone deletes our .redo dir @@ -92,17 +105,17 @@ def built(t, fromdir=None): _builts = {} -def isbuilt(t, fromdir=None): - if _builts.get((t,fromdir)): +def isbuilt(t): + if _builts.get(t): return True - if os.path.exists(_sname('built', t, fromdir)): - _builts[(t,fromdir)] = True + if os.path.exists(_sname('built', t)): + _builts[t] = True return True -def mark(t, fromdir=None): +def mark(t): try: - open(_sname('mark', t, fromdir), 'w').close() + open(_sname('mark', t), 'w').close() except IOError, e: if e.errno == errno.ENOENT: pass # may happen if someone deletes our .redo dir @@ -111,11 +124,11 @@ def mark(t, fromdir=None): _marks = {} -def ismarked(t, fromdir=None): - if _marks.get((t,fromdir)): +def ismarked(t): + if _marks.get(t): return True - if os.path.exists(_sname('mark', t, fromdir)): - _marks[(t,fromdir)] = True + if os.path.exists(_sname('mark', t)): + _marks[t] = True return True