diff --git a/tests/t1200-pri.sh b/tests/t1200-pri.sh index fd8bd10..54b610f 100755 --- a/tests/t1200-pri.sh +++ b/tests/t1200-pri.sh @@ -90,6 +90,7 @@ TODO: 2 re-prioritized from (C) to (A). TODO: 3 of 3 tasks shown >>> todo.sh pri 2 a +=== 1 2 (A) notice the sunflowers TODO: 2 already prioritized (A). diff --git a/tests/t1500-do.sh b/tests/t1500-do.sh index 7999498..d359a49 100755 --- a/tests/t1500-do.sh +++ b/tests/t1500-do.sh @@ -81,6 +81,7 @@ test_todo_session 'fail multiple do attempts' <>> todo.sh -a do 3 +=== 1 TODO: 3 is already marked done. EOF diff --git a/tests/t1700-depri.sh b/tests/t1700-depri.sh index 7ec7e7f..f459ef1 100755 --- a/tests/t1700-depri.sh +++ b/tests/t1700-depri.sh @@ -82,6 +82,7 @@ test_todo_session 'depriority of unprioritized task' <>> todo.sh depri 3 2 +=== 1 TODO: 3 is not prioritized. 2 notice the sunflowers TODO: 2 deprioritized. diff --git a/tests/t1800-del.sh b/tests/t1800-del.sh index 2529a93..356596f 100755 --- a/tests/t1800-del.sh +++ b/tests/t1800-del.sh @@ -4,6 +4,8 @@ test_description='basic del functionality ' . ./test-lib.sh +SPACE=' ' + test_todo_session 'del usage' <>> todo.sh del B usage: todo.sh del ITEM# [TERM] @@ -60,6 +62,7 @@ TODO: 3 of 3 tasks shown >>> printf n | todo.sh del 1 \\ TODO: No tasks were deleted. +=== 1 >>> todo.sh -p list 2 (A) notice the sunflowers @@ -71,10 +74,12 @@ TODO: 3 of 3 tasks shown >>> printf x | todo.sh del 1 \\ TODO: No tasks were deleted. +=== 1 >>> echo | todo.sh del 1 \\ TODO: No tasks were deleted. +=== 1 >>> printf y | todo.sh del 1 \\ diff --git a/tests/t1910-deduplicate.sh b/tests/t1910-deduplicate.sh index 3617807..6721786 100755 --- a/tests/t1910-deduplicate.sh +++ b/tests/t1910-deduplicate.sh @@ -32,6 +32,7 @@ EOF test_todo_session 'deduplicate without duplicates' <>> todo.sh deduplicate +=== 1 TODO: No duplicate tasks found EOF diff --git a/tests/t2120-shorthelp.sh b/tests/t2120-shorthelp.sh index f0123b7..82275db 100755 --- a/tests/t2120-shorthelp.sh +++ b/tests/t2120-shorthelp.sh @@ -47,7 +47,7 @@ echo 'export TODO_ACTIONS_DIR=$HOME/custom.actions' >> custom.cfg export TODOTXT_GLOBAL_CFG_FILE=global.cfg test_todo_session '-h and fatal error without config' <>> todo.sh -h | sed '/^ \\{0,2\\}[A-Z]/!d' +>>> todo.sh -h 2>&1 | sed '/^ \\{0,2\\}[A-Z]/!d' Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description] Actions: Actions can be added and overridden using scripts in the actions @@ -58,7 +58,7 @@ EOF # Config option comes too late; "Add-on Actions" is *not* mentioned here. test_todo_session '-h and fatal error with trailing custom config' <>> todo.sh -h -d custom.cfg | sed '/^ \\{0,2\\}[A-Z]/!d' +>>> todo.sh -h -d custom.cfg 2>&1 | sed '/^ \\{0,2\\}[A-Z]/!d' Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description] Actions: Actions can be added and overridden using scripts in the actions @@ -69,7 +69,7 @@ EOF # Config option processed; "Add-on Actions" is mentioned here. test_todo_session '-h output with preceding custom config' <>> todo.sh -d custom.cfg -h | sed '/^ \\{0,2\\}[A-Z]/!d' +>>> todo.sh -d custom.cfg -h 2>&1 | sed '/^ \\{0,2\\}[A-Z]/!d' Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description] Actions: Actions can be added and overridden using scripts in the actions diff --git a/tests/t8000-actions.sh b/tests/t8000-actions.sh index 2facc8f..1c480c6 100755 --- a/tests/t8000-actions.sh +++ b/tests/t8000-actions.sh @@ -52,10 +52,10 @@ if [ -x .todo.actions.d/badlink ]; then SKIP_TESTS="${SKIP_TESTS}${SKIP_TESTS+ }t8000.6 t8000.7" fi test_todo_session 'broken symlink' <>> todo.sh badlink | sed "s#'[^']*\(\\.todo\\.actions\\.d/[^']\{1,\}\)'#'\1'#g" +>>> todo.sh badlink 2>&1 | sed "s#'[^']*\(\\.todo\\.actions\\.d/[^']\{1,\}\)'#'\1'#g" Fatal Error: Broken link to custom action: '.todo.actions.d/badlink' ->>> todo.sh do >/dev/null +>>> todo.sh do 2>/dev/null === 1 EOF @@ -68,10 +68,10 @@ if [ -x .todo.actions.d/badfolderlink/badfolderlink ]; then SKIP_TESTS="${SKIP_TESTS}${SKIP_TESTS+ }t8000.8 t8000.9" fi test_todo_session 'broken symlink in folder' <>> todo.sh badfolderlink | sed "s#'[^']*\(\\.todo\\.actions\\.d/[^']\{1,\}\)'#'\1'#g" +>>> todo.sh badfolderlink 2>&1 | sed "s#'[^']*\(\\.todo\\.actions\\.d/[^']\{1,\}\)'#'\1'#g" Fatal Error: Broken link to custom action: '.todo.actions.d/badfolderlink/badfolderlink' ->>> todo.sh do >/dev/null +>>> todo.sh do 2>/dev/null === 1 EOF @@ -83,10 +83,10 @@ if [ -x .todo.actions.d/do ]; then SKIP_TESTS="${SKIP_TESTS}${SKIP_TESTS+ }t8000.10 t8000.11" fi test_todo_session 'broken symlink overrides built-in action' <>> todo.sh do | sed "s#'[^']*\(\\.todo\\.actions\\.d/[^']\{1,\}\)'#'\1'#g" +>>> todo.sh do 2>&1 | sed "s#'[^']*\(\\.todo\\.actions\\.d/[^']\{1,\}\)'#'\1'#g" Fatal Error: Broken link to custom action: '.todo.actions.d/do' ->>> todo.sh do >/dev/null +>>> todo.sh do 2>/dev/null === 1 EOF diff --git a/todo.sh b/todo.sh index 11ac385..ca624ad 100755 --- a/todo.sh +++ b/todo.sh @@ -349,14 +349,14 @@ dieWithHelp() case "$1" in help) help;; shorthelp) shorthelp;; - esac + esac >&2 shift die "$@" } die() { - echo "$*" + echo >&2 "$*" exit 1 } @@ -1182,7 +1182,7 @@ case $action in echo "TODO: $item deleted." fi else - echo "TODO: No tasks were deleted." + die "TODO: No tasks were deleted." fi else sed -i.bak \ @@ -1212,6 +1212,7 @@ case $action in # Split multiple depri's, if comma separated change to whitespace separated # Loop the 'depri' function for each item + status=0 for item in ${*//,/ }; do getTodo "$item" @@ -1223,9 +1224,11 @@ case $action in echo "TODO: $item deprioritized." fi else - echo "TODO: $item is not prioritized." + echo >&2 "TODO: $item is not prioritized." + status=1 fi done + exit $status ;; "do" | "done" ) @@ -1236,6 +1239,7 @@ case $action in # Split multiple do's, if comma separated change to whitespace separated # Loop the 'do' function for each item + status=0 for item in ${*//,/ }; do getTodo "$item" @@ -1251,15 +1255,17 @@ case $action in echo "TODO: $item marked as done." fi else - echo "TODO: $item is already marked done." + echo >&2 "TODO: $item is already marked done." + status=1 fi done if [ $TODOTXT_AUTO_ARCHIVE = 1 ]; then # Recursively invoke the script to allow overriding of the archive # action. - "$TODO_FULL_SH" archive + "$TODO_FULL_SH" archive || status=$? fi + exit $status ;; "help" ) @@ -1375,7 +1381,7 @@ case $action in echo "TODO: $item moved from '$src' to '$dest'." fi else - echo "TODO: No tasks moved." + die "TODO: No tasks moved." fi ;; @@ -1386,6 +1392,7 @@ case $action in "pri" | "p" ) shift + status=0 while [ "$#" -gt 0 ] ; do item=$1 newpri=$( printf "%s\n" "$2" | tr '[:lower:]' '[:upper:]' ) @@ -1417,10 +1424,12 @@ note: PRIORITY must be anywhere from A to Z." fi fi if [ "$oldpri" = "$newpri" ]; then - echo "TODO: $item already prioritized ($newpri)." + echo >&2 "TODO: $item already prioritized ($newpri)." + status=1 fi shift; shift done + exit $status ;; "replace" ) @@ -1488,7 +1497,7 @@ note: PRIORITY must be anywhere from A to Z." newTaskNum=$( sed -e '/./!d' "$TODO_FILE" | sed -n '$ =' ) deduplicateNum=$(( originalTaskNum - newTaskNum )) if [ $deduplicateNum -eq 0 ]; then - echo "TODO: No duplicate tasks found" + die "TODO: No duplicate tasks found" else echo "TODO: $deduplicateNum duplicate task(s) removed" fi