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

Re: [PATCH v2 7/7] convert.c: simplify text_stat

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 4, 2016, 20:37 UTC
Message-ID
<xmqqh9hogqkw.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1454608200-5535-1-git-send-email-tboegi@web.de>
tboegi@web.de writes:
Show 5 quoted lines
>  static int convert_is_binary(unsigned long size, const struct text_stat *stats)
>  {
> -	if (stats->cr != stats->crlf)
> +	if (stats->lonecr)
>  		return 1;
This is an equivalent conversion, but...
Show 9 quoted lines
> @@ -266,8 +267,8 @@ static int crlf_to_git(const char *path, const char *src, size_t len,
>  
>  	check_safe_crlf(path, crlf_action, &stats, checksafe);
>  
> -	/* Optimization: No CR? Nothing to convert, regardless. */
> -	if (!stats.cr)
> +	/* Optimization: No CRLF? Nothing to convert, regardless. */
> +	if (!stats.crlf)
>  		return 0;

... this is not. In fact this is even better, as we used to try the remainder of the function when we saw a lone CR, but we no longer do. I am of course assuming that the original turned into a no-op if we had a lone CR in the input--otherwise this patch changes the behaviour.

However, I see this comment after the function returns with the above optimization:

       /*
        * If we guessed, we already know we rejected a file with
        * lone CR, and we can strip a CR without looking at what
        * follow it.
        */

So the code around there used to have a reason to worry about a lone CR (i.e. it didn't want to lose them). With the change in this hunk for the "optimization", it no longer is necessary to do so, i.e. we know we do not have a lone CR so every CR can be stripped because it must be followed by LF, isn't it?

But I do not see a matching change to simplify that here. Am I following the current code incorrectly or something?

Puzzled...
Show 11 quoted lines
>  	/*
> @@ -315,21 +316,16 @@ static int crlf_to_worktree(const char *path, const char *src, size_t len,
>  	gather_stats(src, len, &stats);
>  
>  	/* No LF? Nothing to convert, regardless. */
> -	if (!stats.lf)
> -		return 0;
> -
> -	/* Was it already in CRLF format? */
> -	if (stats.lf == stats.crlf)
> +	if (!stats.lonelf)
Doesn't the comment above need adjustment?
>  		return 0;
Otherwise, the output side looks correct to me.
Previous: tboegi@web.deNext: tboegi@web.de
Message 23 of 47 in “t0027: Add tests for get_stream_filter()”
  1. t0027: Add tests for get_stream_filter()tboegi@web.de, Jan 24, 2016
  2. Junio C HamanoJan 27, 2016
  3. Torsten BögershausenJan 27, 2016
  4. 1/6 t0027: Add tests for get_stream_filter()tboegi@web.de, Jan 27, 2016
  5. 1/6 t0027: Add tests for get_stream_filter()tboegi@web.de, Feb 2, 2016
  6. Junio C HamanoFeb 2, 2016
  7. 2/6 convert.c: Remove path when not neededtboegi@web.de, Feb 2, 2016
  8. Junio C HamanoFeb 2, 2016
  9. 3/6 convert.c: Remove input_crlf_action()tboegi@web.de, Feb 2, 2016
  10. Junio C HamanoFeb 2, 2016
  11. 4/6 convert.c: Use text_eol_is_crlf()tboegi@web.de, Feb 2, 2016
  12. 5/6 convert: auto_crlf=false and no attributes set: same as binarytboegi@web.de, Feb 2, 2016
  13. 6/6 convert.c: Refactor crlf_actiontboegi@web.de, Feb 2, 2016
  14. 1/7 t0027: Add tests for get_stream_filter()tboegi@web.de, Feb 4, 2016
  15. Junio C HamanoFeb 4, 2016
  16. 2/7 convert.c: remove unused parameter 'path'tboegi@web.de, Feb 4, 2016
  17. 3/7 convert.c: Remove input_crlf_action()tboegi@web.de, Feb 4, 2016
  18. 4/7 convert.c: Use text_eol_is_crlf()tboegi@web.de, Feb 4, 2016
  19. Junio C HamanoFeb 4, 2016
  20. 5/7 convert: auto_crlf=false and no attributes set: same as binarytboegi@web.de, Feb 4, 2016
  21. 6/7 convert.c: Refactor crlf_actiontboegi@web.de, Feb 4, 2016
  22. 7/7 convert.c: simplify text_stattboegi@web.de, Feb 4, 2016
  23. Junio C HamanoFeb 4, 2016
  24. 1/7 t0027: Add tests for get_stream_filter()tboegi@web.de, Feb 5, 2016
  25. Junio C HamanoFeb 8, 2016
  26. 2/7 convert.c: remove unused parameter 'path'tboegi@web.de, Feb 5, 2016
  27. 3/7 convert.c: Remove input_crlf_action()tboegi@web.de, Feb 5, 2016
  28. 4/7 convert.c: use text_eol_is_crlf()tboegi@web.de, Feb 5, 2016
  29. 5/7 convert: auto_crlf=false and no attributes set: same as binarytboegi@web.de, Feb 5, 2016
  30. Junio C HamanoFeb 8, 2016
  31. Torsten BögershausenFeb 9, 2016
  32. Junio C HamanoFeb 9, 2016
  33. 6/7 convert.c: refactor crlf_actiontboegi@web.de, Feb 5, 2016
  34. 7/7 convert.c: simplify text_stattboegi@web.de, Feb 5, 2016
  35. 1/6 t0027: add tests for get_stream_filter()tboegi@web.de, Feb 10, 2016
  36. 2/6 convert.c: remove unused parameter 'path'tboegi@web.de, Feb 10, 2016
  37. 3/6 convert.c: remove input_crlf_action()tboegi@web.de, Feb 10, 2016
  38. 4/6 convert.c: use text_eol_is_crlf()tboegi@web.de, Feb 10, 2016
  39. 5/6 convert.c: refactor crlf_actiontboegi@web.de, Feb 10, 2016
  40. 6/6 convert.c: simplify text_stattboegi@web.de, Feb 10, 2016
  41. 1/1 convert.c: correct attr_actiontboegi@web.de, Feb 22, 2016
  42. Eric SunshineFeb 22, 2016
  43. Junio C HamanoFeb 22, 2016
  44. Junio C HamanoFeb 22, 2016
  45. Torsten BögershausenFeb 23, 2016
  46. 1/1 convert.c: correct attr_actiontboegi@web.de, Feb 23, 2016
  47. Junio C HamanoFeb 23, 2016

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.