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

Re: [RFC/PATCH 2/3] simplify-merges: never remove all TREESAME parents

From
Kevin Bracey <kevin@bracey.fi>
Date
Apr 28, 2013, 07:10 UTC
Message-ID
<517CCB57.3060807@bracey.fi>
In-Reply-To
<7vli83shk0.fsf@alter.siamese.dyndns.org>
On 28/04/2013 02:02, Junio C Hamano wrote:
Show 6 quoted lines
> Kevin Bracey <kevin@bracey.fi> writes:
>
>> In the event of an odd merge, we may find ourselves TREESAME to
>> apparently redundant parents. Prevent simplify_merges() from removing
>> every TREESAME parent - in the event of such a merge it's useful to see
>> where we came actually from came.
"came from" :)
Show 7 quoted lines
>>
>> @@ -2106,8 +2106,32 @@ static int remove_marked_parents(struct rev_info *revs, struct commit *commit)
>>   {
>>   	struct treesame_state *ts = lookup_decoration(&revs->treesame, &commit->object);
>>   	struct commit_list **pp, *p;
>> +	struct commit *su = NULL, *sm = NULL;
> What do "su" and "sm" stand for?
"same, unmarked" and "same, marked" were what was in my head.
> Could you explain here a bit more the reason why we do not want to
> remove them and why "-s ours" is so significant that it deserves to
> be singled out?  And why randomly picking one that is redundant
> (because it is an ancestor of some other parent) is an improvement?

I feel it's consistent with the default non-full-history behaviour. The parent that we choose not to remove is the same one that the default log with "simplify_history==1" would have followed: the first parent we are TREESAME to. Or at least that's the intent. So this parent would normally be singled out, and it's not an arbitrary (or "random") choice.

It feels wrong to me that --full-history --simplify-merges could produce a disjoint history from the default. I think it should include the default simple history. If this code triggered, it should produce something quite distinctive in a graphical view, which will help find odd/broken merges.

Show 6 quoted lines
> The "remove-redundant" logic first marks commits that are ancestors
> of other commits in the original set, without taking treesame[] into
> account at all.  If the final objective of the code is to keep paths
> that consists of non-treesame[] commits, perhaps the logic needs to
> be changed to reject non-treesame[] commits that are ancestors of
> other non-treesame[] commits, or something?

Maybe - the main simplify_merges machinery could certainly make use of the treesame[] information, and one of the motivations for introducing it was to open up the possibility of richer analysis. I'll spend a little time to think about whether we want a more fundamental change to the original scan.

But this patch as it stands was an "easy" change to make with clearly limited scope and relatively little risk - I specifically wanted just to include our default "simple" parent.

Kevin
Previous: Junio C HamanoNext: Junio C Hamano
Message 17 of 25 in “Locating merge that dropped a change”
  1. Kevin BraceyApr 9, 2013
  2. Kevin BraceyApr 11, 2013
  3. Junio C HamanoApr 11, 2013
  4. Make --full-history consider more mergesKevin Bracey, Apr 22, 2013
  5. Junio C HamanoApr 22, 2013
  6. Kevin BraceyApr 23, 2013
  7. Junio C HamanoApr 24, 2013
  8. Junio C HamanoApr 25, 2013
  9. Kevin BraceyApr 25, 2013
  10. Junio C HamanoApr 25, 2013
  11. Kevin BraceyApr 25, 2013
  12. Junio C HamanoApr 25, 2013
  13. Kevin BraceyApr 26, 2013
  14. 1/3 revision.c: tighten up TREESAME handling of mergesKevin Bracey, Apr 26, 2013
  15. 2/3 simplify-merges: never remove all TREESAME parentsKevin Bracey, Apr 26, 2013
  16. Junio C HamanoApr 27, 2013
  17. Kevin BraceyApr 28, 2013
  18. Junio C HamanoApr 28, 2013
  19. 3/3 simplify-merges: drop merge from irrelevant side branchKevin Bracey, Apr 26, 2013
  20. Junio C HamanoApr 27, 2013
  21. David AguilarApr 27, 2013
  22. Kevin BraceyApr 28, 2013
  23. Junio C HamanoApr 28, 2013
  24. Kevin BraceyApr 29, 2013
  25. Junio C HamanoApr 29, 2013

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.