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.
This commit is contained in:
Brad King 2009-01-06 14:58:30 -05:00
parent c2d2a412b8
commit f0e6000827

View File

@ -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() cmCTestUpdateHandler::cmCTestUpdateHandler()
{ {
@ -252,19 +292,10 @@ int cmCTestUpdateHandler::ProcessHandler()
std::string goutput; std::string goutput;
std::string errors; std::string errors;
// make sure // Make sure VCS tool messages are in English so we can parse them.
std::string saveLCMessages; cmCTestUpdateHandlerLocale fixLocale;
const char* lcmess = cmSystemTools::GetEnv("LC_MESSAGES"); static_cast<void>(fixLocale);
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");
}
std::string checkoutErrorMessages; std::string checkoutErrorMessages;
int retVal = 0; int retVal = 0;
@ -1122,18 +1153,6 @@ int cmCTestUpdateHandler::ProcessHandler()
} }
os << "</UpdateReturnStatus>" << std::endl; os << "</UpdateReturnStatus>" << std::endl;
os << "</Update>" << 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 ) if (! res )
{ {
cmCTestLog(this->CTest, ERROR_MESSAGE, cmCTestLog(this->CTest, ERROR_MESSAGE,