mirror of
https://github.com/Zygo/bees.git
synced 2025-05-17 21:35:45 +02:00
Rewrite beesd arg parser
Signed-off-by: Timofey Titovets <timofey.titovets@synesis.ru>
This commit is contained in:
parent
2d14fd90e4
commit
06d41fd518
@ -18,44 +18,70 @@ readonly bees_bin=$(realpath @LIBEXEC_PREFIX@/bees)
|
||||
|
||||
command -v "$bees_bin" &> /dev/null || ERRO "Missing 'bees' agent"
|
||||
|
||||
## Parse args
|
||||
uuid_valid(){
|
||||
if uuidparse -n -o VARIANT $1 | grep -i -q invalid; then
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
help(){
|
||||
echo "Usage: beesd [options] <btrfs_uuid>"
|
||||
echo "- - -"
|
||||
exec "$bees_bin" --help
|
||||
}
|
||||
|
||||
get_bees_supp_opts(){
|
||||
"$bees_bin" --help |& awk '/--../ { gsub( ",", "" ); print $1 " " $2}'
|
||||
}
|
||||
|
||||
SUPPORTED_ARGS=(
|
||||
$(get_bees_supp_opts)
|
||||
)
|
||||
NOT_SUPPORTED_ARGS=()
|
||||
ARGUMENTS=()
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-*)
|
||||
ARGUMENTS+=($1)
|
||||
;;
|
||||
*)
|
||||
if [ -z "$UUID" ]; then
|
||||
UUID="$1"
|
||||
else
|
||||
ERRO "Only one filesystem may be supplied"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
|
||||
for arg in "${@}"; do
|
||||
supp=false
|
||||
for supp_arg in "${SUPPORTED_ARGS[@]}"; do
|
||||
if [ "$arg" == "$supp_arg" ]; then
|
||||
supp=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
if $supp; then
|
||||
ARGUMENTS+=($arg)
|
||||
else
|
||||
NOT_SUPPORTED_ARGS+=($arg)
|
||||
fi
|
||||
done
|
||||
|
||||
case "$UUID" in
|
||||
*-*-*-*-*)
|
||||
FILE_CONFIG=""
|
||||
for file in "$CONFIG_DIR"/*.conf; do
|
||||
[ ! -f "$file" ] && continue
|
||||
if grep -q "$UUID" "$file"; then
|
||||
INFO "Find $UUID in $file, use as conf"
|
||||
FILE_CONFIG="$file"
|
||||
fi
|
||||
done
|
||||
[ ! -f "$FILE_CONFIG" ] && ERRO "No config for $UUID"
|
||||
source "$FILE_CONFIG"
|
||||
;;
|
||||
*)
|
||||
echo "Usage: beesd [options] <btrfs_uuid>"
|
||||
echo "- - -"
|
||||
"$bees_bin" --help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
for arg in "${ARGUMENTS[@]}"; do
|
||||
case $arg in
|
||||
-h) help;;
|
||||
--help) help;;
|
||||
esac
|
||||
done
|
||||
|
||||
for arg in "${NOT_SUPPORTED_ARGS[@]}"; do
|
||||
if uuid_valid $arg; then
|
||||
[ ! -z "$UUID" ] && help
|
||||
UUID=$arg
|
||||
fi
|
||||
done
|
||||
|
||||
[ -z "$UUID" ] && help
|
||||
|
||||
|
||||
FILE_CONFIG=""
|
||||
for file in "$CONFIG_DIR"/*.conf; do
|
||||
[ ! -f "$file" ] && continue
|
||||
if grep -q 'UUID=' "$file" | grep -q -- "$UUID"; then
|
||||
INFO "Find $UUID in $file, use as conf"
|
||||
FILE_CONFIG="$file"
|
||||
fi
|
||||
done
|
||||
[ ! -f "$FILE_CONFIG" ] && ERRO "No config for $UUID"
|
||||
source "$FILE_CONFIG"
|
||||
|
||||
|
||||
## Pre checks
|
||||
|
Loading…
x
Reference in New Issue
Block a user