in src/com/intellij/vssSupport/VssChangeProvider.java [155:204]
private void iterateOverDirtyFiles( final VcsDirtyScope scope )
{
List<String> paths = new ArrayList<>();
for( FilePath path : scope.getDirtyFiles() )
{
if (progress != null) {
progress.checkCanceled();
}
VirtualFile file = path.getVirtualFile();
String fileName = VssUtil.getCanonicalLocalPath( path.getPath() );
if( isFileVssProcessable( file ) && isProperNotification( path ) )
{
if( host.isFileIgnored( file ))
filesIgnored.add( fileName );
else
{
// Do not analyze the file if it is known to be under the paths for
// which we know that they are New to the repository.
// Uses heuristic - take the file status of the parent folder and
// if it is "ADDED" or "UNKNOWN (UNVERSIONED)" then the file is new
// as well
if( isParentFolderNewOrUnversioned( file ) )
{
filesNew.add( fileName );
}
else
{
// Do not analyze the file if we know that this file just has been
// successfully checked out from the repository, its RO status is
// writable and it is ready for editing.
Boolean isCheckoutResult = file.getUserData( SUCCESSFUL_CHECKOUT );
if( isCheckoutResult != null && isCheckoutResult.booleanValue() )
{
// Do not forget to delete this property right after the change
// is classified, otherwise this file will always be determined
// as modified.
file.putUserData( SUCCESSFUL_CHECKOUT, null );
filesChanged.add( file.getPath() );
}
else
{
paths.add( path.getPath() );
}
}
}
}
}
analyzeWritableFilesByStatus( paths, filesNew, filesChanged, filesHijacked, filesObsolete );
}