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>
This commit is contained in:
committed by
Junio C Hamano
parent
c3fced6498
commit
a7eff1a87a
@@ -238,4 +238,20 @@ test_expect_success 'use "git clone --recursive" to checkout all submodules' '
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user