This file is indexed.

/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