NameRevCommand: Use ~ notation for first parents of merges

Prefer ~(N+1) to ^1~N. Although both are correct, the former is
cleaner and matches "git name-rev".

Change-Id: I772001a219e5eb346f5552c92e6d98c70b2cfa98
This commit is contained in:
Dave Borowitz 2013-03-14 09:35:00 -07:00
parent d2a6c4b955
commit 8e2a24a3b6
2 changed files with 17 additions and 4 deletions

View File

@ -144,7 +144,21 @@ public void onePathMerge() throws Exception {
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

View File

@ -147,12 +147,11 @@ public Map<ObjectId, String> call() throws GitAPIException {
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 {