diff options
author | Steven Knight <knight@baldmt.com> | 2005-06-02 21:54:58 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2005-06-02 21:54:58 (GMT) |
commit | 97bdb1f4e23bac6d3b3d02f855c5a25882212afb (patch) | |
tree | aad52cb29da8e5b54f393dcf93c0c2e8b9961fcd | |
parent | 08db2bcf45cc262fb87acac1b008e74a86418349 (diff) | |
download | SCons-97bdb1f4e23bac6d3b3d02f855c5a25882212afb.zip SCons-97bdb1f4e23bac6d3b3d02f855c5a25882212afb.tar.gz SCons-97bdb1f4e23bac6d3b3d02f855c5a25882212afb.tar.bz2 |
Don't print duplicate stats when --profile is used.
-rw-r--r-- | src/engine/SCons/Script/Main.py | 21 | ||||
-rw-r--r-- | test/option/profile.py (renamed from test/option--profile.py) | 41 |
2 files changed, 39 insertions, 23 deletions
diff --git a/src/engine/SCons/Script/Main.py b/src/engine/SCons/Script/Main.py index cdf0139..d5be3eb 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 index 412b8ce..b6a0027 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() |