summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c3fced6)
raw | patch | inline | side by side (parent: c3fced6)
author | Kevin Ballard <kevin@sb.org> | |
Wed, 3 Nov 2010 06:26:24 +0000 (23:26 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Wed, 3 Nov 2010 19:51:26 +0000 (12:51 -0700) |
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>
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>
git-submodule.sh | patch | blob | history | |
t/t7407-submodule-foreach.sh | patch | blob | history |
diff --git a/git-submodule.sh b/git-submodule.sh
index 9ebbab798d21147fc019b6183cad0c462c9dafca..4d2bb37215c29015a147b9fe79c91446f1811cda 100755 (executable)
--- a/git-submodule.sh
+++ b/git-submodule.sh
cmd_update()
{
# parse $args after "submodule ... update".
- orig_args="$@"
+ orig_args=$(git rev-parse --sq-quote "$@")
while test $# -ne 0
do
case "$1" in
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
cmd_status()
{
# parse $args after "submodule ... status".
- orig_args="$@"
+ orig_args=$(git rev-parse --sq-quote "$@")
while test $# -ne 0
do
case "$1" in
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
index 905a8baae9a03a4b47512bb3eb3e0f9ec84f5ca4..15d420fca62ff32ca99658b9aec0be8adb5ffbfd 100755 (executable)
test -d clone4/nested1/nested2/nested3/submodule/.git
'
+test_expect_success 'test "update --recursive" with a flag with spaces' '
+ git clone super "common objects" &&
+ git clone super clone5 &&
+ (
+ cd clone5 &&
+ test ! -d nested1/.git &&
+ git submodule update --init --recursive --reference="$(dirname "$PWD")/common objects" &&
+ test -d nested1/.git &&
+ test -d nested1/nested2/.git &&
+ test -d nested1/nested2/nested3/.git &&
+ test -f nested1/.git/objects/info/alternates &&
+ test -f nested1/nested2/.git/objects/info/alternates &&
+ test -f nested1/nested2/nested3/.git/objects/info/alternates
+ )
+'
+
test_done