summaryrefslogtreecommitdiff
path: root/t/t7407-submodule-foreach.sh
diff options
context:
space:
mode:
authorKevin Ballard <kevin@sb.org>2010-11-03 06:26:24 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-11-03 19:51:26 (GMT)
commita7eff1a87ad8cdcb93f60efc7969042bc3e669ee (patch)
tree1bb9d58f3560f299dc179b2508d47c6baee80d6d /t/t7407-submodule-foreach.sh
parentc3fced64981e3d2700d83c0a6661ac347df5121e (diff)
downloadgit-a7eff1a87ad8cdcb93f60efc7969042bc3e669ee.zip
git-a7eff1a87ad8cdcb93f60efc7969042bc3e669ee.tar.gz
git-a7eff1a87ad8cdcb93f60efc7969042bc3e669ee.tar.bz2
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 't/t7407-submodule-foreach.sh')
-rwxr-xr-xt/t7407-submodule-foreach.sh16
1 files changed, 16 insertions, 0 deletions
diff --git a/t/t7407-submodule-foreach.sh b/t/t7407-submodule-foreach.sh
index 905a8ba..15d420f 100755
--- a/t/t7407-submodule-foreach.sh
+++ b/t/t7407-submodule-foreach.sh
@@ -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