From 69ef740bf1fd8fc91339c608ff57cc9b9d00f3b3 Mon Sep 17 00:00:00 2001 From: Aaron Fiore Date: Fri, 28 Jun 2024 23:01:52 -0700 Subject: [PATCH] client: lib_docker: factor out args parsers --- .../src/docker/lib/internal/lib_docker.bash | 67 ++++++++++--------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/client/src/docker/lib/internal/lib_docker.bash b/client/src/docker/lib/internal/lib_docker.bash index d232150..efefc05 100644 --- a/client/src/docker/lib/internal/lib_docker.bash +++ b/client/src/docker/lib/internal/lib_docker.bash @@ -98,7 +98,7 @@ function lib_docker::__docker_compose() popd 1>/dev/null || return $? } -function lib_docker::__build() +function lib_docker::__parse_args_build() { [ -z "$global_usage" ] && lib_utils::die_fatal [ -z "$global_arg_delim_1" ] && lib_utils::die_fatal @@ -175,10 +175,6 @@ function lib_docker::__build() ;; esac - # - # Ensure supported arguments - # - [ $# -eq 0 ] && lib_utils::die_usage "$_usage" for _arg in "$@"; do @@ -186,10 +182,6 @@ function lib_docker::__build() && lib_utils::die_usage "$_usage" done - # - # Parse arguments before testing - # - # Parse key for value for _arg in "$@"; do @@ -202,19 +194,20 @@ function lib_docker::__build() fi done - # - # Test argument values, set globals - # - IFS="$global_arg_delim_3" # Arg: type if [ ! -z "$_arg_type" ]; then [[ ! "$_arg_type" =~ ^default$|^slim$|^tiny$|^micro$ ]] \ && lib_utils::die_usage "$_usage" - fi - # TODO: factor out parser + declare -gr global_arg_type="$_arg_type" + fi +} + +function lib_docker::__build() +{ + lib_docker::__parse_args_build "$@" # # Generate Dockerfile @@ -241,22 +234,22 @@ function lib_docker::__build() # Append to Dockerfile according to type # - if [[ "$global_platform" == "dev-tools" && "$_arg_type" != "default" ]]; then - lib_utils::print_warning "'${_arg_type}' is not supported for 'dev-tools', using 'default'" + if [[ "$global_platform" == "dev-tools" && "$global_arg_type" != "default" ]]; then + lib_utils::print_warning "'${global_arg_type}' is not supported for 'dev-tools', using 'default'" fi if [[ "$global_platform" != "dev-tools" ]]; then local _in_files=() - case "$_arg_type" in + case "$global_arg_type" in default | slim) _in_files+=("hledger-flow.src") - [[ "$_arg_type" == "default" ]] && _in_files+=("root") + [[ "$global_arg_type" == "default" ]] && _in_files+=("root") ;; tiny | micro) _in_files+=("hledger-flow.bin") - [[ "$_arg_type" == "tiny" ]] && _in_files+=("root") + [[ "$global_arg_type" == "tiny" ]] && _in_files+=("root") ;; *) lib_utils::die_fatal "unsupported build" @@ -371,7 +364,7 @@ function lib_docker::__run() return $_return } -function lib_docker::__shell() +function lib_docker::__parse_args_shell() { [ -z "$global_usage" ] && lib_utils::die_fatal [ -z "$global_arg_delim_2" ] && lib_utils::die_fatal @@ -379,6 +372,7 @@ function lib_docker::__shell() [ -z "$global_user" ] && lib_utils::die_fatal local -r _arg="$1" + local -r _usage=" \e[32mDescription:\e[0m @@ -424,23 +418,29 @@ function lib_docker::__shell() if [ -z "$_arg_user" ]; then lib_utils::die_usage "$_usage" fi + declare -gr global_arg_user="${_arg_user}" fi else # Use default user - local _arg_user="${global_user}" + declare -gr global_arg_user="${global_user}" fi - if [ -z "$_arg_user" ]; then + if [ -z "$global_arg_user" ]; then lib_utils::die_usage "$_usage" fi - - [ -z "$global_container" ] && lib_utils::die_fatal - - lib_utils::print_debug "Spawning shell in container '${global_container}'" - docker exec -it --user "$_arg_user" --workdir / "$global_container" /bin/bash } -function lib_docker::__edit() +function lib_docker::__shell() +{ + lib_docker::__parse_args_shell "$@" + + [ -z "$global_container" ] && lib_utils::die_fatal + lib_utils::print_debug "Spawning shell in container '${global_container}'" + + docker exec -it --user "$global_arg_user" --workdir / "$global_container" /bin/bash +} + +function lib_docker::__parse_args_edit() { [ -z "$global_usage" ] && lib_utils::die_fatal [ -z "$global_arg_delim_2" ] && lib_utils::die_fatal @@ -511,8 +511,13 @@ function lib_docker::__edit() fi done - readonly _edit_arg_type=("${_read[@]}") + declare -gr global_arg_type=("${_read[@]}") fi +} + +function lib_docker::__edit() +{ + lib_docker::__parse_args_edit "$@" [ -z "$EDITOR" ] \ && lib_utils::die_fatal "Export EDITOR to your preferred editor" @@ -528,7 +533,7 @@ function lib_docker::__edit() # Run all files through one editor instance local _paths=() - for _type in "${_edit_arg_type[@]}"; do + for _type in "${global_arg_type[@]}"; do case "$_type" in env) _paths+=("$global_env_file")