/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
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 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
 
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
 
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
 
29
42
from bzrlib.plugins.git.dir import LocalGitBzrDirFormat, RemoteGitBzrDirFormat
30
 
from bzrlib.transport import register_lazy_transport
31
43
 
32
44
bzrdir.format_registry.register(
33
45
    'git', LocalGitBzrDirFormat,
53
65
                                      "Stupid content tracker")
54
66
 
55
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
 
 
136
 
56
137
def test_suite():
57
138
    from bzrlib.plugins.git import tests
58
139
    return tests.test_suite()