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

Re: [PATCH v2 4/7] convert.c: Use text_eol_is_crlf()

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 4, 2016, 20:13 UTC
Message-ID
<xmqqlh70groz.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1454608194-5417-1-git-send-email-tboegi@web.de>
tboegi@web.de writes:
Show 61 quoted lines
> From: Torsten Bögershausen <tboegi@web.de>
>
> Add a helper function to find out, which line endings
> text files should get at checkout, depending on
> core.autocrlf and core.eol
>
> Signed-off-by: Torsten Bögershausen <tboegi@web.de>
> ---
>  convert.c | 25 +++++++++++++++++--------
>  1 file changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/convert.c b/convert.c
> index d0c8c66..9ffd043 100644
> --- a/convert.c
> +++ b/convert.c
> @@ -149,6 +149,19 @@ const char *get_wt_convert_stats_ascii(const char *path)
>  	return ret;
>  }
>  
> +static int text_eol_is_crlf(void)
> +{
> +	if (auto_crlf == AUTO_CRLF_TRUE)
> +		return 1;
> +	else if (auto_crlf == AUTO_CRLF_INPUT)
> +		return 0;
> +	if (core_eol == EOL_CRLF)
> +		return 1;
> +	if (core_eol == EOL_UNSET && EOL_NATIVE == EOL_CRLF)
> +		return 1;
> +	return 0;
> +}
> +
>  static enum eol output_eol(enum crlf_action crlf_action)
>  {
>  	switch (crlf_action) {
> @@ -164,12 +177,7 @@ static enum eol output_eol(enum crlf_action crlf_action)
>  		/* fall through */
>  	case CRLF_TEXT:
>  	case CRLF_AUTO:
> -		if (auto_crlf == AUTO_CRLF_TRUE)
> -			return EOL_CRLF;
> -		else if (auto_crlf == AUTO_CRLF_INPUT)
> -			return EOL_LF;
> -		else if (core_eol == EOL_UNSET)
> -			return EOL_NATIVE;
> +		return text_eol_is_crlf() ? EOL_CRLF : EOL_LF;
>  	}
>  	return core_eol;
>  }
> @@ -1378,8 +1386,9 @@ struct stream_filter *get_stream_filter(const char *path, const unsigned char *s
>  	    (crlf_action == CRLF_GUESS && auto_crlf == AUTO_CRLF_FALSE))
>  		filter = cascade_filter(filter, &null_filter_singleton);
>  
> -	else if (output_eol(crlf_action) == EOL_CRLF &&
> -		 !(crlf_action == CRLF_AUTO || crlf_action == CRLF_GUESS))
> +	else if ((crlf_action == CRLF_AUTO || crlf_action == CRLF_GUESS))
> +		;
> +	else if (output_eol(crlf_action) == EOL_CRLF)
>  		filter = cascade_filter(filter, lf_to_crlf_filter());
>  
>  	return filter;
I am a bit slow today so let me talk this change through aloud.

The condition under which we called cascade_filter() used to be that output_eol(crlf_action) yields EOL_CRLF and crlf_action is not set to one of these two values. Now, we say if crlf_action is one of these two values, we wouldn't call it, and then we check output_eol().

So they do the same thing, even though it smells that this change is outside the scope of "Add a helper and use it" theme of the patch.

While I do not think this new "split" conditions particularly easier to read compared to the previous one, if you plan to do something different in later patches when crlf_action is set to specific values, ignoring what output_eol() says, a patch to implement such a change would become easier to understand what is going on with this preparatory rewrite. So if such a preparatory rewrite is coming (I haven't checked 5-7/7 yet), perhaps have this hunk as a single patch that is separate from "add a helper text_eol_is_crlf()" patch.

By the way, your new 1/7 has s/: Remove/: remove/ applied to the subject, but not other ones like this one. Intended, or you forgot to do s/: Use/: use/ here?

Previous: tboegi@web.deNext: tboegi@web.de
Message 19 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.