diff options
author | Brad King <brad.king@kitware.com> | 2009-01-06 19:58:30 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-01-06 19:58:30 (GMT) |
commit | f0e6000827e92191f6ec79a629bebe37befa5808 (patch) | |
tree | 4ad4ee2a40d3c45f94f216e6d3f7b5250fb59d70 /Source/CTest/cmCTestUpdateHandler.cxx | |
parent | c2d2a412b86e58dbc2ebcf9c5eb68866d6d3fad3 (diff) | |
download | CMake-f0e6000827e92191f6ec79a629bebe37befa5808.zip CMake-f0e6000827e92191f6ec79a629bebe37befa5808.tar.gz CMake-f0e6000827e92191f6ec79a629bebe37befa5808.tar.bz2 |
BUG: Manage LC_MESSAGES with an object
This moves management of the LC_MESSAGES environment variable into an
automatic variable. Previously if an error occurred the original
environment value was not restored. This makes the fix to issue #5936
more robust.
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, |