Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.9, 0.9.1, and 0.9.1.1

hgtk: make forking and stderr capture ui configurable

Changeset 4a78f577647b

Parent bc8ce9f33b50

by Steve Borho

Changes to 2 files · Browse files at 4a78f577647b Showing diff from parent bc8ce9f33b50 Diff from another changeset...

 
55
56
57
58
 
 
 
 
 
 
 
59
60
61
 
55
56
57
 
58
59
60
61
62
63
64
65
66
67
@@ -55,7 +55,13 @@
  (_('Bottom Diffs'), 'gtools.diffbottom', ['False', 'True'],   _('Show the diff panel below the file list in status, shelve, and'   ' commit dialogs.' - ' Default: False (show diffs to right of file list)'))) + ' Default: False (show diffs to right of file list)')), + (_('Capture Stderr'), 'tortoisehg.stderrcapt', ['True', 'False'], + _('Redirect stderr to a buffer which is parsed at the end of' + ' the process for runtime errors. Default: True')), + (_('Fork hgtk'), 'tortoisehg.hgtkfork', ['True', 'False'], + _('When running hgtk from the command line, fork a background' + ' process to run graphical dialogs. Default: True')))    _commit_info = (   (_('Username'), 'ui.username', [],
Change 1 of 2 Show Changes Only hgtk Stacked
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
 
 
 
 
 
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
 #!/usr/bin/env python  #  # front-end script for TortoiseHg dialogs  #  # Copyright (C) 2008-9 Steve Borho <steve@borho.org>  # Copyright (C) 2008 TK Soh <teekaysoh@gmail.com>  #    import os  import sys    def portable_fork():   # Spawn background process and exit   if sys.platform[:3] == 'win':   if 'THG_HGTK_SPAWN' not in os.environ:   if hasattr(sys, "frozen"):   args = sys.argv   else:   args = [sys.executable] + sys.argv   args = ['"%s"' % arg for arg in args]   env = os.environ.copy()   env['THG_HGTK_SPAWN'] = '1'   os.spawnve(os.P_NOWAIT, sys.executable, args, env)   sys.exit(0)   else:   assert hasattr(os, 'fork')   if os.fork():   sys.exit(0)   -if '--nofork' not in sys.argv and 'HGTK_NOFORK' not in os.environ: +from mercurial import ui + +_ui = ui.ui() +fork = _ui.configbool('tortoisehg', 'hgtkfork', True) +capt = _ui.configbool('tortoisehg', 'stderrcapt', True) + +if fork and '--nofork' not in sys.argv:   for i, arg in enumerate(sys.argv):   if 'hgtk' in arg and len(sys.argv) > i+1:   cmd = sys.argv[i+1]   break   else:   cmd = None   if cmd not in ('version', 'help'):   portable_fork()    if hasattr(sys, "frozen"):   # Prepend C:\Program Files\TortoiseHg\gtk (equiv) to the path   from thgutil import paths   gtkpath = os.path.join(paths.bin_path, 'gtk')   os.environ['PATH'] = os.pathsep.join([gtkpath, os.environ['PATH']])  else:   # if hgtk is a symlink, insert symlink target directory in sys.path   thgpath = os.path.dirname(os.path.realpath(__file__))   testpath = os.path.join(thgpath, 'thgutil')   if os.path.isdir(testpath) and thgpath not in sys.path:   sys.path.insert(0, thgpath)      import pygtk  pygtk.require('2.0')  import gtk    from mercurial import demandimport;  demandimport.ignore.append('win32com.shell')  demandimport.enable()  import cStringIO    try:   import hggtk.hgtk  except ImportError:   sys.stderr.write("abort: couldn't find hggtk libraries in [%s]\n" %   ';'.join(sys.path))   sys.stderr.write("(check your install and PYTHONPATH)\n")   sys.exit(-1)   -if 'THGDEBUG' in os.environ: +if not capt or 'THGDEBUG' in os.environ:   sys.exit(hggtk.hgtk.dispatch(sys.argv[1:]))  else:   sys.stderr = cStringIO.StringIO()   ret = hggtk.hgtk.dispatch(sys.argv[1:])   sys.stderr.seek(0)   for l in sys.stderr.readlines():   if l.startswith('Traceback') or l.startswith('TypeError'):   from hggtk.bugreport import run   from hggtk.hgtk import gtkrun   from mercurial import ui   sys.stderr.seek(0)   error = 'Recoverable runtime error (stderr):\n' + sys.stderr.read()   opts = {}   opts['cmd'] = ' '.join(sys.argv[1:])   opts['error'] = error   gtkrun(run(ui.ui(), **opts))   break   sys.exit(ret)