]> source.dussan.org Git - jgit.git/commitdiff
NameRevCommand: Use ~ notation for first parents of merges 59/11159/1
authorDave Borowitz <dborowitz@google.com>
Thu, 14 Mar 2013 16:35:00 +0000 (09:35 -0700)
committerDave Borowitz <dborowitz@google.com>
Thu, 14 Mar 2013 16:35:00 +0000 (09:35 -0700)
Prefer ~(N+1) to ^1~N. Although both are correct, the former is
cleaner and matches "git name-rev".

Change-Id: I772001a219e5eb346f5552c92e6d98c70b2cfa98

org.eclipse.jgit.test/tst/org/eclipse/jgit/api/NameRevCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/api/NameRevCommand.java

index f67d669316ccdfdc07953e7e252b5852046fa64e..26dc2d05a62a02a70f73edf6656f12e802772870 100644 (file)
@@ -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
index 073802db48098317661264fc39bfa5a74ea285bb..2397636f3b1345f121612a9d7679a9dc6e7cfe89 100644 (file)
@@ -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 {