1
# (C) 2005 Canonical Development Ltd
1
# Copyright (C) 2005-2010 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
# GNU General Public License for more details.
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
from inventory import Inventory, InventoryEntry
20
from branch import Branch, ScratchBranch
21
from osutils import format_date
23
from diff import diff_trees
24
from trace import mutter, warning
29
DEFAULT_IGNORE = ['.bzr.log',
30
'*~', '#*#', '*$', '.#*',
31
'*.tmp', '*.bak', '*.BAK', '*.orig',
32
'*.o', '*.obj', '*.a', '*.py[oc]', '*.so', '*.exe', '*.elc',
33
'{arch}', 'CVS', '.svn', '_darcs', 'SCCS', 'RCS',
34
'TAGS', '.make.state', '.sconsign']
21
# Keep track of when bzrlib was first imported, so that we can give rough
22
# timestamps relative to program start in the log file kept by bzrlib.trace.
23
_start_time = time.time()
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()
36
35
IGNORE_FILENAME = ".bzrignore"
39
__copyright__ = "Copyright 2005 Canonical Development Ltd."
40
__author__ = "Martin Pool <mbp@canonical.com>"
41
__version__ = '0.0.3pre'
38
__copyright__ = "Copyright 2005, 2006, 2007, 2008, 2009 Canonical Ltd."
40
# same format as sys.version_info: "A tuple containing the five components of
41
# the version number: major, minor, micro, releaselevel, and serial. All
42
# values except releaselevel are integers; the release level is 'alpha',
43
# 'beta', 'candidate', or 'final'. The version_info value corresponding to the
44
# Python version 2.0 is (2, 0, 0, 'final', 0)." Additionally we use a
45
# releaselevel of 'dev' for unreleased under-development code.
47
version_info = (2, 2, 0, 'dev', 1)
49
# API compatibility version: bzrlib is currently API compatible with 1.15.
50
api_minimum_version = (2, 1, 0)
53
def _format_version_tuple(version_info):
54
"""Turn a version number 2, 3 or 5-tuple into a short string.
56
This format matches <http://docs.python.org/dist/meta-data.html>
57
and the typical presentation used in Python output.
59
This also checks that the version is reasonable: the sub-release must be
60
zero for final releases.
62
>>> print _format_version_tuple((1, 0, 0, 'final', 0))
64
>>> print _format_version_tuple((1, 2, 0, 'dev', 0))
66
>>> print bzrlib._format_version_tuple((1, 2, 0, 'dev', 1))
68
>>> print _format_version_tuple((1, 1, 1, 'candidate', 2))
70
>>> print bzrlib._format_version_tuple((2, 1, 0, 'beta', 1))
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
80
>>> print _format_version_tuple((1, 4, 0, 'wibble', 0))
81
Traceback (most recent call last):
83
ValueError: version_info (1, 4, 0, 'wibble', 0) not valid
85
if len(version_info) == 2:
86
main_version = '%d.%d' % version_info[:2]
88
main_version = '%d.%d.%d' % version_info[:3]
89
if len(version_info) <= 3:
92
release_type = version_info[3]
95
# check they're consistent
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
sub_string = release_type[0] + str(sub)
104
elif release_type == 'candidate':
105
sub_string = 'rc' + str(sub)
107
raise ValueError("version_info %r not valid" % (version_info,))
109
return main_version + sub_string
112
__version__ = _format_version_tuple(version_info)
113
version_string = __version__
118
return tests.test_suite()
123
stdin=None, stdout=None, stderr=None):
124
"""Set up everything needed for normal use of bzrlib.
126
Most applications that embed bzrlib, including bzr itself, should call
127
this function to initialize various subsystems.
129
More options may be added in future so callers should use named arguments.
131
:param setup_ui: If true (default) use a terminal UI; otherwise
132
something else must be put into `bzrlib.ui.ui_factory`.
133
:param stdin, stdout, stderr: If provided, use these for terminal IO;
134
otherwise use the files in `sys`.
136
# TODO: mention this in a guide to embedding bzrlib
138
# NB: This function tweaks so much global state it's hard to test it in
139
# isolation within the same interpreter. It's not reached on normal
140
# in-process run_bzr calls. If it's broken, we expect that
141
# TestRunBzrSubprocess may fail.
146
bzrlib.trace.enable_default_logging()
147
atexit.register(bzrlib.trace._flush_stdout_stderr)
148
atexit.register(bzrlib.trace._flush_trace)
159
bzrlib.ui.ui_factory = bzrlib.ui.make_ui_for_terminal(
160
stdin, stdout, stderr)
162
if bzrlib.version_info[3] == 'final':
163
from bzrlib.symbol_versioning import suppress_deprecation_warnings
164
suppress_deprecation_warnings(override=True)
166
import bzrlib.osutils
167
atexit.register(osutils.report_extension_load_failures)