Browse Source

reduce_heads(): thinkofix

When comparing two commit objects for equality, it is sufficient to
compare their in-core pointers because the object layer guarantees the
uniqueness.  However, comparing pointers to two "struct commit_list"
instances that point at the same commit does not make any sense.

Spotted by Sverre Hvammen Johansen who wrote an additional test to expose
the problem, fixed by Miklos Vajna.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Sverre Hvammen Johansen 17 years ago committed by Junio C Hamano
parent
commit
3d1dd4728b
  1. 2
      commit.c
  2. 11
      t/t7600-merge.sh

2
commit.c

@ -747,7 +747,7 @@ struct commit_list *reduce_heads(struct commit_list *heads) @@ -747,7 +747,7 @@ struct commit_list *reduce_heads(struct commit_list *heads)

num_other = 0;
for (q = heads; q; q = q->next) {
if (p == q)
if (p->item == q->item)
continue;
other[num_other++] = q->item;
}

11
t/t7600-merge.sh

@ -479,4 +479,15 @@ test_expect_success 'merge log message' ' @@ -479,4 +479,15 @@ test_expect_success 'merge log message' '

test_debug 'gitk --all'

test_expect_success 'merge c1 with c0, c2, c0, and c1' '
git reset --hard c1 &&
git config branch.master.mergeoptions "" &&
test_tick &&
git merge c0 c2 c0 c1 &&
verify_merge file result.1-5 &&
verify_parents $c1 $c2
'

test_debug 'gitk --all'

test_done

Loading…
Cancel
Save