9 import os, sys, atexit, signal, pdb, socket, errno, shlex, time, traceback, re |
9 import os, sys, atexit, signal, pdb, socket, errno, shlex, time, traceback, re |
10 import util, commands, hg, fancyopts, extensions, hook, error |
10 import util, commands, hg, fancyopts, extensions, hook, error |
11 import cmdutil, encoding |
11 import cmdutil, encoding |
12 import ui as uimod |
12 import ui as uimod |
13 |
13 |
|
14 class request(object): |
|
15 def __init__(self, args): |
|
16 self.args = args |
|
17 |
14 def run(): |
18 def run(): |
15 "run the command in sys.argv" |
19 "run the command in sys.argv" |
16 sys.exit(dispatch(sys.argv[1:])) |
20 sys.exit(dispatch(request(sys.argv[1:]))) |
17 |
21 |
18 def dispatch(args): |
22 def dispatch(req): |
19 "run the command specified in args" |
23 "run the command specified in req.args" |
20 try: |
24 try: |
21 u = uimod.ui() |
25 u = uimod.ui() |
22 if '--traceback' in args: |
26 if '--traceback' in req.args: |
23 u.setconfig('ui', 'traceback', 'on') |
27 u.setconfig('ui', 'traceback', 'on') |
24 except util.Abort, inst: |
28 except util.Abort, inst: |
25 sys.stderr.write(_("abort: %s\n") % inst) |
29 sys.stderr.write(_("abort: %s\n") % inst) |
26 if inst.hint: |
30 if inst.hint: |
27 sys.stderr.write(_("(%s)\n") % inst.hint) |
31 sys.stderr.write(_("(%s)\n") % inst.hint) |
31 sys.stderr.write(_("hg: parse error at %s: %s\n") % |
35 sys.stderr.write(_("hg: parse error at %s: %s\n") % |
32 (inst.args[1], inst.args[0])) |
36 (inst.args[1], inst.args[0])) |
33 else: |
37 else: |
34 sys.stderr.write(_("hg: parse error: %s\n") % inst.args[0]) |
38 sys.stderr.write(_("hg: parse error: %s\n") % inst.args[0]) |
35 return -1 |
39 return -1 |
36 return _runcatch(u, args) |
40 return _runcatch(u, req) |
37 |
41 |
38 def _runcatch(ui, args): |
42 def _runcatch(ui, req): |
39 def catchterm(*args): |
43 def catchterm(*args): |
40 raise error.SignalInterrupt |
44 raise error.SignalInterrupt |
41 |
45 |
42 try: |
46 try: |
43 for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM': |
47 for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM': |
48 pass # happens if called in a thread |
52 pass # happens if called in a thread |
49 |
53 |
50 try: |
54 try: |
51 try: |
55 try: |
52 # enter the debugger before command execution |
56 # enter the debugger before command execution |
53 if '--debugger' in args: |
57 if '--debugger' in req.args: |
54 ui.warn(_("entering debugger - " |
58 ui.warn(_("entering debugger - " |
55 "type c to continue starting hg or h for help\n")) |
59 "type c to continue starting hg or h for help\n")) |
56 pdb.set_trace() |
60 pdb.set_trace() |
57 try: |
61 try: |
58 return _dispatch(ui, args) |
62 return _dispatch(ui, req) |
59 finally: |
63 finally: |
60 ui.flush() |
64 ui.flush() |
61 except: |
65 except: |
62 # enter the debugger when we hit an exception |
66 # enter the debugger when we hit an exception |
63 if '--debugger' in args: |
67 if '--debugger' in req.args: |
64 traceback.print_exc() |
68 traceback.print_exc() |
65 pdb.post_mortem(sys.exc_info()[2]) |
69 pdb.post_mortem(sys.exc_info()[2]) |
66 ui.traceback() |
70 ui.traceback() |
67 raise |
71 raise |
68 |
72 |
484 |
488 |
485 commands.norepo = norepo |
489 commands.norepo = norepo |
486 os.chdir(cwd) |
490 os.chdir(cwd) |
487 |
491 |
488 _loaded = set() |
492 _loaded = set() |
489 def _dispatch(ui, args): |
493 def _dispatch(ui, req): |
|
494 args = req.args |
490 shellaliasfn = _checkshellalias(ui, args) |
495 shellaliasfn = _checkshellalias(ui, args) |
491 if shellaliasfn: |
496 if shellaliasfn: |
492 return shellaliasfn() |
497 return shellaliasfn() |
493 |
498 |
494 # read --config before doing anything else |
499 # read --config before doing anything else |
594 if cmd not in commands.optionalrepo.split(): |
599 if cmd not in commands.optionalrepo.split(): |
595 if args and not path: # try to infer -R from command args |
600 if args and not path: # try to infer -R from command args |
596 repos = map(cmdutil.findrepo, args) |
601 repos = map(cmdutil.findrepo, args) |
597 guess = repos[0] |
602 guess = repos[0] |
598 if guess and repos.count(guess) == len(repos): |
603 if guess and repos.count(guess) == len(repos): |
599 return _dispatch(ui, ['--repository', guess] + fullargs) |
604 req.args = ['--repository', guess] + fullargs |
|
605 return _dispatch(ui, req) |
600 if not path: |
606 if not path: |
601 raise error.RepoError(_("no repository found in %r" |
607 raise error.RepoError(_("no repository found in %r" |
602 " (.hg not found)") % os.getcwd()) |
608 " (.hg not found)") % os.getcwd()) |
603 raise |
609 raise |
604 args.insert(0, repo) |
610 args.insert(0, repo) |