Fix for StopTime for cases when gmtime is a day ahead of localtime

This commit is contained in:
Zach Mullen 2010-03-18 13:51:40 -04:00
parent a2fe175647
commit 9676c52c3e
3 changed files with 32 additions and 9 deletions

View File

@ -531,10 +531,22 @@ double cmCTestRunTest::ResolveTimeout()
time_t current_time = time(0); time_t current_time = time(0);
lctime = gmtime(&current_time); lctime = gmtime(&current_time);
int gm_hour = lctime->tm_hour; int gm_hour = lctime->tm_hour;
time_t gm_time = mktime(lctime);
lctime = localtime(&current_time); lctime = localtime(&current_time);
int local_hour = lctime->tm_hour; int local_hour = lctime->tm_hour;
int timezone = (local_hour - gm_hour) * 100; int tzone_offset = 0;
if(gm_time > current_time && gm_hour < local_hour)
{
// this means gm_time is on the next day
tzone_offset = local_hour - gm_hour - 24;
}
else
{
tzone_offset = local_hour - gm_hour;
}
tzone_offset *= 100;
char buf[1024]; char buf[1024];
// add todays year day and month to the time in str because // add todays year day and month to the time in str because
// curl_getdate no longer assumes the day is today // curl_getdate no longer assumes the day is today
@ -543,10 +555,8 @@ double cmCTestRunTest::ResolveTimeout()
lctime->tm_mon + 1, lctime->tm_mon + 1,
lctime->tm_mday, lctime->tm_mday,
this->CTest->GetStopTime().c_str(), this->CTest->GetStopTime().c_str(),
timezone); tzone_offset);
cmCTestLog(this->CTest, HANDLER_OUTPUT, "Computed stop time="
<< buf << std::endl);
time_t stop_time = curl_getdate(buf, &current_time); time_t stop_time = curl_getdate(buf, &current_time);
if(stop_time == -1) if(stop_time == -1)
{ {
@ -558,7 +568,7 @@ double cmCTestRunTest::ResolveTimeout()
{ {
stop_time += 24*60*60; stop_time += 24*60*60;
} }
double stop_timeout = stop_time - current_time; int stop_timeout = (stop_time - current_time) % (24*60*60);
if(stop_timeout <= 0) if(stop_timeout <= 0)
{ {
@ -567,7 +577,8 @@ double cmCTestRunTest::ResolveTimeout()
exit(-1); exit(-1);
} }
#undef min #undef min
return timeout == 0 ? stop_timeout : std::min(timeout, stop_timeout); return timeout == 0 ? stop_timeout :
std::min(timeout, static_cast<double>(stop_timeout));
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View File

@ -2557,10 +2557,22 @@ void cmCTest::DetermineNextDayStop()
time_t current_time = time(0); time_t current_time = time(0);
lctime = gmtime(&current_time); lctime = gmtime(&current_time);
int gm_hour = lctime->tm_hour; int gm_hour = lctime->tm_hour;
time_t gm_time = mktime(lctime);
lctime = localtime(&current_time); lctime = localtime(&current_time);
int local_hour = lctime->tm_hour; int local_hour = lctime->tm_hour;
int timezone = (local_hour - gm_hour) * 100; int tzone_offset = 0;
if(gm_time > current_time && gm_hour < local_hour)
{
// this means gm_time is on the next day
tzone_offset = local_hour - gm_hour - 24;
}
else
{
tzone_offset = local_hour - gm_hour;
}
tzone_offset *= 100;
char buf[1024]; char buf[1024];
sprintf(buf, "%d%02d%02d %s %+05i", sprintf(buf, "%d%02d%02d %s %+05i",
lctime->tm_year + 1900, lctime->tm_year + 1900,

View File

@ -25,8 +25,8 @@ CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
GET_DATE() GET_DATE()
message("original time: ${${GD_PREFIX}HOUR}:${${GD_PREFIX}MINUTE}:${${GD_PREFIX}SECOND}") message("curr time: ${${GD_PREFIX}HOUR}:${${GD_PREFIX}MINUTE}:${${GD_PREFIX}SECOND}")
ADD_SECONDS(25) ADD_SECONDS(15)
message("stop time: ${new_hr}:${new_min}:${new_sec}") message("stop time: ${new_hr}:${new_min}:${new_sec}")
CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res STOP_TIME "${new_hr}:${new_min}:${new_sec}") CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res STOP_TIME "${new_hr}:${new_min}:${new_sec}")