/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

Cope with newer *system* dulwich

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2006 Canonical Ltd
2
2
# Authors: Robert Collins <robert.collins@canonical.com>
 
3
#          Jelmer Vernooij <jelmer@samba.org>
 
4
#          John Carr <john.carr@unrouted.co.uk>
3
5
#
4
6
# This program is free software; you can redistribute it and/or modify
5
7
# it under the terms of the GNU General Public License as published by
19
21
"""A GIT branch and repository format implementation for bzr."""
20
22
 
21
23
from bzrlib import bzrdir
22
 
from bzrlib.plugins.git.git_dir import GitBzrDirFormat
 
24
from bzrlib.foreign import ForeignVcs, VcsMappingRegistry, foreign_vcs_registry
 
25
from bzrlib.transport import register_lazy_transport
 
26
from bzrlib.commands import Command, register_command
 
27
from bzrlib.option import Option
 
28
from bzrlib.trace import warning
 
29
 
 
30
MINIMUM_DULWICH_VERSION = (0, 1, 0)
 
31
 
 
32
try:
 
33
    from dulwich import __version__ as dulwich_version
 
34
except ImportError:
 
35
    warning("Please install dulwich, https://launchpad.net/dulwich")
 
36
    raise
 
37
else:
 
38
    if dulwich_version < MINIMUM_DULWICH_VERSION:
 
39
        warning("Dulwich is too old; at least %d.%d.%d is required" % MINIMUM_DULWICH_VERSION)
 
40
        raise ImportError
 
41
 
 
42
from bzrlib.plugins.git.dir import LocalGitBzrDirFormat, RemoteGitBzrDirFormat
23
43
 
24
44
bzrdir.format_registry.register(
25
 
    'git', GitBzrDirFormat,
26
 
    help='GIT - the stupid content tracker.',
27
 
    native=False, hidden=True, experimental=True,
 
45
    'git', LocalGitBzrDirFormat,
 
46
    help='GIT repository.', 
 
47
    native=False, experimental=True,
28
48
    )
29
49
 
30
 
bzrdir.BzrDirFormat.register_control_format(GitBzrDirFormat)
 
50
bzrdir.BzrDirFormat.register_control_format(LocalGitBzrDirFormat)
 
51
bzrdir.BzrDirFormat.register_control_format(RemoteGitBzrDirFormat)
 
52
 
 
53
register_lazy_transport("git://", 'bzrlib.plugins.git.remote',
 
54
                        'GitSmartTransport')
 
55
 
 
56
 
 
57
class ForeignGit(ForeignVcs):
 
58
    """Foreign Git."""
 
59
 
 
60
 
 
61
git_mapping_registry = VcsMappingRegistry()
 
62
git_mapping_registry.register_lazy('git-experimental', "bzrlib.plugins.git.mapping",
 
63
                                   "BzrGitMappingExperimental")
 
64
foreign_vcs_registry.register("git", ForeignGit(git_mapping_registry), 
 
65
                                      "Stupid content tracker")
 
66
 
 
67
 
 
68
class cmd_git_serve(Command):
 
69
    """Provide access to a Bazaar branch using the git protocol.
 
70
 
 
71
    This command is experimental and doesn't do much yet.
 
72
    """
 
73
    takes_options = [
 
74
        Option('directory',
 
75
               help='serve contents of directory',
 
76
               type=unicode)
 
77
    ]
 
78
 
 
79
    def run(self, directory=None):
 
80
        from dulwich.server import TCPGitServer
 
81
        from bzrlib.plugins.git.server import BzrBackend
 
82
        from bzrlib.trace import warning
 
83
        import os
 
84
 
 
85
        warning("server support in bzr-git is experimental.")
 
86
 
 
87
        if directory is None:
 
88
            directory = os.getcwd()
 
89
 
 
90
        backend = BzrBackend(directory)
 
91
 
 
92
        server = TCPGitServer(backend, 'localhost')
 
93
        server.serve_forever()
 
94
 
 
95
register_command(cmd_git_serve)
 
96
 
 
97
 
 
98
class cmd_git_import(Command):
 
99
    """Import all branches from a git repository.
 
100
 
 
101
    """
 
102
 
 
103
    takes_args = ["src_location", "dest_location"]
 
104
 
 
105
    def run(self, src_location, dest_location):
 
106
        from bzrlib.bzrdir import BzrDir, format_registry
 
107
        from bzrlib.errors import NoRepositoryPresent, NotBranchError
 
108
        from bzrlib.repository import Repository
 
109
        source_repo = Repository.open(src_location)
 
110
        format = format_registry.make_bzrdir('rich-root-pack')
 
111
        try:
 
112
            target_bzrdir = BzrDir.open(dest_location)
 
113
        except NotBranchError:
 
114
            target_bzrdir = BzrDir.create(dest_location, format=format)
 
115
        try:
 
116
            target_repo = target_bzrdir.open_repository()
 
117
        except NoRepositoryPresent:
 
118
            target_repo = target_bzrdir.create_repository(shared=True)
 
119
 
 
120
        target_repo.fetch(source_repo)
 
121
        for name, ref in source_repo._git.heads().iteritems():
 
122
            head_loc = os.path.join(dest_location, name)
 
123
            try:
 
124
                head_bzrdir = BzrDir.open(head_loc)
 
125
            except NotBranchError:
 
126
                head_bzrdir = BzrDir.create(head_loc, format=format)
 
127
            try:
 
128
                head_branch = head_bzrdir.open_branch()
 
129
            except NotBranchError:
 
130
                head_branch = head_bzrdir.create_branch()
 
131
            head_branch.generate_revision_history(source_repo.get_mapping().revision_id_foreign_to_bzr(ref))
 
132
 
 
133
 
 
134
register_command(cmd_git_import)
 
135
 
31
136
 
32
137
def test_suite():
33
138
    from bzrlib.plugins.git import tests