[PATCH] Fix in-index merge.
There were 3 issues:
1) We need read_cache() before using unpack_trees().
2) commit_tree() frees the parents, so we need to malloc them.
3) The current HEAD was missing from the parent list.
Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
---
On Fri, Aug 22, 2008 at 08:36:39AM +0200, Paolo Bonzini <bonzini@gnu.org> wrote:
> I had already posted this bug report yesterday but it was hidden in a
> cover
> letter at
> http://permalink.gmane.org/gmane.comp.version-control.git/93143
This should fix the issue.
builtin-merge.c | 11 +++++++----
t/t7607-merge-inindex.sh | 29 +++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 4 deletions(-)
create mode 100755 t/t7607-merge-inindex.sh
diff --git a/builtin-merge.c b/builtin-merge.c
index a201c66..dffe4b8 100644
--- a/builtin-merge.c
+++ b/builtin-merge.c
@@ -469,6 +469,7 @@ static int read_tree_trivial(unsigned char *common, unsigned char *head,
struct tree_desc t[MAX_UNPACK_TREES];
struct unpack_trees_options opts;
+ read_cache();
memset(&opts, 0, sizeof(opts));
opts.head_idx = 2;
opts.src_index = &the_index;
@@ -651,13 +652,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;
diff --git a/t/t7607-merge-inindex.sh b/t/t7607-merge-inindex.sh
new file mode 100755
index 0000000..98b778f
--- /dev/null
+++ b/t/t7607-merge-inindex.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+test_description='git-merge
+
+Testing in-index merge.'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+ echo a > a &&
+ git add a &&
+ git commit -m a &&
+ git tag a &&
+ git checkout -b branch
+ echo b > b &&
+ git add b &&
+ git commit -m b &&
+ git tag b
+'
+
+test_expect_success 'in-index merge' '
+ git checkout master &&
+ git merge --no-ff -s resolve branch > out &&
+ grep Wonderful. out &&
+ test "$(git rev-parse a)" = "$(git rev-parse HEAD^1)" &&
+ test "$(git rev-parse b)" = "$(git rev-parse HEAD^2)"
+'
+
+test_done
--
1.6.0.rc3.17.gc14c8.dirty