3304 raise |
3304 raise |
3305 d = lambda: func(u, repo, *args, **cmdoptions) |
3305 d = lambda: func(u, repo, *args, **cmdoptions) |
3306 else: |
3306 else: |
3307 d = lambda: func(u, *args, **cmdoptions) |
3307 d = lambda: func(u, *args, **cmdoptions) |
3308 |
3308 |
3309 return runcommand(u, options, d) |
3309 return cmdutil.runcommand(u, options, d) |
3310 |
3310 |
3311 def runcommand(u, options, d): |
|
3312 # enter the debugger before command execution |
|
3313 if options['debugger']: |
|
3314 pdb.set_trace() |
|
3315 |
|
3316 try: |
|
3317 try: |
|
3318 if options['profile']: |
|
3319 import hotshot, hotshot.stats |
|
3320 prof = hotshot.Profile("hg.prof") |
|
3321 try: |
|
3322 try: |
|
3323 return prof.runcall(d) |
|
3324 except: |
|
3325 try: |
|
3326 u.warn(_('exception raised - generating ' |
|
3327 'profile anyway\n')) |
|
3328 except: |
|
3329 pass |
|
3330 raise |
|
3331 finally: |
|
3332 prof.close() |
|
3333 stats = hotshot.stats.load("hg.prof") |
|
3334 stats.strip_dirs() |
|
3335 stats.sort_stats('time', 'calls') |
|
3336 stats.print_stats(40) |
|
3337 elif options['lsprof']: |
|
3338 try: |
|
3339 from mercurial import lsprof |
|
3340 except ImportError: |
|
3341 raise util.Abort(_( |
|
3342 'lsprof not available - install from ' |
|
3343 'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/')) |
|
3344 p = lsprof.Profiler() |
|
3345 p.enable(subcalls=True) |
|
3346 try: |
|
3347 return d() |
|
3348 finally: |
|
3349 p.disable() |
|
3350 stats = lsprof.Stats(p.getstats()) |
|
3351 stats.sort() |
|
3352 stats.pprint(top=10, file=sys.stderr, climit=5) |
|
3353 else: |
|
3354 return d() |
|
3355 finally: |
|
3356 u.flush() |
|
3357 except: |
|
3358 # enter the debugger when we hit an exception |
|
3359 if options['debugger']: |
|
3360 pdb.post_mortem(sys.exc_info()[2]) |
|
3361 u.print_exc() |
|
3362 raise |
|