--- a/mercurial/cmdutil.py Mon Jun 11 21:09:24 2007 -0500
+++ b/mercurial/cmdutil.py Mon Jun 11 21:09:24 2007 -0500
@@ -11,6 +11,59 @@
revrangesep = ':'
+def runcommand(u, options, d):
+ # enter the debugger before command execution
+ if options['debugger']:
+ pdb.set_trace()
+
+ try:
+ try:
+ if options['profile']:
+ import hotshot, hotshot.stats
+ prof = hotshot.Profile("hg.prof")
+ try:
+ try:
+ return prof.runcall(d)
+ except:
+ try:
+ u.warn(_('exception raised - generating '
+ 'profile anyway\n'))
+ except:
+ pass
+ raise
+ finally:
+ prof.close()
+ stats = hotshot.stats.load("hg.prof")
+ stats.strip_dirs()
+ stats.sort_stats('time', 'calls')
+ stats.print_stats(40)
+ elif options['lsprof']:
+ try:
+ from mercurial import lsprof
+ except ImportError:
+ raise util.Abort(_(
+ 'lsprof not available - install from '
+ 'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/'))
+ p = lsprof.Profiler()
+ p.enable(subcalls=True)
+ try:
+ return d()
+ finally:
+ p.disable()
+ stats = lsprof.Stats(p.getstats())
+ stats.sort()
+ stats.pprint(top=10, file=sys.stderr, climit=5)
+ else:
+ return d()
+ finally:
+ u.flush()
+ except:
+ # enter the debugger when we hit an exception
+ if options['debugger']:
+ pdb.post_mortem(sys.exc_info()[2])
+ u.print_exc()
+ raise
+
def parseurl(url, revs):
'''parse url#branch, returning url, branch + revs'''