diff options
author | Ivan Frade <ifrade@google.com> | 2024-02-21 15:28:03 -0800 |
---|---|---|
committer | Ivan Frade <ifrade@google.com> | 2024-02-21 15:28:03 -0800 |
commit | f11d1365faad2dcac73570f53f1e05e86f058cde (patch) | |
tree | 4e0e403e338655bf2828e6379a8e89880690a649 | |
parent | 90674ab152102b16081bd109d7f72bc37c4040ab (diff) | |
download | jgit-f11d1365faad2dcac73570f53f1e05e86f058cde.tar.gz jgit-f11d1365faad2dcac73570f53f1e05e86f058cde.zip |
Revert "StartGenerator: Fix parent rewrite with non-default RevFilter"
This reverts commit db5ce6b5c24408ae27eb6fa0b6289d51b129baeb.
Reason to revert: This change utilizes the RewriteGenerator even in
absence of a path, making the walk lengthy.
Change-Id: I5ffa6e8fead328191348c1e46828bf8c75ae1e42
4 files changed, 24 insertions, 123 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/TreeRevFilterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/TreeRevFilterTest.java index f67a623ff6..298facfd15 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/TreeRevFilterTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/TreeRevFilterTest.java @@ -21,7 +21,6 @@ import org.junit.Test; public class TreeRevFilterTest extends RevWalkTestCase { private RevFilter treeRevFilter() { - rw.setRewriteParents(false); return new TreeRevFilter(rw, TreeFilter.ANY_DIFF); } diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/TreeRevFilterWithRewriteParentsTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/TreeRevFilterWithRewriteParentsTest.java deleted file mode 100644 index 100f2e4164..0000000000 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/TreeRevFilterWithRewriteParentsTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2023, Google LLC and others - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Distribution License v. 1.0 which is available at - * https://www.eclipse.org/org/documents/edl-v10.php. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -package org.eclipse.jgit.revwalk; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import org.eclipse.jgit.revwalk.filter.RevFilter; -import org.eclipse.jgit.treewalk.filter.TreeFilter; -import org.junit.Test; - -public class TreeRevFilterWithRewriteParentsTest extends RevWalkTestCase { - private RevFilter treeRevFilter() { - rw.setRewriteParents(true); - return new TreeRevFilter(rw, TreeFilter.ANY_DIFF); - } - - @Test - public void testStringOfPearls_FilePath1() - throws Exception { - RevCommit a = commit(tree(file("d/f", blob("a")))); - RevCommit b = commit(tree(file("d/f", blob("a"))), a); - RevCommit c = commit(tree(file("d/f", blob("b"))), b); - rw.setRevFilter(treeRevFilter()); - markStart(c); - - assertCommit(c, rw.next()); - assertEquals(1, c.getParentCount()); - assertCommit(a, c.getParent(0)); - - assertCommit(a, rw.next()); // b was skipped - assertEquals(0, a.getParentCount()); - assertNull(rw.next()); - } - - @Test - public void testStringOfPearls_FilePath2() throws Exception { - RevCommit a = commit(tree(file("d/f", blob("a")))); - RevCommit b = commit(tree(file("d/f", blob("a"))), a); - RevCommit c = commit(tree(file("d/f", blob("b"))), b); - RevCommit d = commit(tree(file("d/f", blob("b"))), c); - rw.setRevFilter(treeRevFilter()); - markStart(d); - - // d was skipped - assertCommit(c, rw.next()); - assertEquals(1, c.getParentCount()); - assertCommit(a, c.getParent(0)); - - // b was skipped - assertCommit(a, rw.next()); - assertEquals(0, a.getParentCount()); - assertNull(rw.next()); - } - - @Test - public void testStringOfPearls_DirPath2() throws Exception { - RevCommit a = commit(tree(file("d/f", blob("a")))); - RevCommit b = commit(tree(file("d/f", blob("a"))), a); - RevCommit c = commit(tree(file("d/f", blob("b"))), b); - RevCommit d = commit(tree(file("d/f", blob("b"))), c); - rw.setRevFilter(treeRevFilter()); - markStart(d); - - // d was skipped - assertCommit(c, rw.next()); - assertEquals(1, c.getParentCount()); - assertCommit(a, c.getParent(0)); - - // b was skipped - assertCommit(a, rw.next()); - assertEquals(0, a.getParentCount()); - assertNull(rw.next()); - } - - @Test - public void testStringOfPearls_FilePath3() throws Exception { - RevCommit a = commit(tree(file("d/f", blob("a")))); - RevCommit b = commit(tree(file("d/f", blob("a"))), a); - RevCommit c = commit(tree(file("d/f", blob("b"))), b); - RevCommit d = commit(tree(file("d/f", blob("b"))), c); - RevCommit e = commit(tree(file("d/f", blob("b"))), d); - RevCommit f = commit(tree(file("d/f", blob("b"))), e); - RevCommit g = commit(tree(file("d/f", blob("b"))), f); - RevCommit h = commit(tree(file("d/f", blob("b"))), g); - RevCommit i = commit(tree(file("d/f", blob("c"))), h); - rw.setRevFilter(treeRevFilter()); - markStart(i); - - assertCommit(i, rw.next()); - assertEquals(1, i.getParentCount()); - assertCommit(c, i.getParent(0)); - - // h..d was skipped - assertCommit(c, rw.next()); - assertEquals(1, c.getParentCount()); - assertCommit(a, c.getParent(0)); - - // b was skipped - assertCommit(a, rw.next()); - assertEquals(0, a.getParentCount()); - assertNull(rw.next()); - } -} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/StartGenerator.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/StartGenerator.java index 61a91e70dc..6854b6083d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/StartGenerator.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/StartGenerator.java @@ -98,14 +98,14 @@ class StartGenerator extends Generator { } else { pending = RevWalk.newDateRevQueue(q); } - if (rf != RevFilter.ALL && w.getRewriteParents()) { - pendingOutputType |= HAS_REWRITE | NEEDS_REWRITE; - } if (tf != TreeFilter.ALL) { + int rewriteFlag; if (w.getRewriteParents()) { pendingOutputType |= HAS_REWRITE | NEEDS_REWRITE; - } - rf = AndRevFilter.create(new TreeRevFilter(w, tf), rf); + rewriteFlag = RevWalk.REWRITE; + } else + rewriteFlag = 0; + rf = AndRevFilter.create(new TreeRevFilter(w, tf, rewriteFlag), rf); } walker.queue = q; 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 4085954638..43571a6868 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java @@ -60,8 +60,21 @@ public class TreeRevFilter extends RevFilter { * Create a {@link org.eclipse.jgit.revwalk.filter.RevFilter} from a * {@link org.eclipse.jgit.treewalk.filter.TreeFilter}. * - * When revWalk's rewrite parent flag is set, it creates a filter for the - * first phase of a parent-rewriting limited revision walk. + * @param walker + * walker used for reading trees. + * @param t + * filter to compare against any changed paths in each commit. If + * a {@link org.eclipse.jgit.revwalk.FollowFilter}, will be + * replaced with a new filter following new paths after a rename. + * @since 3.5 + */ + public TreeRevFilter(RevWalk walker, TreeFilter t) { + this(walker, t, 0); + } + + /** + * Create a filter for the first phase of a parent-rewriting limited + * revision walk. * <p> * This filter is ANDed to evaluate before all other filters and ties the * configured {@link TreeFilter} into the revision walking process. @@ -78,13 +91,14 @@ public class TreeRevFilter extends RevFilter { * filter to compare against any changed paths in each commit. If * a {@link FollowFilter}, will be replaced with a new filter * following new paths after a rename. - * @since 3.5 + * @param rewriteFlag + * flag to color commits to be removed from the simplified DAT. */ - public TreeRevFilter(RevWalk walker, TreeFilter t) { + TreeRevFilter(RevWalk walker, TreeFilter t, int rewriteFlag) { pathFilter = new TreeWalk(walker.reader); pathFilter.setFilter(t); pathFilter.setRecursive(t.shouldBeRecursive()); - this.rewriteFlag = walker.getRewriteParents() ? RevWalk.REWRITE : 0; + this.rewriteFlag = rewriteFlag; } @Override |