Re: [PATCHv2 1/2] submodule: preserve all arguments exactly when recursing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Nov 2, 2010, at 10:28 PM, Jonathan Nieder wrote:

> Kevin Ballard wrote:
> 
>> 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?

I agree, yours is simpler. I'll send one final patch with the updated description.

>> --- 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.

Hrm, looks like you're right. I was under the impression it was necessary in some
cases when the output of the command included newlines, but a quick test shows
that belief to be wrong.

> Anyway,
> Reviewed-by: Jonathan Nieder <jrnieder@xxxxxxxxx>

Thanks.

-Kevin Ballard

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]