diff options
Diffstat (limited to 'Source/CTest/cmCTestUpdateHandler.cxx')
-rw-r--r-- | Source/CTest/cmCTestUpdateHandler.cxx | 69 |
1 files changed, 44 insertions, 25 deletions
diff --git a/Source/CTest/cmCTestUpdateHandler.cxx b/Source/CTest/cmCTestUpdateHandler.cxx index 2684149..67ae202 100644 --- a/Source/CTest/cmCTestUpdateHandler.cxx +++ b/Source/CTest/cmCTestUpdateHandler.cxx @@ -180,6 +180,46 @@ private: //********************************************************************** //---------------------------------------------------------------------- +class cmCTestUpdateHandlerLocale +{ +public: + cmCTestUpdateHandlerLocale(); + ~cmCTestUpdateHandlerLocale(); +private: + std::string saveLCMessages; +}; + +cmCTestUpdateHandlerLocale::cmCTestUpdateHandlerLocale() +{ + const char* lcmess = cmSystemTools::GetEnv("LC_MESSAGES"); + if(lcmess) + { + saveLCMessages = lcmess; + } + // if LC_MESSAGES is not set to C, then + // set it, so that svn/cvs info will be in english ascii + if(! (lcmess && strcmp(lcmess, "C") == 0)) + { + cmSystemTools::PutEnv("LC_MESSAGES=C"); + } +} + +cmCTestUpdateHandlerLocale::~cmCTestUpdateHandlerLocale() +{ + // restore the value of LC_MESSAGES after running the version control + // commands + if(saveLCMessages.size()) + { + std::string put = "LC_MESSAGES="; + put += saveLCMessages; + cmSystemTools::PutEnv(put.c_str()); + } + else + { + cmSystemTools::UnsetEnv("LC_MESSAGES"); + } +} + //---------------------------------------------------------------------- cmCTestUpdateHandler::cmCTestUpdateHandler() { @@ -252,19 +292,10 @@ int cmCTestUpdateHandler::ProcessHandler() std::string goutput; std::string errors; - // make sure - std::string saveLCMessages; - const char* lcmess = cmSystemTools::GetEnv("LC_MESSAGES"); - if(lcmess) - { - saveLCMessages = lcmess; - } - // if LC_MESSAGES is not set to C, then - // set it, so that svn/cvs info will be in english ascii - if(! (lcmess && strcmp(lcmess, "C") == 0)) - { - cmSystemTools::PutEnv("LC_MESSAGES=C"); - } + // Make sure VCS tool messages are in English so we can parse them. + cmCTestUpdateHandlerLocale fixLocale; + static_cast<void>(fixLocale); + std::string checkoutErrorMessages; int retVal = 0; @@ -1122,18 +1153,6 @@ int cmCTestUpdateHandler::ProcessHandler() } os << "</UpdateReturnStatus>" << std::endl; os << "</Update>" << std::endl; - // restore the value of LC_MESSAGES after running the version control - // commands - if(saveLCMessages.size()) - { - std::string put = "LC_MESSAGES="; - put += saveLCMessages; - cmSystemTools::PutEnv(put.c_str()); - } - else - { - cmSystemTools::UnsetEnv("LC_MESSAGES"); - } if (! res ) { cmCTestLog(this->CTest, ERROR_MESSAGE, |