diff --git a/redo/builder.py b/redo/builder.py index 0fb24a8..f7a9ac9 100644 --- a/redo/builder.py +++ b/redo/builder.py @@ -170,7 +170,8 @@ class _BuildJob(object): # to produce hello.c, but we don't want that to happen if # hello.c was created by the end user. debug2("-- static (%r)\n" % t) - sf.set_static() + if not sf.is_override: + sf.set_static() sf.save() return self._finalize(0) sf.zap_deps1() diff --git a/t/350-deps/all.do b/t/350-deps/all.do index f607605..77bc3e6 100644 --- a/t/350-deps/all.do +++ b/t/350-deps/all.do @@ -1,2 +1,2 @@ redo test1 test2 ifchange-fail overwrite gentest doublestatic \ - basic/test + basic/test override/all diff --git a/t/350-deps/clean.do b/t/350-deps/clean.do index 9405134..896b70f 100644 --- a/t/350-deps/clean.do +++ b/t/350-deps/clean.do @@ -1,3 +1,3 @@ -redo basic/clean +redo basic/clean override/clean rm -f *~ .*~ *.count t1a overwrite overwrite[123] \ genfile2 genfile.log static.log diff --git a/t/350-deps/override/.gitignore b/t/350-deps/override/.gitignore new file mode 100644 index 0000000..b94ccbc --- /dev/null +++ b/t/350-deps/override/.gitignore @@ -0,0 +1,4 @@ +a +b +*.log +stamp diff --git a/t/350-deps/override/a.do b/t/350-deps/override/a.do new file mode 100644 index 0000000..1ed9074 --- /dev/null +++ b/t/350-deps/override/a.do @@ -0,0 +1 @@ +echo hello-a >$3 diff --git a/t/350-deps/override/all.do b/t/350-deps/override/all.do new file mode 100644 index 0000000..57f86d8 --- /dev/null +++ b/t/350-deps/override/all.do @@ -0,0 +1,34 @@ +exec >&2 +rm -f a b *.log stamp + +echo 1 >stamp +redo b +[ "$(cat b)" = "hello-a-1-b" ] || exit 11 + +../../flush-cache +echo 2 >stamp +redo-ifchange b +[ "$(cat b)" = "hello-a-1-b" ] || exit 21 # a unchanged; b not redone + +. ../../skip-if-minimal-do.sh + +# Unfortunately the test below depends on the specific wording of the +# "override" warning message, of the form: +# redo: a - you modified it; skipping +# That's because this is specifically a test that the warning message +# gets generated. I added that test because (of course) when we didn't +# test it, the warning message accidentally got broken. Oops. If you +# rephrase the message, you'll have to also change the test. + +../../flush-cache +echo 3 >stamp +echo over-a >a +redo-ifchange b >$1.log 2>&1 +[ "$(cat b)" = "over-a-3-b" ] || exit 31 # a overwritten, b redone +grep "a - " "$1.log" >/dev/null || exit 32 # expected a warning msg + +../../flush-cache +echo 4 >stamp +redo-ifchange b >$1.log 2>&1 +[ "$(cat b)" = "over-a-3-b" ] || exit 41 # a not changed, b not redone +grep "a - " "$1.log" >/dev/null || exit 42 # still expect a warning msg diff --git a/t/350-deps/override/b.do b/t/350-deps/override/b.do new file mode 100644 index 0000000..7bfd42e --- /dev/null +++ b/t/350-deps/override/b.do @@ -0,0 +1,2 @@ +redo-ifchange a +printf '%s-%s-b\n' "$(cat a)" "$(cat stamp)" >$3 diff --git a/t/350-deps/override/clean.do b/t/350-deps/override/clean.do new file mode 100644 index 0000000..5ceb95c --- /dev/null +++ b/t/350-deps/override/clean.do @@ -0,0 +1 @@ +rm -f *~ .*~ stamp *.log a b