Merge branch 'kb/maint-submodule-savearg'

* kb/maint-submodule-savearg:
  submodule: only preserve flags across recursive status/update invocations
  submodule: preserve all arguments exactly when recursing
This commit is contained in:
Junio C Hamano 2010-11-17 15:02:12 -08:00
commit aef5c38b59
2 changed files with 59 additions and 12 deletions

View File

@ -374,41 +374,35 @@ cmd_init()
cmd_update() cmd_update()
{ {
# parse $args after "submodule ... update". # parse $args after "submodule ... update".
orig_args="$@" orig_flags=
while test $# -ne 0 while test $# -ne 0
do do
case "$1" in case "$1" in
-q|--quiet) -q|--quiet)
shift
GIT_QUIET=1 GIT_QUIET=1
;; ;;
-i|--init) -i|--init)
init=1 init=1
shift
;; ;;
-N|--no-fetch) -N|--no-fetch)
shift
nofetch=1 nofetch=1
;; ;;
-r|--rebase) -r|--rebase)
shift
update="rebase" update="rebase"
;; ;;
--reference) --reference)
case "$2" in '') usage ;; esac case "$2" in '') usage ;; esac
reference="--reference=$2" reference="--reference=$2"
shift 2 orig_flags="$orig_flags $(git rev-parse --sq-quote "$1")"
shift
;; ;;
--reference=*) --reference=*)
reference="$1" reference="$1"
shift
;; ;;
-m|--merge) -m|--merge)
shift
update="merge" update="merge"
;; ;;
--recursive) --recursive)
shift
recursive=1 recursive=1
;; ;;
--) --)
@ -422,6 +416,8 @@ cmd_update()
break break
;; ;;
esac esac
orig_flags="$orig_flags $(git rev-parse --sq-quote "$1")"
shift
done done
if test -n "$init" if test -n "$init"
@ -500,7 +496,7 @@ cmd_update()
if test -n "$recursive" if test -n "$recursive"
then then
(clear_local_git_env; cd "$path" && cmd_update $orig_args) || (clear_local_git_env; cd "$path" && eval cmd_update "$orig_flags") ||
die "Failed to recurse into submodule path '$path'" die "Failed to recurse into submodule path '$path'"
fi fi
done done
@ -733,7 +729,7 @@ cmd_summary() {
cmd_status() cmd_status()
{ {
# parse $args after "submodule ... status". # parse $args after "submodule ... status".
orig_args="$@" orig_flags=
while test $# -ne 0 while test $# -ne 0
do do
case "$1" in case "$1" in
@ -757,6 +753,7 @@ cmd_status()
break break
;; ;;
esac esac
orig_flags="$orig_flags $(git rev-parse --sq-quote "$1")"
shift shift
done done
@ -790,7 +787,7 @@ cmd_status()
prefix="$displaypath/" prefix="$displaypath/"
clear_local_git_env clear_local_git_env
cd "$path" && cd "$path" &&
cmd_status $orig_args eval cmd_status "$orig_args"
) || ) ||
die "Failed to recurse into submodule path '$path'" die "Failed to recurse into submodule path '$path'"
fi fi

View File

@ -226,6 +226,21 @@ test_expect_success 'test "status --recursive"' '
test_cmp expect actual test_cmp expect actual
' '
sed -e "/nested1 /s/.*/+$nested1sha1 nested1 (file2~1)/;/sub[1-3]/d" < expect > expect2
mv -f expect2 expect
test_expect_success 'ensure "status --cached --recursive" preserves the --cached flag' '
(
cd clone3 &&
(
cd nested1 &&
test_commit file2
) &&
git submodule status --cached --recursive -- nested1 > ../actual
) &&
test_cmp expect actual
'
test_expect_success 'use "git clone --recursive" to checkout all submodules' ' test_expect_success 'use "git clone --recursive" to checkout all submodules' '
git clone --recursive super clone4 && git clone --recursive super clone4 &&
test -d clone4/.git && test -d clone4/.git &&
@ -238,4 +253,39 @@ test_expect_success 'use "git clone --recursive" to checkout all submodules' '
test -d clone4/nested1/nested2/nested3/submodule/.git 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_expect_success 'use "update --recursive nested1" to checkout all submodules rooted in nested1' '
git clone super clone6 &&
(
cd clone6 &&
test ! -d sub1/.git &&
test ! -d sub2/.git &&
test ! -d sub3/.git &&
test ! -d nested1/.git &&
git submodule update --init --recursive -- nested1 &&
test ! -d sub1/.git &&
test ! -d sub2/.git &&
test ! -d sub3/.git &&
test -d nested1/.git &&
test -d nested1/nested2/.git &&
test -d nested1/nested2/nested3/.git &&
test -d nested1/nested2/nested3/submodule/.git
)
'
test_done test_done