From: stevenknight Date: Thu, 2 Jun 2005 21:54:58 +0000 (+0000) Subject: Don't print duplicate stats when --profile is used. X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=917c9359159843c492539953fbc6694da1267d60;p=scons.git Don't print duplicate stats when --profile is used. git-svn-id: http://scons.tigris.org/svn/scons/trunk@1306 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- diff --git a/src/engine/SCons/Script/Main.py b/src/engine/SCons/Script/Main.py index cdf0139c..d5be3eba 100644 --- a/src/engine/SCons/Script/Main.py +++ b/src/engine/SCons/Script/Main.py @@ -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) diff --git a/test/option--profile.py b/test/option/profile.py similarity index 64% rename from test/option--profile.py rename to test/option/profile.py index 412b8ced..b6a00279 100644 --- a/test/option--profile.py +++ b/test/option/profile.py @@ -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()