diff --git a/bin/all.do b/bin/all.do index 4d41446..e96e00d 100644 --- a/bin/all.do +++ b/bin/all.do @@ -1,3 +1,3 @@ exec >&2 -redo-ifchange ../redo/version/all ../redo/py list redo-sh +redo-ifchange ../redo/version/all ../redo/py ../redo/sh list xargs redo-ifchange $3 diff --git a/t/100-args/noargs/run.do b/t/100-args/noargs/run.do new file mode 100644 index 0000000..f365ebf --- /dev/null +++ b/t/100-args/noargs/run.do @@ -0,0 +1,3 @@ +rm -f all +redo-ifchange # should not default to 'all' since not running from top level +[ ! -e all ] || exit 11 diff --git a/t/122-defaults-parent/.gitignore b/t/122-defaults-parent/.gitignore new file mode 100644 index 0000000..50e1322 --- /dev/null +++ b/t/122-defaults-parent/.gitignore @@ -0,0 +1 @@ +/*.log diff --git a/t/122-defaults-parent/all.do b/t/122-defaults-parent/all.do new file mode 100644 index 0000000..917d634 --- /dev/null +++ b/t/122-defaults-parent/all.do @@ -0,0 +1,32 @@ +rm -f x/shouldfail + +log=$PWD/$1.log + +expect_fail() { + local rv=$1 + shift + if ("$@") >>$log 2>&1; then + cat "$log" >&2 + echo "unexpected success:" "$@" >&2 + return $rv + else + return 0 + fi +} + +# These should all fail because there is no matching .do file. +# In previous versions of redo, it would accidentally try to use +# $PWD/default.do even for ../path/file, which is incorrect. That +# could cause it to return success accidentally. + +rm -f "$log" +cd inner +expect_fail 11 redo ../x/shouldfail +expect_fail 12 redo-ifchange ../x/shouldfail + +rm -f "$log" +cd ../inner2 +expect_fail 21 redo ../x/shouldfail2 +expect_fail 22 redo-ifchange ../x/shouldfail2 + +exit 0 diff --git a/t/122-defaults-parent/clean.do b/t/122-defaults-parent/clean.do new file mode 100644 index 0000000..b877c59 --- /dev/null +++ b/t/122-defaults-parent/clean.do @@ -0,0 +1,2 @@ +rm -f *~ .*~ */*~ */.*~ *.tmp */*.tmp x/shouldfail *.log */*.log + diff --git a/t/122-defaults-parent/inner/default.do b/t/122-defaults-parent/inner/default.do new file mode 100644 index 0000000..f8283d1 --- /dev/null +++ b/t/122-defaults-parent/inner/default.do @@ -0,0 +1,2 @@ +echo "inner/default.do: PWD=$PWD '$1' '$2' '$3'" >&2 +echo SUSPICIOUS diff --git a/t/122-defaults-parent/inner2/default.do b/t/122-defaults-parent/inner2/default.do new file mode 100644 index 0000000..ee989e6 --- /dev/null +++ b/t/122-defaults-parent/inner2/default.do @@ -0,0 +1,2 @@ +echo "inner/default.do: PWD=$PWD '$1' '$2' '$3'" >&2 +# output file is left empty diff --git a/t/122-defaults-parent/x/file b/t/122-defaults-parent/x/file new file mode 100644 index 0000000..e69de29 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