summaryrefslogtreecommitdiff
path: root/git-submodule.sh
diff options
context:
space:
mode:
authorKevin Ballard <kevin@sb.org>2010-11-02 23:26:24 -0700
committerJunio C Hamano <gitster@pobox.com>2010-11-03 12:51:26 -0700
commita7eff1a87ad8cdcb93f60efc7969042bc3e669ee (patch)
tree1bb9d58f3560f299dc179b2508d47c6baee80d6d /git-submodule.sh
parentc3fced64981e3d2700d83c0a6661ac347df5121e (diff)
downloadgit-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-xgit-submodule.sh8
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