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

Re: [PATCH v2 1/2] git-prompt: make __git_eread intended use explicit

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 4, 2017, 17:58 UTC
Message-ID
<xmqqindmml25.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20171201233133.30011-1-rabel@robertabel.eu>
Robert Abel <rabel@robertabel.eu> writes:
> __git_eread is used to read a single line of a given file (if it exists)
> into a variable without the EOL. All six current users of __git_eread
> use it that way and don't expect multi-line content.

Changing $@ to $2 does not change whether this is about "multi-line" or not. What you are changing is that the original was prepared to be given two or more variable names, and split an input line at IFS into multiple tokens to be assigned to these variables, but with this change, the caller can only use one variable and this function will not split the line and store it into that single variable.

The above can easily be fixed with a bit of rewording, perhaps like:
    ... that way.  We do not need to split the line into tokens and
    assign them to multiple variables---reading only into a single
    variable needs to be supported.

While reviewing this patch, I also wondered if the "read" wants to become "read -r" or something that is even safer than simply avoiding tokenization, but after scanning to see exactly which files __git_eread is used to read from, I do not think it matters (the input will not have a backslash that would want to be protected from 'read'), so this should be OK.

Show 25 quoted lines
> Signed-off-by: Robert Abel <rabel@robertabel.eu>
> ---
>  contrib/completion/git-prompt.sh | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
> index c6cbef38c..41a471957 100644
> --- a/contrib/completion/git-prompt.sh
> +++ b/contrib/completion/git-prompt.sh
> @@ -278,11 +278,12 @@ __git_ps1_colorize_gitstring ()
>  	r="$c_clear$r"
>  }
>  
> +# Helper function to read the first line of a file into a variable.
> +# __git_eread requires 2 arguments, the file path and the name of the
> +# variable, in that order.
>  __git_eread ()
>  {
> -	local f="$1"
> -	shift
> -	test -r "$f" && read "$@" <"$f"
> +	test -r "$1" && read "$2" <"$1"
>  }
>  
>  # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
Previous: Johannes SchindelinNext: Robert Abel
Message 13 of 25 in “git-prompt: fix reading files with windows line endings”
  1. Robert AbelNov 28, 2017
  2. git-prompt: fix reading files with windows line endingsRobert Abel, Nov 28, 2017
  3. Johannes SchindelinNov 29, 2017
  4. Robert AbelNov 29, 2017
  5. Johannes SchindelinNov 30, 2017
  6. Robert AbelNov 30, 2017
  7. Johannes SchindelinNov 30, 2017
  8. Robert AbelNov 30, 2017
  9. Johannes SchindelinDec 1, 2017
  10. 1/2 git-prompt: make __git_eread intended use explicitRobert Abel, Dec 1, 2017
  11. 2/2 git-prompt: fix reading files with windows line endingsRobert Abel, Dec 1, 2017
  12. Johannes SchindelinDec 4, 2017
  13. Junio C HamanoDec 4, 2017
  14. Robert AbelDec 4, 2017
  15. Junio C HamanoDec 5, 2017
  16. Robert AbelDec 5, 2017
  17. Junio C HamanoDec 5, 2017
  18. Robert AbelDec 5, 2017
  19. 1/2 git-prompt: make __git_eread intended use explicitRobert Abel, Dec 5, 2017
  20. 2/2 git-prompt: fix reading files with windows line endingsRobert Abel, Dec 5, 2017
  21. 1/2 git-prompt: make __git_eread intended use explicitRobert Abel, Dec 4, 2017
  22. 2/2 git-prompt: fix reading files with windows line endingsRobert Abel, Dec 4, 2017
  23. SZEDER GáborNov 30, 2017
  24. Johannes SchindelinNov 30, 2017
  25. SZEDER GáborNov 30, 2017

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.