##// END OF EJS Templates
dispatch: hoist debugging hook to runcatch
Matt Mackall -
r4550:6ed91894 default
parent child Browse files
Show More
@@ -29,7 +29,21 b' def runcatch(u, args):'
29 if num: signal.signal(num, catchterm)
29 if num: signal.signal(num, catchterm)
30
30
31 try:
31 try:
32 return dispatch(u, args)
32 try:
33 # enter the debugger before command execution
34 if '--debugger' in args:
35 pdb.set_trace()
36 try:
37 return dispatch(u, args)
38 finally:
39 u.flush()
40 except:
41 # enter the debugger when we hit an exception
42 if '--debugger' in args:
43 pdb.post_mortem(sys.exc_info()[2])
44 u.print_exc()
45 raise
46
33 except ParseError, inst:
47 except ParseError, inst:
34 if inst.args[0]:
48 if inst.args[0]:
35 u.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1]))
49 u.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1]))
@@ -281,57 +295,43 b' def dispatch(u, args):'
281 return runcommand(u, options, d)
295 return runcommand(u, options, d)
282
296
283 def runcommand(u, options, d):
297 def runcommand(u, options, d):
284 # enter the debugger before command execution
298 if options['profile']:
285 if options['debugger']:
299 import hotshot, hotshot.stats
286 pdb.set_trace()
300 prof = hotshot.Profile("hg.prof")
287
288 try:
289 try:
301 try:
290 if options['profile']:
302 try:
291 import hotshot, hotshot.stats
303 return prof.runcall(d)
292 prof = hotshot.Profile("hg.prof")
304 except:
293 try:
305 try:
294 try:
306 u.warn(_('exception raised - generating '
295 return prof.runcall(d)
307 'profile anyway\n'))
296 except:
308 except:
297 try:
309 pass
298 u.warn(_('exception raised - generating '
310 raise
299 'profile anyway\n'))
300 except:
301 pass
302 raise
303 finally:
304 prof.close()
305 stats = hotshot.stats.load("hg.prof")
306 stats.strip_dirs()
307 stats.sort_stats('time', 'calls')
308 stats.print_stats(40)
309 elif options['lsprof']:
310 try:
311 from mercurial import lsprof
312 except ImportError:
313 raise util.Abort(_(
314 'lsprof not available - install from '
315 'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/'))
316 p = lsprof.Profiler()
317 p.enable(subcalls=True)
318 try:
319 return d()
320 finally:
321 p.disable()
322 stats = lsprof.Stats(p.getstats())
323 stats.sort()
324 stats.pprint(top=10, file=sys.stderr, climit=5)
325 else:
326 return d()
327 finally:
311 finally:
328 u.flush()
312 prof.close()
329 except:
313 stats = hotshot.stats.load("hg.prof")
330 # enter the debugger when we hit an exception
314 stats.strip_dirs()
331 if options['debugger']:
315 stats.sort_stats('time', 'calls')
332 pdb.post_mortem(sys.exc_info()[2])
316 stats.print_stats(40)
333 u.print_exc()
317 elif options['lsprof']:
334 raise
318 try:
319 from mercurial import lsprof
320 except ImportError:
321 raise util.Abort(_(
322 'lsprof not available - install from '
323 'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/'))
324 p = lsprof.Profiler()
325 p.enable(subcalls=True)
326 try:
327 return d()
328 finally:
329 p.disable()
330 stats = lsprof.Stats(p.getstats())
331 stats.sort()
332 stats.pprint(top=10, file=sys.stderr, climit=5)
333 else:
334 return d()
335
335
336 def bail_if_changed(repo):
336 def bail_if_changed(repo):
337 modified, added, removed, deleted = repo.status()[:4]
337 modified, added, removed, deleted = repo.status()[:4]
General Comments 0
You need to be logged in to leave comments. Login now