Add a redo-always command: it adds an "always dirty" dependency to your target.
This is mostly useless except when combined with redo-stamp... I think.
This commit is contained in:
parent
1d26d99e0c
commit
0da5c7c082
10 changed files with 45 additions and 7 deletions
1
redo-always
Symbolic link
1
redo-always
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
redo-always.py
|
||||||
16
redo-always.py
Executable file
16
redo-always.py
Executable file
|
|
@ -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)
|
||||||
|
|
@ -28,6 +28,7 @@ def dirty_deps(f, depth, max_changed):
|
||||||
if not f.stamp:
|
if not f.stamp:
|
||||||
debug('%s-- DIRTY (no stamp)\n' % depth)
|
debug('%s-- DIRTY (no stamp)\n' % depth)
|
||||||
return DIRTY
|
return DIRTY
|
||||||
|
|
||||||
newstamp = f.read_stamp()
|
newstamp = f.read_stamp()
|
||||||
if f.stamp != newstamp:
|
if f.stamp != newstamp:
|
||||||
if newstamp == state.STAMP_MISSING:
|
if newstamp == state.STAMP_MISSING:
|
||||||
|
|
|
||||||
8
state.py
8
state.py
|
|
@ -153,7 +153,7 @@ class File(object):
|
||||||
q += 'where rowid=?'
|
q += 'where rowid=?'
|
||||||
l = [id]
|
l = [id]
|
||||||
elif name != None:
|
elif name != None:
|
||||||
name = relpath(name, vars.BASE)
|
name = (name==ALWAYS) and ALWAYS or relpath(name, vars.BASE)
|
||||||
q += 'where name=?'
|
q += 'where name=?'
|
||||||
l = [name]
|
l = [name]
|
||||||
else:
|
else:
|
||||||
|
|
@ -178,6 +178,8 @@ class File(object):
|
||||||
(self.id, self.name, self.is_generated, self.is_override,
|
(self.id, self.name, self.is_generated, self.is_override,
|
||||||
self.checked_runid, self.changed_runid, self.failed_runid,
|
self.checked_runid, self.changed_runid, self.failed_runid,
|
||||||
self.stamp, self.csum) = cols
|
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):
|
def __init__(self, id=None, name=None, cols=None):
|
||||||
if cols:
|
if cols:
|
||||||
|
|
@ -259,9 +261,7 @@ class File(object):
|
||||||
|
|
||||||
def add_dep(self, mode, dep):
|
def add_dep(self, mode, dep):
|
||||||
src = File(name=dep)
|
src = File(name=dep)
|
||||||
reldep = relpath(dep, vars.BASE)
|
debug2('add-dep: %r < %s %r\n' % (self.name, mode, src.name))
|
||||||
debug2('add-dep: %r < %s %r\n' % (self.name, mode, reldep))
|
|
||||||
assert(src.name == reldep)
|
|
||||||
assert(self.id != src.id)
|
assert(self.id != src.id)
|
||||||
_write("insert or replace into Deps "
|
_write("insert or replace into Deps "
|
||||||
" (target, mode, source) values (?,?,?)",
|
" (target, mode, source) values (?,?,?)",
|
||||||
|
|
|
||||||
2
t/.gitignore
vendored
2
t/.gitignore
vendored
|
|
@ -16,3 +16,5 @@ test2.args
|
||||||
/touch1
|
/touch1
|
||||||
/touch1.do
|
/touch1.do
|
||||||
/deltest2
|
/deltest2
|
||||||
|
/always1
|
||||||
|
/always1.log
|
||||||
|
|
|
||||||
3
t/always1.do
Normal file
3
t/always1.do
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
echo $$ >>always1.log
|
||||||
|
echo $$
|
||||||
|
redo-always
|
||||||
13
t/alwaystest.do
Normal file
13
t/alwaystest.do
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
rm -f always1 always1.log
|
||||||
|
|
||||||
|
redo always1
|
||||||
|
[ "$(wc -l <always1.log)" -eq 1 ] || exit 11
|
||||||
|
|
||||||
|
# This shouldn't rebuild, but because other people might be running flush-cache.sh
|
||||||
|
# in parallel with us, we can't be 100% sure it won't. So don't test it.
|
||||||
|
#redo-ifchange always1
|
||||||
|
#[ "$(wc -l <always1.log)" -eq 1 ] || exit 21
|
||||||
|
|
||||||
|
./flush-cache.sh
|
||||||
|
redo-ifchange always1
|
||||||
|
[ "$(wc -l <always1.log)" -eq 2 ] || exit 31
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
redo example/clean curse/clean deps/clean "space dir/clean" stamp/clean
|
redo example/clean curse/clean deps/clean "space dir/clean" stamp/clean
|
||||||
rm -f c c.c c.c.c c.c.c.b c.c.c.b.b d mode1 makedir.log chdir1 deltest2 \
|
rm -f c c.c c.c.c c.c.c.b c.c.c.b.b d mode1 makedir.log chdir1 deltest2 \
|
||||||
hello [by]ellow *.o *~ .*~ CC LD passfail silence silence.do \
|
hello [by]ellow *.o *~ .*~ *.log CC LD passfail silence silence.do \
|
||||||
touch1 touch1.do
|
touch1 touch1.do always1
|
||||||
rm -rf makedir
|
rm -rf makedir
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ redo stampy
|
||||||
|
|
||||||
# stampy already exists, so we won't generate it a second time, even though
|
# stampy already exists, so we won't generate it a second time, even though
|
||||||
# usestamp depends on it.
|
# usestamp depends on it.
|
||||||
|
../flush-cache.sh
|
||||||
redo-ifchange usestamp
|
redo-ifchange usestamp
|
||||||
[ "$(wc -l <stampy.log)" -eq 1 ] || exit 21
|
[ "$(wc -l <stampy.log)" -eq 1 ] || exit 21
|
||||||
[ "$(wc -l <usestamp.log)" -eq 1 ] || exit 12
|
[ "$(wc -l <usestamp.log)" -eq 1 ] || exit 12
|
||||||
|
|
@ -17,6 +18,7 @@ redo stampy
|
||||||
[ "$(wc -l <usestamp.log)" -eq 1 ] || exit 32
|
[ "$(wc -l <usestamp.log)" -eq 1 ] || exit 32
|
||||||
|
|
||||||
# same as above: stampy is already up-to-date, so it won't be redone.
|
# same as above: stampy is already up-to-date, so it won't be redone.
|
||||||
|
../flush-cache.sh
|
||||||
redo-ifchange usestamp
|
redo-ifchange usestamp
|
||||||
[ "$(wc -l <stampy.log)" -eq 2 ] || exit 41
|
[ "$(wc -l <stampy.log)" -eq 2 ] || exit 41
|
||||||
[ "$(wc -l <usestamp.log)" -eq 1 ] || exit 42
|
[ "$(wc -l <usestamp.log)" -eq 1 ] || exit 42
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,4 @@ redo-ifchange all
|
||||||
./hello >&2
|
./hello >&2
|
||||||
redo deltest deltest2 test.args test2.args passfailtest chdirtest \
|
redo deltest deltest2 test.args test2.args passfailtest chdirtest \
|
||||||
curse/test deps/test "space dir/test" modetest makedir2 \
|
curse/test deps/test "space dir/test" modetest makedir2 \
|
||||||
silencetest touchtest stamp/test
|
silencetest touchtest stamp/test alwaystest
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue