Просмотр исходного кода

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
tags/v4.5.0.201609210915-r
Christian Halstrick 8 лет назад
Родитель
Сommit
e7df61ef4d

+ 23
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java Просмотреть файл

@@ -135,6 +135,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 {

+ 1
- 1
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java Просмотреть файл

@@ -795,7 +795,6 @@ public class TreeWalk implements AutoCloseable, AttributesProvider {
public boolean next() throws MissingObjectException,
IncorrectObjectTypeException, CorruptObjectException, IOException {
try {
attrs = null;
if (advance) {
advance = false;
postChildren = false;
@@ -803,6 +802,7 @@ public class TreeWalk implements AutoCloseable, AttributesProvider {
}

for (;;) {
attrs = null;
final AbstractTreeIterator t = min();
if (t.eof()) {
if (depth > 0) {

Загрузка…
Отмена
Сохранить