RevCommit c2 = tr.commit().parent(c0).create();
RevCommit c3 = tr.commit().parent(c1).parent(c2).create();
tr.update("master", c3);
- assertOneResult("master^1~1", c0);
+ assertOneResult("master~2", c0);
+ }
+
+ @Test
+ public void onePathMergeSecondParent() throws Exception {
+ // 0--1-----4
+ // \-2--3-/
+ RevCommit c0 = tr.commit().create();
+ RevCommit c1 = tr.commit().parent(c0).create();
+ RevCommit c2 = tr.commit().parent(c0).create();
+ RevCommit c3 = tr.commit().parent(c2).create();
+ RevCommit c4 = tr.commit().parent(c1).parent(c3).create();
+ tr.update("master", c4);
+ assertOneResult("master^2", c3);
+ assertOneResult("master^2~1", c2);
}
@Test
break;
if (c.getCommitTime() < cutoff)
continue;
- boolean merge = c.getParentCount() > 1;
- long cost = c.cost + (merge ? MERGE_COST : 1);
+ long cost = c.cost + (c.getParentCount() > 1 ? MERGE_COST : 1);
for (int i = 0; i < c.getParentCount(); i++) {
NameRevCommit p = (NameRevCommit) walk.parseCommit(c.getParent(i));
if (p.tip == null || compare(c.tip, cost, p.tip, p.cost) < 0) {
- if (merge) {
+ if (i > 0) {
p.tip = c.format().append('^').append(i + 1).toString();
p.distance = 0;
} else {