Merge branch 'mv/maint-merge-fix' into maint

* mv/maint-merge-fix:
  merge: fix numerus bugs around "trivial merge" area
This commit is contained in:
Junio C Hamano 2008-08-24 14:29:37 -07:00
commit 97e5f4908d
4 changed files with 32 additions and 8 deletions

View File

@ -564,8 +564,6 @@ static int checkout_fast_forward(unsigned char *head, unsigned char *remote)
struct dir_struct dir;
struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
if (read_cache_unmerged())
die("you need to resolve your current index first");
refresh_cache(REFRESH_QUIET);
fd = hold_locked_index(lock_file, 1);
@ -651,13 +649,15 @@ static void add_strategies(const char *string, unsigned attr)
static int merge_trivial(void)
{
unsigned char result_tree[20], result_commit[20];
struct commit_list parent;
struct commit_list *parent = xmalloc(sizeof(struct commit_list *));
write_tree_trivial(result_tree);
printf("Wonderful.\n");
parent.item = remoteheads->item;
parent.next = NULL;
commit_tree(merge_msg.buf, result_tree, &parent, result_commit);
parent->item = lookup_commit(head);
parent->next = xmalloc(sizeof(struct commit_list *));
parent->next->item = remoteheads->item;
parent->next->next = NULL;
commit_tree(merge_msg.buf, result_tree, parent, result_commit);
finish(result_commit, "In-index merge");
drop_save();
return 0;
@ -743,6 +743,7 @@ static int evaluate_result(void)
int cnt = 0;
struct rev_info rev;
discard_cache();
if (read_cache() < 0)
die("failed to read the cache");
@ -776,7 +777,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
struct commit_list **remotes = &remoteheads;
setup_work_tree();
if (unmerged_cache())
if (read_cache_unmerged())
die("You are in the middle of a conflicted merge.");
/*
@ -1073,6 +1074,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
}
/* Automerge succeeded. */
discard_cache();
write_tree_trivial(result_tree);
automerge_was_ok = 1;
break;

View File

@ -269,6 +269,17 @@ test_expect_success 'merge-recursive result' '
'
test_expect_success 'fail if the index has unresolved entries' '
rm -fr [abcd] &&
git checkout -f "$c1" &&
test_must_fail git merge "$c5" &&
test_must_fail git merge "$c5" 2> out &&
grep "You are in the middle of a conflicted merge" out
'
test_expect_success 'merge-recursive remove conflict' '
rm -fr [abcd] &&

View File

@ -498,4 +498,13 @@ test_expect_success 'merge fast-forward in a dirty tree' '
test_debug 'gitk --all'
test_expect_success 'in-index merge' '
git reset --hard c0 &&
git merge --no-ff -s resolve c1 > out &&
grep "Wonderful." out &&
verify_parents $c0 $c1
'
test_debug 'gitk --all'
test_done

View File

@ -36,7 +36,9 @@ test_expect_success 'merge c1 to c2' '
git diff --exit-code &&
test -f c0.c &&
test -f c1.c &&
test -f c2.c
test -f c2.c &&
test 3 = $(git ls-tree -r HEAD | wc -l) &&
test 3 = $(git ls-files | wc -l)
'
test_expect_success 'merge c2 to c3 (fails)' '