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
1 changed files with 44 additions and 25 deletions

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()
{
@ -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,