string ComputeIsDirty( Repository r, Commit commit, RepositoryInfoOptions options )
{
RepositoryStatus repositoryStatus = r.RetrieveStatus();
int addedCount = repositoryStatus.Added.Count();
int missingCount = repositoryStatus.Missing.Count();
int removedCount = repositoryStatus.Removed.Count();
int stagedCount = repositoryStatus.Staged.Count();
StringBuilder b = null;
if( addedCount > 0 || missingCount > 0 || removedCount > 0 || stagedCount > 0 )
{
b = new StringBuilder( "Found: " );
if( addedCount > 0 ) b.AppendFormat( "{0} file(s) added", addedCount );
if( missingCount > 0 ) b.AppendFormat( "{0}{1} file(s) missing", b.Length > 10 ? ", " : null, missingCount );
if( removedCount > 0 ) b.AppendFormat( "{0}{1} file(s) removed", b.Length > 10 ? ", " : null, removedCount );
if( stagedCount > 0 ) b.AppendFormat( "{0}{1} file(s) staged", b.Length > 10 ? ", " : null, removedCount );
}
else
{
int fileCount = 0;
foreach( StatusEntry m in repositoryStatus.Modified )
{
string path = m.FilePath;
if( !options.IgnoreModifiedFiles.Contains( path )
&& (options.IgnoreModifiedFilePredicate == null
|| !options.IgnoreModifiedFilePredicate( new ModifiedFile( r, commit, m, path ) )) )
{
++fileCount;
if( !options.IgnoreModifiedFileFullProcess )
{
Debug.Assert( b == null );
b = new StringBuilder( "At least one Modified file found: " );
b.Append( path );
break;
}
if( b == null )
{
b = new StringBuilder( "Modified file(s) found: " );
b.Append( path );
}
else if( fileCount <= 10 ) b.Append( ", " ).Append( path );
}
}
if( fileCount > 10 ) b.AppendFormat( ", and {0} other file(s)", fileCount - 10 );
}
if( b == null ) return null;
b.Append( '.' );
return b.ToString();
}