~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/__init__.py

  • Committer: Martin Pool
  • Date: 2005-05-11 06:05:28 UTC
  • Revision ID: mbp@sourcefrog.net-20050511060528-b2b35cafa4e1785d
- Interpret arguments to bzr status
- Handle giving a non-default branch to bzr status
- bzr status docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
2
 
#
 
1
# (C) 2005 Canonical Development Ltd
 
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
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
7
 
#
 
7
 
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.
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
 
19
 
import time
20
 
 
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()
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()
33
 
 
 
19
from inventory import Inventory, InventoryEntry
 
20
from branch import Branch, ScratchBranch
 
21
from osutils import format_date
 
22
from tree import Tree
 
23
from diff import diff_trees
 
24
from trace import mutter, warning, open_tracefile
 
25
from log import show_log
 
26
import add
 
27
 
 
28
BZRDIR = ".bzr"
 
29
 
 
30
DEFAULT_IGNORE = ['.bzr.log',
 
31
                  '*~', '#*#', '*$', '.#*',
 
32
                  '.*.swp', '.*.tmp',
 
33
                  '*.tmp', '*.bak', '*.BAK', '*.orig',
 
34
                  '*.o', '*.obj', '*.a', '*.py[oc]', '*.so', '*.exe', '*.elc', 
 
35
                  '{arch}', 'CVS', 'CVS.adm', '.svn', '_darcs', 'SCCS', 'RCS',
 
36
                  '*,v',
 
37
                  'BitKeeper',
 
38
                  'TAGS', '.make.state', '.sconsign', '.tmp*',
 
39
                  '.del-*']
34
40
 
35
41
IGNORE_FILENAME = ".bzrignore"
36
42
 
37
 
 
38
 
__copyright__ = "Copyright 2005-2010 Canonical Ltd."
39
 
 
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.
46
 
 
47
 
version_info = (2, 2, 0, 'dev', 1)
48
 
 
49
 
# API compatibility version
50
 
api_minimum_version = (2, 2, 0)
51
 
 
52
 
 
53
 
def _format_version_tuple(version_info):
54
 
    """Turn a version number 2, 3 or 5-tuple into a short string.
55
 
 
56
 
    This format matches <http://docs.python.org/dist/meta-data.html>
57
 
    and the typical presentation used in Python output.
58
 
 
59
 
    This also checks that the version is reasonable: the sub-release must be
60
 
    zero for final releases.
61
 
 
62
 
    >>> print _format_version_tuple((1, 0, 0, 'final', 0))
63
 
    1.0.0
64
 
    >>> 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
68
 
    >>> print _format_version_tuple((1, 1, 1, 'candidate', 2))
69
 
    1.1.1rc2
70
 
    >>> print bzrlib._format_version_tuple((2, 1, 0, 'beta', 1))
71
 
    2.1.0b1
72
 
    >>> print _format_version_tuple((1, 4, 0))
73
 
    1.4.0
74
 
    >>> print _format_version_tuple((1, 4))
75
 
    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
 
    """
85
 
    if len(version_info) == 2:
86
 
        main_version = '%d.%d' % version_info[:2]
87
 
    else:
88
 
        main_version = '%d.%d.%d' % version_info[:3]
89
 
    if len(version_info) <= 3:
90
 
        return main_version
91
 
 
92
 
    release_type = version_info[3]
93
 
    sub = version_info[4]
94
 
 
95
 
    # 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
 
        sub_string = release_type[0] + str(sub)
104
 
    elif release_type == 'candidate':
105
 
        sub_string = 'rc' + str(sub)
106
 
    else:
107
 
        raise ValueError("version_info %r not valid" % (version_info,))
108
 
 
109
 
    return main_version + sub_string
110
 
 
111
 
 
112
 
__version__ = _format_version_tuple(version_info)
113
 
version_string = __version__
114
 
 
115
 
 
116
 
def test_suite():
117
 
    import tests
118
 
    return tests.test_suite()
119
 
 
120
 
 
121
 
def initialize(
122
 
    setup_ui=True,
123
 
    stdin=None, stdout=None, stderr=None):
124
 
    """Set up everything needed for normal use of bzrlib.
125
 
 
126
 
    Most applications that embed bzrlib, including bzr itself, should call
127
 
    this function to initialize various subsystems.  
128
 
 
129
 
    More options may be added in future so callers should use named arguments.
130
 
 
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`.
135
 
    """
136
 
    # TODO: mention this in a guide to embedding bzrlib
137
 
    #
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.
142
 
    
143
 
    import atexit
144
 
    import bzrlib.trace
145
 
 
146
 
    bzrlib.trace.enable_default_logging()
147
 
    atexit.register(bzrlib.trace._flush_stdout_stderr)
148
 
    atexit.register(bzrlib.trace._flush_trace)
149
 
 
150
 
    import bzrlib.ui
151
 
    if stdin is None:
152
 
        stdin = sys.stdin
153
 
    if stdout is None:
154
 
        stdout = sys.stdout
155
 
    if stderr is None:
156
 
        stderr = sys.stderr
157
 
 
158
 
    if setup_ui:
159
 
        bzrlib.ui.ui_factory = bzrlib.ui.make_ui_for_terminal(
160
 
            stdin, stdout, stderr)
161
 
 
162
 
    if bzrlib.version_info[3] == 'final':
163
 
        from bzrlib.symbol_versioning import suppress_deprecation_warnings
164
 
        suppress_deprecation_warnings(override=True)
165
 
 
166
 
    import bzrlib.osutils
167
 
    atexit.register(osutils.report_extension_load_failures)
 
43
import locale
 
44
user_encoding = locale.getpreferredencoding()
 
45
 
 
46
__copyright__ = "Copyright 2005 Canonical Development Ltd."
 
47
__author__ = "Martin Pool <mbp@canonical.com>"
 
48
__version__ = '0.0.5pre'
 
49