Index: cfe/trunk/tools/scan-build-py/libscanbuild/report.py =================================================================== --- cfe/trunk/tools/scan-build-py/libscanbuild/report.py +++ cfe/trunk/tools/scan-build-py/libscanbuild/report.py @@ -21,6 +21,7 @@ import json import logging import contextlib +import datetime from libscanbuild import duplicate_check from libscanbuild.clang import get_version @@ -34,7 +35,8 @@ hint -- could specify the parent directory of the output directory. keep -- a boolean value to keep or delete the empty report directory. """ - stamp = time.strftime('scan-build-%Y-%m-%d-%H%M%S-', time.localtime()) + stamp_format = 'scan-build-%Y-%m-%d-%H-%M-%S-%f-' + stamp = datetime.datetime.now().strftime(stamp_format) parentdir = os.path.abspath(hint) if not os.path.exists(parentdir): Index: cfe/trunk/tools/scan-build-py/tests/unit/test_report.py =================================================================== --- cfe/trunk/tools/scan-build-py/tests/unit/test_report.py +++ cfe/trunk/tools/scan-build-py/tests/unit/test_report.py @@ -146,3 +146,16 @@ def test_empty(self): self.assertEqual( sut.commonprefix([]), '') + +class ReportDirectoryTest(unittest.TestCase): + + # Test that successive report directory names ascend in lexicographic + # order. This is required so that report directories from two runs of + # scan-build can be easily matched up to compare results. + def test_directory_name_comparison(self): + with libear.TemporaryDirectory() as tmpdir, \ + sut.report_directory(tmpdir, False) as report_dir1, \ + sut.report_directory(tmpdir, False) as report_dir2, \ + sut.report_directory(tmpdir, False) as report_dir3: + self.assertLess(report_dir1, report_dir2) + self.assertLess(report_dir2, report_dir3)