@ -43,6 +43,8 @@
package org.eclipse.jgit.treewalk.filter ;
package org.eclipse.jgit.treewalk.filter ;
import java.io.IOException ;
import java.io.IOException ;
import java.util.HashSet ;
import java.util.Set ;
import org.eclipse.jgit.dircache.DirCacheIterator ;
import org.eclipse.jgit.dircache.DirCacheIterator ;
import org.eclipse.jgit.errors.IncorrectObjectTypeException ;
import org.eclipse.jgit.errors.IncorrectObjectTypeException ;
@ -79,6 +81,8 @@ public class IndexDiffFilter extends TreeFilter {
private final boolean honorIgnores ;
private final boolean honorIgnores ;
private final Set < String > ignoredPaths = new HashSet < String > ( ) ;
/ * *
/ * *
* Creates a new instance of this filter . Do not use an instance of this
* Creates a new instance of this filter . Do not use an instance of this
* filter in multiple treewalks .
* filter in multiple treewalks .
@ -129,8 +133,10 @@ public class IndexDiffFilter extends TreeFilter {
// other tree.
// other tree.
final int cnt = tw . getTreeCount ( ) ;
final int cnt = tw . getTreeCount ( ) ;
final int dm = tw . getRawMode ( dirCache ) ;
final int dm = tw . getRawMode ( dirCache ) ;
WorkingTreeIterator wi = workingTree ( tw ) ;
if ( dm = = 0 ) {
if ( dm = = 0 ) {
if ( honorIgnores & & workingTree ( tw ) . isEntryIgnored ( ) ) {
if ( honorIgnores & & wi . isEntryIgnored ( ) ) {
ignoredPaths . add ( wi . getEntryPathString ( ) ) ;
int i = 0 ;
int i = 0 ;
for ( ; i < cnt ; i + + ) {
for ( ; i < cnt ; i + + ) {
if ( i = = dirCache | | i = = workingTree )
if ( i = = dirCache | | i = = workingTree )
@ -166,7 +172,6 @@ public class IndexDiffFilter extends TreeFilter {
// Only one chance left to detect a diff: between index and working
// Only one chance left to detect a diff: between index and working
// tree. Make use of the WorkingTreeIterator#isModified() method to
// tree. Make use of the WorkingTreeIterator#isModified() method to
// avoid computing SHA1 on filesystem content if not really needed.
// avoid computing SHA1 on filesystem content if not really needed.
WorkingTreeIterator wi = workingTree ( tw ) ;
DirCacheIterator di = tw . getTree ( dirCache , DirCacheIterator . class ) ;
DirCacheIterator di = tw . getTree ( dirCache , DirCacheIterator . class ) ;
return wi . isModified ( di . getDirCacheEntry ( ) , true ) ;
return wi . isModified ( di . getDirCacheEntry ( ) , true ) ;
}
}
@ -191,4 +196,17 @@ public class IndexDiffFilter extends TreeFilter {
public String toString ( ) {
public String toString ( ) {
return "INDEX_DIFF_FILTER" ;
return "INDEX_DIFF_FILTER" ;
}
}
/ * *
* The method returns the list of ignored files and folders . Only the root
* folder of an ignored folder hierarchy is reported . If a / b / c is listed in
* the . gitignore then you should not expect a / b / c / d / e / f to be reported
* here . Only a / b / c will be reported . Furthermore only ignored files /
* folders are returned that are NOT in the index .
*
* @return ignored paths
* /
public Set < String > getIgnoredPaths ( ) {
return ignoredPaths ;
}
}
}