/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

Return mapping in revision_id_bzr_to_foreign() as required by the interface.

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
18
20
 
19
21
"""A GIT branch and repository format implementation for bzr."""
20
22
 
 
23
from bzrlib import bzrdir
 
24
from bzrlib.foreign import 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
 
21
32
try:
22
 
    import dulwich as git
 
33
    from dulwich import __version__ as dulwich_version
23
34
except ImportError:
24
 
    import os, sys
25
 
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), "dulwich"))
26
 
    import dulwich as git
27
 
from bzrlib import bzrdir
28
 
from bzrlib.foreign import ForeignVcs, VcsMappingRegistry, foreign_vcs_registry
29
 
from bzrlib.plugins.git.dir import GitBzrDirFormat
 
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
30
43
 
31
44
bzrdir.format_registry.register(
32
 
    'git', GitBzrDirFormat,
 
45
    'git', LocalGitBzrDirFormat,
33
46
    help='GIT repository.', 
34
47
    native=False, experimental=True,
35
48
    )
36
49
 
37
 
bzrdir.BzrDirFormat.register_control_format(GitBzrDirFormat)
38
 
 
39
 
 
40
 
class ForeignGit(ForeignVcs):
41
 
    """Foreign Git."""
42
 
 
43
 
 
44
 
git_mapping_registry = VcsMappingRegistry()
45
 
git_mapping_registry.register_lazy('git-experimental', "bzrlib.plugins.git.mapping",
46
 
                                   "BzrGitMappingExperimental")
47
 
foreign_vcs_registry.register("git", ForeignGit(git_mapping_registry), 
48
 
                                      "Stupid content tracker")
 
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
foreign_vcs_registry.register_lazy("git", 
 
57
                        "bzrlib.plugins.git.mapping", 
 
58
                        "foreign_git",
 
59
                        "Stupid content tracker")
 
60
 
 
61
 
 
62
class cmd_git_serve(Command):
 
63
    """Provide access to a Bazaar branch using the git protocol.
 
64
 
 
65
    This command is experimental and doesn't do much yet.
 
66
    """
 
67
    takes_options = [
 
68
        Option('directory',
 
69
               help='serve contents of directory',
 
70
               type=unicode)
 
71
    ]
 
72
 
 
73
    def run(self, directory=None):
 
74
        from dulwich.server import TCPGitServer
 
75
        from bzrlib.plugins.git.server import BzrBackend
 
76
        from bzrlib.trace import warning
 
77
        import os
 
78
 
 
79
        warning("server support in bzr-git is experimental.")
 
80
 
 
81
        if directory is None:
 
82
            directory = os.getcwd()
 
83
 
 
84
        backend = BzrBackend(directory)
 
85
 
 
86
        server = TCPGitServer(backend, 'localhost')
 
87
        server.serve_forever()
 
88
 
 
89
register_command(cmd_git_serve)
 
90
 
 
91
 
 
92
class cmd_git_import(Command):
 
93
    """Import all branches from a git repository.
 
94
 
 
95
    """
 
96
 
 
97
    takes_args = ["src_location", "dest_location"]
 
98
 
 
99
    def run(self, src_location, dest_location):
 
100
        from bzrlib.bzrdir import BzrDir, format_registry
 
101
        from bzrlib.errors import NoRepositoryPresent, NotBranchError
 
102
        from bzrlib.repository import Repository
 
103
        source_repo = Repository.open(src_location)
 
104
        format = format_registry.make_bzrdir('rich-root-pack')
 
105
        try:
 
106
            target_bzrdir = BzrDir.open(dest_location)
 
107
        except NotBranchError:
 
108
            target_bzrdir = BzrDir.create(dest_location, format=format)
 
109
        try:
 
110
            target_repo = target_bzrdir.open_repository()
 
111
        except NoRepositoryPresent:
 
112
            target_repo = target_bzrdir.create_repository(shared=True)
 
113
 
 
114
        target_repo.fetch(source_repo)
 
115
        for name, ref in source_repo._git.heads().iteritems():
 
116
            head_loc = os.path.join(dest_location, name)
 
117
            try:
 
118
                head_bzrdir = BzrDir.open(head_loc)
 
119
            except NotBranchError:
 
120
                head_bzrdir = BzrDir.create(head_loc, format=format)
 
121
            try:
 
122
                head_branch = head_bzrdir.open_branch()
 
123
            except NotBranchError:
 
124
                head_branch = head_bzrdir.create_branch()
 
125
            head_branch.generate_revision_history(source_repo.get_mapping().revision_id_foreign_to_bzr(ref))
 
126
 
 
127
 
 
128
register_command(cmd_git_import)
49
129
 
50
130
 
51
131
def test_suite():