minimal/do: handle nonzero exit codes and set $1/$2 correctly.
Also add some tests to confirm this.
This commit is contained in:
parent
c7585558ef
commit
b9853d3858
6 changed files with 27 additions and 8 deletions
24
minimal/do
24
minimal/do
|
|
@ -4,14 +4,13 @@
|
||||||
# For the full version, visit http://github.com/apenwarr/redo
|
# For the full version, visit http://github.com/apenwarr/redo
|
||||||
#
|
#
|
||||||
export REDO="$(dirname "$0")/$(basename "$0")"
|
export REDO="$(dirname "$0")/$(basename "$0")"
|
||||||
IFS="
|
|
||||||
"
|
|
||||||
|
|
||||||
if [ -z "$DO_BUILT" ]; then
|
if [ -z "$DO_BUILT" ]; then
|
||||||
export DO_BUILT="$PWD/.do_built"
|
export DO_BUILT="$PWD/.do_built"
|
||||||
if [ -e "$DO_BUILT" ]; then
|
if [ -e "$DO_BUILT" ]; then
|
||||||
echo "Removing previously built files..." >&2
|
echo "Removing previously built files..." >&2
|
||||||
sort "$DO_BUILT" | uniq | tee "$DO_BUILT.new" | xargs rm -f
|
sort "$DO_BUILT" | uniq | tee "$DO_BUILT.new" |
|
||||||
|
while read f; do rm -f "$f"; done
|
||||||
mv "$DO_BUILT.new" "$DO_BUILT"
|
mv "$DO_BUILT.new" "$DO_BUILT"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
@ -27,18 +26,29 @@ _do()
|
||||||
echo "$PWD/$TARGET" >>"$DO_BUILT"
|
echo "$PWD/$TARGET" >>"$DO_BUILT"
|
||||||
dof=".$TARGET"
|
dof=".$TARGET"
|
||||||
DOFILE="$TARGET.do"
|
DOFILE="$TARGET.do"
|
||||||
|
BASE="$TARGET"
|
||||||
|
EXT=""
|
||||||
while [ ! -e "$DOFILE" ]; do
|
while [ ! -e "$DOFILE" ]; do
|
||||||
dof2=$(echo "$dof" | sed 's/\.[^\.]*//')
|
dof2=$(echo "$dof" | sed 's/\.[^\.]*//')
|
||||||
[ "$dof" = "$dof2" ] && break
|
[ "$dof" = "$dof2" ] && break
|
||||||
dof="$dof2"
|
dof="$dof2"
|
||||||
DOFILE="default$dof.do"
|
DOFILE="default$dof.do"
|
||||||
|
BASE="$(basename "$TARGET" "$dof")"
|
||||||
|
EXT="$dof"
|
||||||
done
|
done
|
||||||
set "$TARGET" "" "$TARGET.tmp"
|
set "$BASE" "$EXT" "$TARGET.tmp"
|
||||||
|
RV=
|
||||||
(
|
(
|
||||||
export DO_DEPTH="$DO_DEPTH "
|
export DO_DEPTH="$DO_DEPTH "
|
||||||
|
set -e
|
||||||
. "$PWD/$DOFILE" >"$TARGET.tmp"
|
. "$PWD/$DOFILE" >"$TARGET.tmp"
|
||||||
) &&
|
) || RV="$?"
|
||||||
mv "$TARGET.tmp" "$TARGET" 2>/dev/null || touch "$TARGET"
|
[ -z "$RV" ] && mv "$TARGET.tmp" "$TARGET" 2>/dev/null
|
||||||
|
: >>"$TARGET"
|
||||||
|
if [ -n "$RV" ]; then
|
||||||
|
printf "do: %s%s\n" "$DO_DEPTH" "got exit code $RV" >&2
|
||||||
|
exit $RV
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "do $DO_DEPTH$TARGET exists." >&2
|
echo "do $DO_DEPTH$TARGET exists." >&2
|
||||||
fi
|
fi
|
||||||
|
|
@ -54,7 +64,7 @@ redo()
|
||||||
D="$(dirname "$i")/"
|
D="$(dirname "$i")/"
|
||||||
[ "$D" = "./" ] && D=""
|
[ "$D" = "./" ] && D=""
|
||||||
B="$(basename "$i")"
|
B="$(basename "$i")"
|
||||||
( cd "$D" && _do "$D" "$B" )
|
( cd "$D" && _do "$D" "$B" ) || exit $?
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
2
t/.gitignore
vendored
2
t/.gitignore
vendored
|
|
@ -4,3 +4,5 @@ c.c.c
|
||||||
c.c.c.b
|
c.c.c.b
|
||||||
c.c.c.b.b
|
c.c.c.b.b
|
||||||
d
|
d
|
||||||
|
test.args
|
||||||
|
test2.args
|
||||||
|
|
|
||||||
2
t/all.do
2
t/all.do
|
|
@ -1,3 +1,3 @@
|
||||||
redo-ifchange hello yellow bellow c d deltest deltest2
|
redo-ifchange hello yellow bellow c d
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
3
t/default.args.do
Normal file
3
t/default.args.do
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[ "$1" = "test" ]
|
||||||
|
[ "$2" = ".args" ]
|
||||||
|
[ "$3" != "test.args" ]
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
redo-ifchange all
|
redo-ifchange all
|
||||||
./hello >&2
|
./hello >&2
|
||||||
|
redo deltest deltest2 test.args test2.args
|
||||||
|
|
|
||||||
3
t/test2.args.do
Normal file
3
t/test2.args.do
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[ "$1" = "test2.args" ]
|
||||||
|
[ "$2" = "" ]
|
||||||
|
[ "$3" != "test2.args" ]
|
||||||
Loading…
Add table
Add a link
Reference in a new issue