git-commit-vandalism/builtin
Elijah Newren 40d71940b6 builtin/merge.c: fix a bug with trivial merges
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>
2016-04-12 18:33:59 -07:00
..
add.c Merge branch 'jc/add-u-A-default-to-top' into maint 2015-11-05 12:18:12 -08:00
am.c Merge branch 'jc/am-i-v-fix' into maint 2016-03-10 11:13:41 -08:00
annotate.c
apply.c apply: report patch skipping in verbose mode 2016-03-24 10:18:31 -07:00
archive.c
bisect--helper.c
blame.c Merge branch 'jk/tighten-alloc' into maint 2016-03-10 11:13:43 -08:00
branch.c config: rename git_config_set_or_die to git_config_set 2016-02-22 10:23:55 -08:00
bundle.c
cat-file.c cat-file: read batch stream with strbuf_getline() 2016-01-15 10:35:06 -08:00
check-attr.c give "nbuf" strbuf a more meaningful name 2016-02-01 13:43:02 -08:00
check-ignore.c give "nbuf" strbuf a more meaningful name 2016-02-01 13:43:02 -08:00
check-mailmap.c strbuf: introduce strbuf_getline_{lf,nul}() 2016-01-15 10:12:51 -08:00
check-ref-format.c use xmallocz to avoid size arithmetic 2016-02-22 14:51:09 -08:00
checkout-index.c checkout-index: disallow "--no-stage" option 2016-02-01 13:43:49 -08:00
checkout.c Merge branch 'nd/dwim-wildcards-as-pathspecs' into maint 2016-03-10 11:13:39 -08:00
clean.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
clone.c Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
column.c column: read lines with strbuf_getline() 2016-01-15 10:35:07 -08:00
commit-tree.c Convert struct object to object_id 2015-11-20 08:02:05 -05:00
commit.c Merge branch 'ss/commit-squash-msg' 2016-04-06 11:39:10 -07:00
config.c Merge branch 'jk/config-get-urlmatch' 2016-04-03 10:29:26 -07:00
count-objects.c
credential.c
describe.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
diff-files.c
diff-index.c
diff-tree.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
diff.c diff: activate diff.renames by default 2016-02-25 11:31:02 -08:00
fast-export.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
fetch-pack.c fetch-pack: fix object_id of exact sha1 2016-03-01 11:19:19 -08:00
fetch.c Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
fmt-merge-msg.c Merge branch 'rs/pop-commit' into maint 2015-12-11 11:14:13 -08:00
for-each-ref.c
fsck.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
gc.c Merge branch 'dk/gc-idx-wo-pack' into maint 2015-12-04 11:33:08 -08:00
get-tar-commit-id.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
grep.c Merge branch 'jk/tighten-alloc' into maint 2016-03-10 11:13:43 -08:00
hash-object.c Merge branch 'jk/options-cleanup' 2016-02-10 14:20:08 -08:00
help.c convert trivial cases to FLEX_ARRAY macros 2016-02-22 14:51:09 -08:00
index-pack.c Merge branch 'jc/index-pack' 2016-04-03 10:29:31 -07:00
init-db.c setup: set startup_info->have_repository more reliably 2016-03-06 17:18:16 -08:00
interpret-trailers.c interpret-trailers: add option for in-place editing 2016-01-14 12:22:17 -08:00
log.c diff: activate diff.renames by default 2016-02-25 11:31:02 -08:00
ls-files.c Merge branch 'jk/options-cleanup' 2016-02-10 14:20:08 -08:00
ls-remote.c ls-remote: add support for showing symrefs 2016-01-19 10:07:56 -08:00
ls-tree.c
mailinfo.c mailinfo: libify 2015-10-21 15:59:34 -07:00
mailsplit.c
merge-base.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
merge-file.c Merge branch 'jk/merge-file-exit-code' into maint 2015-11-03 15:32:41 -08:00
merge-index.c
merge-ours.c
merge-recursive.c
merge-tree.c use xmallocz to avoid size arithmetic 2016-02-22 14:51:09 -08:00
merge.c builtin/merge.c: fix a bug with trivial merges 2016-04-12 18:33:59 -07:00
mktag.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
mktree.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
mv.c use st_add and st_mult for allocation size computation 2016-02-22 14:51:09 -08:00
name-rev.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
notes.c Merge branch 'jk/notes-merge-from-anywhere' 2016-02-03 14:15:59 -08:00
pack-objects.c Merge branch 'jk/path-name-safety-2.6' into jk/path-name-safety-2.7 2016-03-16 10:42:32 -07:00
pack-redundant.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
pack-refs.c
patch-id.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
prune-packed.c
prune.c Merge branch 'jk/repository-extension' into maint 2015-11-03 15:32:25 -08:00
pull.c Merge branch 'jc/strbuf-getline' 2016-01-28 16:10:14 -08:00
push.c Merge branch 'mm/push-default-warning' 2016-02-26 13:37:25 -08:00
read-tree.c
receive-pack.c builtin/receive-pack.c: use parse_options API 2016-03-01 13:38:45 -08:00
reflog.c convert trivial cases to FLEX_ARRAY macros 2016-02-22 14:51:09 -08:00
remote-ext.c convert manual allocations to argv_array 2016-02-22 14:50:32 -08:00
remote-fd.c
remote.c Merge branch 'ps/config-error' 2016-02-26 13:37:19 -08:00
repack.c strbuf: introduce strbuf_getline_{lf,nul}() 2016-01-15 10:12:51 -08:00
replace.c Convert struct object to object_id 2015-11-20 08:02:05 -05:00
rerere.c
reset.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
rev-list.c Merge branch 'jk/path-name-safety-2.6' into jk/path-name-safety-2.7 2016-03-16 10:42:32 -07:00
rev-parse.c Merge branch 'jk/rev-parse-local-env-vars' 2016-04-03 10:29:27 -07:00
revert.c
rm.c Merge branch 'nd/ita-cleanup' into maint 2016-02-22 13:10:21 -08:00
send-pack.c send-pack: read list of refs with strbuf_getline() 2016-01-15 10:35:07 -08:00
shortlog.c Merge branch 'jk/shortlog' 2016-01-28 16:10:14 -08:00
show-branch.c Merge branch 'rs/show-branch-argv-array' into maint 2015-12-11 11:14:14 -08:00
show-ref.c show-ref: stop using PARSE_OPT_NO_INTERNAL_HELP 2015-11-20 08:02:07 -05:00
stripspace.c stripspace: call U+0020 a "space" instead of a "blank" 2016-01-29 16:02:34 -08:00
submodule--helper.c Merge branch 'jk/submodule-c-credential' 2016-04-06 11:39:12 -07:00
symbolic-ref.c symbolic-ref: propagate error code from create_symref() 2015-12-21 12:03:03 -08:00
tag.c tag: add the option to force signing of annotated tags 2016-03-22 15:13:40 -07:00
unpack-file.c
unpack-objects.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
update-index.c Merge branch 'jk/options-cleanup' 2016-02-10 14:20:08 -08:00
update-ref.c
update-server-info.c
upload-archive.c
var.c
verify-commit.c
verify-pack.c
verify-tag.c
worktree.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
write-tree.c