From: Kevin Ballard <kevin@sb.org>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
Jonathan Nieder <jrnieder@gmail.com>,
Kevin Ballard <kevin@sb.org>
Subject: [PATCHv2 1/2] submodule: preserve all arguments exactly when recursing
Date: Tue, 2 Nov 2010 22:05:39 -0700 [thread overview]
Message-ID: <1288760740-10075-1-git-send-email-kevin@sb.org> (raw)
In-Reply-To: <5BE96A08-B8AB-4041-ABF2-7095EB5DD585@sb.org>
When performing a recursive status or update, any argments with whitespace
would be split along that whitespace when passed to the recursive invocation
of the update or status command.
This is caused by the special handling that sh provides to the $@ variable.
Status and update stored "$@" into a separate variable, and passed that
variable to the recursive invocation. Unfortunately, the special handling
afforded to $@ isn't given to this new variable, and word-breaking occurs
along whitespace boundaries.
We can use $(git rev-parse --sq-quote "$@") to produce a string containing
a quoted version of all given args, suitable for passing to eval. We then
recurse using something like `eval cmd_status "$orig_args"` instead of the
former `cmd_status $orig_args`. This preserves all arguments exactly as
given to the initial invocation of the command.
Helped-By: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Kevin Ballard <kevin@sb.org>
---
This patch ditches the quote_words function and uses
`git rev-parse --sq-quote "$@"` instead, as suggested by Jonathan Nieder.
git-submodule.sh | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 9ebbab7..543554b 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -374,7 +374,7 @@ cmd_init()
cmd_update()
{
# parse $args after "submodule ... update".
- orig_args="$@"
+ orig_args="$(git rev-parse --sq-quote "$@")"
while test $# -ne 0
do
case "$1" in
@@ -500,7 +500,7 @@ cmd_update()
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
@@ -733,7 +733,7 @@ cmd_summary() {
cmd_status()
{
# parse $args after "submodule ... status".
- orig_args="$@"
+ orig_args="$(git rev-parse --sq-quote "$@")"
while test $# -ne 0
do
case "$1" in
@@ -790,7 +790,7 @@ cmd_status()
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
--
1.7.3.2.200.g479de
next prev parent reply other threads:[~2010-11-03 5:05 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 ` [PATCH 2/2] submodule: only preserve flags across recursive status/update invocations Kevin Ballard
2010-11-03 4:37 ` [PATCH 1/2] submodule: preserve all arguments exactly when recursing Jonathan Nieder
2010-11-03 4:40 ` Kevin Ballard
2010-11-03 5:05 ` Kevin Ballard [this message]
2010-11-03 5:28 ` [PATCHv2 " 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=1288760740-10075-1-git-send-email-kevin@sb.org \
--to=kevin@sb.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.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).