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

Re: [PATCH 05/10] diff.c: reintroduce diff_flush_patch for all files

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 13, 2016, 00:05 UTC
Message-ID
<xmqqsht4wtns.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1473572530-25764-6-git-send-email-stefanbeller@gmail.com>
Stefan Beller <stefanbeller@gmail.com> writes:
> From: Stefan Beller <sbeller@google.com>
>
> ---

This shows why 04/10 should have had the overall plan for these two steps. We want a short-and-sweet name "diff-flush-patch" to mean "flush all the queued diff elements" so rename the singleton one from diff-flush-patch to diff-flush-patch-filepair to make room in 04/10 and then introduce the "diff-flush-patch-all" in 05/10.

I just said with the above explanation the changes in 04/10 and 05/10 become undertandable, which is a bit different from being justifiable. "diff_flush_raw()", "diff_flush_stat()", etc. are _all_ about a single filepair. I'd rather see diff_flush_patch() to be also about a single filepair.

It may be helpful to have a helper that calls diff_flush_patch() for all filepairs in the queue, but can't that function get a new name instead? By definition, it will be called much less often than a pair-wise one, so it can afford to have a longer name.

diff_flush_patch_queue() or something, perhaps? I am not sure if it should be diff_flush_queue_patch(), or even

    diff_flush_queue(struct diff_options *o, diff_flush_fn fn);
where diff_flush_fn is 
    typedef void (*diff_flush_fn)(struct diff_filepair *p,
    			struct diff_options *o, void *other_data)

that can be used to flush the queue by calling any of these filepair-wise flush functions like diff_flush_{raw,stat,checkdiff,patch}.

This last approach might be overkill, but if you want to try it, you'd need a preparatory step to give an unused "void *other" to diff_flush_{raw,patch,checkdiff} as diff_flush_stat() is an oddball that needs an extra "accumulator" pointer. I actually wonder if that "diffstat" pointer should become part of "struct diff_options", though. Anyway.

Show 38 quoted lines
>  diff.c | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/diff.c b/diff.c
> index 85fb887..87b1bb2 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -4608,6 +4608,17 @@ void diff_warn_rename_limit(const char *varname, int needed, int degraded_cc)
>  		warning(rename_limit_advice, varname, needed);
>  }
>  
> +static void diff_flush_patch(struct diff_options *o)
> +{
> +	int i;
> +	struct diff_queue_struct *q = &diff_queued_diff;
> +	for (i = 0; i < q->nr; i++) {
> +		struct diff_filepair *p = q->queue[i];
> +		if (check_pair_status(p))
> +			diff_flush_patch_filepair(p, o);
> +	}
> +}
> +
>  void diff_flush(struct diff_options *options)
>  {
>  	struct diff_queue_struct *q = &diff_queued_diff;
> @@ -4702,11 +4713,7 @@ void diff_flush(struct diff_options *options)
>  			}
>  		}
>  
> -		for (i = 0; i < q->nr; i++) {
> -			struct diff_filepair *p = q->queue[i];
> -			if (check_pair_status(p))
> -				diff_flush_patch_filepair(p, options);
> -		}
> +		diff_flush_patch(options);
>  	}
>  
>  	if (output_format & DIFF_FORMAT_CALLBACK)
Previous: Stefan BellerNext: Stefan Beller
Message 10 of 21 in “Another preparatory series for rename detection”
  1. 00/10 Another preparatory series for rename detectionStefan Beller, Sep 11, 2016
  2. 01/10 diff: move line ending check into emit_hunk_headerStefan Beller, Sep 11, 2016
  3. Junio C HamanoSep 12, 2016
  4. 02/10 diff: emit_{add, del, context}_line to increase {pre,post}image line countStefan Beller, Sep 11, 2016
  5. Junio C HamanoSep 12, 2016
  6. 03/10 diff.c: drop tautologous condition in emit_line_0Stefan Beller, Sep 11, 2016
  7. Junio C HamanoSep 12, 2016
  8. Stefan BellerSep 16, 2016
  9. 05/10 diff.c: reintroduce diff_flush_patch for all filesStefan Beller, Sep 11, 2016
  10. Junio C HamanoSep 13, 2016
  11. 04/10 diff.c: rename diff_flush_patch to diff_flush_patch_filepairStefan Beller, Sep 11, 2016
  12. Junio C HamanoSep 12, 2016
  13. 07/10 diff.c: convert fn_out_consume to use emit_line_*Stefan Beller, Sep 11, 2016
  14. Junio C HamanoSep 13, 2016
  15. Stefan BellerSep 13, 2016
  16. 10/10 submodule.c: convert show_submodule_summary to use emit_line_fmtStefan Beller, Sep 11, 2016
  17. 09/10 diff.c: convert emit_rewrite_lines to use emit_line_0Stefan Beller, Sep 11, 2016
  18. 08/10 diff.c: convert emit_rewrite_diff to use emit_line_*Stefan Beller, Sep 11, 2016
  19. 06/10 diff.c: emit_line_0 can handle no colorStefan Beller, Sep 11, 2016
  20. Junio C HamanoSep 13, 2016
  21. Stefan BellerSep 13, 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.