index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
author | Alad Wenter <alad@archlinux.info> | 2016-10-10 10:47:38 +0200 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2016-10-22 20:50:54 +1000 |
commit | 1f8f0bd9ac4c11cdc1b9506f9f64d8192ecad4ee (patch) | |
tree | 209a9b9e48a558b8b75ff062e4f86d86cb29df95 /scripts/library | |
parent | dfc78129be7acaa0ebe71fe407d63b5141c10150 (diff) |
-rw-r--r-- | scripts/library/README | 20 | ||||
-rw-r--r-- | scripts/library/parseopts.sh | 137 |
diff --git a/scripts/library/README b/scripts/library/README index e9615a2e..a9d15f1e 100644 --- a/scripts/library/README +++ b/scripts/library/README @@ -8,26 +8,6 @@ stdout and can be silenced by defining 'QUIET'. The 'warning' and 'error' functions print to stderr with the appropriate prefix added to the message. -parseopts.sh: -A getopt_long-like parser which portably supports longopts and shortopts -with some GNU extensions. It does not allow for options with optional -arguments. For both short and long opts, options requiring an argument -should be suffixed with a colon. After the first argument containing -the short opts, any number of valid long opts may be be passed. The end -of the options delimiter must then be added, followed by the user arguments -to the calling program. - -Recommended Usage: - OPT_SHORT='fb:z' - OPT_LONG=('foo' 'bar:' 'baz') - if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then - exit 1 - fi - set -- "${OPTRET[@]}" -Returns: - 0: parse success - 1: parse failure (error message supplied) - human_to_size.sh: A function to convert human readable sizes (such as "5.3 GiB") to raw byte equivalents. base10 and base2 suffixes are supported, case sensitively. If diff --git a/scripts/library/parseopts.sh b/scripts/library/parseopts.sh deleted file mode 100644 index cf6aa6c6..00000000 --- a/scripts/library/parseopts.sh +++ /dev/null @@ -1,137 +0,0 @@ -# getopt-like parser -parseopts() { - local opt= optarg= i= shortopts=$1 - local -a longopts=() unused_argv=() - - shift - while [[ $1 && $1 != '--' ]]; do - longopts+=("$1") - shift - done - shift - - longoptmatch() { - local o longmatch=() - for o in "${longopts[@]}"; do - if [[ ${o%:} = "$1" ]]; then - longmatch=("$o") - break - fi - [[ ${o%:} = "$1"* ]] && longmatch+=("$o") - done - - case ${#longmatch[*]} in - 1) - # success, override with opt and return arg req (0 == none, 1 == required) - opt=${longmatch%:} - if [[ $longmatch = *: ]]; then - return 1 - else - return 0 - fi ;; - 0) - # fail, no match found - return 255 ;; - *) - # fail, ambiguous match - printf "@SCRIPTNAME@: $(gettext "option '%s' is ambiguous; possibilities:")" "--$1" - printf " '%s'" "${longmatch[@]%:}" - printf '\n' - return 254 ;; - esac >&2 - } - - while (( $# )); do - case $1 in - --) # explicit end of options - shift - break - ;; - -[!-]*) # short option - for (( i = 1; i < ${#1}; i++ )); do - opt=${1:i:1} - - # option doesn't exist - if [[ $shortopts != *$opt* ]]; then - printf "@SCRIPTNAME@: $(gettext "invalid option") -- '%s'\n" "$opt" >&2 - OPTRET=(--) - return 1 - fi - - OPTRET+=("-$opt") - # option requires optarg - if [[ $shortopts = *$opt:* ]]; then - # if we're not at the end of the option chunk, the rest is the optarg - if (( i < ${#1} - 1 )); then - OPTRET+=("${1:i+1}") - break - # if we're at the end, grab the the next positional, if it exists - elif (( i == ${#1} - 1 )) && [[ $2 ]]; then - OPTRET+=("$2") - shift - break - # parse failure - else - printf "@SCRIPTNAME@: $(gettext "option requires an argument") -- '%s'\n" "$opt" >&2 - OPTRET=(--) - return 1 - fi - fi - done - ;; - --?*=*|--?*) # long option - IFS='=' read -r opt optarg <<< "${1#--}" - longoptmatch "$opt" - case $? in - 0) - # parse failure - if [[ $optarg ]]; then - printf "@SCRIPTNAME@: $(gettext "option '%s' does not allow an argument")\n" "--$opt" >&2 - OPTRET=(--) - return 1 - # --longopt - else - OPTRET+=("--$opt") - fi - ;; - 1) - # --longopt=optarg - if [[ $optarg ]]; then - OPTRET+=("--$opt" "$optarg") - # --longopt optarg - elif [[ $2 ]]; then - OPTRET+=("--$opt" "$2" ) - shift - # parse failure - else - printf "@SCRIPTNAME@: $(gettext "option '%s' requires an argument")\n" "--$opt" >&2 - OPTRET=(--) - return 1 - fi - ;; - 254) - # ambiguous option -- error was reported for us by longoptmatch() - OPTRET=(--) - return 1 - ;; - 255) - # parse failure - printf "@SCRIPTNAME@: $(gettext "invalid option") '--%s'\n" "$opt" >&2 - OPTRET=(--) - return 1 - ;; - esac - ;; - *) # non-option arg encountered, add it as a parameter - unused_argv+=("$1") - ;; - esac - shift - done - - # add end-of-opt terminator and any leftover positional parameters - OPTRET+=('--' "${unused_argv[@]}" "$@") - unset longoptmatch - - return 0 -} |