Re: Null deref in recursive merge in df73af5f667a479764d2b2195cb0cb60b0b89e3d
From: Fredrik Kuivinen <hidden>
Date: 2016-06-15 22:47:16
On Thu, Jul 30, 2009 at 9:45 AM, Junio C Hamano[off-list ref] wrote:
Junio C Hamano [off-list ref] writes:quoted
The codepath saw that one branch renamed dev-ubuntu/ stuff to dev/ at that "unmerged" path, while the other branch added something else to the same path, and decided to add that at an alternative path, and the intent of that is so that it can safely resolve the "renamed" side to its final destination. The added update_file() call is about finishing that conflict resolution the code forgets to do.By the way, (I am CC'ing Fredrik, the author of the merge-recursive.py, the original implementation, even though I haven't seen him around here for a long time. Two "thieves" are also CC'ed), I think the way recursive strategy tries to handle rename/add and rename/rename conflicts by coming up with a temporary pathname is fundamentally wrong.
It was a long time ago I looked at the merge stuff (or any git code in fact) so I may have forgotten some things. However, as far as I can see your analysis is correct and the temporary pathname stuff can be avoided when the conflicts only involve files (and no directories). As you wrote, for D/F conflicts one need the temporary pathnames in order to build a tree which is used in the virtual ancestor. [Nice analysis of when temporary pathnames are needed and when they are not needed snipped.] - Fredrik PS. I am sorry for the late reply.