$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r79475 - trunk/tools/build/v2/test
From: jurko.gospodnetic_at_[hidden]
Date: 2012-07-13 14:43:18
Author: jurko
Date: 2012-07-13 14:43:18 EDT (Fri, 13 Jul 2012)
New Revision: 79475
URL: http://svn.boost.org/trac/boost/changeset/79475
Log:
Boost Build testing system cleanup - separated the concept of the 'time when a test run finished' from 'highest timestamp assigned by a test run'. This is a tiny preparation step towards making Boost Build support timestamp resolutions finer than 1 second.
Text files modified: 
   trunk/tools/build/v2/test/BoostBuild.py |    25 +++++++++++++++++--------               
   1 files changed, 17 insertions(+), 8 deletions(-)
Modified: trunk/tools/build/v2/test/BoostBuild.py
==============================================================================
--- trunk/tools/build/v2/test/BoostBuild.py	(original)
+++ trunk/tools/build/v2/test/BoostBuild.py	2012-07-13 14:43:18 EDT (Fri, 13 Jul 2012)
@@ -213,7 +213,7 @@
             raise ("Parameter workdir <%s> must point to an absolute "
                 "directory: " % workdir)
 
-        self.last_build_time_finish = 0
+        self.last_build_timestamp = 0
         self.translate_suffixes = translate_suffixes
         self.use_test_config = use_test_config
 
@@ -383,7 +383,7 @@
         if names == ["."]:
             # If we are deleting the entire workspace, there is no need to wait
             # for a clock tick.
-            self.last_build_time_finish = 0
+            self.last_build_timestamp = 0
 
         # Avoid attempts to remove the current directory.
         os.chdir(self.original_workdir)
@@ -469,8 +469,9 @@
                 self.dump_stdio()
                 raise
         finally:
-            old_last_build_time_finish = self.last_build_time_finish
-            self.last_build_time_finish = time.time()
+            build_time_finish = time.time()
+            old_last_build_timestamp = self.last_build_timestamp
+            self.last_build_timestamp = self.__get_current_file_timestamp()
 
         if (status and self.status) is not None and self.status != status:
             expect = ''
@@ -506,7 +507,7 @@
             self.fail_test(1, dump_stdio=False)
 
         if expected_duration is not None:
-            actual_duration = self.last_build_time_finish - build_time_start
+            actual_duration = build_time_finish - build_time_start
             if actual_duration > expected_duration:
                 print("Test run lasted %f seconds while it was expected to "
                     "finish in under %f seconds." % (actual_duration,
@@ -520,7 +521,7 @@
             # passed since the last build that actually changed something,
             # there is no need to wait for touched or newly created files to
             # start getting newer timestamps than the currently existing ones.
-            self.last_build_time_finish = old_last_build_time_finish
+            self.last_build_timestamp = old_last_build_timestamp
 
         self.difference.ignore_directories()
         self.unexpected_difference = copy.deepcopy(self.difference)
@@ -897,12 +898,20 @@
             # In fact, I'm not sure why "+ 2" as opposed to "+ 1" is needed but
             # empirically, "+ 1" sometimes causes 'touch' and other functions
             # not to bump the file time enough for a rebuild to happen.
-            if (math.floor(time.time()) <
-                math.floor(self.last_build_time_finish) + 2):
+            if (math.floor(time.time()) < math.floor(self.last_build_timestamp)
+                + 2):
                 time.sleep(0.1)
             else:
                 break
 
+    def __get_current_file_timestamp(self):
+        fd, path = tempfile.mkstemp(prefix="__Boost_Build_timestamp_tester__")
+        try:
+            return os.fstat(fd).st_mtime
+        finally:
+            os.close(fd)
+            os.unlink(path)
+
 
 class List: