From: Junio C Hamano Date: Fri, 22 Dec 2017 20:48:38 +0000 (-0800) Subject: Merge branch 'ew/empty-merge-with-dirty-index-maint' into ew/empty-merge-with-dirty-index X-Git-Tag: v2.16.0-rc1~7^2 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/b6825b5c8e8b58943511f2576475accf1593486e Merge branch 'ew/empty-merge-with-dirty-index-maint' into ew/empty-merge-with-dirty-index * ew/empty-merge-with-dirty-index-maint: merge-recursive: avoid incorporating uncommitted changes in a merge move index_has_changes() from builtin/am.c to merge.c for reuse t6044: recursive can silently incorporate dirty changes in a merge --- b6825b5c8e8b58943511f2576475accf1593486e diff --cc merge.c index e5d796c9f2,b0714bc85e..195b578700 --- a/merge.c +++ b/merge.c @@@ -15,6 -17,37 +17,37 @@@ static const char *merge_argument(struc return EMPTY_TREE_SHA1_HEX; } + int index_has_changes(struct strbuf *sb) + { + struct object_id head; + int i; + + if (!get_oid_tree("HEAD", &head)) { + struct diff_options opt; + + diff_setup(&opt); - DIFF_OPT_SET(&opt, EXIT_WITH_STATUS); ++ opt.flags.exit_with_status = 1; + if (!sb) - DIFF_OPT_SET(&opt, QUICK); ++ opt.flags.quick = 1; + do_diff_cache(&head, &opt); + diffcore_std(&opt); + for (i = 0; sb && i < diff_queued_diff.nr; i++) { + if (i) + strbuf_addch(sb, ' '); + strbuf_addstr(sb, diff_queued_diff.queue[i]->two->path); + } + diff_flush(&opt); - return DIFF_OPT_TST(&opt, HAS_CHANGES) != 0; ++ return opt.flags.has_changes != 0; + } else { + for (i = 0; sb && i < active_nr; i++) { + if (i) + strbuf_addch(sb, ' '); + strbuf_addstr(sb, active_cache[i]->name); + } + return !!active_nr; + } + } + int try_merge_command(const char *strategy, size_t xopts_nr, const char **xopts, struct commit_list *common, const char *head_arg, struct commit_list *remotes)