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:
|
||||
debug('%s-- DIRTY (no stamp)\n' % depth)
|
||||
return DIRTY
|
||||
|
||||
newstamp = f.read_stamp()
|
||||
if f.stamp != newstamp:
|
||||
if newstamp == state.STAMP_MISSING:
|
||||
|
|
|
|||
8
state.py
8
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 (?,?,?)",
|
||||
|
|
|
|||
2
t/.gitignore
vendored
2
t/.gitignore
vendored
|
|
@ -16,3 +16,5 @@ test2.args
|
|||
/touch1
|
||||
/touch1.do
|
||||
/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
|
||||
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 \
|
||||
touch1 touch1.do
|
||||
hello [by]ellow *.o *~ .*~ *.log CC LD passfail silence silence.do \
|
||||
touch1 touch1.do always1
|
||||
rm -rf makedir
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ redo stampy
|
|||
|
||||
# stampy already exists, so we won't generate it a second time, even though
|
||||
# usestamp depends on it.
|
||||
../flush-cache.sh
|
||||
redo-ifchange usestamp
|
||||
[ "$(wc -l <stampy.log)" -eq 1 ] || exit 21
|
||||
[ "$(wc -l <usestamp.log)" -eq 1 ] || exit 12
|
||||
|
|
@ -17,6 +18,7 @@ redo stampy
|
|||
[ "$(wc -l <usestamp.log)" -eq 1 ] || exit 32
|
||||
|
||||
# same as above: stampy is already up-to-date, so it won't be redone.
|
||||
../flush-cache.sh
|
||||
redo-ifchange usestamp
|
||||
[ "$(wc -l <stampy.log)" -eq 2 ] || exit 41
|
||||
[ "$(wc -l <usestamp.log)" -eq 1 ] || exit 42
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@ redo-ifchange all
|
|||
./hello >&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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue