From 6bddccd1996d0941758d6de6663e192edd89362f Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 21 Aug 2014 03:00:40 +0100 Subject: [PATCH] Break main executable logic into functions --- src/bin/dotify | 79 +++------------------------------ src/lib/main/dispatcher.sh | 34 ++++++++++++++ src/lib/main/main.sh | 7 +++ src/lib/main/parse-arguments.sh | 27 +++++++++++ src/lib/main/parse-command.sh | 15 +++++++ 5 files changed, 89 insertions(+), 73 deletions(-) create mode 100644 src/lib/main/dispatcher.sh create mode 100644 src/lib/main/main.sh create mode 100644 src/lib/main/parse-arguments.sh create mode 100644 src/lib/main/parse-command.sh diff --git a/src/bin/dotify b/src/bin/dotify index e36485f..041dd3c 100755 --- a/src/bin/dotify +++ b/src/bin/dotify @@ -87,81 +87,14 @@ source "../lib/dotfile-commands/default_action.sh" source "../lib/dotfile-commands/include.sh" # -# Argument Parsing +# Main # -ARG_DOTFILE="" # --dotfile / -f -ARG_TARGET="" # --target / -t -ARG_DRY_RUN="" # --dry-run / -d -ARG_HELP="" # --help / -h -ARG_VERSION="" # --version / -v +source "../lib/main/parse-arguments.sh" +source "../lib/main/parse-command.sh" +source "../lib/main/dispatcher.sh" +source "../lib/main/main.sh" -if has-argument dotfile f "$@"; then - ARG_DOTFILE="$(parse-argument dotfile f "$@")" -fi - -if has-argument target t "$@"; then - ARG_TARGET="$(parse-argument target t "$@")" -fi - -if has-argument dry-run d "$@"; then - ARG_DRY_RUN="1" -fi - -if has-argument help h "$@"; then - ARG_HELP="1" -fi - -if has-argument version v "$@"; then - ARG_VERSION="1" -fi - - -# -# Command Parsing -# - -# Command is first argument that does not start with a dash or plus. -for arg in "$@"; do - if [ -n "$skip_next" ]; then - skip_next= - elif [[ "$arg" =~ ^(--dotfile|-f|--taraget|-t)$ ]]; then - skip_next=1 - elif [[ "$arg" != "-"* ]] && [[ "$arg" != "+"* ]]; then - command="$arg" - break - fi -done - -# Show help and exit if help arguments or command are given. -if [ -n "$ARG_HELP" ] || [ "$command" == "help" ]; then - dotify-command-help - exit -fi - -# Show version info and exit if version arguments or command are given. -if [ -n "$ARG_VERSION" ] || [ "$command" == "version" ]; then - dotify-command-help | head -1 - exit -fi - -# Deal with the commands. -case "$command" in - "info" ) - dotify-command-info - ;; - "compile" ) - dotify-command-compile - ;; - "" | "install" ) - dotify-command-install - ;; - "uninstall" ) - dotify-command-uninstall - ;; - "clean" ) - dotify-command-clean - ;; -esac +dotify-main $@ exit $? diff --git a/src/lib/main/dispatcher.sh b/src/lib/main/dispatcher.sh new file mode 100644 index 0000000..72c72d2 --- /dev/null +++ b/src/lib/main/dispatcher.sh @@ -0,0 +1,34 @@ +dotify-main-dispatcher() { + # Show help and exit if help arguments or command are given. + if [ -n "$ARG_HELP" ] || [ "$COMMAND" == "help" ]; then + dotify-command-help + exit + fi + + # Show version info and exit if version arguments or command are given. + if [ -n "$ARG_VERSION" ] || [ "$COMMAND" == "version" ]; then + dotify-command-help | head -1 + exit + fi + + # Deal with the commands. + case "$COMMAND" in + "info" ) + dotify-command-info + ;; + "compile" ) + dotify-command-compile + ;; + "" | "install" ) + dotify-command-install + ;; + "uninstall" ) + dotify-command-uninstall + ;; + "clean" ) + dotify-command-clean + ;; + esac + + return $? +} diff --git a/src/lib/main/main.sh b/src/lib/main/main.sh new file mode 100644 index 0000000..9265a51 --- /dev/null +++ b/src/lib/main/main.sh @@ -0,0 +1,7 @@ +dotify-main() { + dotify-main-parse-arguments $@ + dotify-main-parse-command $@ + dotify-main-dispatcher $@ + + return $? +} diff --git a/src/lib/main/parse-arguments.sh b/src/lib/main/parse-arguments.sh new file mode 100644 index 0000000..3f61f59 --- /dev/null +++ b/src/lib/main/parse-arguments.sh @@ -0,0 +1,27 @@ +dotify-main-parse-arguments() { + ARG_DOTFILE="" # --dotfile / -f + ARG_TARGET="" # --target / -t + ARG_DRY_RUN="" # --dry-run / -d + ARG_HELP="" # --help / -h + ARG_VERSION="" # --version / -v + + if has-argument dotfile f "$@"; then + ARG_DOTFILE="$(parse-argument dotfile f "$@")" + fi + + if has-argument target t "$@"; then + ARG_TARGET="$(parse-argument target t "$@")" + fi + + if has-argument dry-run d "$@"; then + ARG_DRY_RUN="1" + fi + + if has-argument help h "$@"; then + ARG_HELP="1" + fi + + if has-argument version v "$@"; then + ARG_VERSION="1" + fi +} diff --git a/src/lib/main/parse-command.sh b/src/lib/main/parse-command.sh new file mode 100644 index 0000000..d0e0de7 --- /dev/null +++ b/src/lib/main/parse-command.sh @@ -0,0 +1,15 @@ +dotify-main-parse-command() { + local skip_next + + # Command is first argument that does not start with a dash or plus. + for arg in "$@"; do + if [ -n "$skip_next" ]; then + skip_next= + elif [[ "$arg" =~ ^(--dotfile|-f|--taraget|-t)$ ]]; then + skip_next=1 + elif [[ "$arg" != "-"* ]] && [[ "$arg" != "+"* ]]; then + COMMAND="$arg" + break + fi + done +}