Print statistics even when we terminate early (e.g. using -h).
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 2 Jun 2005 13:40:28 +0000 (13:40 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 2 Jun 2005 13:40:28 +0000 (13:40 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1304 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/engine/SCons/Script/Main.py
test/option/debug-count.py
test/option/debug-memoizer.py
test/option/debug-memory.py

index 73f6a6c68396bc5168d14e0812822b03b4c28348..cdf0139c13d72744505015b3f83af864fd8109b2 100644 (file)
@@ -295,12 +295,13 @@ class CountStats(Stats):
         l = len(self.stats)
         fmt1 = string.join(pre + [' %7s']*l + post, '')
         fmt2 = string.join(pre + [' %7d']*l + post, '')
-        self.labels.append(("", "Class"))
-        self.outfp.write(fmt1 % tuple(map(lambda x: x[0], self.labels)))
-        self.outfp.write(fmt1 % tuple(map(lambda x: x[1], self.labels)))
+        labels = self.labels[:l]
+        labels.append(("", "Class"))
+        self.outfp.write(fmt1 % tuple(map(lambda x: x[0], labels)))
+        self.outfp.write(fmt1 % tuple(map(lambda x: x[1], labels)))
         for k in keys:
-            r = stats_table[k]
-            self.outfp.write(fmt2 % (r[0], r[1], r[2], r[3], k))
+            r = stats_table[k][:l] + [k]
+            self.outfp.write(fmt2 % tuple(r))
 
 count_stats = CountStats()
 
@@ -1174,25 +1175,7 @@ def _main(args, parser):
             SCons.SConsign.write()
 
     memory_stats.append('after building targets:')
-    memory_stats.print_stats()
-
     count_stats.append(('post-', 'build'))
-    count_stats.print_stats()
-
-    if print_objects:
-        SCons.Debug.listLoggedInstances('*')
-        #SCons.Debug.dumpLoggedInstances('*')
-
-    if print_memoizer:
-        print "Memoizer (memory cache) hits and misses:"
-        SCons.Memoize.Dump()
-
-    # Dump any development debug info that may have been enabled.
-    # These are purely for internal debugging during development, so
-    # there's no need to control them with --debug= options; they're
-    # controlled by changing the source code.
-    SCons.Debug.dump_caller_counts()
-    SCons.Taskmaster.dump_stats()
 
 def _exec_main():
     all_args = sys.argv[1:]
@@ -1234,6 +1217,24 @@ def main():
         SCons.Script._SConscript.SConscript_exception()
         sys.exit(2)
 
+    memory_stats.print_stats()
+    count_stats.print_stats()
+
+    if print_objects:
+        SCons.Debug.listLoggedInstances('*')
+        #SCons.Debug.dumpLoggedInstances('*')
+
+    if print_memoizer:
+        print "Memoizer (memory cache) hits and misses:"
+        SCons.Memoize.Dump()
+
+    # Dump any development debug info that may have been enabled.
+    # These are purely for internal debugging during development, so
+    # there's no need to control them with --debug= options; they're
+    # controlled by changing the source code.
+    SCons.Debug.dump_caller_counts()
+    SCons.Taskmaster.dump_stats()
+
     if print_time:
         total_time = time.time()-SCons.Script.start_time
         scons_time = total_time-sconscript_time-command_time
index ca627e88fe9568344a53c3d5c770f589096a3dc1..3cb924b7f9734092a96c2cb3e5d48a213b647382 100644 (file)
@@ -56,11 +56,9 @@ test.write('file.in', "file.in\n")
 
 # Just check that object counts for some representative classes
 # show up in the output.
-test.run(arguments = "--debug=count")
-stdout = test.stdout()
 
 def find_object_count(s, stdout):
-    re_string = '\d+ +\d+ +\d+ +\d+   %s' % re.escape(s)
+    re_string = '\d+ +\d+   %s' % re.escape(s)
     return re.search(re_string, stdout)
 
 objects = [
@@ -73,14 +71,18 @@ objects = [
     'Node.Node',
 ]
 
-missing = filter(lambda o: find_object_count(o, stdout) is None, objects)
+for args in ['-h --debug=count', '--debug=count']:
+    test.run(arguments = args)
+    stdout = test.stdout()
 
-if missing:
-    print "Missing the following object lines:"
-    print "\t", string.join(missing)
-    print "STDOUT =========="
-    print stdout
-    test.fail_test(1)
+    missing = filter(lambda o: find_object_count(o, stdout) is None, objects)
+
+    if missing:
+        print "Missing the following object lines from '%s' output:" % args
+        print "\t", string.join(missing)
+        print "STDOUT =========="
+        print stdout
+        test.fail_test(1)
 
 
 test.pass_test()
index 4249ca6bd3657b91ddb0737b481a626fb2583e43..c9f001cfcfb905c5d01ad1bfbd19f7111d2d1b82 100644 (file)
@@ -51,20 +51,20 @@ test.write('file.in', "file.in\n")
 expect = [
     "Memoizer (memory cache) hits and misses",
     "Dir.exists()",
-    "Executor.get_contents()",
-    "File._save_str()",
-    "SConsEnvironment.get_calculator()",
+    "File.exists()",
+    "SConsEnvironment.Detect()",
 ]
 
-test.run(arguments = '--debug=memoizer')
-stdout = test.stdout()
-missing = filter(lambda e, s=stdout: string.find(s, e) == -1, expect)
-if missing:
-    print "Missing the following strings in the command line --debug=memoizer output:"
-    print "    " + string.join(missing, "\n    ")
-    print "STDOUT ============"
-    print stdout
-    test.fail_test(1)
+for args in ['-h --debug=memoizer', '--debug=memoizer']:
+    test.run(arguments = args)
+    stdout = test.stdout()
+    missing = filter(lambda e, s=stdout: string.find(s, e) == -1, expect)
+    if missing:
+        print "Missing the following strings in the command line '%s' output:" % args
+        print "    " + string.join(missing, "\n    ")
+        print "STDOUT ============"
+        print stdout
+        test.fail_test(1)
 
 test.must_match('file.out', "file.in\n")
 
index 3c3aebd1b868a4c6346e4c2fab58e1c6d24e2bec..2812f5024e782fd8e1072307f3f216b7728e0ea0 100644 (file)
@@ -54,7 +54,9 @@ env.Cat('file.out', 'file.in')
 
 test.write('file.in', "file.in\n")
 
-test.run(arguments = "--debug=memory")
+
+
+test.run(arguments = '--debug=memory')
 
 lines = string.split(test.stdout(), '\n')
 
@@ -65,4 +67,13 @@ test.fail_test(re.match(r'Memory after building targets: +\d+', lines[-2]) is No
 
 
 
+test.run(arguments = '-h --debug=memory')
+
+lines = string.split(test.stdout(), '\n')
+
+test.fail_test(re.match(r'Memory before reading SConscript files: +\d+', lines[-3]) is None)
+test.fail_test(re.match(r'Memory after reading SConscript files: +\d+', lines[-2]) is None)
+
+
+
 test.pass_test()