From: Junio C Hamano Date: Sun, 24 Aug 2008 01:58:37 GMT Subject: Re: [PATCH 1/2] merge: fix numerus bugs around "trivial merge" area Message-ID: <7vtzdbuqb6.fsf@gitster.siamese.dyndns.org> In-Reply-To: <7vfxovy06u.fsf_-_@gitster.siamese.dyndns.org> Junio C Hamano writes: > The primary logic of the merge, however, had an assumption that the > process never read the index in-core, and write_cache_as_tree() call it > makes from write_tree_trivial() will always read from the on-disk index > the strategies created and write it out as a tree. This assumption is now > broken by the above fix. It now calls discard_cache() before calling > write_tree_trivial() when it wants to write the on-disk index as a tree to > fix this issue. By the way, in the medium term, if we are serious about making an internal call to merge_recursive() from cmd_merge(), I think we may be better off making it the responsibility for try_merge_strategy() to leave an committable state in the in-core index (aka "the_index") when they return with 0 (success) status. After calling external ones via the run_command interface, it should do a read_cache() (after calling discard_cache() if needed); if it calls merge_recursive(), hopefully you already have the committable state in the in-core index. That way, when automerge succeeds, write_tree_trivial() can write that in-core index out and create the tree object to be committed. The callchain to use merge_recursive() can avoid having to write to the on-disk index, read it again and write out the tree from it.