summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
diff options
context:
space:
mode:
authorChristian Halstrick <christian.halstrick@sap.com>2016-06-23 17:08:45 +0200
committerChristian Halstrick <christian.halstrick@sap.com>2016-06-23 17:11:47 +0200
commite7df61ef4dc3991d1b218e70ec2095e8c10e97ce (patch)
tree48bdcfc8d3efb53cc927e003a575711dac8e81e7 /org.eclipse.jgit.test
parent5fe44ed3ee025404dc34966ec996641f47f8490b (diff)
downloadjgit-e7df61ef4dc3991d1b218e70ec2095e8c10e97ce.tar.gz
jgit-e7df61ef4dc3991d1b218e70ec2095e8c10e97ce.zip
Fix TreeWalk to reset attributes cache for each entry
Treewalk has a member 'attr' which caches the attributes for the current entry. We did not reset the cache always when moving to next entry. The effect was that when there are no attributes for an entry 'a' but 'a' was skipped by a Treewalk filter then Treewalk stopped looking for attributes until TreeWalk.next() was called again. Change-Id: Ied39b7fb5f56afe7a237da17801003d0abe6b1c7
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java23
1 files changed, 23 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
index 126ca5cdd1..eb2ee08787 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
@@ -136,6 +136,29 @@ public class AddCommandTest extends RepositoryTestCase {
}
@Test
+ public void testAttributesWithTreeWalkFilter()
+ throws IOException, GitAPIException {
+ writeTrashFile(".gitattributes", "*.txt filter=lfs");
+ writeTrashFile("src/a.tmp", "foo");
+ writeTrashFile("src/a.txt", "foo\n");
+ File script = writeTempFile("sed s/o/e/g");
+
+ try (Git git = new Git(db)) {
+ StoredConfig config = git.getRepository().getConfig();
+ config.setString("filter", "lfs", "clean",
+ "sh " + slashify(script.getPath()));
+ config.save();
+
+ git.add().addFilepattern(".gitattributes").call();
+ git.commit().setMessage("attr").call();
+ git.add().addFilepattern("src/a.txt").addFilepattern("src/a.tmp")
+ .addFilepattern(".gitattributes").call();
+ git.commit().setMessage("c1").call();
+ assertTrue(git.status().call().isClean());
+ }
+ }
+
+ @Test
public void testCleanFilterEnvironment()
throws IOException, GitAPIException {
writeTrashFile(".gitattributes", "*.txt filter=tstFilter");