summaryrefslogtreecommitdiffstats
path: root/merge-recursive.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2018-08-02 15:30:44 -0700
committerJunio C Hamano <gitster@pobox.com>2018-08-02 15:30:45 -0700
commitc18ac30e9ebcf7b7e2fbd992744e63c71089a12a (patch)
tree5eb5c1185b0d8bce39356abd801f0a9d7bf802ab /merge-recursive.c
parent2b9afea37207323d629953c639542c0e4c87e484 (diff)
parent55f39cf7551bd468065306328efdb78933b36b69 (diff)
downloadgit-c18ac30e9ebcf7b7e2fbd992744e63c71089a12a.tar.gz
git-c18ac30e9ebcf7b7e2fbd992744e63c71089a12a.tar.xz
Merge branch 'en/dirty-merge-fixes'
The recursive merge strategy did not properly ensure there was no change between HEAD and the index before performing its operation, which has been corrected. * en/dirty-merge-fixes: merge: fix misleading pre-merge check documentation merge-recursive: enforce rule that index matches head before merging t6044: add more testcases with staged changes before a merge is invoked merge-recursive: fix assumption that head tree being merged is HEAD merge-recursive: make sure when we say we abort that we actually abort t6044: add a testcase for index matching head, when head doesn't match HEAD t6044: verify that merges expected to abort actually abort index_has_changes(): avoid assuming operating on the_index read-cache.c: move index_has_changes() from merge.c
Diffstat (limited to 'merge-recursive.c')
-rw-r--r--merge-recursive.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/merge-recursive.c b/merge-recursive.c
index 07d792fd1..1446e92be 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -3281,6 +3281,13 @@ int merge_trees(struct merge_options *o,
struct tree **result)
{
int code, clean;
+ struct strbuf sb = STRBUF_INIT;
+
+ if (!o->call_depth && index_has_changes(&the_index, head, &sb)) {
+ err(o, _("Your local changes to the following files would be overwritten by merge:\n %s"),
+ sb.buf);
+ return -1;
+ }
if (o->subtree_shift) {
merge = shift_tree_object(head, merge, o->subtree_shift);
@@ -3288,13 +3295,6 @@ int merge_trees(struct merge_options *o,
}
if (oid_eq(&common->object.oid, &merge->object.oid)) {
- struct strbuf sb = STRBUF_INIT;
-
- if (!o->call_depth && index_has_changes(&sb)) {
- err(o, _("Dirty index: cannot merge (dirty: %s)"),
- sb.buf);
- return 0;
- }
output(o, 0, _("Already up to date!"));
*result = head;
return 1;