From 9a363d1b266d24f3641dc1cc2aa14be54dcfa3cf Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Tue, 3 May 2016 15:29:50 -0400 Subject: [PATCH] rebase: handle no common ancestor for inmemory --- src/rebase.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/rebase.c b/src/rebase.c index 93a91545d..9f3b6ec6e 100644 --- a/src/rebase.c +++ b/src/rebase.c @@ -852,6 +852,7 @@ static int rebase_next_inmemory( git_tree *current_tree = NULL, *head_tree = NULL, *parent_tree = NULL; git_rebase_operation *operation; git_index *index = NULL; + unsigned int parent_count; int error; *out = NULL; @@ -859,10 +860,20 @@ static int rebase_next_inmemory( operation = git_array_get(rebase->operations, rebase->current); if ((error = git_commit_lookup(¤t_commit, rebase->repo, &operation->id)) < 0 || - (error = git_commit_tree(¤t_tree, current_commit)) < 0 || - (error = git_commit_parent(&parent_commit, current_commit, 0)) < 0 || - (error = git_commit_tree(&parent_tree, parent_commit)) < 0 || - (error = git_commit_tree(&head_tree, rebase->last_commit)) < 0 || + (error = git_commit_tree(¤t_tree, current_commit)) < 0) + goto done; + + if ((parent_count = git_commit_parentcount(current_commit)) > 1) { + giterr_set(GITERR_REBASE, "Cannot rebase a merge commit"); + error = -1; + goto done; + } else if (parent_count) { + if ((error = git_commit_parent(&parent_commit, current_commit, 0)) < 0 || + (error = git_commit_tree(&parent_tree, parent_commit)) < 0) + goto done; + } + + if ((error = git_commit_tree(&head_tree, rebase->last_commit)) < 0 || (error = git_merge_trees(&index, rebase->repo, parent_tree, head_tree, current_tree, &rebase->options.merge_options)) < 0) goto done; -- 2.39.5