ENH: Once the number of errors or warnings was reached, stop counting them. Also fix compile warning on bad compilers

This commit is contained in:
Andy Cedilnik 2005-06-02 11:47:10 -04:00
parent afb83a7d44
commit ac05727cb0
2 changed files with 79 additions and 37 deletions

View File

@ -161,6 +161,10 @@ cmCTestBuildHandler::cmCTestBuildHandler()
{
m_MaxPreContext = 6;
m_MaxPostContext = 6;
m_MaxErrors = 50;
m_MaxWarnings = 50;
int cc;
for ( cc = 0; cmCTestWarningErrorFileLine[cc].m_RegularExpressionString; ++ cc )
{
@ -341,8 +345,12 @@ int cmCTestBuildHandler::ProcessHandler()
}
// Display message about number of errors and warnings
cmCTestLog(m_CTest, HANDLER_OUTPUT, " " << m_TotalErrors << " Compiler errors" << std::endl);
cmCTestLog(m_CTest, HANDLER_OUTPUT, " " << m_TotalWarnings << " Compiler warnings" << std::endl);
cmCTestLog(m_CTest, HANDLER_OUTPUT, " " << m_TotalErrors
<< (m_TotalErrors >= m_MaxErrors ? " or more" : "")
<< " Compiler errors" << std::endl);
cmCTestLog(m_CTest, HANDLER_OUTPUT, " " << m_TotalWarnings
<< (m_TotalWarnings >= m_MaxWarnings ? " or more" : "")
<< " Compiler warnings" << std::endl);
// Generate XML output
cmGeneratedFileStream xofs;
@ -371,8 +379,8 @@ void cmCTestBuildHandler::GenerateDartBuildOutput(
std::vector<cmCTestBuildErrorWarning>::iterator it;
// only report the first 50 warnings and first 50 errors
unsigned short numErrorsAllowed = 50;
unsigned short numWarningsAllowed = 50;
unsigned short numErrorsAllowed = m_MaxErrors;
unsigned short numWarningsAllowed = m_MaxWarnings;
std::string srcdir = m_CTest->GetCTestConfiguration("SourceDirectory");
// make sure the source dir is in the correct case on windows
// via a call to collapse full path.
@ -512,6 +520,8 @@ int cmCTestBuildHandler::RunMakeCommand(const char* command,
m_TotalWarnings = 0;
m_BuildOutputLogSize = 0;
m_LastTickChar = '.';
m_WarningQuotaReached = false;
m_ErrorQuotaReached = false;
// For every chunk of data
while(cmsysProcess_WaitForData(cp, &data, &length, 0))
@ -576,7 +586,11 @@ void cmCTestBuildHandler::ProcessBuffer(const char* data, int length, size_t& ti
{
#undef cerr
const std::string::size_type tick_line_len = 50;
m_BuildProcessingQueue.insert(m_BuildProcessingQueue.end(), data, data+length);
const char* ptr;
for ( ptr = data; ptr < data+length; ptr ++ )
{
m_BuildProcessingQueue.push_back(*ptr);
}
m_BuildOutputLogSize += length;
// until there are any lines left in the buffer
@ -593,12 +607,27 @@ void cmCTestBuildHandler::ProcessBuffer(const char* data, int length, size_t& ti
break;
}
}
// Once certain number of errors or warnings reached, ignore future errors or warnings.
if ( m_TotalWarnings >= m_MaxWarnings )
{
m_WarningQuotaReached = true;
}
if ( m_TotalErrors >= m_MaxErrors )
{
m_ErrorQuotaReached = true;
}
// If the end of line was found
if ( it != m_BuildProcessingQueue.end() )
{
// Create a contiguous array for the line
m_CurrentProcessingLine.clear();
m_CurrentProcessingLine.insert(m_CurrentProcessingLine.end(), m_BuildProcessingQueue.begin(), it);
t_BuildProcessingQueueType::iterator cit;
for ( cit = m_BuildProcessingQueue.begin(); cit != it; ++cit )
{
m_CurrentProcessingLine.push_back(*cit);
}
m_CurrentProcessingLine.push_back(0);
const char* line = &*m_CurrentProcessingLine.begin();
@ -715,47 +744,54 @@ int cmCTestBuildHandler::ProcessSingleLine(const char* data)
int errorLine = 0;
// Check for regular expressions
// Errors
for ( it = m_ErrorMatchRegex.begin(); it != m_ErrorMatchRegex.end(); ++ it )
if ( !m_ErrorQuotaReached )
{
if ( it->find(data) )
// Errors
for ( it = m_ErrorMatchRegex.begin(); it != m_ErrorMatchRegex.end(); ++ it )
{
errorLine = 1;
cmCTestLog(m_CTest, DEBUG, " Error Line: " << data << std::endl);
break;
if ( it->find(data) )
{
errorLine = 1;
cmCTestLog(m_CTest, DEBUG, " Error Line: " << data << std::endl);
break;
}
}
// Error exceptions
for ( it = m_ErrorExceptionRegex.begin(); it != m_ErrorExceptionRegex.end(); ++ it )
{
if ( it->find(data) )
{
errorLine = 0;
cmCTestLog(m_CTest, DEBUG, " Not an error Line: " << data << std::endl);
break;
}
}
}
// Warnings
for ( it = m_WarningMatchRegex.begin(); it != m_WarningMatchRegex.end(); ++ it )
if ( !m_WarningQuotaReached )
{
if ( it->find(data) )
// Warnings
for ( it = m_WarningMatchRegex.begin(); it != m_WarningMatchRegex.end(); ++ it )
{
warningLine = 1;
cmCTestLog(m_CTest, DEBUG, " Warning Line: " << data << std::endl);
break;
}
}
if ( it->find(data) )
{
warningLine = 1;
cmCTestLog(m_CTest, DEBUG, " Warning Line: " << data << std::endl);
break;
}
}
// Error exceptions
for ( it = m_ErrorExceptionRegex.begin(); it != m_ErrorExceptionRegex.end(); ++ it )
{
if ( it->find(data) )
// Warning exceptions
for ( it = m_WarningExceptionRegex.begin(); it != m_WarningExceptionRegex.end(); ++ it )
{
errorLine = 0;
cmCTestLog(m_CTest, DEBUG, " Not an error Line: " << data << std::endl);
break;
if ( it->find(data) )
{
warningLine = 0;
cmCTestLog(m_CTest, DEBUG, " Not a warning Line: " << data << std::endl);
break;
}
}
}
// Warning exceptions
for ( it = m_WarningExceptionRegex.begin(); it != m_WarningExceptionRegex.end(); ++ it )
{
if ( it->find(data) )
{
warningLine = 0;
cmCTestLog(m_CTest, DEBUG, " Not a warning Line: " << data << std::endl);
break;
}
}
if ( errorLine )
{
return b_ERROR_LINE;

View File

@ -121,6 +121,12 @@ private:
int m_TotalErrors;
int m_TotalWarnings;
char m_LastTickChar;
bool m_ErrorQuotaReached;
bool m_WarningQuotaReached;
int m_MaxErrors;
int m_MaxWarnings;
};
#endif