~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/__init__.py

  • Committer: Martin von Gagern
  • Date: 2008-06-26 17:18:55 UTC
  • mto: (3517.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 3518.
  • Revision ID: martin.vgagern@gmx.net-20080626171855-qqok6tbgkouo409t
Hand-selected minimalistic set of changes from my setlocale branch.
This introduces a call to setlocale without changing the behaviour of bzr.
Day of the week formatting is handled in Python to avoid locale dependency.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
2
2
#
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
12
12
#
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""bzr library"""
18
18
 
22
22
# timestamps relative to program start in the log file kept by bzrlib.trace.
23
23
_start_time = time.time()
24
24
 
25
 
import sys
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()
 
25
from bzrlib.osutils import get_user_encoding
33
26
 
34
27
 
35
28
IGNORE_FILENAME = ".bzrignore"
36
29
 
37
30
 
38
 
__copyright__ = "Copyright 2005-2010 Canonical Ltd."
 
31
# XXX: Compatibility. This should probably be deprecated
 
32
user_encoding = get_user_encoding()
 
33
 
 
34
 
 
35
__copyright__ = "Copyright 2005, 2006, 2007, 2008 Canonical Ltd."
39
36
 
40
37
# same format as sys.version_info: "A tuple containing the five components of
41
38
# the version number: major, minor, micro, releaselevel, and serial. All
44
41
# Python version 2.0 is (2, 0, 0, 'final', 0)."  Additionally we use a
45
42
# releaselevel of 'dev' for unreleased under-development code.
46
43
 
47
 
version_info = (2, 2, 0, 'dev', 1)
48
 
 
49
 
# API compatibility version
50
 
api_minimum_version = (2, 2, 0)
51
 
 
 
44
version_info = (1, 6, 0, 'beta', 3)
 
45
 
 
46
 
 
47
# API compatibility version: bzrlib is currently API compatible with 0.18.
 
48
api_minimum_version = (0, 18, 0)
52
49
 
53
50
def _format_version_tuple(version_info):
54
 
    """Turn a version number 2, 3 or 5-tuple into a short string.
 
51
    """Turn a version number 3-tuple or 5-tuple into a short string.
55
52
 
56
53
    This format matches <http://docs.python.org/dist/meta-data.html>
57
54
    and the typical presentation used in Python output.
58
55
 
59
56
    This also checks that the version is reasonable: the sub-release must be
60
 
    zero for final releases.
 
57
    zero for final releases, and non-zero for alpha, beta and preview.
61
58
 
62
59
    >>> print _format_version_tuple((1, 0, 0, 'final', 0))
63
 
    1.0.0
 
60
    1.0
64
61
    >>> print _format_version_tuple((1, 2, 0, 'dev', 0))
65
 
    1.2.0dev
66
 
    >>> print bzrlib._format_version_tuple((1, 2, 0, 'dev', 1))
67
 
    1.2.0dev1
 
62
    1.2dev
68
63
    >>> print _format_version_tuple((1, 1, 1, 'candidate', 2))
69
64
    1.1.1rc2
70
 
    >>> print bzrlib._format_version_tuple((2, 1, 0, 'beta', 1))
71
 
    2.1b1
72
65
    >>> print _format_version_tuple((1, 4, 0))
73
 
    1.4.0
74
 
    >>> print _format_version_tuple((1, 4))
75
66
    1.4
76
 
    >>> print bzrlib._format_version_tuple((2, 1, 0, 'final', 1))
77
 
    Traceback (most recent call last):
78
 
    ...
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):
82
 
    ...
83
 
    ValueError: version_info (1, 4, 0, 'wibble', 0) not valid
84
67
    """
85
 
    if len(version_info) == 2:
 
68
    if version_info[2] == 0:
86
69
        main_version = '%d.%d' % version_info[:2]
87
70
    else:
88
71
        main_version = '%d.%d.%d' % version_info[:3]
89
72
    if len(version_info) <= 3:
90
73
        return main_version
91
74
 
92
 
    release_type = version_info[3]
93
 
    sub = version_info[4]
 
75
    __release_type = version_info[3]
 
76
    __sub = version_info[4]
94
77
 
95
78
    # check they're consistent
96
 
    if release_type == 'final' and sub == 0:
97
 
        sub_string = ''
98
 
    elif release_type == 'dev' and sub == 0:
99
 
        sub_string = 'dev'
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)
 
79
    if __release_type == 'final' and __sub == 0:
 
80
        __sub_string = ''
 
81
    elif __release_type == 'dev' and __sub == 0:
 
82
        __sub_string = 'dev'
 
83
    elif __release_type in ('alpha', 'beta') and __sub != 0:
 
84
        __sub_string = __release_type[0] + str(__sub)
 
85
    elif __release_type == 'candidate' and __sub != 0:
 
86
        __sub_string = 'rc' + str(__sub)
108
87
    else:
109
 
        raise ValueError("version_info %r not valid" % (version_info,))
110
 
 
111
 
    return main_version + sub_string
112
 
 
 
88
        raise AssertionError("version_info %r not valid" % version_info)
 
89
 
 
90
    version_string = '%d.%d.%d.%s.%d' % version_info
 
91
    return main_version + __sub_string
113
92
 
114
93
__version__ = _format_version_tuple(version_info)
115
94
version_string = __version__
116
95
 
117
96
 
 
97
# allow bzrlib plugins to be imported.
 
98
import bzrlib.plugin
 
99
bzrlib.plugin.set_plugins_path()
 
100
 
 
101
 
118
102
def test_suite():
119
103
    import tests
120
104
    return tests.test_suite()
121
 
 
122
 
 
123
 
def initialize(
124
 
    setup_ui=True,
125
 
    stdin=None, stdout=None, stderr=None):
126
 
    """Set up everything needed for normal use of bzrlib.
127
 
 
128
 
    Most applications that embed bzrlib, including bzr itself, should call
129
 
    this function to initialize various subsystems.  
130
 
 
131
 
    More options may be added in future so callers should use named arguments.
132
 
 
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`.
137
 
    """
138
 
    # TODO: mention this in a guide to embedding bzrlib
139
 
    #
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.
144
 
    
145
 
    import atexit
146
 
    import bzrlib.trace
147
 
 
148
 
    bzrlib.trace.enable_default_logging()
149
 
    atexit.register(bzrlib.trace._flush_stdout_stderr)
150
 
    atexit.register(bzrlib.trace._flush_trace)
151
 
 
152
 
    import bzrlib.ui
153
 
    if stdin is None:
154
 
        stdin = sys.stdin
155
 
    if stdout is None:
156
 
        stdout = sys.stdout
157
 
    if stderr is None:
158
 
        stderr = sys.stderr
159
 
 
160
 
    if setup_ui:
161
 
        bzrlib.ui.ui_factory = bzrlib.ui.make_ui_for_terminal(
162
 
            stdin, stdout, stderr)
163
 
 
164
 
    if bzrlib.version_info[3] == 'final':
165
 
        from bzrlib.symbol_versioning import suppress_deprecation_warnings
166
 
        suppress_deprecation_warnings(override=True)
167
 
 
168
 
    import bzrlib.osutils
169
 
    atexit.register(osutils.report_extension_load_failures)