Skip to content

Commit 5a35697

Browse files
LukeShugitster
authored andcommitted
subtree: don't have loose code outside of a function
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent b04538d commit 5a35697

File tree

1 file changed

+125
-120
lines changed

1 file changed

+125
-120
lines changed

contrib/subtree/git-subtree.sh

Lines changed: 125 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44
#
55
# Copyright (C) 2009 Avery Pennarun <[email protected]>
66
#
7-
if test $# -eq 0
8-
then
9-
set -- -h
10-
fi
7+
118
OPTS_SPEC="\
129
git subtree add --prefix=<prefix> <commit>
1310
git subtree add --prefix=<prefix> <repository> <ref>
@@ -30,12 +27,8 @@ rejoin merge the new branch back into HEAD
3027
options for 'add', 'merge', and 'pull'
3128
squash merge subtree changes as a single commit
3229
"
33-
eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
3430

3531
PATH=$PATH:$(git --exec-path)
36-
. git-sh-setup
37-
38-
require_work_tree
3932

4033
quiet=
4134
branch=
@@ -84,126 +77,138 @@ ensure_single_rev () {
8477
fi
8578
}
8679

87-
while test $# -gt 0
88-
do
89-
opt="$1"
90-
shift
80+
main () {
81+
if test $# -eq 0
82+
then
83+
set -- -h
84+
fi
85+
eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
86+
. git-sh-setup
87+
require_work_tree
9188

92-
case "$opt" in
93-
-q)
94-
quiet=1
95-
;;
96-
-d)
97-
debug=1
98-
;;
99-
--annotate)
100-
annotate="$1"
101-
shift
102-
;;
103-
--no-annotate)
104-
annotate=
105-
;;
106-
-b)
107-
branch="$1"
108-
shift
109-
;;
110-
-P)
111-
prefix="${1%/}"
112-
shift
113-
;;
114-
-m)
115-
message="$1"
116-
shift
117-
;;
118-
--no-prefix)
119-
prefix=
120-
;;
121-
--onto)
122-
onto="$1"
89+
while test $# -gt 0
90+
do
91+
opt="$1"
12392
shift
93+
94+
case "$opt" in
95+
-q)
96+
quiet=1
97+
;;
98+
-d)
99+
debug=1
100+
;;
101+
--annotate)
102+
annotate="$1"
103+
shift
104+
;;
105+
--no-annotate)
106+
annotate=
107+
;;
108+
-b)
109+
branch="$1"
110+
shift
111+
;;
112+
-P)
113+
prefix="${1%/}"
114+
shift
115+
;;
116+
-m)
117+
message="$1"
118+
shift
119+
;;
120+
--no-prefix)
121+
prefix=
122+
;;
123+
--onto)
124+
onto="$1"
125+
shift
126+
;;
127+
--no-onto)
128+
onto=
129+
;;
130+
--rejoin)
131+
rejoin=1
132+
;;
133+
--no-rejoin)
134+
rejoin=
135+
;;
136+
--ignore-joins)
137+
ignore_joins=1
138+
;;
139+
--no-ignore-joins)
140+
ignore_joins=
141+
;;
142+
--squash)
143+
squash=1
144+
;;
145+
--no-squash)
146+
squash=
147+
;;
148+
--)
149+
break
150+
;;
151+
*)
152+
die "Unexpected option: $opt"
153+
;;
154+
esac
155+
done
156+
157+
command="$1"
158+
shift
159+
160+
case "$command" in
161+
add|merge|pull)
162+
default=
124163
;;
125-
--no-onto)
126-
onto=
127-
;;
128-
--rejoin)
129-
rejoin=1
130-
;;
131-
--no-rejoin)
132-
rejoin=
133-
;;
134-
--ignore-joins)
135-
ignore_joins=1
136-
;;
137-
--no-ignore-joins)
138-
ignore_joins=
139-
;;
140-
--squash)
141-
squash=1
164+
split|push)
165+
default="--default HEAD"
142166
;;
143-
--no-squash)
144-
squash=
167+
*)
168+
die "Unknown command '$command'"
145169
;;
146-
--)
147-
break
170+
esac
171+
172+
if test -z "$prefix"
173+
then
174+
die "You must provide the --prefix option."
175+
fi
176+
177+
case "$command" in
178+
add)
179+
test -e "$prefix" &&
180+
die "prefix '$prefix' already exists."
148181
;;
149182
*)
150-
die "Unexpected option: $opt"
183+
test -e "$prefix" ||
184+
die "'$prefix' does not exist; use 'git subtree add'"
151185
;;
152186
esac
153-
done
154-
155-
command="$1"
156-
shift
157-
158-
case "$command" in
159-
add|merge|pull)
160-
default=
161-
;;
162-
split|push)
163-
default="--default HEAD"
164-
;;
165-
*)
166-
die "Unknown command '$command'"
167-
;;
168-
esac
169-
170-
if test -z "$prefix"
171-
then
172-
die "You must provide the --prefix option."
173-
fi
174-
175-
case "$command" in
176-
add)
177-
test -e "$prefix" &&
178-
die "prefix '$prefix' already exists."
179-
;;
180-
*)
181-
test -e "$prefix" ||
182-
die "'$prefix' does not exist; use 'git subtree add'"
183-
;;
184-
esac
185-
186-
dir="$(dirname "$prefix/.")"
187-
188-
if test "$command" != "pull" &&
189-
test "$command" != "add" &&
190-
test "$command" != "push"
191-
then
192-
revs=$(git rev-parse $default --revs-only "$@") || exit $?
193-
dirs=$(git rev-parse --no-revs --no-flags "$@") || exit $?
194-
ensure_single_rev $revs
195-
if test -n "$dirs"
196-
then
197-
die "Error: Use --prefix instead of bare filenames."
198-
fi
199-
fi
200-
201-
debug "command: {$command}"
202-
debug "quiet: {$quiet}"
203-
debug "revs: {$revs}"
204-
debug "dir: {$dir}"
205-
debug "opts: {$*}"
206-
debug
187+
188+
dir="$(dirname "$prefix/.")"
189+
190+
if test "$command" != "pull" &&
191+
test "$command" != "add" &&
192+
test "$command" != "push"
193+
then
194+
revs=$(git rev-parse $default --revs-only "$@") || exit $?
195+
dirs=$(git rev-parse --no-revs --no-flags "$@") || exit $?
196+
ensure_single_rev $revs
197+
if test -n "$dirs"
198+
then
199+
die "Error: Use --prefix instead of bare filenames."
200+
fi
201+
fi
202+
203+
debug "command: {$command}"
204+
debug "quiet: {$quiet}"
205+
debug "revs: {$revs}"
206+
debug "dir: {$dir}"
207+
debug "opts: {$*}"
208+
debug
209+
210+
"cmd_$command" "$@"
211+
}
207212

208213
cache_setup () {
209214
cachedir="$GIT_DIR/subtree-cache/$$"
@@ -898,4 +903,4 @@ cmd_push () {
898903
fi
899904
}
900905

901-
"cmd_$command" "$@"
906+
main "$@"

0 commit comments

Comments
 (0)