Re: [PATCH 2/5] Treat D/F conflict entry more carefully in unpack-trees.c::threeway_merge()

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH 2/5] Treat D/F conflict entry more carefully in unpack-trees.c::threeway_merge()

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:03

Daniel Barkalow [off-list ref] writes:
On Sat, 7 Apr 2007, Junio C Hamano wrote:
quoted
This fixes three buglets in threeway_merge() regarding D/F
conflict entries.

* After finishing with path D and handling path D/F, some stages
  have D/F conflict entry which are obviously non-NULL.  For the
  purpose of determining if the path D/F is missing in the
  ancestor, they should not be taken into account.

* D/F conflict entry is a phony entry and does not record the
  path being processed, so do not pick up the name from there.
This bit is unnecessary, because the first bit means we treat D/F conflict 
as missing in that conditional, and don't count it as an entry at all, let 
alone one with a useful name.
I am not sure about what you mean by "first bit", but I added
this after noticing there was a case where the path was not
picked up from index/head/remote correctly because the "pick up
the path from ancestors, while we check for any_anc_missing and
no_anc_exists condition" loop at the beginning already set it to
point at stages[i]->name (which is an empty string "" name of
the df-conflict entry).

But I notice that "aggressive" codepath is the only thing that
wants to use the path (it uses it to check the working tree
status), so maybe we should move that path computation business
inside the aggressive codepath.

Re: [PATCH 2/5] Treat D/F conflict entry more carefully in unpack-trees.c::threeway_merge()

From: Daniel Barkalow <hidden>
Date: 2016-06-15 22:43:03

On Sat, 7 Apr 2007, Junio C Hamano wrote:
Daniel Barkalow [off-list ref] writes:
quoted
On Sat, 7 Apr 2007, Junio C Hamano wrote:
quoted
This fixes three buglets in threeway_merge() regarding D/F
conflict entries.

* After finishing with path D and handling path D/F, some stages
  have D/F conflict entry which are obviously non-NULL.  For the
  purpose of determining if the path D/F is missing in the
  ancestor, they should not be taken into account.

* D/F conflict entry is a phony entry and does not record the
  path being processed, so do not pick up the name from there.
This bit is unnecessary, because the first bit means we treat D/F conflict 
as missing in that conditional, and don't count it as an entry at all, let 
alone one with a useful name.
I am not sure about what you mean by "first bit"
Your first bullet point. You must have added the check to the path line 
before you added the same check to the condition a few lines above, making 
this check no longer necessary.

                if (!stages[i] || stages[i] == o->df_conflict_entry)
                        any_anc_missing = 1;
                else {

If we get here, stages[i] != o->df_conflict_entry...

                        if (!path && stages[i] != o->df_conflict_entry)
                                path = stages[i]->name;
                        no_anc_exists = 0;
                }

So you don't need the second check if you've got the first one, and the 
first one makes more sense anyway; for the purposes of this entire 
section, we want df_conflict_entry to count as missing, and we don't look 
at the paths of missing entries regardless of whether they're specially 
marked.

	-Daniel
*This .sig left intentionally blank*
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help