~bialix/bzr/2.0-bug-523069

50 by mbp at sourcefrog
use "/usr/bin/env python" for shebang"
1
#! /usr/bin/env python
32 by mbp at sourcefrog
- Split commands into bzrlib.commands
2
4122.1.1 by Martin Pool
Merge back 1.13 and bump version to 1.14dev
3
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
4
#
32 by mbp at sourcefrog
- Split commands into bzrlib.commands
5
# This program is free software; you can redistribute it and/or modify
6
# it under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 2 of the License, or
8
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
9
#
32 by mbp at sourcefrog
- Split commands into bzrlib.commands
10
# This program is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
14
#
32 by mbp at sourcefrog
- Split commands into bzrlib.commands
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
17
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
18
1861.2.6 by Alexander Belchenko
branding: change Bazaar-NG to Bazaar
19
"""Bazaar -- a free distributed version-control tool"""
1724.2.1 by John Arbash Meinel
adding --profile-imports to a stock bzr.dev tree
20
21
import os
22
import sys
4445.1.1 by Martin Pool
Ignore deprecation warnings from inside gzip.py
23
import warnings
1724.2.1 by John Arbash Meinel
adding --profile-imports to a stock bzr.dev tree
24
3053.4.9 by Martin Pool
Prepare 1.0final!
25
# update this on each release
4760.1.1 by Vincent Ladeuil
Open 2.0.7 for bug fixes
26
_script_version = (2, 0, 7)
1724.2.1 by John Arbash Meinel
adding --profile-imports to a stock bzr.dev tree
27
1185.35.10 by Aaron Bentley
Error when run with -OO
28
if __doc__ is None:
29
    print "bzr does not support python -OO."
30
    sys.exit(2)
443 by Martin Pool
- Patch from Fredrik Lundh to check Python version and
31
try:
32
    version_info = sys.version_info
33
except AttributeError:
34
    version_info = 1, 5 # 1.5 or older
35
1185.16.129 by Martin Pool
Add check that the bzr program and bzrlib version match.
36
REINVOKE = "__BZR_REINVOKE"
974.1.1 by Aaron Bentley
Fixed python invocation
37
NEED_VERS = (2, 4)
4508.1.1 by Russel Winder
Add python2.6 to the list of KNOWN_PYTHONS for reinvoking.
38
KNOWN_PYTHONS = ('python2.4', 'python2.5', 'python2.6')
443 by Martin Pool
- Patch from Fredrik Lundh to check Python version and
39
40
if version_info < NEED_VERS:
41
    if not os.environ.has_key(REINVOKE):
42
        # mutating os.environ doesn't work in old Pythons
43
        os.putenv(REINVOKE, "1")
974.1.1 by Aaron Bentley
Fixed python invocation
44
        for python in KNOWN_PYTHONS:
443 by Martin Pool
- Patch from Fredrik Lundh to check Python version and
45
            try:
46
                os.execvp(python, [python] + sys.argv)
47
            except OSError:
48
                pass
2911.6.1 by Blake Winton
Change 'print >> f,'s to 'f.write('s.
49
    sys.stderr.write("bzr: error: cannot find a suitable python interpreter\n")
50
    sys.stderr.write("  (need %d.%d or later)\n" % NEED_VERS)
443 by Martin Pool
- Patch from Fredrik Lundh to check Python version and
51
    sys.exit(1)
1185.1.7 by Robert Collins
Nathaniel McCallums patch for urandom friendliness on aix.
52
if hasattr(os, "unsetenv"):
53
    os.unsetenv(REINVOKE)
443 by Martin Pool
- Patch from Fredrik Lundh to check Python version and
54
1724.2.1 by John Arbash Meinel
adding --profile-imports to a stock bzr.dev tree
55
1724.2.8 by John Arbash Meinel
New --profile-imports output which puts parents before children.
56
profiling = False
1724.2.1 by John Arbash Meinel
adding --profile-imports to a stock bzr.dev tree
57
if '--profile-imports' in sys.argv:
58
    sys.argv.remove('--profile-imports')
1724.2.4 by John Arbash Meinel
Move the custom importers into a separate module
59
    import profile_imports
1724.2.14 by John Arbash Meinel
Refactor import stuff into separate functions. Update news
60
    profile_imports.install()
1724.2.8 by John Arbash Meinel
New --profile-imports output which puts parents before children.
61
    profiling = True
1724.2.1 by John Arbash Meinel
adding --profile-imports to a stock bzr.dev tree
62
3512.3.1 by Martin von Gagern
Hand-selected minimalistic set of changes from my setlocale branch.
63
if sys.platform == 'darwin':
3517.1.1 by Martin Pool
Set locale from environment for third party libs and day of week.
64
    # jameinel says this hack is to force python to honor the LANG setting,
65
    # even on Darwin.  Otherwise it is apparently hardcoded to Mac-Roman,
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
66
    # which is incorrect for the normal Terminal.app which wants UTF-8.
3517.1.1 by Martin Pool
Set locale from environment for third party libs and day of week.
67
    #
68
    # "It might be that I should be setting the "system locale" somewhere else
69
    # on the system, rather than setting LANG=en_US.UTF-8 in .bashrc.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
70
    # Switching to 'posix' and setting LANG worked for me."
3517.1.1 by Martin Pool
Set locale from environment for third party libs and day of week.
71
    #
72
    # So we can remove this if someone works out the right way to tell Mac
73
    # Python which encoding to use.  -- mbp 20080703
3512.3.1 by Martin von Gagern
Hand-selected minimalistic set of changes from my setlocale branch.
74
    sys.platform = 'posix'
75
    try:
76
        import locale
77
    finally:
78
        sys.platform = 'darwin'
79
else:
80
    import locale
81
4445.1.1 by Martin Pool
Ignore deprecation warnings from inside gzip.py
82
83
# The python2.6 release includes some libraries that have deprecation warnings
84
# against the interpreter - see https://bugs.launchpad.net/bzr/+bug/387139
85
warnings.filterwarnings('ignore',
86
    r"(struct integer overflow masking is deprecated|"
87
    r"'L' format requires 0 <= number <= 4294967295)",
88
    DeprecationWarning,
89
    'gzip',
90
    )
91
92
3512.3.1 by Martin von Gagern
Hand-selected minimalistic set of changes from my setlocale branch.
93
try:
94
    locale.setlocale(locale.LC_ALL, '')
95
except locale.Error, e:
96
    sys.stderr.write('bzr: warning: %s\n'
97
                     '  bzr could not set the application locale.\n'
98
                     '  Although this should be no problem for bzr itself,\n'
99
                     '  it might cause problems with some plugins.\n'
100
                     '  To investigate the issue, look at the output\n'
101
                     '  of the locale(1p) tool available on POSIX systems.\n'
102
                     % e)
1724.2.1 by John Arbash Meinel
adding --profile-imports to a stock bzr.dev tree
103
3224.5.29 by Andrew Bennetts
Install lazy_regex code sooner, so that it is there before the stdlib gets a chance to 'import string', which compiles regexes.
104
# instruct bzrlib/__init__.py to install lazy_regex
105
sys._bzr_lazy_regex = True
1393.1.3 by Martin Pool
- better error on failing to import bzrlib
106
try:
107
    import bzrlib
108
except ImportError, e:
109
    sys.stderr.write("bzr: ERROR: "
3497.3.3 by Martin Pool
Clearer message about how to set PYTHONPATH
110
        "Couldn't import bzrlib and dependencies.\n"
111
        "Please check the directory containing bzrlib is on your PYTHONPATH.\n"
112
        "\n")
1393.1.3 by Martin Pool
- better error on failing to import bzrlib
113
    raise
32 by mbp at sourcefrog
- Split commands into bzrlib.commands
114
3053.4.9 by Martin Pool
Prepare 1.0final!
115
if bzrlib.version_info[:3] != _script_version:
2867.2.1 by Alexander Belchenko
check bzrlib version early
116
    sys.stderr.write("bzr: WARNING: bzrlib version doesn't match the bzr program.\n"
117
            "This may indicate an installation problem.\n"
118
            "bzrlib from %s is version %r\n"
119
            % (bzrlib.__path__, bzrlib.version_info))
120
1996.3.11 by John Arbash Meinel
Hack around loading 'copy' to make startup much faster
121
import bzrlib.inspect_for_copy
122
bzrlib.inspect_for_copy.import_copy_with_hacked_inspect()
123
2423.3.1 by Martin Pool
C-\ drops bzr into the debugger
124
import bzrlib.breakin
4578.1.1 by John Arbash Meinel
Update the breakin support to support CTRL-BREAK on Windows.
125
bzrlib.breakin.hook_debugger_to_signal()
2423.3.1 by Martin Pool
C-\ drops bzr into the debugger
126
2230.2.3 by John Arbash Meinel
Add the ability to have fast decorators as well as pretty ones, and have 'bzr' select the right one at startup.
127
import bzrlib.decorators
128
if ('--lsprof' in sys.argv
129
    or '--lsprof-file' in sys.argv
2476.2.1 by John Arbash Meinel
Vastly improve bundle install performance by only validating the bundle one time
130
    or '--profile' in sys.argv
131
    or '--lsprof-timed' in sys.argv):
2230.2.3 by John Arbash Meinel
Add the ability to have fast decorators as well as pretty ones, and have 'bzr' select the right one at startup.
132
    bzrlib.decorators.use_pretty_decorators()
133
else:
134
    bzrlib.decorators.use_fast_decorators()
135
1996.3.11 by John Arbash Meinel
Hack around loading 'copy' to make startup much faster
136
import bzrlib.commands
137
import bzrlib.trace
138
2592.3.163 by Robert Collins
Merge bzr.dev (untested)
139
32 by mbp at sourcefrog
- Split commands into bzrlib.commands
140
if __name__ == '__main__':
1111 by Martin Pool
- add functions to enable and disable default logging, so that we can
141
    bzrlib.trace.enable_default_logging()
4355.2.1 by Alexander Belchenko
Using unicode Windows API to obtain command-line arguments.
142
    exit_val = bzrlib.commands.main()
1724.2.8 by John Arbash Meinel
New --profile-imports output which puts parents before children.
143
144
    if profiling:
145
        profile_imports.log_stack_info(sys.stderr)
2288.1.1 by Martin Pool
os._exit rather than sys.exit at top level
146
2485.6.7 by Martin Pool
Run exitfuncs explicitly before exiting
147
    # run anything registered by atexit, because it won't be run in the normal
148
    # way
149
    sys.exitfunc()
150
2288.1.1 by Martin Pool
os._exit rather than sys.exit at top level
151
    # By this point we really have completed everything we want to do, and
152
    # there's no point doing any additional cleanup.  Abruptly exiting here
153
    # stops any background threads getting into trouble as code is unloaded,
154
    # and it may also be slightly faster, through avoiding gc of objects that
155
    # are just about to be discarded anyhow.  This does mean that atexit hooks
156
    # won't run but we don't use them.  Also file buffers won't be flushed,
157
    # but our policy is to always close files from a finally block. -- mbp 20070215
2304.2.1 by Alexander Belchenko
Suppress IOError with errno=22 (Invalid argument) on win32 when pipe is broken
158
    try:
159
        sys.stdout.flush()
2309.2.1 by Alexander Belchenko
flush sys.stderr before os._exit
160
        sys.stderr.flush()
2304.2.1 by Alexander Belchenko
Suppress IOError with errno=22 (Invalid argument) on win32 when pipe is broken
161
    except IOError, e:
162
        import errno
2777.3.1 by Martin Pool
Always ignore EPIPE, EINVAL when flushing stdout/stderr at exit.
163
        if e.errno in [errno.EINVAL, errno.EPIPE]:
164
            pass
165
        else:
2304.2.1 by Alexander Belchenko
Suppress IOError with errno=22 (Invalid argument) on win32 when pipe is broken
166
            raise
2295.1.1 by Martin Pool
Flush trace file before doing os._exit.
167
    if bzrlib.trace._trace_file:
168
        # this is also _bzr_log
169
        bzrlib.trace._trace_file.flush()
2288.1.1 by Martin Pool
os._exit rather than sys.exit at top level
170
    os._exit(exit_val)
1393.1.3 by Martin Pool
- better error on failing to import bzrlib
171
else:
3275.2.1 by Benjamin Peterson
Made importing the bzr script raise an ImportError
172
    raise ImportError("The bzr script cannot be imported.")