summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjonathantanmy <jonathantanmy@google.com>2024-03-19 22:13:36 +0000
committerGerrit Code Review <support@gerrithub.io>2024-03-19 22:13:36 +0000
commit967c4946fa270435404447564e04ecdef291542b (patch)
tree36112e6f4a793773db164eed5d7b70a0dbcb9a2e
parent0acf07eb7a80f01ebfdb36bee9bfd566c8f9ce74 (diff)
parent72fa0a53e79265c11703ce848408ed328aed1e55 (diff)
downloadjgit-967c4946fa270435404447564e04ecdef291542b.tar.gz
jgit-967c4946fa270435404447564e04ecdef291542b.zip
Merge "TreeRevFilter: correct changedPathFilter usage for multi-paths inclusion"
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkCommitGraphTest.java30
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java7
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/TreeFilter.java2
3 files changed, 33 insertions, 6 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkCommitGraphTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkCommitGraphTest.java
index 8215a795b2..c2f8f10631 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkCommitGraphTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkCommitGraphTest.java
@@ -38,6 +38,7 @@ import org.eclipse.jgit.revwalk.filter.RevFilter;
import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.eclipse.jgit.treewalk.filter.AndTreeFilter;
import org.eclipse.jgit.treewalk.filter.PathFilter;
+import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
import org.eclipse.jgit.treewalk.filter.TreeFilter;
import org.junit.Test;
@@ -197,6 +198,35 @@ public class RevWalkCommitGraphTest extends RevWalkTestCase {
}
@Test
+ public void testChangedPathFilterWithMultiPaths() throws Exception {
+ RevCommit c1 = commitFile("file1", "1", "master");
+ RevCommit c2 = commitFile("file1", "2", "master");
+ RevCommit c3 = commitFile("file2", "3", "master");
+ RevCommit c4 = commitFile("file3", "4", "master");
+
+ enableAndWriteCommitGraph();
+
+ TreeRevFilter trf = new TreeRevFilter(rw,
+ PathFilterGroup.createFromStrings(List.of("file1", "file2")));
+ rw.markStart(rw.lookupCommit(c4));
+ rw.setRevFilter(trf);
+ assertEquals(c3, rw.next());
+ assertEquals(c2, rw.next());
+ assertEquals(c1, rw.next());
+ assertNull(rw.next());
+
+ // c2 and c3 has either file1 or file2, c1 did not use ChangedPathFilter
+ // since it has no parent
+ assertEquals(2, trf.getChangedPathFilterTruePositive());
+
+ // No false positives
+ assertEquals(0, trf.getChangedPathFilterFalsePositive());
+
+ // c4 does not match either file1 or file2
+ assertEquals(1, trf.getChangedPathFilterNegative());
+ }
+
+ @Test
public void testChangedPathFilterWithFollowFilter() throws Exception {
RevCommit c0 = commit(tree());
RevCommit c1 = commit(tree(file("file", blob("contents"))), c0);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java
index 43571a6868..99943b78e6 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java
@@ -139,11 +139,8 @@ public class TreeRevFilter extends RevFilter {
.getPathsBestEffort();
if (paths.isPresent()) {
changedPathFilterUsed = true;
- for (byte[] path : paths.get()) {
- if (!cpf.maybeContains(path)) {
- mustCalculateChgs = false;
- break;
- }
+ if (paths.get().stream().noneMatch(cpf::maybeContains)) {
+ mustCalculateChgs = false;
}
}
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/TreeFilter.java b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/TreeFilter.java
index 22d430bc27..a9066dc8f8 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/TreeFilter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/TreeFilter.java
@@ -210,7 +210,7 @@ public abstract class TreeFilter {
public abstract boolean shouldBeRecursive();
/**
- * If this filter checks that a specific set of paths have all been
+ * If this filter checks that at least one of the paths in a set has been
* modified, returns that set of paths to be checked against a changed path
* filter. Otherwise, returns empty.
*