/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to __init__.py

Use BazaarObjectStore to find matching SHA1s for bzr revisions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 Canonical Ltd
 
1
# Copyright (C) 2006-2009 Canonical Ltd
2
2
 
3
3
# Authors: Robert Collins <robert.collins@canonical.com>
4
4
#          Jelmer Vernooij <jelmer@samba.org>
21
21
 
22
22
"""A GIT branch and repository format implementation for bzr."""
23
23
 
 
24
import os
 
25
import sys
 
26
 
24
27
import bzrlib
25
28
import bzrlib.api
26
 
from bzrlib import bzrdir, errors as bzr_errors
27
 
from bzrlib.foreign import foreign_vcs_registry
28
 
from bzrlib.lockable_files import TransportLock
29
 
from bzrlib.transport import register_lazy_transport
30
 
from bzrlib.commands import plugin_cmds
31
 
from bzrlib.trace import warning
32
 
 
33
 
MINIMUM_DULWICH_VERSION = (0, 1, 0)
34
 
COMPATIBLE_BZR_VERSIONS = [(1, 11, 0), (1, 12, 0)]
 
29
from bzrlib import (
 
30
    bzrdir,
 
31
    errors as bzr_errors,
 
32
    osutils,
 
33
    )
 
34
from bzrlib.foreign import (
 
35
    foreign_vcs_registry,
 
36
    )
 
37
from bzrlib.lockable_files import (
 
38
    TransportLock,
 
39
    )
 
40
from bzrlib.transport import (
 
41
    register_lazy_transport,
 
42
    register_transport_proto,
 
43
    )
 
44
from bzrlib.commands import (
 
45
    plugin_cmds,
 
46
    )
 
47
from bzrlib.trace import (
 
48
    warning,
 
49
    )
 
50
from bzrlib.version_info_formats.format_rio import (
 
51
    RioVersionInfoBuilder,
 
52
    )
 
53
 
 
54
 
 
55
# versions ending in 'exp' mean experimental mappings
 
56
# versions ending in 'dev' mean development version
 
57
# versions ending in 'final' mean release (well tested, etc)
 
58
version_info = (0, 2, 2, 'dev', 0)
 
59
 
 
60
if version_info[3] == 'final':
 
61
    version_string = '%d.%d.%d' % version_info[:3]
 
62
else:
 
63
    version_string = '%d.%d.%d%s%d' % version_info
 
64
__version__ = version_string
 
65
 
 
66
MINIMUM_DULWICH_VERSION = (0, 2, 2)
 
67
COMPATIBLE_BZR_VERSIONS = [(1, 14, 0), (1, 15, 0)]
 
68
 
 
69
if getattr(sys, "frozen", None):
 
70
    # allow import additional libs from ./_lib for bzr.exe only
 
71
    sys.path.append(os.path.normpath(os.path.join(os.path.dirname(__file__), '_lib')))
35
72
 
36
73
_versions_checked = False
37
74
def lazy_check_versions():
42
79
    try:
43
80
        from dulwich import __version__ as dulwich_version
44
81
    except ImportError:
45
 
        warning("Please install dulwich, https://launchpad.net/dulwich")
46
 
        raise
 
82
        raise ImportError("bzr-git: Please install dulwich, https://launchpad.net/dulwich")
47
83
    else:
48
84
        if dulwich_version < MINIMUM_DULWICH_VERSION:
49
 
            warning("Dulwich is too old; at least %d.%d.%d is required" % MINIMUM_DULWICH_VERSION)
50
 
            raise ImportError
 
85
            raise ImportError("bzr-git: Dulwich is too old; at least %d.%d.%d is required" % MINIMUM_DULWICH_VERSION)
51
86
 
52
87
bzrlib.api.require_any_api(bzrlib, COMPATIBLE_BZR_VERSIONS)
53
88
 
56
91
    help='GIT repository.', native=False, experimental=True,
57
92
    )
58
93
 
59
 
try:
60
 
    from bzrlib.revisionspec import revspec_registry
61
 
    revspec_registry.register_lazy("git:", "bzrlib.plugins.git.revspec", 
62
 
        "RevisionSpec_git")
63
 
except ImportError:
64
 
    lazy_check_versions()
65
 
    from bzrlib.revisionspec import SPEC_TYPES
66
 
    from bzrlib.plugins.git.revspec import RevisionSpec_git
67
 
    SPEC_TYPES.append(RevisionSpec_git)
 
94
from bzrlib.revisionspec import revspec_registry
 
95
revspec_registry.register_lazy("git:", "bzrlib.plugins.git.revspec", 
 
96
    "RevisionSpec_git")
 
97
 
68
98
 
69
99
class GitBzrDirFormat(bzrdir.BzrDirFormat):
70
100
    _lock_class = TransportLock
91
121
            url = url[len('readonly+'):]
92
122
 
93
123
        try:
94
 
            gitrepo = git.repo.Repo(transport.local_abspath("."))
 
124
            gitrepo = git.repo.Repo(transport.local_abspath(".").encode(osutils._fs_enc))
95
125
        except bzr_errors.NotLocalUrl:
96
126
            raise bzr_errors.NotBranchError(path=transport.base)
97
127
        from bzrlib.plugins.git.dir import LocalGitDir, GitLockableFiles, GitLock
135
165
                "non-local transports")
136
166
 
137
167
        from dulwich.repo import Repo
138
 
        Repo.create(transport.local_abspath(".")) 
 
168
        Repo.create(transport.local_abspath(".").encode(osutils._fs_enc)) 
139
169
        return self.open(transport)
140
170
 
141
171
    def is_supported(self):
153
183
        """Open this directory.
154
184
 
155
185
        """
 
186
        # we dont grok readonly - git isn't integrated with transport.
 
187
        url = transport.base
 
188
        if url.startswith('readonly+'):
 
189
            url = url[len('readonly+'):]
 
190
        if (not url.startswith("git://") and 
 
191
            not url.startswith("git+")):
 
192
            raise bzr_errors.NotBranchError(transport.base)
156
193
        from bzrlib.plugins.git.remote import RemoteGitDir, GitSmartTransport
157
194
        if not isinstance(transport, GitSmartTransport):
158
195
            raise bzr_errors.NotBranchError(transport.base)
159
 
        # we dont grok readonly - git isn't integrated with transport.
160
 
        url = transport.base
161
 
        if url.startswith('readonly+'):
162
 
            url = url[len('readonly+'):]
163
 
 
164
196
        from bzrlib.plugins.git.dir import GitLockableFiles, GitLock
165
197
        lockfiles = GitLockableFiles(transport, GitLock())
166
198
        return RemoteGitDir(transport, lockfiles, self)
168
200
    @classmethod
169
201
    def probe_transport(klass, transport):
170
202
        """Our format is present if the transport ends in '.not/'."""
 
203
        url = transport.base
 
204
        if url.startswith('readonly+'):
 
205
            url = url[len('readonly+'):]
 
206
        if (not url.startswith("git://") and 
 
207
            not url.startswith("git+")):
 
208
            raise bzr_errors.NotBranchError(transport.base)
171
209
        # little ugly, but works
172
210
        format = klass()
173
211
        from bzrlib.plugins.git.remote import GitSmartTransport
197
235
bzrdir.BzrDirFormat.register_control_format(LocalGitBzrDirFormat)
198
236
bzrdir.BzrDirFormat.register_control_format(RemoteGitBzrDirFormat)
199
237
 
 
238
register_transport_proto('git://', 
 
239
        help="Access using the Git smart server protocol.")
 
240
register_transport_proto('git+ssh://', 
 
241
        help="Access using the Git smart server protocol over SSH.")
 
242
 
200
243
register_lazy_transport("git://", 'bzrlib.plugins.git.remote',
201
 
                        'GitSmartTransport')
 
244
                        'TCPGitSmartTransport')
 
245
register_lazy_transport("git+ssh://", 'bzrlib.plugins.git.remote',
 
246
                        'SSHGitSmartTransport')
202
247
 
203
248
foreign_vcs_registry.register_lazy("git", 
204
 
                        "bzrlib.plugins.git.mapping", 
205
 
                        "foreign_git",
206
 
                        "Stupid content tracker")
 
249
    "bzrlib.plugins.git.mapping", "foreign_git", "Stupid content tracker")
207
250
 
208
251
plugin_cmds.register_lazy("cmd_git_serve", [], "bzrlib.plugins.git.commands")
209
252
plugin_cmds.register_lazy("cmd_git_import", [], "bzrlib.plugins.git.commands")
 
253
plugin_cmds.register_lazy("cmd_git_object", ["git-objects", "git-cat"], 
 
254
    "bzrlib.plugins.git.commands")
 
255
 
 
256
def update_stanza(rev, stanza):
 
257
    mapping = getattr(rev, "mapping", None)
 
258
    if mapping is not None and mapping.revid_prefix.startswith("git-"):
 
259
        stanza.add("git-commit", rev.foreign_revid)
 
260
 
 
261
 
 
262
rio_hooks = getattr(RioVersionInfoBuilder, "hooks", None)
 
263
if rio_hooks is not None:
 
264
    rio_hooks.install_named_hook('revision', update_stanza, None)
 
265
 
 
266
def get_rich_root_format(stacked=False):
 
267
    if stacked:
 
268
        return bzrdir.format_registry.make_bzrdir("1.9-rich-root")
 
269
    else:
 
270
        return bzrdir.format_registry.make_bzrdir("default-rich-root")
210
271
 
211
272
def test_suite():
212
273
    from bzrlib.plugins.git import tests