diff options
author | Elijah Newren <newren@gmail.com> | 2016-04-09 23:13:40 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-04-12 18:33:59 -0700 |
commit | 40d71940b6a0dadb7873cce614992f1d71fcdfbd (patch) | |
tree | c98096617617c63ff6df5a83fdbdf5ecdbd14134 /replace_object.c | |
parent | ef7d3621d76fe210827698cba79c737906048191 (diff) | |
download | git-en/merge-trivial-fix.tar.gz |
builtin/merge.c: fix a bug with trivial mergesen/merge-trivial-fix
If read_tree_trivial() succeeds and produces a tree that is already
in the object store, then the index is not written to disk, leaving
it out-of-sync with both HEAD and the working tree.
In order to write the index back out to disk after a merge,
write_index_locked() needs to be called. For most merge strategies, this
is done from try_merge_strategy(). For fast forward updates, this is
done from checkout_fast_forward(). When trivial merges work, the call to
write_index_locked() is buried a little deeper:
merge_trivial()
-> write_tree_trivial()
-> write_cache_as_tree()
-> write_index_as_tree()
-> write_locked_index()
However, it is only called when !cache_tree_fully_valid(), which is how
this bug is triggered. But that also shows why this bug doesn't affect
any other merge strategies or cases.
Add a direct call to write_index_locked() from merge_trivial() to fix
this issue. Since the indirect call to write_locked_index() was
conditional on cache_tree_fully_valid(), it won't be written twice.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'replace_object.c')
0 files changed, 0 insertions, 0 deletions