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>
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."""
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
30
MINIMUM_DULWICH_VERSION = (0, 1, 0)
33
from dulwich import __version__ as dulwich_version
23
34
except ImportError:
25
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "dulwich"))
27
from bzrlib import bzrdir
28
from bzrlib.foreign import ForeignVcs, VcsMappingRegistry, foreign_vcs_registry
35
warning("Please install dulwich, https://launchpad.net/dulwich")
38
if dulwich_version < MINIMUM_DULWICH_VERSION:
39
warning("Dulwich is too old; at least %d.%d.%d is required" % MINIMUM_DULWICH_VERSION)
29
42
from bzrlib.plugins.git.dir import LocalGitBzrDirFormat, RemoteGitBzrDirFormat
30
from bzrlib.transport import register_lazy_transport
32
44
bzrdir.format_registry.register(
33
45
'git', LocalGitBzrDirFormat,
53
65
"Stupid content tracker")
68
class cmd_git_serve(Command):
69
"""Provide access to a Bazaar branch using the git protocol.
71
This command is experimental and doesn't do much yet.
75
help='serve contents of directory',
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
85
warning("server support in bzr-git is experimental.")
88
directory = os.getcwd()
90
backend = BzrBackend(directory)
92
server = TCPGitServer(backend, 'localhost')
93
server.serve_forever()
95
register_command(cmd_git_serve)
98
class cmd_git_import(Command):
99
"""Import all branches from a git repository.
103
takes_args = ["src_location", "dest_location"]
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')
112
target_bzrdir = BzrDir.open(dest_location)
113
except NotBranchError:
114
target_bzrdir = BzrDir.create(dest_location, format=format)
116
target_repo = target_bzrdir.open_repository()
117
except NoRepositoryPresent:
118
target_repo = target_bzrdir.create_repository(shared=True)
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)
124
head_bzrdir = BzrDir.open(head_loc)
125
except NotBranchError:
126
head_bzrdir = BzrDir.create(head_loc, format=format)
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))
134
register_command(cmd_git_import)
57
138
from bzrlib.plugins.git import tests
58
139
return tests.test_suite()