]> git.ipfire.org Git - thirdparty/git.git/commitdiff
subtree: don't have loose code outside of a function
authorLuke Shumaker <lukeshu@datawire.io>
Tue, 27 Apr 2021 21:17:30 +0000 (15:17 -0600)
committerJunio C Hamano <gitster@pobox.com>
Wed, 28 Apr 2021 07:47:17 +0000 (16:47 +0900)
Shove all of the loose code inside of a main() function.

This comes down to personal preference more than anything else.  A
preference that I've developed over years of maintaining large Bash
scripts, but still a mere personal preference.

In this specific case, it's also moving the `set -- -h`, the `git
rev-parse --parseopt`, and the `. git-sh-setup` to be closer to all
the rest of the argument parsing, which is a readability win on its
own, IMO.

"Ignore space change" is probably helpful when viewing this diff.

Signed-off-by: Luke Shumaker <lukeshu@datawire.io>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/subtree/git-subtree.sh

index 868e18b9a1ab85ae093da936558d394b37059215..d1ed7f9a6ce016c9fca2189c6c4f94b510c0b124 100755 (executable)
@@ -4,10 +4,7 @@
 #
 # Copyright (C) 2009 Avery Pennarun <apenwarr@gmail.com>
 #
-if test $# -eq 0
-then
-       set -- -h
-fi
+
 OPTS_SPEC="\
 git subtree add   --prefix=<prefix> <commit>
 git subtree add   --prefix=<prefix> <repository> <ref>
@@ -30,12 +27,8 @@ rejoin        merge the new branch back into HEAD
  options for 'add', 'merge', and 'pull'
 squash        merge subtree changes as a single commit
 "
-eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
 
 PATH=$PATH:$(git --exec-path)
-. git-sh-setup
-
-require_work_tree
 
 quiet=
 branch=
@@ -84,126 +77,138 @@ ensure_single_rev () {
        fi
 }
 
-while test $# -gt 0
-do
-       opt="$1"
-       shift
+main () {
+       if test $# -eq 0
+       then
+               set -- -h
+       fi
+       eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
+       . git-sh-setup
+       require_work_tree
 
-       case "$opt" in
-       -q)
-               quiet=1
-               ;;
-       -d)
-               debug=1
-               ;;
-       --annotate)
-               annotate="$1"
-               shift
-               ;;
-       --no-annotate)
-               annotate=
-               ;;
-       -b)
-               branch="$1"
-               shift
-               ;;
-       -P)
-               prefix="${1%/}"
-               shift
-               ;;
-       -m)
-               message="$1"
-               shift
-               ;;
-       --no-prefix)
-               prefix=
-               ;;
-       --onto)
-               onto="$1"
+       while test $# -gt 0
+       do
+               opt="$1"
                shift
+
+               case "$opt" in
+               -q)
+                       quiet=1
+                       ;;
+               -d)
+                       debug=1
+                       ;;
+               --annotate)
+                       annotate="$1"
+                       shift
+                       ;;
+               --no-annotate)
+                       annotate=
+                       ;;
+               -b)
+                       branch="$1"
+                       shift
+                       ;;
+               -P)
+                       prefix="${1%/}"
+                       shift
+                       ;;
+               -m)
+                       message="$1"
+                       shift
+                       ;;
+               --no-prefix)
+                       prefix=
+                       ;;
+               --onto)
+                       onto="$1"
+                       shift
+                       ;;
+               --no-onto)
+                       onto=
+                       ;;
+               --rejoin)
+                       rejoin=1
+                       ;;
+               --no-rejoin)
+                       rejoin=
+                       ;;
+               --ignore-joins)
+                       ignore_joins=1
+                       ;;
+               --no-ignore-joins)
+                       ignore_joins=
+                       ;;
+               --squash)
+                       squash=1
+                       ;;
+               --no-squash)
+                       squash=
+                       ;;
+               --)
+                       break
+                       ;;
+               *)
+                       die "Unexpected option: $opt"
+                       ;;
+               esac
+       done
+
+       command="$1"
+       shift
+
+       case "$command" in
+       add|merge|pull)
+               default=
                ;;
-       --no-onto)
-               onto=
-               ;;
-       --rejoin)
-               rejoin=1
-               ;;
-       --no-rejoin)
-               rejoin=
-               ;;
-       --ignore-joins)
-               ignore_joins=1
-               ;;
-       --no-ignore-joins)
-               ignore_joins=
-               ;;
-       --squash)
-               squash=1
+       split|push)
+               default="--default HEAD"
                ;;
-       --no-squash)
-               squash=
+       *)
+               die "Unknown command '$command'"
                ;;
-       --)
-               break
+       esac
+
+       if test -z "$prefix"
+       then
+               die "You must provide the --prefix option."
+       fi
+
+       case "$command" in
+       add)
+               test -e "$prefix" &&
+                       die "prefix '$prefix' already exists."
                ;;
        *)
-               die "Unexpected option: $opt"
+               test -e "$prefix" ||
+                       die "'$prefix' does not exist; use 'git subtree add'"
                ;;
        esac
-done
-
-command="$1"
-shift
-
-case "$command" in
-add|merge|pull)
-       default=
-       ;;
-split|push)
-       default="--default HEAD"
-       ;;
-*)
-       die "Unknown command '$command'"
-       ;;
-esac
-
-if test -z "$prefix"
-then
-       die "You must provide the --prefix option."
-fi
-
-case "$command" in
-add)
-       test -e "$prefix" &&
-               die "prefix '$prefix' already exists."
-       ;;
-*)
-       test -e "$prefix" ||
-               die "'$prefix' does not exist; use 'git subtree add'"
-       ;;
-esac
-
-dir="$(dirname "$prefix/.")"
-
-if test "$command" != "pull" &&
-               test "$command" != "add" &&
-               test "$command" != "push"
-then
-       revs=$(git rev-parse $default --revs-only "$@") || exit $?
-       dirs=$(git rev-parse --no-revs --no-flags "$@") || exit $?
-       ensure_single_rev $revs
-       if test -n "$dirs"
-       then
-               die "Error: Use --prefix instead of bare filenames."
-       fi
-fi
-
-debug "command: {$command}"
-debug "quiet: {$quiet}"
-debug "revs: {$revs}"
-debug "dir: {$dir}"
-debug "opts: {$*}"
-debug
+
+       dir="$(dirname "$prefix/.")"
+
+       if test "$command" != "pull" &&
+                       test "$command" != "add" &&
+                       test "$command" != "push"
+       then
+               revs=$(git rev-parse $default --revs-only "$@") || exit $?
+               dirs=$(git rev-parse --no-revs --no-flags "$@") || exit $?
+               ensure_single_rev $revs
+               if test -n "$dirs"
+               then
+                       die "Error: Use --prefix instead of bare filenames."
+               fi
+       fi
+
+       debug "command: {$command}"
+       debug "quiet: {$quiet}"
+       debug "revs: {$revs}"
+       debug "dir: {$dir}"
+       debug "opts: {$*}"
+       debug
+
+       "cmd_$command" "$@"
+}
 
 cache_setup () {
        cachedir="$GIT_DIR/subtree-cache/$$"
@@ -898,4 +903,4 @@ cmd_push () {
        fi
 }
 
-"cmd_$command" "$@"
+main "$@"