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.

TreeRevFilterTest.java 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*
  2. * Copyright (C) 2014, 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.revwalk;
  11. import static org.junit.Assert.assertEquals;
  12. import static org.junit.Assert.assertNull;
  13. import org.eclipse.jgit.revwalk.filter.OrRevFilter;
  14. import org.eclipse.jgit.revwalk.filter.RevFilter;
  15. import org.eclipse.jgit.revwalk.filter.SkipRevFilter;
  16. import org.eclipse.jgit.treewalk.filter.TreeFilter;
  17. import org.junit.Test;
  18. public class TreeRevFilterTest extends RevWalkTestCase {
  19. private RevFilter treeRevFilter() {
  20. return new TreeRevFilter(rw, TreeFilter.ANY_DIFF);
  21. }
  22. @Test
  23. public void testStringOfPearls_FilePath1()
  24. throws Exception {
  25. RevCommit a = commit(tree(file("d/f", blob("a"))));
  26. RevCommit b = commit(tree(file("d/f", blob("a"))), a);
  27. RevCommit c = commit(tree(file("d/f", blob("b"))), b);
  28. rw.setRevFilter(treeRevFilter());
  29. markStart(c);
  30. assertCommit(c, rw.next());
  31. assertEquals(1, c.getParentCount());
  32. assertCommit(b, c.getParent(0));
  33. assertCommit(a, rw.next()); // b was skipped
  34. assertEquals(0, a.getParentCount());
  35. assertNull(rw.next());
  36. }
  37. @Test
  38. public void testStringOfPearls_FilePath2() throws Exception {
  39. RevCommit a = commit(tree(file("d/f", blob("a"))));
  40. RevCommit b = commit(tree(file("d/f", blob("a"))), a);
  41. RevCommit c = commit(tree(file("d/f", blob("b"))), b);
  42. RevCommit d = commit(tree(file("d/f", blob("b"))), c);
  43. rw.setRevFilter(treeRevFilter());
  44. markStart(d);
  45. // d was skipped
  46. assertCommit(c, rw.next());
  47. assertEquals(1, c.getParentCount());
  48. assertCommit(b, c.getParent(0));
  49. // b was skipped
  50. assertCommit(a, rw.next());
  51. assertEquals(0, a.getParentCount());
  52. assertNull(rw.next());
  53. }
  54. @Test
  55. public void testStringOfPearls_DirPath2() throws Exception {
  56. RevCommit a = commit(tree(file("d/f", blob("a"))));
  57. RevCommit b = commit(tree(file("d/f", blob("a"))), a);
  58. RevCommit c = commit(tree(file("d/f", blob("b"))), b);
  59. RevCommit d = commit(tree(file("d/f", blob("b"))), c);
  60. rw.setRevFilter(treeRevFilter());
  61. markStart(d);
  62. // d was skipped
  63. assertCommit(c, rw.next());
  64. assertEquals(1, c.getParentCount());
  65. assertCommit(b, c.getParent(0));
  66. // b was skipped
  67. assertCommit(a, rw.next());
  68. assertEquals(0, a.getParentCount());
  69. assertNull(rw.next());
  70. }
  71. @Test
  72. public void testStringOfPearls_FilePath3() throws Exception {
  73. RevCommit a = commit(tree(file("d/f", blob("a"))));
  74. RevCommit b = commit(tree(file("d/f", blob("a"))), a);
  75. RevCommit c = commit(tree(file("d/f", blob("b"))), b);
  76. RevCommit d = commit(tree(file("d/f", blob("b"))), c);
  77. RevCommit e = commit(tree(file("d/f", blob("b"))), d);
  78. RevCommit f = commit(tree(file("d/f", blob("b"))), e);
  79. RevCommit g = commit(tree(file("d/f", blob("b"))), f);
  80. RevCommit h = commit(tree(file("d/f", blob("b"))), g);
  81. RevCommit i = commit(tree(file("d/f", blob("c"))), h);
  82. rw.setRevFilter(treeRevFilter());
  83. markStart(i);
  84. assertCommit(i, rw.next());
  85. assertEquals(1, i.getParentCount());
  86. assertCommit(h, i.getParent(0));
  87. // h..d was skipped
  88. assertCommit(c, rw.next());
  89. assertEquals(1, c.getParentCount());
  90. assertCommit(b, c.getParent(0));
  91. // b was skipped
  92. assertCommit(a, rw.next());
  93. assertEquals(0, a.getParentCount());
  94. assertNull(rw.next());
  95. }
  96. @Test
  97. public void testPathFilterOrOtherFilter() throws Exception {
  98. RevFilter pathFilter = treeRevFilter();
  99. RevFilter skipFilter = SkipRevFilter.create(1);
  100. RevFilter orFilter = OrRevFilter.create(skipFilter, pathFilter);
  101. RevCommit a = parseBody(commit(5, tree(file("d/f", blob("a")))));
  102. RevCommit b = parseBody(commit(5, tree(file("d/f", blob("a"))), a));
  103. RevCommit c = parseBody(commit(5, tree(file("d/f", blob("b"))), b));
  104. // Path filter matches c, a.
  105. rw.setRevFilter(pathFilter);
  106. markStart(c);
  107. assertCommit(c, rw.next());
  108. assertCommit(a, rw.next());
  109. // Skip filter matches b, a.
  110. rw.reset();
  111. rw.setRevFilter(skipFilter);
  112. markStart(c);
  113. assertCommit(b, rw.next());
  114. assertCommit(a, rw.next());
  115. // (Path OR Skip) matches c, b, a.
  116. rw.reset();
  117. rw.setRevFilter(orFilter);
  118. markStart(c);
  119. assertCommit(c, rw.next());
  120. assertCommit(b, rw.next());
  121. assertCommit(a, rw.next());
  122. }
  123. }