summaryrefslogtreecommitdiffstats
path: root/Source/CTest/cmCTestUpdateHandler.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-01-06 19:58:30 (GMT)
committerBrad King <brad.king@kitware.com>2009-01-06 19:58:30 (GMT)
commitf0e6000827e92191f6ec79a629bebe37befa5808 (patch)
tree4ad4ee2a40d3c45f94f216e6d3f7b5250fb59d70 /Source/CTest/cmCTestUpdateHandler.cxx
parentc2d2a412b86e58dbc2ebcf9c5eb68866d6d3fad3 (diff)
downloadCMake-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.cxx69
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,