22
22
# timestamps relative to program start in the log file kept by bzrlib.trace.
23
23
_start_time = time.time()
25
from bzrlib.osutils import get_user_encoding
26
if getattr(sys, '_bzr_lazy_regex', False):
27
# The 'bzr' executable sets _bzr_lazy_regex. We install the lazy regex
28
# hack as soon as possible so that as much of the standard library can
29
# benefit, including the 'string' module.
30
del sys._bzr_lazy_regex
31
import bzrlib.lazy_regex
32
bzrlib.lazy_regex.install_lazy_compile()
28
35
IGNORE_FILENAME = ".bzrignore"
31
# XXX: Compatibility. This should probably be deprecated
32
user_encoding = get_user_encoding()
35
__copyright__ = "Copyright 2005, 2006, 2007, 2008 Canonical Ltd."
38
__copyright__ = "Copyright 2005-2010 Canonical Ltd."
37
40
# same format as sys.version_info: "A tuple containing the five components of
38
41
# the version number: major, minor, micro, releaselevel, and serial. All
41
44
# Python version 2.0 is (2, 0, 0, 'final', 0)." Additionally we use a
42
45
# releaselevel of 'dev' for unreleased under-development code.
44
version_info = (1, 8, 0, 'dev', 0)
47
# API compatibility version: bzrlib is currently API compatible with 1.7.
48
api_minimum_version = (1, 7, 0)
47
version_info = (2, 2, 0, 'dev', 1)
49
# API compatibility version
50
api_minimum_version = (2, 2, 0)
51
53
def _format_version_tuple(version_info):
52
"""Turn a version number 3-tuple or 5-tuple into a short string.
54
"""Turn a version number 2, 3 or 5-tuple into a short string.
54
56
This format matches <http://docs.python.org/dist/meta-data.html>
55
57
and the typical presentation used in Python output.
57
59
This also checks that the version is reasonable: the sub-release must be
58
zero for final releases, and non-zero for alpha, beta and preview.
60
zero for final releases.
60
62
>>> print _format_version_tuple((1, 0, 0, 'final', 0))
62
64
>>> print _format_version_tuple((1, 2, 0, 'dev', 0))
66
>>> print bzrlib._format_version_tuple((1, 2, 0, 'dev', 1))
64
68
>>> print _format_version_tuple((1, 1, 1, 'candidate', 2))
70
>>> print bzrlib._format_version_tuple((2, 1, 0, 'beta', 1))
66
72
>>> print _format_version_tuple((1, 4, 0))
74
>>> print _format_version_tuple((1, 4))
76
>>> print bzrlib._format_version_tuple((2, 1, 0, 'final', 1))
77
Traceback (most recent call last):
79
ValueError: version_info (2, 1, 0, 'final', 1) not valid
68
80
>>> print _format_version_tuple((1, 4, 0, 'wibble', 0))
69
81
Traceback (most recent call last):
71
83
ValueError: version_info (1, 4, 0, 'wibble', 0) not valid
73
if version_info[2] == 0:
85
if len(version_info) == 2:
74
86
main_version = '%d.%d' % version_info[:2]
76
88
main_version = '%d.%d.%d' % version_info[:3]
77
89
if len(version_info) <= 3:
78
90
return main_version
80
__release_type = version_info[3]
81
__sub = version_info[4]
92
release_type = version_info[3]
83
95
# check they're consistent
84
if __release_type == 'final' and __sub == 0:
86
elif __release_type == 'dev' and __sub == 0:
88
elif __release_type in ('alpha', 'beta') and __sub != 0:
89
__sub_string = __release_type[0] + str(__sub)
90
elif __release_type == 'candidate' and __sub != 0:
91
__sub_string = 'rc' + str(__sub)
96
if release_type == 'final' and sub == 0:
98
elif release_type == 'dev' and sub == 0:
100
elif release_type == 'dev':
101
sub_string = 'dev' + str(sub)
102
elif release_type in ('alpha', 'beta'):
103
if version_info[2] == 0:
104
main_version = '%d.%d' % version_info[:2]
105
sub_string = release_type[0] + str(sub)
106
elif release_type == 'candidate':
107
sub_string = 'rc' + str(sub)
93
109
raise ValueError("version_info %r not valid" % (version_info,))
95
version_string = '%d.%d.%d.%s.%d' % version_info
96
return main_version + __sub_string
111
return main_version + sub_string
98
114
__version__ = _format_version_tuple(version_info)
99
115
version_string = __version__
102
# allow bzrlib plugins to be imported.
104
bzrlib.plugin.set_plugins_path()
107
118
def test_suite():
109
120
return tests.test_suite()
125
stdin=None, stdout=None, stderr=None):
126
"""Set up everything needed for normal use of bzrlib.
128
Most applications that embed bzrlib, including bzr itself, should call
129
this function to initialize various subsystems.
131
More options may be added in future so callers should use named arguments.
133
:param setup_ui: If true (default) use a terminal UI; otherwise
134
something else must be put into `bzrlib.ui.ui_factory`.
135
:param stdin, stdout, stderr: If provided, use these for terminal IO;
136
otherwise use the files in `sys`.
138
# TODO: mention this in a guide to embedding bzrlib
140
# NB: This function tweaks so much global state it's hard to test it in
141
# isolation within the same interpreter. It's not reached on normal
142
# in-process run_bzr calls. If it's broken, we expect that
143
# TestRunBzrSubprocess may fail.
148
bzrlib.trace.enable_default_logging()
149
atexit.register(bzrlib.trace._flush_stdout_stderr)
150
atexit.register(bzrlib.trace._flush_trace)
161
bzrlib.ui.ui_factory = bzrlib.ui.make_ui_for_terminal(
162
stdin, stdout, stderr)
164
if bzrlib.version_info[3] == 'final':
165
from bzrlib.symbol_versioning import suppress_deprecation_warnings
166
suppress_deprecation_warnings(override=True)
168
import bzrlib.osutils
169
atexit.register(osutils.report_extension_load_failures)