зеркало из https://github.com/microsoft/git.git
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 <lukeshu@datawire.io> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
b04538d99f
Коммит
5a3569774f
|
@ -4,10 +4,7 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2009 Avery Pennarun <apenwarr@gmail.com>
|
# Copyright (C) 2009 Avery Pennarun <apenwarr@gmail.com>
|
||||||
#
|
#
|
||||||
if test $# -eq 0
|
|
||||||
then
|
|
||||||
set -- -h
|
|
||||||
fi
|
|
||||||
OPTS_SPEC="\
|
OPTS_SPEC="\
|
||||||
git subtree add --prefix=<prefix> <commit>
|
git subtree add --prefix=<prefix> <commit>
|
||||||
git subtree add --prefix=<prefix> <repository> <ref>
|
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'
|
options for 'add', 'merge', and 'pull'
|
||||||
squash merge subtree changes as a single commit
|
squash merge subtree changes as a single commit
|
||||||
"
|
"
|
||||||
eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
|
|
||||||
|
|
||||||
PATH=$PATH:$(git --exec-path)
|
PATH=$PATH:$(git --exec-path)
|
||||||
. git-sh-setup
|
|
||||||
|
|
||||||
require_work_tree
|
|
||||||
|
|
||||||
quiet=
|
quiet=
|
||||||
branch=
|
branch=
|
||||||
|
@ -84,126 +77,138 @@ ensure_single_rev () {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
while test $# -gt 0
|
main () {
|
||||||
do
|
if test $# -eq 0
|
||||||
opt="$1"
|
then
|
||||||
|
set -- -h
|
||||||
|
fi
|
||||||
|
eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
|
||||||
|
. git-sh-setup
|
||||||
|
require_work_tree
|
||||||
|
|
||||||
|
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
|
shift
|
||||||
|
|
||||||
case "$opt" in
|
case "$command" in
|
||||||
-q)
|
add|merge|pull)
|
||||||
quiet=1
|
default=
|
||||||
;;
|
;;
|
||||||
-d)
|
split|push)
|
||||||
debug=1
|
default="--default HEAD"
|
||||||
;;
|
|
||||||
--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"
|
die "Unknown command '$command'"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
|
||||||
|
|
||||||
command="$1"
|
if test -z "$prefix"
|
||||||
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
|
then
|
||||||
die "Error: Use --prefix instead of bare filenames."
|
die "You must provide the --prefix option."
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
debug "command: {$command}"
|
case "$command" in
|
||||||
debug "quiet: {$quiet}"
|
add)
|
||||||
debug "revs: {$revs}"
|
test -e "$prefix" &&
|
||||||
debug "dir: {$dir}"
|
die "prefix '$prefix' already exists."
|
||||||
debug "opts: {$*}"
|
;;
|
||||||
debug
|
*)
|
||||||
|
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
|
||||||
|
|
||||||
|
"cmd_$command" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
cache_setup () {
|
cache_setup () {
|
||||||
cachedir="$GIT_DIR/subtree-cache/$$"
|
cachedir="$GIT_DIR/subtree-cache/$$"
|
||||||
|
@ -898,4 +903,4 @@ cmd_push () {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
"cmd_$command" "$@"
|
main "$@"
|
||||||
|
|
Загрузка…
Ссылка в новой задаче