diff --git a/redo-always b/redo-always new file mode 120000 index 0000000..1ba5266 --- /dev/null +++ b/redo-always @@ -0,0 +1 @@ +redo-always.py \ No newline at end of file diff --git a/redo-always.py b/redo-always.py new file mode 100755 index 0000000..3f53bd3 --- /dev/null +++ b/redo-always.py @@ -0,0 +1,16 @@ +#!/usr/bin/python +import sys, os +import vars, state +from helpers import err + + +try: + me = state.File(name=vars.TARGET) + me.add_dep('m', state.ALWAYS) + always = state.File(name=state.ALWAYS) + always.stamp = state.STAMP_MISSING + always.set_changed() + always.save() + state.commit() +except KeyboardInterrupt: + sys.exit(200) diff --git a/redo-ifchange.py b/redo-ifchange.py index 412052c..a044289 100755 --- a/redo-ifchange.py +++ b/redo-ifchange.py @@ -28,6 +28,7 @@ def dirty_deps(f, depth, max_changed): if not f.stamp: debug('%s-- DIRTY (no stamp)\n' % depth) return DIRTY + newstamp = f.read_stamp() if f.stamp != newstamp: if newstamp == state.STAMP_MISSING: diff --git a/state.py b/state.py index 3965236..1650d62 100644 --- a/state.py +++ b/state.py @@ -153,7 +153,7 @@ class File(object): q += 'where rowid=?' l = [id] elif name != None: - name = relpath(name, vars.BASE) + name = (name==ALWAYS) and ALWAYS or relpath(name, vars.BASE) q += 'where name=?' l = [name] else: @@ -178,6 +178,8 @@ class File(object): (self.id, self.name, self.is_generated, self.is_override, self.checked_runid, self.changed_runid, self.failed_runid, self.stamp, self.csum) = cols + if self.name == ALWAYS and self.changed_runid < vars.RUNID: + self.changed_runid = vars.RUNID def __init__(self, id=None, name=None, cols=None): if cols: @@ -259,9 +261,7 @@ class File(object): def add_dep(self, mode, dep): src = File(name=dep) - reldep = relpath(dep, vars.BASE) - debug2('add-dep: %r < %s %r\n' % (self.name, mode, reldep)) - assert(src.name == reldep) + debug2('add-dep: %r < %s %r\n' % (self.name, mode, src.name)) assert(self.id != src.id) _write("insert or replace into Deps " " (target, mode, source) values (?,?,?)", diff --git a/t/.gitignore b/t/.gitignore index 00dd4e8..cce02cf 100644 --- a/t/.gitignore +++ b/t/.gitignore @@ -16,3 +16,5 @@ test2.args /touch1 /touch1.do /deltest2 +/always1 +/always1.log diff --git a/t/always1.do b/t/always1.do new file mode 100644 index 0000000..14d62fc --- /dev/null +++ b/t/always1.do @@ -0,0 +1,3 @@ +echo $$ >>always1.log +echo $$ +redo-always diff --git a/t/alwaystest.do b/t/alwaystest.do new file mode 100644 index 0000000..03dc6c9 --- /dev/null +++ b/t/alwaystest.do @@ -0,0 +1,13 @@ +rm -f always1 always1.log + +redo always1 +[ "$(wc -l &2 redo deltest deltest2 test.args test2.args passfailtest chdirtest \ curse/test deps/test "space dir/test" modetest makedir2 \ - silencetest touchtest stamp/test + silencetest touchtest stamp/test alwaystest