mercurial/cmdutil.py
changeset 4550 6ed91894261e
parent 4549 0c61124ad877
child 4551 61e33f1d44a8
equal deleted inserted replaced
4549:0c61124ad877 4550:6ed91894261e
    27     for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
    27     for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
    28         num = getattr(signal, name, None)
    28         num = getattr(signal, name, None)
    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]))
    36             commands.help_(u, inst.args[0])
    50             commands.help_(u, inst.args[0])
    37         else:
    51         else:
   279         d = lambda: func(u, *args, **cmdoptions)
   293         d = lambda: func(u, *args, **cmdoptions)
   280 
   294 
   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]
   338     if modified or added or removed or deleted:
   338     if modified or added or removed or deleted:
   339         raise util.Abort(_("outstanding uncommitted changes"))
   339         raise util.Abort(_("outstanding uncommitted changes"))