Prefer ~(N+1) to ^1~N. Although both are correct, the former is cleaner and matches "git name-rev". Change-Id: I772001a219e5eb346f5552c92e6d98c70b2cfa98tags/v3.0.0.201305080800-m7
@@ -144,7 +144,21 @@ public class NameRevCommandTest extends RepositoryTestCase { | |||
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 |
@@ -147,12 +147,11 @@ public class NameRevCommand extends GitCommand<Map<ObjectId, String>> { | |||
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 { |