merge-recursive: fix assumption that head tree being merged is HEAD
`git merge-recursive` does a three-way merge between user-specified trees base, head, and remote. Since the user is allowed to specify head, we can not necesarily assume that head == HEAD. Modify index_has_changes() to take an extra argument specifying the tree to compare against. If NULL, it will compare to HEAD. We then use this from merge-recursive to make sure we compare to the user-specified head. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
92702392ce
commit
e1f8694f33
12
read-cache.c
12
read-cache.c
@ -1986,22 +1986,26 @@ int unmerged_index(const struct index_state *istate)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int index_has_changes(const struct index_state *istate, struct strbuf *sb)
|
||||
int index_has_changes(const struct index_state *istate,
|
||||
struct tree *tree,
|
||||
struct strbuf *sb)
|
||||
{
|
||||
struct object_id head;
|
||||
struct object_id cmp;
|
||||
int i;
|
||||
|
||||
if (istate != &the_index) {
|
||||
BUG("index_has_changes cannot yet accept istate != &the_index; do_diff_cache needs updating first.");
|
||||
}
|
||||
if (!get_oid_tree("HEAD", &head)) {
|
||||
if (tree)
|
||||
cmp = tree->object.oid;
|
||||
if (tree || !get_oid_tree("HEAD", &cmp)) {
|
||||
struct diff_options opt;
|
||||
|
||||
diff_setup(&opt);
|
||||
opt.flags.exit_with_status = 1;
|
||||
if (!sb)
|
||||
opt.flags.quick = 1;
|
||||
do_diff_cache(&head, &opt);
|
||||
do_diff_cache(&cmp, &opt);
|
||||
diffcore_std(&opt);
|
||||
for (i = 0; sb && i < diff_queued_diff.nr; i++) {
|
||||
if (i)
|
||||
|
Reference in New Issue
Block a user