summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Wolf <thomas.wolf@paranor.ch>2021-12-26 16:03:40 +0100
committerThomas Wolf <thomas.wolf@paranor.ch>2021-12-26 16:04:44 +0100
commit7146bde45fa2b2d6c15e688ef90f50b4a576451f (patch)
treefde43c951325c57679e2317aa69cca44db25dc76
parent284d2b5b9c909199956440d144db591ac89c8a7b (diff)
parent41406e278fb69df1dbf4dcb9a82dcb03f2a8d5d7 (diff)
downloadjgit-7146bde45fa2b2d6c15e688ef90f50b4a576451f.tar.gz
jgit-7146bde45fa2b2d6c15e688ef90f50b4a576451f.zip
Merge branch 'stable-5.13' into stable-6.0
* stable-5.13: Revert "RefDirectory.scanRef: Re-use file existence check done in snapshot creation" TreeRevFilter: fix wrong stop when the given path disappears Change-Id: Ibd69e9d941ad9262b61dd0c4368e48cb82597a12 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkPathFilter1Test.java20
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileSnapshot.java9
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java4
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java5
4 files changed, 24 insertions, 14 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkPathFilter1Test.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkPathFilter1Test.java
index 31629f3de9..5cce11aa1f 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkPathFilter1Test.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkPathFilter1Test.java
@@ -15,6 +15,7 @@ import static org.junit.Assert.assertNull;
import java.util.Collections;
+import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.treewalk.filter.AndTreeFilter;
import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
import org.eclipse.jgit.treewalk.filter.TreeFilter;
@@ -253,4 +254,23 @@ public class RevWalkPathFilter1Test extends RevWalkTestCase {
assertEquals(0, a.getParentCount());
assertNull(rw.next());
}
+
+ @Test
+ public void testStopWhenPathDisappears() throws Exception {
+ DirCacheEntry file1 = file("src/d1/file1", blob("a"));
+ DirCacheEntry file2 = file("src/d1/file2", blob("a"));
+ DirCacheEntry file3 = file("src/d1/file3", blob("a"));
+ RevCommit a = commit(tree(file1));
+ RevCommit b = commit(tree(file1, file2), a);
+ RevCommit c = commit(tree(file1, file3), a);
+ RevCommit d = commit(tree(file1, file2, file3), b, c);
+ filter("src/d1");
+ markStart(d);
+ rw.setRewriteParents(false);
+
+ assertCommit(d, rw.next());
+ assertCommit(c, rw.next());
+ assertCommit(b, rw.next());
+ assertCommit(a, rw.next());
+ }
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileSnapshot.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileSnapshot.java
index 5ab973f533..6088c152a1 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileSnapshot.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileSnapshot.java
@@ -420,15 +420,6 @@ public class FileSnapshot {
return equals(other);
}
- /**
- * Check if the file exists
- *
- * @return true if the file exists
- */
- public boolean fileExists() {
- return !MISSING_FILEKEY.equals(this.fileKey);
- }
-
/** {@inheritDoc} */
@Override
public int hashCode() {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
index 2167262dd5..07e38147f7 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
@@ -1092,10 +1092,6 @@ public class RefDirectory extends RefDatabase {
final int limit = 4096;
final byte[] buf;
FileSnapshot otherSnapshot = FileSnapshot.save(path);
- if (!otherSnapshot.fileExists()) {
- return null;
- }
-
try {
buf = IO.readSome(path, limit);
} catch (FileNotFoundException noFile) {
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 e465024311..822fc5320c 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java
@@ -211,7 +211,10 @@ public class TreeRevFilter extends RevFilter {
// "empty tree root" and thus their history is not relevant.
// Cut our grandparents to be an empty list.
//
- pList[i].parents = RevCommit.NO_PARENTS;
+ tw.reset(pList[i].getTree());
+ if (!tw.next()) {
+ pList[i].parents = RevCommit.NO_PARENTS;
+ }
}
// We have an interesting difference relative to this parent.