@ -268,7 +268,9 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
DirCacheIterator . class ) ;
if ( i ! = null ) {
DirCacheEntry ent = i . getDirCacheEntry ( ) ;
if ( ent ! = null & & compareMetadata ( ent ) = = MetadataDiff . EQUAL ) {
if ( ent ! = null & & compareMetadata ( ent ) = = MetadataDiff . EQUAL
& & ( ( ent . getFileMode ( ) . getBits ( )
& FileMode . TYPE_MASK ) ! = FileMode . TYPE_GITLINK ) ) {
contentIdOffset = i . idOffset ( ) ;
contentIdFromPtr = ptr ;
return contentId = i . idBuffer ( ) ;
@ -843,10 +845,15 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
if ( entry . isUpdateNeeded ( ) )
return MetadataDiff . DIFFER_BY_METADATA ;
if ( ! entry . isSmudged ( ) & & entry . getLength ( ) ! = ( int ) getEntryLength ( ) )
if ( isModeDifferent ( entry . getRawMode ( ) ) )
return MetadataDiff . DIFFER_BY_METADATA ;
if ( isModeDifferent ( entry . getRawMode ( ) ) )
// Don't check for length or lastmodified on folders
int type = mode & FileMode . TYPE_MASK ;
if ( type = = FileMode . TYPE_TREE | | type = = FileMode . TYPE_GITLINK )
return MetadataDiff . EQUAL ;
if ( ! entry . isSmudged ( ) & & entry . getLength ( ) ! = ( int ) getEntryLength ( ) )
return MetadataDiff . DIFFER_BY_METADATA ;
// Git under windows only stores seconds so we round the timestamp
@ -915,6 +922,9 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
// Lets do a content check
return contentCheck ( entry , reader ) ;
case EQUAL :
if ( mode = = FileMode . SYMLINK . getBits ( ) ) {
return contentCheck ( entry , reader ) ;
}
return false ;
case DIFFER_BY_METADATA :
if ( mode = = FileMode . SYMLINK . getBits ( ) )