commit: adeb72581e0b6030af14441129059241e009a58a Author: André Erdmann <dywi <AT> mailerd <DOT> de> AuthorDate: Mon Mar 31 15:35:48 2014 +0000 Commit: André Erdmann <dywi <AT> mailerd <DOT> de> CommitDate: Mon Mar 31 15:35:48 2014 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=adeb7258
hook functions: die_cannot_run() + qwhich(): use "hash" instead of "which" --- doc/rst/usage.rst | 12 +++++++++++- files/shlib/functions.sh | 16 ++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/doc/rst/usage.rst b/doc/rst/usage.rst index c2d8bc9..f27e933 100644 --- a/doc/rst/usage.rst +++ b/doc/rst/usage.rst @@ -2509,10 +2509,17 @@ when included in the hook script, most of the enviroment variables readonly. +-----------------+-------------------------------------------------------+ | DEVNULL | */dev/null* target (could also be a file) | +-----------------+-------------------------------------------------------+ + | EX_OK | *success* exit code | + +-----------------+-------------------------------------------------------+ | EX_ERR | default error exit code | +-----------------+-------------------------------------------------------+ | EX_ARG_ERR | default exit code for arg errors | +-----------------+-------------------------------------------------------+ + | EX_CANNOT_RUN | default exit code when a hook cannot run, | + | | e.g. if an essential program is missing | + | | | + | | Defaults to ``$EX_OK``. | + +-----------------+-------------------------------------------------------+ | EX_GIT_ERR | git-related error codes | | EX_GIT_ADD_ERR | | | EX_GIT_COMMIT\ | | @@ -2558,6 +2565,9 @@ when included in the hook script, most of the enviroment variables readonly. # @noreturn die ( [message], [exit_code] ), raises exit() # Lets the script die with the given message/exit code. # + # @noreturn die_cannot_run ( [reason] ), raises die (**EX_CANNOT_RUN) + # Lets the script die due to missing preconditions. + # # @noreturn OUT_OF_BOUNDS(), raises die() # Lets the script die due to insufficient arg count. # @@ -2582,7 +2592,7 @@ when included in the hook script, most of the enviroment variables readonly. # Returns 0 if $word is in the given list, else 1. # # int qwhich ( *command ) - # Returns 0 if all listed commands are found by "which", else 1. + # Returns 0 if all listed commands could be found, else 1. # # int sync_allowed ( action_name, [msg_nosync], [msg_sync] ) # Returns 0 if syncing for the given action is allowed, else 1. diff --git a/files/shlib/functions.sh b/files/shlib/functions.sh index 1603376..fb616dc 100644 --- a/files/shlib/functions.sh +++ b/files/shlib/functions.sh @@ -20,6 +20,7 @@ # # core: # @noreturn die ( [message], [exit_code] ), raises exit() +# @noreturn die_cannot_run ( [reason] ), raises die() # @noreturn OUT_OF_BOUNDS(), raises die() # int run_command ( *cmdv ) # int run_command_logged ( *cmdv ) @@ -133,8 +134,11 @@ readonly IFS_NEWLINE=' : ${DEVNULL:=/dev/null} readonly DEVNULL +readonly EX_OK=0 readonly EX_ERR=2 readonly EX_ARG_ERR=5 +# EX_CANNOT_RUN: configurable +EX_CANNOT_RUN=${EX_OK} readonly EX_GIT_ERR=30 readonly EX_GIT_ADD_ERR=35 @@ -193,6 +197,14 @@ die() { exit "${2:-${EX_ERR?}}" } +# @noreturn die_cannot_run ( [reason] ), raises die (**EX_CANNOT_RUN) +# +# Lets the script die due to missing preconditions. +# +die_cannot_run() { + die "${1:-cannot run.}" "${EX_CANNOT_RUN}" +} + # @noreturn OUT_OF_BOUNDS(), raises die (**EX_ARG_ERR) # # Catches non-zero shift return and calls die(). @@ -302,11 +314,11 @@ list_has() { # int qwhich ( *command ) # -# Returns true if 'which' finds all listed commands, else false. +# Returns true if all listed commands could be found, else false. # qwhich() { while [ $# -gt 0 ]; do - which "${1}" 1>>${DEVNULL} 2>>${DEVNULL} || return 1 + hash "${1}" 1>>${DEVNULL} 2>>${DEVNULL} || return 1 shift done return 0