summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/CTest/cmCTestRunTest.cxx23
-rw-r--r--Source/cmCTest.cxx14
-rw-r--r--Tests/CTestTestStopTime/test.cmake.in4
3 files changed, 32 insertions, 9 deletions
diff --git a/Source/CTest/cmCTestRunTest.cxx b/Source/CTest/cmCTestRunTest.cxx
index 8e7b9cd..adabbc2 100644
--- a/Source/CTest/cmCTestRunTest.cxx
+++ b/Source/CTest/cmCTestRunTest.cxx
@@ -531,10 +531,22 @@ double cmCTestRunTest::ResolveTimeout()
time_t current_time = time(0);
lctime = gmtime(&current_time);
int gm_hour = lctime->tm_hour;
+ time_t gm_time = mktime(lctime);
lctime = localtime(&current_time);
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];
// add todays year day and month to the time in str because
// curl_getdate no longer assumes the day is today
@@ -543,10 +555,8 @@ double cmCTestRunTest::ResolveTimeout()
lctime->tm_mon + 1,
lctime->tm_mday,
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);
if(stop_time == -1)
{
@@ -558,7 +568,7 @@ double cmCTestRunTest::ResolveTimeout()
{
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)
{
@@ -567,7 +577,8 @@ double cmCTestRunTest::ResolveTimeout()
exit(-1);
}
#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));
}
//----------------------------------------------------------------------
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index c6a3849..098bd7a 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -2557,10 +2557,22 @@ void cmCTest::DetermineNextDayStop()
time_t current_time = time(0);
lctime = gmtime(&current_time);
int gm_hour = lctime->tm_hour;
+ time_t gm_time = mktime(lctime);
lctime = localtime(&current_time);
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];
sprintf(buf, "%d%02d%02d %s %+05i",
lctime->tm_year + 1900,
diff --git a/Tests/CTestTestStopTime/test.cmake.in b/Tests/CTestTestStopTime/test.cmake.in
index 0d664ad..6a5534e 100644
--- a/Tests/CTestTestStopTime/test.cmake.in
+++ b/Tests/CTestTestStopTime/test.cmake.in
@@ -25,8 +25,8 @@ CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
GET_DATE()
-message("original time: ${${GD_PREFIX}HOUR}:${${GD_PREFIX}MINUTE}:${${GD_PREFIX}SECOND}")
-ADD_SECONDS(25)
+message("curr time: ${${GD_PREFIX}HOUR}:${${GD_PREFIX}MINUTE}:${${GD_PREFIX}SECOND}")
+ADD_SECONDS(15)
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}")