All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Kirill Smelkov <kirr@mns.spb.ru>
Cc: git@vger.kernel.org
Subject: Re: What's cooking in git.git (Mar 2014, #04; Thu, 20)
Date: Thu, 20 Mar 2014 15:31:35 -0700	[thread overview]
Message-ID: <xmqqsiqcwlh4.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <xmqq4n2sy3ux.fsf@gitster.dls.corp.google.com> (Junio C. Hamano's message of "Thu, 20 Mar 2014 14:09:10 -0700")

Junio C Hamano <gitster@pobox.com> writes:

> Quite a few topics are still outside 'pu' and I suspect some of the
> larger ones deserve deeper reviews to help moving them to 'next'.
> In principle, I'd prefer to keep any large topic that touch core
> part of the system cooking in 'next' for at least a full cycle, and
> the sooner they get merged to 'next', the better.  Help is greatly
> appreciated.
> ...
> * ks/tree-diff-nway (2014-03-04) 19 commits
>  - combine-diff: speed it up, by using multiparent diff tree-walker directly
>  - tree-diff: rework diff_tree() to generate diffs for multiparent cases as well
>  - Portable alloca for Git
>  - tree-diff: reuse base str(buf) memory on sub-tree recursion
>  - tree-diff: no need to call "full" diff_tree_sha1 from show_path()
>  - tree-diff: rework diff_tree interface to be sha1 based
>  - tree-diff: diff_tree() should now be static
>  - tree-diff: remove special-case diff-emitting code for empty-tree cases
>  - tree-diff: simplify tree_entry_pathcmp
>  - tree-diff: show_path prototype is not needed anymore
>  - tree-diff: rename compare_tree_entry -> tree_entry_pathcmp
>  - tree-diff: move all action-taking code out of compare_tree_entry()
>  - tree-diff: don't assume compare_tree_entry() returns -1,0,1
>  - tree-diff: consolidate code for emitting diffs and recursion in one place
>  - tree-diff: show_tree() is not needed
>  - tree-diff: no need to pass match to skip_uninteresting()
>  - tree-diff: no need to manually verify that there is no mode change for a path
>  - combine-diff: move changed-paths scanning logic into its own function
>  - combine-diff: move show_log_first logic/action out of paths scanning
>
>  Instead of running N pair-wise diff-trees when inspecting a
>  N-parent merge, find the set of paths that were touched by walking
>  N+1 trees in parallel.  These set of paths can then be turned into
>  N pair-wise diff-tree results to be processed through rename
>  detections and such.  And N=2 case nicely degenerates to the usual
>  2-way diff-tree, which is very nice.

So I started re-reading this series, and decided that it might be
easier to advance the topic piece-by-piece.  Will be merging up to
"consolidate code for emitting diffs" to 'next', after tweaking that
last commit a bit (see below).

Kirill Smelkov <kirr@mns.spb.ru> writes:

> Currently both compare_tree_entry() and show_path() invoke opt diff

s/show_path/show_entry/;

> callbacks (opt->add_remove() and opt->change()), and also they both have
> code which decides whether to recurse into sub-tree, and whether to emit
> a tree as separate entry if DIFF_OPT_TREE_IN_RECURSIVE is set.
>
> I.e. we have code duplication and logic scattered on two places.
>
> Let's consolidate it...
> ...
> +/* convert path, t1/t2 -> opt->diff_*() callbacks */
> +static void emit_diff(struct diff_options *opt, struct strbuf *path,
> +		      struct tree_desc *t1, struct tree_desc *t2)
> +{
> +	unsigned int mode1 = t1 ? t1->entry.mode : 0;
> +	unsigned int mode2 = t2 ? t2->entry.mode : 0;
> +
> +	if (mode1 && mode2) {
> +		opt->change(opt, mode1, mode2, t1->entry.sha1, t2->entry.sha1,
> +			1, 1, path->buf, 0, 0);

This is not too bad per-se, but it would have been even better if
this part was done as:

	if (t1 && t2) {
		opt->change(opt, t1->entry.mode1, t1->entry.mode2,
                	    t1->entry.sha1, t2->entry.sha1,
			    1, 1, path->buf, 0, 0);
	}

Then we do not have to rely on an extra convention, "'mode == 0'
means the entry is missing", in addition to what we already have,
i.e. "t == NULL means the entry is missing".

This is minor, so I will not squash such a change in while merging
to 'next', but we may want to revisit and fix it up as a follow up
patch once the series is settled.

> +	}
> +	else {

Style; I've merged these two lines into one, i.e.

	} else {

There was another instance of it in show_path(), which I also
tweaked.

Thanks.

  parent reply	other threads:[~2014-03-20 22:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-20 21:09 What's cooking in git.git (Mar 2014, #04; Thu, 20) Junio C Hamano
2014-03-20 22:03 ` Torsten Bögershausen
2014-03-20 22:36   ` Junio C Hamano
2014-03-21 20:58   ` Junio C Hamano
2014-03-21 21:33     ` Junio C Hamano
2014-03-20 22:31 ` Junio C Hamano [this message]
2014-03-21 17:20   ` kirr

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqsiqcwlh4.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=kirr@mns.spb.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.