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

Re: [PATCH 1/3] git-apply: fix whitespace stripping

From
David Kastrup <dak@gnu.org>
Date
Sep 18, 2007, 08:55 UTC
Message-ID
<86r6kw4aki.fsf@lola.quinscape.zz>
In-Reply-To
<11899829424173-git-send-email-bfields@citi.umich.edu>
"J. Bruce Fields" <bfields@citi.umich.edu> writes:
Show 53 quoted lines
> The algorithm isn't right here: it accumulates any set of 8 spaces into
> tabs even if they're separated by tabs, so
>
> 	<four spaces><tab><four spaces><tab>
>
> is converted to
>
> 	<tab><tab><tab>
>
> when it should be just
>
> 	<tab><tab>
>
> So teach git-apply that a tab hides any group of less than 8 previous
> spaces in a row.
>
> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
> ---
>  builtin-apply.c |   13 ++++++++++---
>  1 files changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/builtin-apply.c b/builtin-apply.c
> index 976ec77..70359c1 100644
> --- a/builtin-apply.c
> +++ b/builtin-apply.c
> @@ -1642,15 +1642,22 @@ static int apply_line(char *output, const char *patch, int plen)
>  
>  	buf = output;
>  	if (need_fix_leading_space) {
> +		int consecutive_spaces = 0;
>  		/* between patch[1..last_tab_in_indent] strip the
>  		 * funny spaces, updating them to tab as needed.
>  		 */
>  		for (i = 1; i < last_tab_in_indent; i++, plen--) {
>  			char ch = patch[i];
> -			if (ch != ' ')
> +			if (ch != ' ') {
> +				consecutive_spaces = 0;
>  				*output++ = ch;
> -			else if ((i % 8) == 0)
> -				*output++ = '\t';
> +			} else {
> +				consecutive_spaces++;
> +				if (consecutive_spaces == 8) {
> +					*output++ = '\t';
> +					consecutive_spaces = 0;
> +				}
> +			}
>  		}
>  		fixed = 1;
>  		i = last_tab_in_indent;
> -- 
> 1.5.3.1.42.gfe5df

As far as I can see, this does not really work since it does not maintain an idea of a current column.

If you have
abcd<four spaces><tab><four spaces><tab>

then indeed the resulting conversion needs to be <tab><tab><tab> whereas with

abc<four spaces><tab><four spaces><tab>
the resulting conversion needs to be just <tab><tab>
-- 
David Kastrup
Previous: Junio C HamanoNext: J. Bruce Fields
Message 14 of 16 in “whitespace-stripping”
  1. J. Bruce FieldsSep 16, 2007
  2. 1/3 git-apply: fix whitespace strippingJ. Bruce Fields, Sep 16, 2007
  3. 2/3 git-apply: complain about >=8 consecutive spaces in initial indentJ. Bruce Fields, Sep 16, 2007
  4. 3/3 git-apply: add tests for stripping of leading and trailing whitespaceJ. Bruce Fields, Sep 16, 2007
  5. Krzysztof HalasaSep 17, 2007
  6. J. Bruce FieldsSep 17, 2007
  7. Krzysztof HalasaSep 17, 2007
  8. J. Bruce FieldsSep 18, 2007
  9. Martin LanghoffSep 16, 2007
  10. J. Bruce FieldsSep 17, 2007
  11. Junio C HamanoSep 17, 2007
  12. J. Bruce FieldsSep 17, 2007
  13. git-diff: complain about >=8 consecutive spaces in initial indentJunio C Hamano, Oct 3, 2007
  14. David KastrupSep 18, 2007
  15. J. Bruce FieldsSep 18, 2007
  16. David KastrupSep 18, 2007

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.