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

Re: [PATCH 5/7] line-log: support diff stat formats with -L

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 18, 2026, 22:00 UTC
Message-ID
<xmqq8q8bpl03.fsf@gitster.g>
In-Reply-To
<a70d861d27a13459bab34f6681b3ccfe2f20d0d8.1781806593.git.gitgitgadget@gmail.com>
"Michael Montalbo via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 17 quoted lines
> diff --git a/Documentation/line-range-options.adoc b/Documentation/line-range-options.adoc
> index 72f639b5e7..1a25f55bb1 100644
> --- a/Documentation/line-range-options.adoc
> +++ b/Documentation/line-range-options.adoc
> @@ -9,10 +9,14 @@
>  	_<start>_ and _<end>_ (or _<funcname>_) must exist in the starting revision.
>  	You can specify this option more than once. Implies `--patch`.
>  	Patch output can be suppressed using `--no-patch`.
> -	Non-patch diff formats `--raw`, `--name-only`, `--name-status`,
> -	and `--summary` are supported.  Diff stat formats
> -	(`--stat`, `--numstat`, `--shortstat`, `--dirstat`) are not
> -	currently implemented.
> +	The following non-patch diff formats are supported: `--raw`,
> +	`--name-only`, `--name-status`, `--summary`,
> +	`--stat`, `--numstat`, and `--shortstat`.
> +	The stat formats show range-scoped counts: only lines within
> +	the tracked range are counted.  `--dirstat` is not supported

If "range-scoped" is a widely known term (as opposed to a new word invented only during the introduction of this topic), the above reads well with a nice rhythm, but otherwise it may be easier to read, i.e., something like

	The stat formats counts only lines within the tracked range.

without having readers learn yet another new term that is only used here.

Show 23 quoted lines
> diff --git a/diff.c b/diff.c
> index 6233a96bf0..026fafeb90 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -4289,7 +4289,18 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
>  		xecfg.ctxlen = o->context;
>  		xecfg.interhunkctxlen = o->interhunkcontext;
>  		xecfg.flags = XDL_EMIT_NO_HUNK_HDR;
> -		if (xdi_diff_outf(&mf1, &mf2, NULL,
> +
> +		if (p->line_ranges) {
> +			struct line_range_filter lr_filter;
> +
> +			line_range_filter_init(&lr_filter, p->line_ranges,
> +					       diffstat_consume, diffstat);
> +
> +			if (line_range_filter_diff(&lr_filter, &mf1, &mf2,
> +						   &xpp, &xecfg))
> +				die("unable to generate diffstat for %s",
> +				    one->path);
> +		} else if (xdi_diff_outf(&mf1, &mf2, NULL,
>  				  diffstat_consume, diffstat, &xpp, &xecfg))
>  			die("unable to generate diffstat for %s", one->path);

It is pleasing to see that this can be done with such a surprisingly small change.

Previous: Michael Montalbo via GitGitGadgetNext: Michael Montalbo
Message 7 of 27 in “line-log: range-scope stat, check, and -G under -L”
  1. 0/7 line-log: range-scope stat, check, and -G under -LMichael Montalbo via GitGitGadget, Jun 18, 2026
  2. 1/7 diff: rename and group the line-range filter for clarityMichael Montalbo via GitGitGadget, Jun 18, 2026
  3. 2/7 diff: simplify the line-range filter by classifying removals immediatelyMichael Montalbo via GitGitGadget, Jun 18, 2026
  4. 3/7 diff: emit -L hunk headers via xdiff's formatterMichael Montalbo via GitGitGadget, Jun 18, 2026
  5. 4/7 diff: extract a line-range diff helper for reuseMichael Montalbo via GitGitGadget, Jun 18, 2026
  6. 5/7 line-log: support diff stat formats with -LMichael Montalbo via GitGitGadget, Jun 18, 2026
  7. Junio C HamanoJun 18, 2026
  8. Michael MontalboJun 23, 2026
  9. 6/7 diff: support --check with -L line rangesMichael Montalbo via GitGitGadget, Jun 18, 2026
  10. 7/7 diffcore-pickaxe: scope -G to the -L tracked rangeMichael Montalbo via GitGitGadget, Jun 18, 2026
  11. 0/7 line-log: scope stat, check, and -G to -L line rangesMichael Montalbo via GitGitGadget, Jun 27, 2026
  12. 1/7 diff: rename and group the line-range filter for clarityMichael Montalbo via GitGitGadget, Jun 27, 2026
  13. 2/7 diff: simplify the line-range filter by classifying removals immediatelyMichael Montalbo via GitGitGadget, Jun 27, 2026
  14. 3/7 diff: emit -L hunk headers via xdiff's formatterMichael Montalbo via GitGitGadget, Jun 27, 2026
  15. 4/7 diff: extract a line-range diff helper for reuseMichael Montalbo via GitGitGadget, Jun 27, 2026
  16. 5/7 line-log: support diff stat formats with -LMichael Montalbo via GitGitGadget, Jun 27, 2026
  17. 6/7 diff: support --check with -L line rangesMichael Montalbo via GitGitGadget, Jun 27, 2026
  18. 7/7 diffcore-pickaxe: scope -G to the -L tracked rangeMichael Montalbo via GitGitGadget, Jun 27, 2026
  19. Michael MontalboJul 15, 2026
  20. 0/7 line-log: scope stat, check, and -G to -L line rangesMichael Montalbo via GitGitGadget, Sep 3, 2026
  21. 1/7 diff: rename line-range filter struct and clarify fieldsMichael Montalbo via GitGitGadget, Sep 3, 2026
  22. 2/7 diff: simplify the line-range filter by classifying removals immediatelyMichael Montalbo via GitGitGadget, Sep 3, 2026
  23. 3/7 diff: emit -L hunk headers via xdiff's formatterMichael Montalbo via GitGitGadget, Sep 3, 2026
  24. 4/7 diff: extract a line-range diff helper for reuseMichael Montalbo via GitGitGadget, Sep 3, 2026
  25. 5/7 diff: support stat formats with -LMichael Montalbo via GitGitGadget, Sep 3, 2026
  26. 6/7 diff: support --check with -L line rangesMichael Montalbo via GitGitGadget, Sep 3, 2026
  27. 7/7 diffcore-pickaxe: limit -G to the -L tracked rangeMichael Montalbo via GitGitGadget, Sep 3, 2026

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.