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:
parent
c2d2a412b8
commit
f0e6000827
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user