summaryrefslogtreecommitdiffstats
path: root/Source/CTest/cmCTestUpdateHandler.cxx
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2005-04-24 17:57:11 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2005-04-24 17:57:11 (GMT)
commitf3ed1207adb0c05f8d5d42a951c0f0bfeb94ad9e (patch)
tree0778b1ad169b44d804118796d0f0b48f8b748543 /Source/CTest/cmCTestUpdateHandler.cxx
parente26bafa52aa8cb6ae9638bd1a890db2b6ef5f67b (diff)
downloadCMake-f3ed1207adb0c05f8d5d42a951c0f0bfeb94ad9e.zip
CMake-f3ed1207adb0c05f8d5d42a951c0f0bfeb94ad9e.tar.gz
CMake-f3ed1207adb0c05f8d5d42a951c0f0bfeb94ad9e.tar.bz2
ENH: Support for modified and conflicts in subversion
Diffstat (limited to 'Source/CTest/cmCTestUpdateHandler.cxx')
-rw-r--r--Source/CTest/cmCTestUpdateHandler.cxx109
1 files changed, 67 insertions, 42 deletions
diff --git a/Source/CTest/cmCTestUpdateHandler.cxx b/Source/CTest/cmCTestUpdateHandler.cxx
index 4b0d293..6a73031 100644
--- a/Source/CTest/cmCTestUpdateHandler.cxx
+++ b/Source/CTest/cmCTestUpdateHandler.cxx
@@ -316,6 +316,10 @@ int cmCTestUpdateHandler::ProcessHandler()
int retVal = 0;
bool res = true;
+
+ //
+ // Get initial repository information if that is possible. With subversion, this will check the current revision.
+ //
if ( !command.empty() )
{
if ( m_Verbose )
@@ -357,17 +361,9 @@ int cmCTestUpdateHandler::ProcessHandler()
}
- command = "";
- switch( updateType )
- {
- case cmCTestUpdateHandler::e_CVS:
- command = updateCommand + " -z3 update " + updateOptions +
- " " + extra_update_opts;
- break;
- case cmCTestUpdateHandler::e_SVN:
- command = updateCommand + " update " + updateOptions +
- " " + extra_update_opts;
- }
+ //
+ // Now update repository and remember what files were updated
+ //
cmGeneratedFileStream os;
if ( !m_CTest->OpenOutputFile(m_CTest->GetCurrentTag(), "Update.xml", os, true) )
{
@@ -382,9 +378,31 @@ int cmCTestUpdateHandler::ProcessHandler()
}
if ( !m_CTest->GetShowOnly() )
{
- res = cmSystemTools::RunSingleCommand(command.c_str(), &goutput,
- &retVal, sourceDirectory,
- m_Verbose, 0 /*m_TimeOut*/);
+ command = "";
+ switch( updateType )
+ {
+ case cmCTestUpdateHandler::e_CVS:
+ command = updateCommand + " -z3 update " + updateOptions +
+ " " + extra_update_opts;
+ res = cmSystemTools::RunSingleCommand(command.c_str(), &goutput,
+ &retVal, sourceDirectory,
+ m_Verbose, 0 /*m_TimeOut*/);
+ break;
+ case cmCTestUpdateHandler::e_SVN:
+ {
+ std::string partialOutput;
+ command = updateCommand + " update " + updateOptions +
+ " " + extra_update_opts;
+ res = cmSystemTools::RunSingleCommand(command.c_str(), &partialOutput,
+ &retVal, sourceDirectory,
+ m_Verbose, 0 /*m_TimeOut*/);
+ command = updateCommand + " status";
+ res = cmSystemTools::RunSingleCommand(command.c_str(), &partialOutput,
+ &retVal, sourceDirectory,
+ m_Verbose, 0 /*m_TimeOut*/);
+ goutput += partialOutput;
+ }
+ }
if ( ofs )
{
ofs << "--- Update repository ---" << std::endl;
@@ -467,46 +485,51 @@ int cmCTestUpdateHandler::ProcessHandler()
std::string upChar = file_update_line.match(1);
std::string upFile = file_update_line.match(2);
char mod = upChar[0];
+ bool modifiedOrConflict = false;
if ( mod != 'M' && mod != 'C' && mod != 'G' )
{
count ++;
+ modifiedOrConflict = true;
}
const char* file = upFile.c_str();
//std::cout << "Line" << cc << ": " << mod << " - " << file << std::endl;
- std::string logcommand;
- switch ( updateType )
+ std::string output;
+ if ( modifiedOrConflict )
{
- case cmCTestUpdateHandler::e_CVS:
- logcommand = updateCommand + " -z3 log -N \"" + file + "\"";
- break;
- case cmCTestUpdateHandler::e_SVN:
- if ( svn_latest_revision > 0 && svn_latest_revision > svn_current_revision )
+ std::string logcommand;
+ switch ( updateType )
{
- cmOStringStream logCommandStream;
- logCommandStream << updateCommand << " log -r " << svn_current_revision << ":" << svn_latest_revision
- << " --xml \"" << file << "\"";
- logcommand = logCommandStream.str();
+ case cmCTestUpdateHandler::e_CVS:
+ logcommand = updateCommand + " -z3 log -N \"" + file + "\"";
+ break;
+ case cmCTestUpdateHandler::e_SVN:
+ if ( svn_latest_revision > 0 && svn_latest_revision > svn_current_revision )
+ {
+ cmOStringStream logCommandStream;
+ logCommandStream << updateCommand << " log -r " << svn_current_revision << ":" << svn_latest_revision
+ << " --xml \"" << file << "\"";
+ logcommand = logCommandStream.str();
+ }
+ else
+ {
+ logcommand = updateCommand + " status --verbose \"" + file + "\"";
+ svn_use_status = 1;
+ }
+ break;
}
- else
+ //std::cout << "Do log: " << logcommand << std::endl;
+ if ( m_Verbose )
{
- logcommand = updateCommand + " status --verbose \"" + file + "\"";
- svn_use_status = 1;
+ std::cout << "* Get file update information: " << logcommand.c_str() << std::endl;
+ }
+ res = cmSystemTools::RunSingleCommand(logcommand.c_str(), &output,
+ &retVal, sourceDirectory,
+ m_Verbose, 0 /*m_TimeOut*/);
+ if ( ofs )
+ {
+ ofs << output << std::endl;
}
- break;
- }
- //std::cout << "Do log: " << logcommand << std::endl;
- std::string output;
- if ( m_Verbose )
- {
- std::cout << "* Get file update information: " << logcommand.c_str() << std::endl;
- }
- res = cmSystemTools::RunSingleCommand(logcommand.c_str(), &output,
- &retVal, sourceDirectory,
- m_Verbose, 0 /*m_TimeOut*/);
- if ( ofs )
- {
- ofs << output << std::endl;
}
if ( res && retVal == 0)
{
@@ -647,10 +670,12 @@ int cmCTestUpdateHandler::ProcessHandler()
if ( mod == 'M' )
{
comment1 = "Locally modified file\n";
+ sauthor1 = "Local User";
}
if ( mod == 'C' )
{
comment1 = "Conflict while updating\n";
+ sauthor1 = "Local User";
}
std::string path = cmSystemTools::GetFilenamePath(file);
std::string fname = cmSystemTools::GetFilenameName(file);