Don't print duplicate stats when --profile is used.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 2 Jun 2005 21:54:58 +0000 (21:54 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 2 Jun 2005 21:54:58 +0000 (21:54 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1306 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/engine/SCons/Script/Main.py
test/option/profile.py [moved from test/option--profile.py with 64% similarity]

index cdf0139c13d72744505015b3f83af864fd8109b2..d5be3ebac382276bdb4cc341784ff0dc9bf35fdf 100644 (file)
@@ -255,7 +255,6 @@ ignore_errors = 0
 sconscript_time = 0
 command_time = 0
 exit_status = 0 # exit status, assume success by default
-profiling = 0
 repositories = []
 num_jobs = 1 # this is modifed by SConscript.SetJobs()
 
@@ -676,16 +675,8 @@ class OptParser(OptionParser):
                         '--recon', action="store_true", dest='noexec',
                         default=0, help="Don't build; just print commands.")
 
-        def opt_profile(option, opt, value, parser):
-            global profiling
-            if not profiling:
-                profiling = 1
-                import profile
-                profile.run('SCons.Script.Main.main()', value)
-                sys.exit(exit_status)
-        self.add_option('--profile', nargs=1, action="callback",
-                        callback=opt_profile, type="string", dest="profile",
-                        metavar="FILE",
+        self.add_option('--profile', action="store",
+                        dest="profile_file", metavar="FILE",
                         help="Profile SCons and put results in FILE.")
 
         self.add_option('-q', '--question', action="store_true", default=0,
@@ -1190,6 +1181,14 @@ def _exec_main():
     if type(options.debug) == type([]) and "pdb" in options.debug:
         import pdb
         pdb.Pdb().runcall(_main, args, parser)
+    elif options.profile_file:
+        import profile
+        prof = profile.Profile()
+        try:
+            prof.runcall(_main, args, parser)
+        except SystemExit:
+            pass
+        prof.dump_stats(options.profile_file)
     else:
         _main(args, parser)
 
similarity index 64%
rename from test/option--profile.py
rename to test/option/profile.py
index 412b8ced11095364a337b7d79d0af6b30c9a7a00..b6a0027946feb45270265efd183e4f618e04aa3e 100644 (file)
@@ -33,12 +33,13 @@ import TestSCons
 
 test = TestSCons.TestSCons()
 
+test.write('SConstruct', "\n")
+
 scons_prof = test.workpath('scons.prof')
 
-test.run(arguments = "--profile=%s -v " % scons_prof)
-test.fail_test(string.find(test.stdout(), 'SCons by ') == -1)
-test.fail_test(string.find(test.stdout(), 'Copyright') == -1 and
-               string.find(test.stdout(), '__COPYRIGHT__') == -1)
+test.run(arguments = "--profile=%s -h" % scons_prof)
+test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
+test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
 
 stats = pstats.Stats(scons_prof)
 stats.sort_stats('time')
@@ -54,17 +55,17 @@ finally:
     sys.stdout = save_stdout
 
 test.fail_test(string.find(s, 'Main.py') == -1)
-test.fail_test(string.find(s, 'print_version') == -1)
-test.fail_test(string.find(s, 'SCons.Script.Main.main()') == -1)
+test.fail_test(string.find(s, 'print_help') == -1)
+test.fail_test(string.find(s, '_main') == -1)
 test.fail_test(string.find(s, 'option_parser.py') == -1)
 
 
+
 scons_prof = test.workpath('scons2.prof')
 
-test.run(arguments = "--profile %s -v " % scons_prof)
-test.fail_test(string.find(test.stdout(), 'SCons by ') == -1)
-test.fail_test(string.find(test.stdout(), 'Copyright') == -1 and
-               string.find(test.stdout(), '__COPYRIGHT__') == -1)
+test.run(arguments = "--profile %s -h" % scons_prof)
+test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
+test.fail_test(string.find(test.stdout(), 'Options:') == -1)
 
 stats = pstats.Stats(scons_prof)
 stats.sort_stats('time')
@@ -76,9 +77,25 @@ stats.strip_dirs().print_stats()
 s = sys.stdout.getvalue()
 
 test.fail_test(string.find(s, 'Main.py') == -1)
-test.fail_test(string.find(s, 'print_version') == -1)
-test.fail_test(string.find(s, 'SCons.Script.Main.main()') == -1)
+test.fail_test(string.find(s, 'print_help') == -1)
+test.fail_test(string.find(s, '_main') == -1)
 test.fail_test(string.find(s, 'option_parser.py') == -1)
+
+
+
+scons_prof = test.workpath('scons3.prof')
+
+test.run(arguments = "--profile %s --debug=memory -h" % scons_prof)
+print test.stdout()
+test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
+test.fail_test(string.find(test.stdout(), 'Options:') == -1)
+
+expect = 'Memory before reading SConscript files'
+lines = string.split(test.stdout(), '\n')
+memory_lines = filter(lambda l, e=expect: string.find(l, e) != -1, lines)
+
+test.fail_test(len(memory_lines) != 1)
+
  
 
 test.pass_test()