/usr/bin/thg is in tortoisehg 3.7.3-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | #! /usr/bin/python
#
# thg - front-end script for TortoiseHg dialogs
#
# Copyright (C) 2008-2011 Steve Borho <steve@borho.org>
# Copyright (C) 2008 TK Soh <teekaysoh@gmail.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2, incorporated herein by reference.
import os
import sys
argv = sys.argv[1:]
if 'THG_OSX_APP' in os.environ:
# Remove the -psn argument supplied by launchd (if present - it's not
# on 10.9)
if len(argv) > 0 and argv[0].startswith('-psn'):
argv = argv[1:]
# sys.path as created by py2app doesn't work quite right with demandimport
# Add the explicit path where PyQt4 and other libs are
bundlepath = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, os.path.join(bundlepath, 'lib/python2.6/lib-dynload'))
if hasattr(sys, "frozen"):
if sys.frozen == 'windows_exe':
# sys.stdin is invalid, should be None. Fixes svn, git subrepos
sys.stdin = None
if 'THGDEBUG' in os.environ:
import win32traceutil
print 'starting'
# os.Popen() needs this, and Mercurial still uses os.Popen
if 'COMSPEC' not in os.environ and os.name == 'nt':
comspec = os.path.join(os.environ.get('SystemRoot', r'C:\Windows'),
'system32', 'cmd.exe')
os.environ['COMSPEC'] = comspec
else:
thgpath = os.path.dirname(os.path.realpath(__file__))
testpath = os.path.join(thgpath, 'tortoisehg')
if os.path.isdir(testpath) and thgpath not in sys.path:
sys.path.insert(0, thgpath)
# compile .ui and .qrc for in-place use
fpath = os.path.realpath(__file__)
if os.path.exists(os.path.join(os.path.dirname(fpath), 'setup.py')):
# allow setuptools to patch distutils before we import Distribution
from setup import build_ui
from distutils.dist import Distribution
build_ui(Distribution()).run()
if 'HGPATH' in os.environ:
hgpath = os.environ['HGPATH']
testpath = os.path.join(hgpath, 'mercurial')
if os.path.isdir(testpath) and hgpath not in sys.path:
sys.path.insert(0, hgpath)
# Make sure to load threading by main thread; otherwise, _MainThread instance
# may have wrong thread id and results KeyError at exit.
import threading
from mercurial import demandimport
demandimport.ignore.append('win32com.shell')
demandimport.ignore.append('numpy') # comtypes.npsupport does try-import
demandimport.ignore.append('tortoisehg.util.config')
demandimport.ignore.append('icons_rc')
demandimport.ignore.append('translations_rc')
# pygments seems to have trouble on loading plugins (see #4271, #4298)
demandimport.ignore.extend(['pkgutil', 'pkg_resources'])
demandimport.enable()
# Verify we can reach TortoiseHg sources first
try:
import tortoisehg.hgqt.run
except ImportError, e:
sys.stderr.write(str(e)+'\n')
sys.stderr.write("abort: couldn't find tortoisehg libraries in [%s]\n" %
os.pathsep.join(sys.path))
sys.stderr.write("(check your install and PYTHONPATH)\n")
sys.exit(-1)
# Verify we have an acceptable version of Mercurial
from tortoisehg.util.hgversion import hgversion, checkhgversion
errmsg = checkhgversion(hgversion)
if errmsg:
from mercurial import ui
from tortoisehg.hgqt.bugreport import run
from tortoisehg.hgqt.run import qtrun
opts = {}
opts['cmd'] = ' '.join(argv)
opts['error'] = '\n' + errmsg + '\n'
opts['nofork'] = True
qtrun(run, ui.ui(), **opts)
sys.exit(1)
if ('THGDEBUG' in os.environ or '--profile' in sys.argv
or getattr(sys, 'frozen', None) != 'windows_exe'):
sys.exit(tortoisehg.hgqt.run.dispatch(argv))
else:
import cStringIO
mystderr = cStringIO.StringIO()
origstderr = sys.stderr
sys.stderr = mystderr
sys.__stdout__ = sys.stdout
sys.__stderr__ = sys.stderr
ret = 0
try:
ret = tortoisehg.hgqt.run.dispatch(argv)
sys.stderr = origstderr
stderrout = mystderr.getvalue()
errors = ('Traceback', 'TypeError', 'NameError', 'AttributeError',
'NotImplementedError')
for l in stderrout.splitlines():
if l.startswith(errors):
from mercurial import ui
from tortoisehg.hgqt.bugreport import run
from tortoisehg.hgqt.run import qtrun
opts = {}
opts['cmd'] = ' '.join(argv)
opts['error'] = 'Recoverable error (stderr):\n' + stderrout
opts['nofork'] = True
qtrun(run, ui.ui(), **opts)
break
sys.exit(ret)
except KeyboardInterrupt:
sys.exit(-1)
except SystemExit:
raise
except:
sys.__stderr__ = sys.stderr = origstderr
raise
|