git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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.
Previous: Kevin BallardNext: Kevin Ballard
Message 6 of 17 in “submodule: preserve all arguments exactly when recursing”
  1. 1/2 submodule: preserve all arguments exactly when recursingKevin Ballard, Nov 3, 2010
  2. 2/2 submodule: only preserve flags across recursive status/update invocationsKevin Ballard, Nov 3, 2010
  3. Jonathan NiederNov 3, 2010
  4. Kevin BallardNov 3, 2010
  5. 1/2 submodule: preserve all arguments exactly when recursingKevin Ballard, Nov 3, 2010
  6. Jonathan NiederNov 3, 2010
  7. Kevin BallardNov 3, 2010
  8. 2/2 submodule: only preserve flags across recursive status/update invocationsKevin Ballard, Nov 3, 2010
  9. Jonathan NiederNov 3, 2010
  10. Kevin BallardNov 3, 2010
  11. 1/2 submodule: preserve all arguments exactly when recursingKevin Ballard, Nov 3, 2010
  12. 2/2 submodule: only preserve flags across recursive status/update invocationsKevin Ballard, Nov 3, 2010
  13. Junio C HamanoNov 5, 2010
  14. Jonathan NiederNov 3, 2010
  15. Kevin BallardNov 3, 2010
  16. Jonathan NiederNov 3, 2010
  17. Kevin BallardNov 3, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.