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>
6
4
# This program is free software; you can redistribute it and/or modify
7
5
# it under the terms of the GNU General Public License as published by
28
26
import dulwich as git
29
27
from bzrlib import bzrdir
30
28
from bzrlib.foreign import ForeignVcs, VcsMappingRegistry, foreign_vcs_registry
31
from bzrlib.plugins.git.dir import LocalGitBzrDirFormat, RemoteGitBzrDirFormat
32
from bzrlib.transport import register_lazy_transport
33
from bzrlib.commands import Command, register_command
34
from bzrlib.option import Option
29
from bzrlib.plugins.git.dir import GitBzrDirFormat
36
31
bzrdir.format_registry.register(
37
'git', LocalGitBzrDirFormat,
32
'git', GitBzrDirFormat,
38
33
help='GIT repository.',
39
34
native=False, experimental=True,
42
bzrdir.BzrDirFormat.register_control_format(LocalGitBzrDirFormat)
43
bzrdir.BzrDirFormat.register_control_format(RemoteGitBzrDirFormat)
45
register_lazy_transport("git://", 'bzrlib.plugins.git.remote',
37
bzrdir.BzrDirFormat.register_control_format(GitBzrDirFormat)
49
40
class ForeignGit(ForeignVcs):
57
48
"Stupid content tracker")
60
class cmd_git_serve(Command):
61
"""Provide access to a Bazaar branch using the git protocol.
63
This command is experimental and doesn't do much yet.
67
help='serve contents of directory',
71
def run(self, directory=None):
72
from dulwich.server import TCPGitServer
73
from bzrlib.plugins.git.server import BzrBackend
74
from bzrlib.trace import warning
77
warning("server support in bzr-git is experimental.")
80
directory = os.getcwd()
82
backend = BzrBackend(directory)
84
server = TCPGitServer(backend, 'localhost')
85
server.serve_forever()
87
register_command(cmd_git_serve)
90
class cmd_git_import(Command):
91
"""Import all branches from a git repository.
95
takes_args = ["src_location", "dest_location"]
97
def run(self, src_location, dest_location):
98
from bzrlib.bzrdir import BzrDir, format_registry
99
from bzrlib.errors import NoRepositoryPresent, NotBranchError
100
from bzrlib.repository import Repository
101
source_repo = Repository.open(src_location)
102
format = format_registry.make_bzrdir('rich-root-pack')
104
target_bzrdir = BzrDir.open(dest_location)
105
except NotBranchError:
106
target_bzrdir = BzrDir.create(dest_location, format=format)
108
target_repo = target_bzrdir.open_repository()
109
except NoRepositoryPresent:
110
target_repo = target_bzrdir.create_repository(shared=True)
112
target_repo.fetch(source_repo)
113
for name, ref in source_repo._git.heads().iteritems():
114
head_loc = os.path.join(dest_location, name)
116
head_bzrdir = BzrDir.open(head_loc)
117
except NotBranchError:
118
head_bzrdir = BzrDir.create(head_loc, format=format)
120
head_branch = head_bzrdir.open_branch()
121
except NotBranchError:
122
head_branch = head_bzrdir.create_branch()
123
head_branch.generate_revision_history(source_repo.get_mapping().revision_id_foreign_to_bzr(ref))
126
register_command(cmd_git_import)
130
52
from bzrlib.plugins.git import tests
131
53
return tests.test_suite()