From: Kevin Ballard <kevin@sb.org>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Kevin Ballard <kevin@sb.org>
Subject: [PATCH 2/2] submodule: only preserve flags across recursive status/update invocations
Date: Tue, 2 Nov 2010 21:34:42 -0700 [thread overview]
Message-ID: <1288758882-77286-2-git-send-email-kevin@sb.org> (raw)
In-Reply-To: <1288758882-77286-1-git-send-email-kevin@sb.org>
Recursive invocations of submodule update/status preserve all arguments
in the recursive invocation. This tends to cause undesired behavior when
those arguments include the name of a submodule, as it tries to recurse
into a nested submodule with the same name rather than recursing into all
child submodules of the named submodule.
This commit changes the argument preservation to only preserve flags.
When specifying a submodule name on the command-line, all child submodules
of that named submodule will be recursed into correctly, and it will not
attempt to recurse into a phantom nested submodule with the same name
as its parent.
Signed-off-by: Kevin Ballard <kevin@sb.org>
---
This commit was inspired by my coworker, who tried to run `git submodule
update --recursive molecules` (where molecules is the name of a submodule)
and received the rather unexpected error
error: pathspec 'molecules' did not match any file(s) known to git.
Did you forget to 'git add'?
git-submodule.sh | 21 +++++++++------------
t/t7407-submodule-foreach.sh | 19 +++++++++++++++++++
2 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index ec7a5e4..52c693c 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -407,41 +407,35 @@ cmd_init()
cmd_update()
{
# parse $args after "submodule ... update".
- orig_args="$(quote_words "$@")"
+ orig_flags=
while test $# -ne 0
do
case "$1" in
-q|--quiet)
- shift
GIT_QUIET=1
;;
-i|--init)
init=1
- shift
;;
-N|--no-fetch)
- shift
nofetch=1
;;
-r|--rebase)
- shift
update="rebase"
;;
--reference)
case "$2" in '') usage ;; esac
reference="--reference=$2"
- shift 2
+ orig_flags="$orig_flags $(quote_words "$1")"
+ shift
;;
--reference=*)
reference="$1"
- shift
;;
-m|--merge)
- shift
update="merge"
;;
--recursive)
- shift
recursive=1
;;
--)
@@ -455,6 +449,8 @@ cmd_update()
break
;;
esac
+ orig_flags="$orig_flags $(quote_words "$1")"
+ shift
done
if test -n "$init"
@@ -533,7 +529,7 @@ cmd_update()
if test -n "$recursive"
then
- eval "set - $orig_args"
+ eval "set - $orig_flags"
(clear_local_git_env; cd "$path" && cmd_update "$@") ||
die "Failed to recurse into submodule path '$path'"
fi
@@ -767,7 +763,7 @@ cmd_summary() {
cmd_status()
{
# parse $args after "submodule ... status".
- orig_args="$(quote_words "$@")"
+ orig_flags=
while test $# -ne 0
do
case "$1" in
@@ -791,6 +787,7 @@ cmd_status()
break
;;
esac
+ orig_flags="$orig_flags $(quote_words "$1")"
shift
done
@@ -822,7 +819,7 @@ cmd_status()
then
(
prefix="$displaypath/"
- eval "set - $orig_args"
+ eval "set - $orig_flags"
clear_local_git_env
cd "$path" &&
cmd_status "$@"
diff --git a/t/t7407-submodule-foreach.sh b/t/t7407-submodule-foreach.sh
index 905a8ba..2d5a855 100755
--- a/t/t7407-submodule-foreach.sh
+++ b/t/t7407-submodule-foreach.sh
@@ -238,4 +238,23 @@ test_expect_success 'use "git clone --recursive" to checkout all submodules' '
test -d clone4/nested1/nested2/nested3/submodule/.git
'
+test_expect_success 'use "update --recursive nested1" to checkout all submodules rooted in nested1' '
+ git clone super clone5 &&
+ (
+ cd clone5 &&
+ 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
--
1.7.3.2.200.ga1bd
next prev parent reply other threads:[~2010-11-03 4:35 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-03 4:34 [PATCH 1/2] submodule: preserve all arguments exactly when recursing Kevin Ballard
2010-11-03 4:34 ` Kevin Ballard [this message]
2010-11-03 4:37 ` Jonathan Nieder
2010-11-03 4:40 ` Kevin Ballard
2010-11-03 5:05 ` [PATCHv2 " Kevin Ballard
2010-11-03 5:28 ` Jonathan Nieder
2010-11-03 5:35 ` Kevin Ballard
2010-11-03 5:05 ` [PATCHv2 2/2] submodule: only preserve flags across recursive status/update invocations Kevin Ballard
2010-11-03 5:38 ` Jonathan Nieder
2010-11-03 5:45 ` Kevin Ballard
2010-11-03 6:26 ` [PATCHv3 1/2] submodule: preserve all arguments exactly when recursing Kevin Ballard
2010-11-03 6:26 ` [PATCHv3 2/2] submodule: only preserve flags across recursive status/update invocations Kevin Ballard
2010-11-05 22:38 ` Junio C Hamano
2010-11-03 5:47 ` [PATCH 1/2] submodule: preserve all arguments exactly when recursing Jonathan Nieder
2010-11-03 5:49 ` Kevin Ballard
2010-11-03 5:30 ` Jonathan Nieder
2010-11-03 5:36 ` Kevin Ballard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1288758882-77286-2-git-send-email-kevin@sb.org \
--to=kevin@sb.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).