If a target's .do file disappears, don't forget to stamp it.
If a file previously was generated but now isn't (ie. its .do file disappears), we would never re-stamp that target, and so all its dependencies would rebuild continually.
This commit is contained in:
parent
60f5446733
commit
0ec15eeb09
6 changed files with 28 additions and 3 deletions
|
|
@ -70,6 +70,7 @@ class BuildJob:
|
|||
(dofile, basename, ext) = _find_do_file(t)
|
||||
if not dofile:
|
||||
if os.path.exists(t):
|
||||
state.stamp(t)
|
||||
return self._after2(0)
|
||||
else:
|
||||
err('no rule to make %r\n' % t)
|
||||
|
|
|
|||
2
t/deps/.gitignore
vendored
2
t/deps/.gitignore
vendored
|
|
@ -2,3 +2,5 @@ t1a
|
|||
t2.count
|
||||
overwrite
|
||||
overwrite[123]
|
||||
genfile2
|
||||
genfile.log
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
redo basic/clean dirtest/clean
|
||||
rm -f *~ .*~ *.count t1a overwrite overwrite[123]
|
||||
rm -f *~ .*~ *.count t1a overwrite overwrite[123] genfile2 genfile.log
|
||||
|
||||
|
||||
|
|
|
|||
2
t/deps/genfile1.do
Normal file
2
t/deps/genfile1.do
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
redo-ifchange genfile2
|
||||
echo $$ >>genfile.log
|
||||
20
t/deps/gentest.do
Normal file
20
t/deps/gentest.do
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
rm -f genfile2 genfile2.do genfile.log
|
||||
|
||||
echo echo hello >genfile2.do
|
||||
. ../flush-cache.sh
|
||||
redo genfile1
|
||||
|
||||
# this will cause a rebuild:
|
||||
# genfile1 depends on genfile2 depends on genfile2.do
|
||||
rm -f genfile2.do
|
||||
. ../flush-cache.sh
|
||||
redo-ifchange genfile1
|
||||
|
||||
# but genfile2.do was gone last time, so genfile2 no longer depends on it.
|
||||
# thus, it can be considered up-to-date. Prior versions of redo had a bug
|
||||
# where the dependency on genfile2.do was never dropped.
|
||||
. ../flush-cache.sh
|
||||
redo-ifchange genfile1
|
||||
|
||||
COUNT=$(wc -l <genfile.log)
|
||||
[ "$COUNT" = 2 ] || exit 77
|
||||
|
|
@ -1,2 +1 @@
|
|||
redo test1 test2 ifchange-fail overwrite basic/test dirtest/test
|
||||
|
||||
redo test1 test2 ifchange-fail overwrite gentest basic/test dirtest/test
|
||||
Loading…
Add table
Add a link
Reference in a new issue