user-friendliness sanity checks: catch common mistakes regarding $1/$2/$3.
.do files should never modify $1, and should write to *either* $3 or stdout, but not both. If they write to both, it's probably because they forgot to redirect stdout to stderr, a very easy mistake to make but a hard one to detect. Now redo detects it for you and prints an informative message.
This commit is contained in:
parent
dce0076554
commit
6d767e2a65
8 changed files with 55 additions and 4 deletions
2
t/deps/.gitignore
vendored
2
t/deps/.gitignore
vendored
|
|
@ -1,2 +1,4 @@
|
|||
t1a
|
||||
t2.count
|
||||
overwrite
|
||||
overwrite[123]
|
||||
|
|
|
|||
|
|
@ -1 +1,2 @@
|
|||
rm -f *~ .*~ *.count t1a
|
||||
rm -f *~ .*~ *.count t1a overwrite overwrite[123]
|
||||
|
||||
|
|
|
|||
4
t/deps/overwrite.do
Normal file
4
t/deps/overwrite.do
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
redo overwrite1 2>&1 && exit 55
|
||||
redo overwrite2 2>&1 && exit 56
|
||||
redo overwrite3 2>&1 && exit 57
|
||||
exit 0
|
||||
2
t/deps/overwrite1.do
Normal file
2
t/deps/overwrite1.do
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# this shouldn't be allowed; we're supposed to write to $3, not $1
|
||||
echo >$1
|
||||
5
t/deps/overwrite2.do
Normal file
5
t/deps/overwrite2.do
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# this shouldn't be allowed; stdout is connected to $3 already, so if we
|
||||
# replace it *and* write to stdout, we're probably confused.
|
||||
echo hello world
|
||||
rm -f $3
|
||||
echo goodbye world >$3
|
||||
8
t/deps/overwrite3.do
Normal file
8
t/deps/overwrite3.do
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# we don't delete $3 here, we just truncate and overwrite it. But redo
|
||||
# can detect this by checking the current file position of our stdout when
|
||||
# we exit, and making sure it equals either 0 or the file size.
|
||||
#
|
||||
# If it doesn't, then we accidentally wrote to *both* stdout and a separate
|
||||
# file, and we should get warned about it.
|
||||
echo hello world
|
||||
echo goodbye world >$3
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
redo test1 test2 ifchange-fail
|
||||
redo test1 test2 ifchange-fail overwrite
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue