diff options
author | Kevin Ballard <kevin@sb.org> | 2010-11-02 23:26:24 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-11-03 12:51:26 -0700 |
commit | a7eff1a87ad8cdcb93f60efc7969042bc3e669ee (patch) | |
tree | 1bb9d58f3560f299dc179b2508d47c6baee80d6d /git-submodule.sh | |
parent | c3fced64981e3d2700d83c0a6661ac347df5121e (diff) | |
download | git-a7eff1a87ad8cdcb93f60efc7969042bc3e669ee.tar.gz |
submodule: preserve all arguments exactly when recursing
Shell variables only hold strings, not lists of parameters,
so $orig_args after
orig_args="$@"
fails to remember where each parameter starts and ends, if
some include whitespace. So
git submodule update \
--reference='/var/lib/common objects.git' \
--recursive --init
becomes
git submodule update --reference=/var/lib/common \
objects.git --recursive --init
in the inner repositories. Use "git rev-parse --sq-quote" to
save parameters in quoted form ready for evaluation by the
shell, avoiding this problem.
Helped-By: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Kevin Ballard <kevin@sb.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-submodule.sh')
-rwxr-xr-x | git-submodule.sh | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/git-submodule.sh b/git-submodule.sh index 9ebbab798d..4d2bb37215 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -374,7 +374,7 @@ cmd_init() cmd_update() { # parse $args after "submodule ... update". - orig_args="$@" + orig_args=$(git rev-parse --sq-quote "$@") while test $# -ne 0 do case "$1" in @@ -500,7 +500,7 @@ cmd_update() if test -n "$recursive" then - (clear_local_git_env; cd "$path" && cmd_update $orig_args) || + (clear_local_git_env; cd "$path" && eval cmd_update "$orig_args") || die "Failed to recurse into submodule path '$path'" fi done @@ -733,7 +733,7 @@ cmd_summary() { cmd_status() { # parse $args after "submodule ... status". - orig_args="$@" + orig_args=$(git rev-parse --sq-quote "$@") while test $# -ne 0 do case "$1" in @@ -790,7 +790,7 @@ cmd_status() prefix="$displaypath/" clear_local_git_env cd "$path" && - cmd_status $orig_args + eval cmd_status "$orig_args" ) || die "Failed to recurse into submodule path '$path'" fi |