8 from node import * |
8 from node import * |
9 from i18n import _ |
9 from i18n import _ |
10 import os, sys, mdiff, bdiff, util, templater, patch |
10 import os, sys, mdiff, bdiff, util, templater, patch |
11 |
11 |
12 revrangesep = ':' |
12 revrangesep = ':' |
|
13 |
|
14 def runcommand(u, options, d): |
|
15 # enter the debugger before command execution |
|
16 if options['debugger']: |
|
17 pdb.set_trace() |
|
18 |
|
19 try: |
|
20 try: |
|
21 if options['profile']: |
|
22 import hotshot, hotshot.stats |
|
23 prof = hotshot.Profile("hg.prof") |
|
24 try: |
|
25 try: |
|
26 return prof.runcall(d) |
|
27 except: |
|
28 try: |
|
29 u.warn(_('exception raised - generating ' |
|
30 'profile anyway\n')) |
|
31 except: |
|
32 pass |
|
33 raise |
|
34 finally: |
|
35 prof.close() |
|
36 stats = hotshot.stats.load("hg.prof") |
|
37 stats.strip_dirs() |
|
38 stats.sort_stats('time', 'calls') |
|
39 stats.print_stats(40) |
|
40 elif options['lsprof']: |
|
41 try: |
|
42 from mercurial import lsprof |
|
43 except ImportError: |
|
44 raise util.Abort(_( |
|
45 'lsprof not available - install from ' |
|
46 'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/')) |
|
47 p = lsprof.Profiler() |
|
48 p.enable(subcalls=True) |
|
49 try: |
|
50 return d() |
|
51 finally: |
|
52 p.disable() |
|
53 stats = lsprof.Stats(p.getstats()) |
|
54 stats.sort() |
|
55 stats.pprint(top=10, file=sys.stderr, climit=5) |
|
56 else: |
|
57 return d() |
|
58 finally: |
|
59 u.flush() |
|
60 except: |
|
61 # enter the debugger when we hit an exception |
|
62 if options['debugger']: |
|
63 pdb.post_mortem(sys.exc_info()[2]) |
|
64 u.print_exc() |
|
65 raise |
13 |
66 |
14 def parseurl(url, revs): |
67 def parseurl(url, revs): |
15 '''parse url#branch, returning url, branch + revs''' |
68 '''parse url#branch, returning url, branch + revs''' |
16 |
69 |
17 if '#' not in url: |
70 if '#' not in url: |