diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java index 9108d9235..f24c9b2a5 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java @@ -57,8 +57,10 @@ import java.security.DigestOutputStream; import java.security.MessageDigest; import java.text.MessageFormat; +import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; +import java.util.List; import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.errors.LockFailedException; @@ -74,6 +76,7 @@ import org.eclipse.jgit.storage.file.LockFile; import org.eclipse.jgit.treewalk.FileTreeIterator; import org.eclipse.jgit.treewalk.TreeWalk; +import org.eclipse.jgit.treewalk.filter.PathFilterGroup; import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.MutableInteger; @@ -941,7 +944,15 @@ private void registerIndexChangedListener(IndexChangedListener listener) { */ private void updateSmudgedEntries() throws IOException { TreeWalk walk = new TreeWalk(repository); + List paths = new ArrayList(128); try { + for (int i = 0; i < entryCnt; i++) + if (sortedEntries[i].isSmudged()) + paths.add(sortedEntries[i].getPathString()); + if (paths.isEmpty()) + return; + walk.setFilter(PathFilterGroup.createFromStrings(paths)); + DirCacheIterator iIter = new DirCacheIterator(this); FileTreeIterator fIter = new FileTreeIterator(repository); walk.addTree(iIter);