Re: [PATCHv2 1/2] submodule: preserve all arguments exactly when recursing
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Nov 3, 2010, 05:28 UTC
- Message-ID
- <20101103052837.GB10631@burratino>
- In-Reply-To
- <1288760740-10075-1-git-send-email-kevin@sb.org>
Kevin Ballard wrote:
Show 15 quoted lines
> 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.
Probably it is because it is late hear, but I find myself intimidated by the block of explanatory text. Maybe an example like
Environment 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
becomes
git submodule update --reference=/var/lib/common \ objects.git --recursive
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.
would be simpler?
Show 8 quoted lines
> --- 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 "$@")"No quotes are needed around the RHS to an assignment like this.
Anyway, Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Thanks.