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

Re: [PATCH v5 1/1] diff.c: When appropriate, use utf8_strwidth()

From
Torsten Bögershausen <tboegi@web.de>
Date
Oct 23, 2022, 20:02 UTC
Message-ID
<20221023200222.o6p7d6qor5sygdgb@tb-raspi4>
In-Reply-To
<xmqq35bgkfde.fsf@gitster.g>
On Fri, Oct 21, 2022 at 02:59:09PM -0700, Junio C Hamano wrote:
Show 56 quoted lines
> Torsten Bögershausen <tboegi@web.de> writes:
>
> > For the moment I don't have any spare time to spend on Git.
> > All your comments are noted, and I hope to get time to address them later.
> > If you kick out the branch from seen and the whats cooking list,
> > that would be fine with me.
>
> I'd rather not waste the efforts so far.  I am tempted to queue the
> following on top or squash it in.
>
> ----- >8 --------- >8 --------- >8 --------- >8 --------- >8 -----
> Subject: [PATCH] diff: leave NEEDWORK notes in show_stats() function
>
> The previous step made an attempt to correctly compute display
> columns allocated and padded different parts of diffstat output.
> There are at least two known codepaths in the function that still
> mixes up display widths and byte length that need to be fixed.
>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
>  diff.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/diff.c b/diff.c
> index 2751cae131..1d222d87b2 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -2675,6 +2675,11 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
>  	 * making the line longer than the maximum width.
>  	 */
>
> +	/*
> +	 * NEEDSWORK: line_prefix is often used for "log --graph" output
> +	 * and contains ANSI-colored string.  utf8_strnwidth() should be
> +	 * used to correctly count the display width instead of strlen().
> +	 */
>  	if (options->stat_width == -1)
>  		width = term_columns() - strlen(line_prefix);
>  	else
> @@ -2750,6 +2755,16 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
>  			char *slash;
>  			prefix = "...";
>  			len -= 3;
> +			/*
> +			 * NEEDSWORK: (name_len - len) counts the display
> +			 * width, which would be shorter than the byte
> +			 * length of the corresponding substring.
> +			 * Advancing "name" by that number of bytes does
> +			 * *NOT* skip over that many columns, so it is
> +			 * very likely that chomping the pathname at the
> +			 * slash we will find starting from "name" will
> +			 * leave the resulting string still too long.
> +			 */
>  			name += name_len - len;
>  			slash = strchr(name, '/');
>  			if (slash)

That looks good to me - my preferred version would be a patch on it's own on top.

Previous: Junio C HamanoNext: Junio C Hamano
Message 41 of 42 in “[BUG] Unicode filenames handling in `git log --stat`”
  1. Alexander MeshcheryakovAug 9, 2022
  2. Calvin WanAug 9, 2022
  3. Alexander MeshcheryakovAug 9, 2022
  4. Calvin WanAug 9, 2022
  5. Junio C HamanoAug 10, 2022
  6. Torsten BögershausenAug 10, 2022
  7. Alexander MeshcheryakovAug 10, 2022
  8. Torsten BögershausenAug 10, 2022
  9. Torsten BögershausenAug 10, 2022
  10. Junio C HamanoAug 10, 2022
  11. Torsten BögershausenAug 10, 2022
  12. 1/1 diff.c: When appropriate, use utf8_strwidth()tboegi@web.de, Aug 14, 2022
  13. Junio C HamanoAug 14, 2022
  14. Torsten BögershausenAug 15, 2022
  15. Junio C HamanoAug 18, 2022
  16. 1/1 diff.c: When appropriate, use utf8_strwidth()tboegi@web.de, Aug 27, 2022
  17. Torsten BögershausenAug 27, 2022
  18. Eric SunshineAug 27, 2022
  19. Johannes SchindelinAug 29, 2022
  20. Torsten BögershausenAug 29, 2022
  21. Junio C HamanoAug 29, 2022
  22. Johannes SchindelinSep 2, 2022
  23. 2/2 diff.c: More changes and tests around utf8_strwidth()tboegi@web.de, Sep 2, 2022
  24. Johannes SchindelinSep 2, 2022
  25. 1/2 diff.c: When appropriate, use utf8_strwidth(), part1tboegi@web.de, Sep 2, 2022
  26. Johannes SchindelinSep 2, 2022
  27. 1/2 diff.c: When appropriate, use utf8_strwidth(), part1tboegi@web.de, Sep 3, 2022
  28. Junio C HamanoSep 5, 2022
  29. Torsten BögershausenSep 7, 2022
  30. Junio C HamanoSep 7, 2022
  31. 2/2 diff.c: More changes and tests around utf8_strwidth()tboegi@web.de, Sep 3, 2022
  32. Johannes SchindelinSep 5, 2022
  33. 1/1 diff.c: When appropriate, use utf8_strwidth()tboegi@web.de, Sep 14, 2022
  34. Junio C HamanoSep 14, 2022
  35. Torsten BögershausenSep 26, 2022
  36. Junio C HamanoOct 10, 2022
  37. Torsten BögershausenOct 20, 2022
  38. Junio C HamanoOct 20, 2022
  39. Torsten BögershausenOct 21, 2022
  40. Junio C HamanoOct 21, 2022
  41. Torsten BögershausenOct 23, 2022
  42. Junio C HamanoSep 15, 2022

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.