1
0
Fork 0
mirror of https://github.com/notwa/rc synced 2025-02-05 07:43:22 -08:00

simplify flag parsing code in permit

This commit is contained in:
Connor Olding 2024-07-16 11:22:04 -07:00
parent 8904f22242
commit 9d5a240d55

View file

@ -25,7 +25,7 @@ permit() { ### @- conditionally set executable permissions on each of its argume
### already executable by the current user are skipped. arguments that do ### already executable by the current user are skipped. arguments that do
### not appear to refer to an existing file are passed through to chmod. ### not appear to refer to an existing file are passed through to chmod.
### directories are never recursed. ### directories are never recursed.
unset __permit_4 __permit_a __permit_f __permit_h __permit_m __permit_n __permit_x || return unset __permit_4 __permit_a __permit_f __permit_h __permit_m __permit_x || return
__permit_h="[-a | -A] [-e | -f | -d] [--] {files...}" __permit_h="[-a | -A] [-e | -f | -d] [--] {files...}"
if [ $# = 0 ]; then if [ $# = 0 ]; then
@ -33,43 +33,34 @@ permit() { ### @- conditionally set executable permissions on each of its argume
return 64; return 64;
fi fi
__permit_m=e # everything __permit_m=e # mode
__permit_a=0 # automatic __permit_a=0 # automatic
__permit_n=$# unset __permit_stop || return
while [ $((__permit_n-=1)) -ge 0 ]; do for __permit_f; do
__permit_f="$1" shift
case "$__permit_f" in case "${__permit_stop+:}$__permit_f" in
(/\?|-h|-help|--help) (/\?|-h|-help|--help)
printf 'usage: permit %s\n' "$__permit_h" printf 'usage: permit %s\n' "$__permit_h"
return 0;; return 0;;
(--) (--)
shift __permit_stop=1;;
while [ $((__permit_n-=1)) -ge 0 ]; do
set -- "$@" "$1"
shift
done
break;;
(-?*) (-?*)
shift
while __permit_f="${__permit_f#?}"; [ -n "$__permit_f" ]; do while __permit_f="${__permit_f#?}"; [ -n "$__permit_f" ]; do
case "${__permit_f}" in case "${__permit_f}" in
(a*) __permit_a=1;; # automatic (on) (a*) __permit_a=1;; # automatic (on)
(A*) __permit_a=0;; # automatic (off) (A*) __permit_a=0;; # automatic (off)
(e*) __permit_m=e;; # everything (e*) __permit_m=e;; # everything
(f*) __permit_m=f;; # files only (f*) __permit_m=f;; # files only
(d*) __permit_m=d;; # directories only (d*) __permit_m=d;; # directories only
(*) (*)
printf >&2 'permit: unknown flag: -%.1s\n' "$__permit_f" printf >&2 'permit: unknown flag: -%.1s\n' "$__permit_f"
return 64;; return 64;;
esac esac
done;; done;;
(*) (*)
shift
set -- "$@" "$__permit_f";; set -- "$@" "$__permit_f";;
esac esac
done done