From 0ec15eeb09c5456f6a16063250516cdf426c4905 Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Wed, 24 Nov 2010 03:37:30 -0800 Subject: [PATCH] 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. --- builder.py | 1 + t/deps/.gitignore | 2 ++ t/deps/clean.do | 3 ++- t/deps/genfile1.do | 2 ++ t/deps/gentest.do | 20 ++++++++++++++++++++ t/deps/test.do | 3 +-- 6 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 t/deps/genfile1.do create mode 100644 t/deps/gentest.do diff --git a/builder.py b/builder.py index 783d6e4..febfeb6 100644 --- a/builder.py +++ b/builder.py @@ -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) diff --git a/t/deps/.gitignore b/t/deps/.gitignore index efb409b..4dfb618 100644 --- a/t/deps/.gitignore +++ b/t/deps/.gitignore @@ -2,3 +2,5 @@ t1a t2.count overwrite overwrite[123] +genfile2 +genfile.log \ No newline at end of file diff --git a/t/deps/clean.do b/t/deps/clean.do index fc9a0cc..a1d9f1e 100644 --- a/t/deps/clean.do +++ b/t/deps/clean.do @@ -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 + diff --git a/t/deps/genfile1.do b/t/deps/genfile1.do new file mode 100644 index 0000000..2f85915 --- /dev/null +++ b/t/deps/genfile1.do @@ -0,0 +1,2 @@ +redo-ifchange genfile2 +echo $$ >>genfile.log diff --git a/t/deps/gentest.do b/t/deps/gentest.do new file mode 100644 index 0000000..5b6772e --- /dev/null +++ b/t/deps/gentest.do @@ -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