feat: skip subcommand
This commit is contained in:
parent
43ca9661b0
commit
1f34d0eeec
2 changed files with 103 additions and 0 deletions
65
nag
65
nag
|
|
@ -1150,6 +1150,71 @@ stop() {
|
||||||
printf "Stopped alarm %s.\\n" "${_target_id}"
|
printf "Stopped alarm %s.\\n" "${_target_id}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# skip ########################################################################
|
||||||
|
|
||||||
|
describe "skip" <<HEREDOC
|
||||||
|
Usage:
|
||||||
|
${_ME} skip <id>
|
||||||
|
|
||||||
|
Description:
|
||||||
|
Skip the next occurrence of a repeating alarm (reschedule without firing).
|
||||||
|
For one-shot alarms, this deletes them.
|
||||||
|
HEREDOC
|
||||||
|
skip() {
|
||||||
|
local _target_id="${1:-}"
|
||||||
|
[[ -n "${_target_id}" ]] || _exit_1 printf "Usage: %s skip <id>\\n" "${_ME}"
|
||||||
|
|
||||||
|
_acquire_lock
|
||||||
|
_read_alarms
|
||||||
|
|
||||||
|
local -a _new_alarms=()
|
||||||
|
local _found=0
|
||||||
|
local _line
|
||||||
|
|
||||||
|
for _line in "${_ALARMS[@]:-}"
|
||||||
|
do
|
||||||
|
[[ -n "${_line}" ]] || continue
|
||||||
|
local _id _timestamp _rule _message
|
||||||
|
_id="$(_get_alarm_field "${_line}" 1)"
|
||||||
|
_timestamp="$(_get_alarm_field "${_line}" 2)"
|
||||||
|
_rule="$(_get_alarm_field "${_line}" 3)"
|
||||||
|
_message="$(_get_alarm_field "${_line}" 4)"
|
||||||
|
|
||||||
|
if [[ "${_id}" == "${_target_id}" ]]
|
||||||
|
then
|
||||||
|
_found=1
|
||||||
|
if [[ -n "${_rule}" ]]
|
||||||
|
then
|
||||||
|
local _next_ts _human_time
|
||||||
|
_next_ts="$(_next_occurrence "${_rule}" "${_timestamp}")"
|
||||||
|
_new_alarms+=("$(printf "%s\t%s\t%s\t%s" "${_id}" "${_next_ts}" "${_rule}" "${_message}")")
|
||||||
|
_human_time="$(_format_time "${_next_ts}")"
|
||||||
|
printf "Skipped. Next: %s\\n" "${_human_time}"
|
||||||
|
else
|
||||||
|
printf "Stopped alarm %s.\\n" "${_id}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
_new_alarms+=("${_line}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${_found}" -eq 0 ]]
|
||||||
|
then
|
||||||
|
_release_lock
|
||||||
|
_exit_1 printf "No alarm with ID %s.\\n" "${_target_id}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${#_new_alarms[@]}" -eq 0 ]]
|
||||||
|
then
|
||||||
|
_ALARMS=()
|
||||||
|
: > "${_ALARMS_FILE}"
|
||||||
|
else
|
||||||
|
_ALARMS=("${_new_alarms[@]}")
|
||||||
|
_write_alarms
|
||||||
|
fi
|
||||||
|
_release_lock
|
||||||
|
}
|
||||||
|
|
||||||
# check #######################################################################
|
# check #######################################################################
|
||||||
|
|
||||||
describe "check" <<HEREDOC
|
describe "check" <<HEREDOC
|
||||||
|
|
|
||||||
|
|
@ -190,6 +190,44 @@ load test_helper
|
||||||
[ "${status}" -eq 1 ]
|
[ "${status}" -eq 1 ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "help skip shows skip usage" {
|
||||||
|
run_nag help skip
|
||||||
|
[ "${status}" -eq 0 ]
|
||||||
|
[[ "${output}" =~ "Usage:" ]]
|
||||||
|
[[ "${output}" =~ "skip <id>" ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "skip reschedules a repeating alarm" {
|
||||||
|
run_nag every day "tomorrow 3pm" daily task
|
||||||
|
run_nag skip 1
|
||||||
|
[ "${status}" -eq 0 ]
|
||||||
|
[[ "${output}" =~ "Skipped" ]]
|
||||||
|
[ -s "${NAG_DIR}/alarms" ]
|
||||||
|
local _ts _now
|
||||||
|
_ts="$(cut -f2 "${NAG_DIR}/alarms")"
|
||||||
|
_now="$(date +%s)"
|
||||||
|
(( _ts > _now ))
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "skip deletes a one-shot alarm" {
|
||||||
|
run_nag at "tomorrow 3pm" "one-shot"
|
||||||
|
run_nag skip 1
|
||||||
|
[ "${status}" -eq 0 ]
|
||||||
|
[[ "${output}" =~ "Stopped" ]]
|
||||||
|
run_nag
|
||||||
|
[[ "${output}" =~ "Nothing to nag about" ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "skip with nonexistent ID fails" {
|
||||||
|
run_nag skip 99
|
||||||
|
[ "${status}" -eq 1 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "skip without ID fails" {
|
||||||
|
run_nag skip
|
||||||
|
[ "${status}" -eq 1 ]
|
||||||
|
}
|
||||||
|
|
||||||
@test "help every shows every usage" {
|
@test "help every shows every usage" {
|
||||||
run_nag help every
|
run_nag help every
|
||||||
[ "${status}" -eq 0 ]
|
[ "${status}" -eq 0 ]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue