You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

NameRevCommandTest.java 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. * Copyright (C) 2013, Google Inc. and others
  3. *
  4. * This program and the accompanying materials are made available under the
  5. * terms of the Eclipse Distribution License v. 1.0 which is available at
  6. * https://www.eclipse.org/org/documents/edl-v10.php.
  7. *
  8. * SPDX-License-Identifier: BSD-3-Clause
  9. */
  10. package org.eclipse.jgit.api;
  11. import static org.junit.Assert.assertEquals;
  12. import static org.junit.Assert.assertTrue;
  13. import java.util.Map;
  14. import org.eclipse.jgit.junit.RepositoryTestCase;
  15. import org.eclipse.jgit.junit.TestRepository;
  16. import org.eclipse.jgit.lib.ObjectId;
  17. import org.eclipse.jgit.lib.Repository;
  18. import org.eclipse.jgit.revwalk.RevCommit;
  19. import org.junit.Before;
  20. import org.junit.Test;
  21. public class NameRevCommandTest extends RepositoryTestCase {
  22. private TestRepository<Repository> tr;
  23. private Git git;
  24. @Override
  25. @Before
  26. public void setUp() throws Exception {
  27. super.setUp();
  28. tr = new TestRepository<>(db);
  29. git = new Git(db);
  30. }
  31. @Test
  32. public void nameExact() throws Exception {
  33. RevCommit c = tr.commit().create();
  34. tr.update("master", c);
  35. assertOneResult("master", c);
  36. }
  37. @Test
  38. public void prefix() throws Exception {
  39. RevCommit c = tr.commit().create();
  40. tr.update("refs/heads/master", c);
  41. tr.update("refs/tags/tag", c);
  42. assertOneResult("master", c);
  43. assertOneResult("master",
  44. git.nameRev().addPrefix("refs/heads/").addPrefix("refs/tags/"),
  45. c);
  46. assertOneResult("tag",
  47. git.nameRev().addPrefix("refs/tags/").addPrefix("refs/heads/"),
  48. c);
  49. }
  50. @Test
  51. public void ref() throws Exception {
  52. RevCommit c = tr.commit().create();
  53. tr.update("refs/heads/master", c);
  54. tr.update("refs/tags/tag", c);
  55. assertOneResult("master",
  56. git.nameRev().addRef(db.exactRef("refs/heads/master")), c);
  57. assertOneResult("tag",
  58. git.nameRev().addRef(db.exactRef("refs/tags/tag")), c);
  59. }
  60. @Test
  61. public void annotatedTags() throws Exception {
  62. RevCommit c = tr.commit().create();
  63. tr.update("refs/heads/master", c);
  64. tr.update("refs/tags/tag1", c);
  65. tr.update("refs/tags/tag2", tr.tag("tag2", c));
  66. assertOneResult("tag2", git.nameRev().addAnnotatedTags(), c);
  67. }
  68. @Test
  69. public void annotatedTagsNoResult() throws Exception {
  70. RevCommit c = tr.commit().create();
  71. tr.update("refs/heads/master", c);
  72. tr.update("refs/tags/tag1", c);
  73. tr.update("refs/tags/tag2", c);
  74. Map<ObjectId, String> result = git.nameRev()
  75. .add(c)
  76. .addAnnotatedTags()
  77. .call();
  78. assertTrue(result.toString(), result.isEmpty());
  79. }
  80. @Test
  81. public void simpleAncestor() throws Exception {
  82. // 0--1--2
  83. RevCommit c0 = tr.commit().create();
  84. RevCommit c1 = tr.commit().parent(c0).create();
  85. RevCommit c2 = tr.commit().parent(c1).create();
  86. tr.update("master", c2);
  87. Map<ObjectId, String> result = git.nameRev().add(c0).add(c1).add(c2).call();
  88. assertEquals(3, result.size());
  89. assertEquals("master~2", result.get(c0));
  90. assertEquals("master~1", result.get(c1));
  91. assertEquals("master", result.get(c2));
  92. }
  93. @Test
  94. public void multiplePathsNoMerge() throws Exception {
  95. // 0--1 <- master
  96. // \-2--3 <- branch
  97. RevCommit c0 = tr.commit().create();
  98. RevCommit c1 = tr.commit().parent(c0).create();
  99. RevCommit c2 = tr.commit().parent(c0).create();
  100. RevCommit c3 = tr.commit().parent(c2).create();
  101. tr.update("master", c1);
  102. tr.update("branch", c3);
  103. assertOneResult("master~1", c0);
  104. }
  105. @Test
  106. public void onePathMerge() throws Exception {
  107. // 0--1--3
  108. // \-2-/
  109. RevCommit c0 = tr.commit().create();
  110. RevCommit c1 = tr.commit().parent(c0).create();
  111. RevCommit c2 = tr.commit().parent(c0).create();
  112. RevCommit c3 = tr.commit().parent(c1).parent(c2).create();
  113. tr.update("master", c3);
  114. assertOneResult("master~2", c0);
  115. }
  116. @Test
  117. public void onePathMergeSecondParent() throws Exception {
  118. // 0--1-----4
  119. // \-2--3-/
  120. RevCommit c0 = tr.commit().create();
  121. RevCommit c1 = tr.commit().parent(c0).create();
  122. RevCommit c2 = tr.commit().parent(c0).create();
  123. RevCommit c3 = tr.commit().parent(c2).create();
  124. RevCommit c4 = tr.commit().parent(c1).parent(c3).create();
  125. tr.update("master", c4);
  126. assertOneResult("master^2", c3);
  127. assertOneResult("master^2~1", c2);
  128. }
  129. @Test
  130. public void onePathMergeLongerFirstParentPath() throws Exception {
  131. // 0--1--2--4
  132. // \--3---/
  133. RevCommit c0 = tr.commit().create();
  134. RevCommit c1 = tr.commit().parent(c0).create();
  135. RevCommit c2 = tr.commit().parent(c1).create();
  136. RevCommit c3 = tr.commit().parent(c0).create();
  137. RevCommit c4 = tr.commit().parent(c2).parent(c3).create();
  138. tr.update("master", c4);
  139. assertOneResult("master^2", c3);
  140. assertOneResult("master~3", c0);
  141. }
  142. @Test
  143. public void multiplePathsSecondParent() throws Exception {
  144. // 0--...--2
  145. // \--1--/
  146. RevCommit c0 = tr.commit().create();
  147. RevCommit c1 = tr.commit().parent(c0).create();
  148. RevCommit c = c0;
  149. int mergeCost = 5;
  150. for (int i = 0; i < mergeCost; i++) {
  151. c = tr.commit().parent(c).create();
  152. }
  153. RevCommit c2 = tr.commit().parent(c).parent(c1).create();
  154. tr.update("master", c2);
  155. assertOneResult("master^2~1", git.nameRev().setMergeCost(mergeCost), c0);
  156. }
  157. private static void assertOneResult(String expected, NameRevCommand nameRev,
  158. ObjectId id) throws Exception {
  159. Map<ObjectId, String> result = nameRev.add(id).call();
  160. assertEquals(1, result.size());
  161. assertEquals(expected, result.get(id));
  162. }
  163. private void assertOneResult(String expected, ObjectId id) throws Exception {
  164. assertOneResult(expected, git.nameRev(), id);
  165. }
  166. }