/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

Try to import nothing other than __init__ when not opening git repositories.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
 
24
24
import bzrlib
25
25
import bzrlib.api
26
 
from bzrlib import bzrdir, errors as bzr_errors
 
26
from bzrlib import bzrdir
27
27
from bzrlib.foreign import foreign_vcs_registry
28
28
from bzrlib.lockable_files import TransportLock
29
29
from bzrlib.transport import register_lazy_transport
30
 
from bzrlib.commands import plugin_cmds
 
30
from bzrlib.commands import Command, register_command
 
31
from bzrlib.option import Option
31
32
from bzrlib.trace import warning
32
33
 
33
34
MINIMUM_DULWICH_VERSION = (0, 1, 0)
34
 
COMPATIBLE_BZR_VERSIONS = [(1, 11, 0), (1, 12, 0)]
 
35
COMPATIBLE_BZR_VERSIONS = [(1, 12, 0)]
35
36
 
36
37
_versions_checked = False
37
38
def lazy_check_versions():
56
57
    help='GIT repository.', native=False, experimental=True,
57
58
    )
58
59
 
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)
68
 
 
69
60
class GitBzrDirFormat(bzrdir.BzrDirFormat):
70
61
    _lock_class = TransportLock
71
62
 
92
83
 
93
84
        try:
94
85
            gitrepo = git.repo.Repo(transport.local_abspath("."))
95
 
        except bzr_errors.NotLocalUrl:
96
 
            raise bzr_errors.NotBranchError(path=transport.base)
 
86
        except errors.bzr_errors.NotLocalUrl:
 
87
            raise errors.bzr_errors.NotBranchError(path=transport.base)
97
88
        from bzrlib.plugins.git.dir import LocalGitDir, GitLockableFiles, GitLock
98
89
        lockfiles = GitLockableFiles(transport, GitLock())
99
90
        return LocalGitDir(transport, lockfiles, gitrepo, self)
104
95
        from bzrlib.transport.local import LocalTransport
105
96
 
106
97
        if not isinstance(transport, LocalTransport):
107
 
            raise bzr_errors.NotBranchError(path=transport.base)
 
98
            raise errors.bzr_errors.NotBranchError(path=transport.base)
108
99
 
109
100
        # This should quickly filter out most things that are not 
110
101
        # git repositories, saving us the trouble from loading dulwich.
111
102
        if not transport.has(".git") and not transport.has("objects"):
112
 
            raise bzr_errors.NotBranchError(path=transport.base)
 
103
            raise errors.bzr_errors.NotBranchError(path=transport.base)
113
104
 
114
105
        import dulwich as git
115
106
        format = klass()
117
108
            format.open(transport)
118
109
            return format
119
110
        except git.errors.NotGitRepository, e:
120
 
            raise bzr_errors.NotBranchError(path=transport.base)
121
 
        raise bzr_errors.NotBranchError(path=transport.base)
 
111
            raise errors.bzr_errors.NotBranchError(path=transport.base)
 
112
        raise errors.bzr_errors.NotBranchError(path=transport.base)
122
113
 
123
114
    def get_format_description(self):
124
115
        return "Local Git Repository"
155
146
        """
156
147
        from bzrlib.plugins.git.remote import RemoteGitDir, GitSmartTransport
157
148
        if not isinstance(transport, GitSmartTransport):
158
 
            raise bzr_errors.NotBranchError(transport.base)
 
149
            raise errors.bzr_errors.NotBranchError(transport.base)
159
150
        # we dont grok readonly - git isn't integrated with transport.
160
151
        url = transport.base
161
152
        if url.startswith('readonly+'):
172
163
        format = klass()
173
164
        from bzrlib.plugins.git.remote import GitSmartTransport
174
165
        if not isinstance(transport, GitSmartTransport):
175
 
            raise bzr_errors.NotBranchError(transport.base)
 
166
            raise errors.bzr_errors.NotBranchError(transport.base)
176
167
        # The only way to know a path exists and contains a valid repository 
177
168
        # is to do a request against it:
178
169
        try:
179
170
            transport.fetch_pack(lambda x: [], None, lambda x: None, 
180
171
                                 lambda x: mutter("git: %s" % x))
181
172
        except errors.git_errors.GitProtocolError:
182
 
            raise bzr_errors.NotBranchError(path=transport.base)
 
173
            raise errors.bzr_errors.NotBranchError(path=transport.base)
183
174
        else:
184
175
            return format
185
 
        raise bzr_errors.NotBranchError(path=transport.base)
 
176
        raise errors.bzr_errors.NotBranchError(path=transport.base)
186
177
 
187
178
    def get_format_description(self):
188
179
        return "Remote Git Repository"
191
182
        return "Remote Git Repository"
192
183
 
193
184
    def initialize_on_transport(self, transport):
194
 
        raise bzr_errors.UninitializableFormat(self)
 
185
        raise errors.bzr_errors.UninitializableFormat(self)
195
186
 
196
187
 
197
188
bzrdir.BzrDirFormat.register_control_format(LocalGitBzrDirFormat)
205
196
                        "foreign_git",
206
197
                        "Stupid content tracker")
207
198
 
208
 
plugin_cmds.register_lazy("cmd_git_serve", [], "bzrlib.plugins.git.commands")
209
 
plugin_cmds.register_lazy("cmd_git_import", [], "bzrlib.plugins.git.commands")
 
199
 
 
200
class cmd_git_serve(Command):
 
201
    """Provide access to a Bazaar branch using the git protocol.
 
202
 
 
203
    This command is experimental and doesn't do much yet.
 
204
    """
 
205
    takes_options = [
 
206
        Option('directory',
 
207
               help='serve contents of directory',
 
208
               type=unicode)
 
209
    ]
 
210
 
 
211
    def run(self, directory=None):
 
212
        lazy_check_versions()
 
213
        from dulwich.server import TCPGitServer
 
214
        from bzrlib.plugins.git.server import BzrBackend
 
215
        from bzrlib.trace import warning
 
216
        import os
 
217
 
 
218
        warning("server support in bzr-git is experimental.")
 
219
 
 
220
        if directory is None:
 
221
            directory = os.getcwd()
 
222
 
 
223
        backend = BzrBackend(directory)
 
224
 
 
225
        server = TCPGitServer(backend, 'localhost')
 
226
        server.serve_forever()
 
227
 
 
228
register_command(cmd_git_serve)
 
229
 
 
230
 
 
231
class cmd_git_import(Command):
 
232
    """Import all branches from a git repository.
 
233
 
 
234
    """
 
235
 
 
236
    takes_args = ["src_location", "dest_location"]
 
237
 
 
238
    def run(self, src_location, dest_location):
 
239
        from bzrlib.bzrdir import BzrDir, format_registry
 
240
        from bzrlib.errors import NoRepositoryPresent, NotBranchError
 
241
        from bzrlib.repository import Repository
 
242
        source_repo = Repository.open(src_location)
 
243
        format = format_registry.make_bzrdir('rich-root-pack')
 
244
        try:
 
245
            target_bzrdir = BzrDir.open(dest_location)
 
246
        except NotBranchError:
 
247
            target_bzrdir = BzrDir.create(dest_location, format=format)
 
248
        try:
 
249
            target_repo = target_bzrdir.open_repository()
 
250
        except NoRepositoryPresent:
 
251
            target_repo = target_bzrdir.create_repository(shared=True)
 
252
 
 
253
        target_repo.fetch(source_repo)
 
254
        for name, ref in source_repo._git.heads().iteritems():
 
255
            head_loc = os.path.join(dest_location, name)
 
256
            try:
 
257
                head_bzrdir = BzrDir.open(head_loc)
 
258
            except NotBranchError:
 
259
                head_bzrdir = BzrDir.create(head_loc, format=format)
 
260
            try:
 
261
                head_branch = head_bzrdir.open_branch()
 
262
            except NotBranchError:
 
263
                head_branch = head_bzrdir.create_branch()
 
264
            head_branch.generate_revision_history(source_repo.get_mapping().revision_id_foreign_to_bzr(ref))
 
265
 
 
266
 
 
267
register_command(cmd_git_import)
 
268
 
210
269
 
211
270
def test_suite():
212
271
    from bzrlib.plugins.git import tests