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.
This commit is contained in:
parent
b19a918894
commit
47edb9527d
3 changed files with 48 additions and 50 deletions
15
helpers.py
15
helpers.py
|
|
@ -67,18 +67,3 @@ def debug2(s):
|
||||||
log_('redo: %s%s' % (vars.DEPTH, 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)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,22 +4,22 @@ import vars, state, builder
|
||||||
from helpers import debug, err, mkdirp, unlink
|
from helpers import debug, err, mkdirp, unlink
|
||||||
|
|
||||||
|
|
||||||
def _dirty_deps(t, depth, fromdir):
|
def _dirty_deps(t, depth):
|
||||||
debug('%s?%s\n' % (depth, t))
|
debug('%s?%s\n' % (depth, t))
|
||||||
if state.isbuilt(t, fromdir):
|
if state.isbuilt(t):
|
||||||
debug('%s-- DIRTY (built)\n' % depth)
|
debug('%s-- DIRTY (built)\n' % depth)
|
||||||
return True # has already been built during this session
|
return True # has already been built during this session
|
||||||
if state.ismarked(t, fromdir):
|
if state.ismarked(t):
|
||||||
debug('%s-- CLEAN (marked)\n' % depth)
|
debug('%s-- CLEAN (marked)\n' % depth)
|
||||||
return False # has already been checked during this session
|
return False # has already been checked during this session
|
||||||
|
|
||||||
stamptime = state.stamped(t, fromdir)
|
stamptime = state.stamped(t)
|
||||||
if stamptime == None:
|
if stamptime == None:
|
||||||
debug('%s-- DIRTY (no stamp)\n' % depth)
|
debug('%s-- DIRTY (no stamp)\n' % depth)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
realtime = os.stat(os.path.join(fromdir or '', t)).st_mtime
|
realtime = os.stat(t).st_mtime
|
||||||
except OSError:
|
except OSError:
|
||||||
realtime = 0
|
realtime = 0
|
||||||
|
|
||||||
|
|
@ -27,22 +27,22 @@ def _dirty_deps(t, depth, fromdir):
|
||||||
debug('%s-- DIRTY (mtime)\n' % depth)
|
debug('%s-- DIRTY (mtime)\n' % depth)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
for mode,name in state.deps(t, fromdir):
|
for mode,name in state.deps(t):
|
||||||
if mode == 'c':
|
if mode == 'c':
|
||||||
if os.path.exists(name):
|
if os.path.exists(name):
|
||||||
debug('%s-- DIRTY (created)\n' % depth)
|
debug('%s-- DIRTY (created)\n' % depth)
|
||||||
return True
|
return True
|
||||||
elif mode == 'm':
|
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)
|
debug('%s-- DIRTY (sub)\n' % depth)
|
||||||
return True
|
return True
|
||||||
state.mark(t, fromdir)
|
state.mark(t)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def dirty_deps(t, depth, fromdir=None):
|
def dirty_deps(t, depth):
|
||||||
if _dirty_deps(t, depth, fromdir):
|
if _dirty_deps(t, depth):
|
||||||
state.unstamp(t, fromdir)
|
state.unstamp(t)
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
||||||
61
state.py
61
state.py
|
|
@ -1,6 +1,6 @@
|
||||||
import sys, os, errno, glob
|
import sys, os, errno, glob
|
||||||
import vars
|
import vars
|
||||||
from helpers import unlink, relpath, debug2, mkdirp
|
from helpers import unlink, debug2, mkdirp
|
||||||
|
|
||||||
|
|
||||||
def init():
|
def init():
|
||||||
|
|
@ -17,10 +17,23 @@ def init():
|
||||||
os.unlink(f)
|
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!
|
# FIXME: t.replace(...) is non-reversible and non-unique here!
|
||||||
if fromdir:
|
|
||||||
t = os.path.join(fromdir, t)
|
|
||||||
tnew = relpath(t, vars.BASE)
|
tnew = relpath(t, vars.BASE)
|
||||||
v = vars.BASE + ('/.redo/%s^%s' % (typ, tnew.replace('/', '^')))
|
v = vars.BASE + ('/.redo/%s^%s' % (typ, tnew.replace('/', '^')))
|
||||||
debug2('sname: (%r) %r -> %r\n' % (os.getcwd(), t, tnew))
|
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)))
|
% (mode, relpath(dep, vars.BASE)))
|
||||||
|
|
||||||
|
|
||||||
def deps(t, fromdir=None):
|
def deps(t):
|
||||||
for line in open(_sname('dep', t, fromdir)).readlines():
|
for line in open(_sname('dep', t)).readlines():
|
||||||
assert(line[0] in ('c','m'))
|
assert(line[0] in ('c','m'))
|
||||||
assert(line[1] == ' ')
|
assert(line[1] == ' ')
|
||||||
assert(line[-1] == '\n')
|
assert(line[-1] == '\n')
|
||||||
|
|
@ -43,8 +56,8 @@ def deps(t, fromdir=None):
|
||||||
yield mode,name
|
yield mode,name
|
||||||
|
|
||||||
|
|
||||||
def _stampname(t, fromdir=None):
|
def _stampname(t):
|
||||||
return _sname('stamp', t, fromdir)
|
return _sname('stamp', t)
|
||||||
|
|
||||||
|
|
||||||
def stamp(t):
|
def stamp(t):
|
||||||
|
|
@ -66,13 +79,13 @@ def stamp(t):
|
||||||
open(depfile, 'a').close()
|
open(depfile, 'a').close()
|
||||||
|
|
||||||
|
|
||||||
def unstamp(t, fromdir=None):
|
def unstamp(t):
|
||||||
unlink(_stampname(t, fromdir))
|
unlink(_stampname(t))
|
||||||
|
|
||||||
|
|
||||||
def stamped(t, fromdir=None):
|
def stamped(t):
|
||||||
try:
|
try:
|
||||||
stamptime = os.stat(_stampname(t, fromdir)).st_mtime
|
stamptime = os.stat(_stampname(t)).st_mtime
|
||||||
except OSError, e:
|
except OSError, e:
|
||||||
if e.errno == errno.ENOENT:
|
if e.errno == errno.ENOENT:
|
||||||
return None
|
return None
|
||||||
|
|
@ -81,9 +94,9 @@ def stamped(t, fromdir=None):
|
||||||
return stamptime
|
return stamptime
|
||||||
|
|
||||||
|
|
||||||
def built(t, fromdir=None):
|
def built(t):
|
||||||
try:
|
try:
|
||||||
open(_sname('built', t, fromdir), 'w').close()
|
open(_sname('built', t), 'w').close()
|
||||||
except IOError, e:
|
except IOError, e:
|
||||||
if e.errno == errno.ENOENT:
|
if e.errno == errno.ENOENT:
|
||||||
pass # may happen if someone deletes our .redo dir
|
pass # may happen if someone deletes our .redo dir
|
||||||
|
|
@ -92,17 +105,17 @@ def built(t, fromdir=None):
|
||||||
|
|
||||||
|
|
||||||
_builts = {}
|
_builts = {}
|
||||||
def isbuilt(t, fromdir=None):
|
def isbuilt(t):
|
||||||
if _builts.get((t,fromdir)):
|
if _builts.get(t):
|
||||||
return True
|
return True
|
||||||
if os.path.exists(_sname('built', t, fromdir)):
|
if os.path.exists(_sname('built', t)):
|
||||||
_builts[(t,fromdir)] = True
|
_builts[t] = True
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def mark(t, fromdir=None):
|
def mark(t):
|
||||||
try:
|
try:
|
||||||
open(_sname('mark', t, fromdir), 'w').close()
|
open(_sname('mark', t), 'w').close()
|
||||||
except IOError, e:
|
except IOError, e:
|
||||||
if e.errno == errno.ENOENT:
|
if e.errno == errno.ENOENT:
|
||||||
pass # may happen if someone deletes our .redo dir
|
pass # may happen if someone deletes our .redo dir
|
||||||
|
|
@ -111,11 +124,11 @@ def mark(t, fromdir=None):
|
||||||
|
|
||||||
|
|
||||||
_marks = {}
|
_marks = {}
|
||||||
def ismarked(t, fromdir=None):
|
def ismarked(t):
|
||||||
if _marks.get((t,fromdir)):
|
if _marks.get(t):
|
||||||
return True
|
return True
|
||||||
if os.path.exists(_sname('mark', t, fromdir)):
|
if os.path.exists(_sname('mark', t)):
|
||||||
_marks[(t,fromdir)] = True
|
_marks[t] = True
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue