Loading git-hooks +117 −1 Original line number Diff line number Diff line Loading @@ -32,6 +32,122 @@ usage () USAGE } die () { printf -- "$@" echo exit 1 } >&2 add_arg () { local argtype=$1 argname=$2 dest=$3 default=$4 metavar=$5 if [ "$argtype" = FLAG ]; then default=no elif [ "$argtype" = VALUE ]; then echo -n else die "'argtype' must be one of 'FLAG' or 'VALUE'" fi dest=${dest:-$argname} dest=${dest##-} dest=${dest##-} dest=${dest//-/_} metavar=${metavar:-`echo $dest | tr [a-z] [A-Z]`} eval _ARGS_${argtype}_${dest}=\"$dest,$metavar,$argtype,$default$'\n'$argname\" } add_arg_alias () { local dest=$1 alias=$2 var flag_var value_var dest=${dest##-} dest=${dest##-} dest=${dest//-/_} flag_var=_ARGS_FLAG_$dest value_var=_ARGS_VALUE_$dest if [ "${!flag_var}" ]; then var="$flag_var" elif [ "${!value_var}" ]; then var="$value_var" else die "$dest is not a valid argument or destination" fi eval "$var=\"\$$var,$alias\"" } add_option () { local dest=$1 default=$2 required=$3 metavar=$4 required=${required:-yes} [ "$required" = yes ] || [ "$required" = no ] || \ die "'required' must be one of 'yes' or 'no'" metavar=${metavar:-$dest} eval _OPTS_$dest=$dest,$metavar,$required,\"$default\" } sumarise_args () { local ignore_long_flag short_flags long_flags values local arg dest metavar argtype default names required local yes=" <%s>" no=" [<%s>]" local IFS for arg in ${!_ARGS_*}; do { IFS=, read dest metavar argtype default read -a names } <<< "${!arg}" if [ "$argtype" = FLAG ]; then ignore_long_flag=no for name in ${names[@]}; do case $name in -?) short_flags="${short_flags:--}${name#-}" ignore_long_flag=yes break ;; esac done if [ "$ignore_long_flag" = no ]; then long_flags="$long_flags [${names[0]}]" fi else values="$values [${names[0]} <$metavar>]" fi done printf -- "${short_flags:+ [$short_flags]}$long_flags$values" for arg in ${!_OPTS_*}; do IFS=, read dest metavar required default <<< "${!arg}" printf "${!required}" $metavar done echo } parse_args () { local command=$1 shift while [ "$1" ]; do case "$1" in --help|-h) printf "$BIN $command" sumarise_args return 1 ;; --summary) echo "$summary" return 1 ;; esac shift done } free_args () { for arg in ${!_ARGS_*} ${!_OPTS_*}; do eval unset $arg done } cmd_init () { Loading @@ -54,7 +170,7 @@ cmd_help () exit 0 } cmd_$1 "${@:2}" cmd_$1 "$@" if [ $? -eq 127 ]; then usage Loading Loading
git-hooks +117 −1 Original line number Diff line number Diff line Loading @@ -32,6 +32,122 @@ usage () USAGE } die () { printf -- "$@" echo exit 1 } >&2 add_arg () { local argtype=$1 argname=$2 dest=$3 default=$4 metavar=$5 if [ "$argtype" = FLAG ]; then default=no elif [ "$argtype" = VALUE ]; then echo -n else die "'argtype' must be one of 'FLAG' or 'VALUE'" fi dest=${dest:-$argname} dest=${dest##-} dest=${dest##-} dest=${dest//-/_} metavar=${metavar:-`echo $dest | tr [a-z] [A-Z]`} eval _ARGS_${argtype}_${dest}=\"$dest,$metavar,$argtype,$default$'\n'$argname\" } add_arg_alias () { local dest=$1 alias=$2 var flag_var value_var dest=${dest##-} dest=${dest##-} dest=${dest//-/_} flag_var=_ARGS_FLAG_$dest value_var=_ARGS_VALUE_$dest if [ "${!flag_var}" ]; then var="$flag_var" elif [ "${!value_var}" ]; then var="$value_var" else die "$dest is not a valid argument or destination" fi eval "$var=\"\$$var,$alias\"" } add_option () { local dest=$1 default=$2 required=$3 metavar=$4 required=${required:-yes} [ "$required" = yes ] || [ "$required" = no ] || \ die "'required' must be one of 'yes' or 'no'" metavar=${metavar:-$dest} eval _OPTS_$dest=$dest,$metavar,$required,\"$default\" } sumarise_args () { local ignore_long_flag short_flags long_flags values local arg dest metavar argtype default names required local yes=" <%s>" no=" [<%s>]" local IFS for arg in ${!_ARGS_*}; do { IFS=, read dest metavar argtype default read -a names } <<< "${!arg}" if [ "$argtype" = FLAG ]; then ignore_long_flag=no for name in ${names[@]}; do case $name in -?) short_flags="${short_flags:--}${name#-}" ignore_long_flag=yes break ;; esac done if [ "$ignore_long_flag" = no ]; then long_flags="$long_flags [${names[0]}]" fi else values="$values [${names[0]} <$metavar>]" fi done printf -- "${short_flags:+ [$short_flags]}$long_flags$values" for arg in ${!_OPTS_*}; do IFS=, read dest metavar required default <<< "${!arg}" printf "${!required}" $metavar done echo } parse_args () { local command=$1 shift while [ "$1" ]; do case "$1" in --help|-h) printf "$BIN $command" sumarise_args return 1 ;; --summary) echo "$summary" return 1 ;; esac shift done } free_args () { for arg in ${!_ARGS_*} ${!_OPTS_*}; do eval unset $arg done } cmd_init () { Loading @@ -54,7 +170,7 @@ cmd_help () exit 0 } cmd_$1 "${@:2}" cmd_$1 "$@" if [ $? -eq 127 ]; then usage Loading