/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.1 by Robert Collins
Commit initial content.
1
# Copyright (C) 2006 Canonical Ltd
2
# Authors: Robert Collins <robert.collins@canonical.com>
0.200.184 by Jelmer Vernooij
Update authors: line.
3
#          Jelmer Vernooij <jelmer@samba.org>
4
#          John Carr <john.carr@unrouted.co.uk>
0.200.1 by Robert Collins
Commit initial content.
5
#
6
# This program is free software; you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 2 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20
21
"""A GIT branch and repository format implementation for bzr."""
22
0.200.125 by Jelmer Vernooij
Import dulwich from subdir if it's not installed on the system.
23
try:
24
    import dulwich as git
25
except ImportError:
26
    import os, sys
27
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), "dulwich"))
28
    import dulwich as git
0.200.114 by Jelmer Vernooij
Fix reporting of git commits in 'bzr log'.
29
from bzrlib import bzrdir
30
from bzrlib.foreign import ForeignVcs, VcsMappingRegistry, foreign_vcs_registry
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
31
from bzrlib.plugins.git.dir import LocalGitBzrDirFormat, RemoteGitBzrDirFormat
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
32
from bzrlib.transport import register_lazy_transport
0.217.2 by John Carr
Fix missing imports. Update TCPGitServer instantiation to latest. BzrBackend needs to know which directory its repo is in.
33
from bzrlib.commands import Command, register_command
34
from bzrlib.option import Option
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
35
0.200.39 by David Allouche
Black-box text for "bzr log" in a git tree. Further simplification of GitRevisionTree.
36
bzrdir.format_registry.register(
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
37
    'git', LocalGitBzrDirFormat,
0.200.108 by Jelmer Vernooij
Support bzr init --git.
38
    help='GIT repository.', 
39
    native=False, experimental=True,
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
40
    )
41
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
42
bzrdir.BzrDirFormat.register_control_format(LocalGitBzrDirFormat)
43
bzrdir.BzrDirFormat.register_control_format(RemoteGitBzrDirFormat)
44
45
register_lazy_transport("git://", 'bzrlib.plugins.git.remote',
46
                        'GitSmartTransport')
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
47
0.200.114 by Jelmer Vernooij
Fix reporting of git commits in 'bzr log'.
48
49
class ForeignGit(ForeignVcs):
50
    """Foreign Git."""
51
52
53
git_mapping_registry = VcsMappingRegistry()
54
git_mapping_registry.register_lazy('git-experimental', "bzrlib.plugins.git.mapping",
55
                                   "BzrGitMappingExperimental")
56
foreign_vcs_registry.register("git", ForeignGit(git_mapping_registry), 
0.208.6 by Jelmer Vernooij
Merge bzr-foreign.
57
                                      "Stupid content tracker")
0.208.5 by Jelmer Vernooij
Add log show function for git.
58
0.200.114 by Jelmer Vernooij
Fix reporting of git commits in 'bzr log'.
59
0.217.1 by John Carr
Start stubbing out rewritten git-serve
60
class cmd_git_serve(Command):
61
    """Provide access to a Bazaar branch using the git protocol.
62
63
    This command is experimental and doesn't do much yet.
64
    """
65
    takes_options = [
66
        Option('directory',
67
               help='serve contents of directory',
68
               type=unicode)
69
    ]
70
0.217.9 by John Carr
Handle git+ssh:// seperately to our git:// server
71
    def run(self, directory=None):
0.217.1 by John Carr
Start stubbing out rewritten git-serve
72
        from dulwich.server import TCPGitServer
73
        from bzrlib.plugins.git.server import BzrBackend
74
        from bzrlib.trace import warning
75
        import os
76
77
        warning("server support in bzr-git is experimental.")
78
79
        if directory is None:
80
            directory = os.getcwd()
81
82
        backend = BzrBackend(directory)
83
0.217.9 by John Carr
Handle git+ssh:// seperately to our git:// server
84
        server = TCPGitServer(backend, 'localhost')
85
        server.serve_forever()
0.217.1 by John Carr
Start stubbing out rewritten git-serve
86
87
register_command(cmd_git_serve)
88
89
0.200.177 by Jelmer Vernooij
Add git-import command.
90
class cmd_git_import(Command):
91
    """Import all branches from a git repository.
92
93
    """
94
95
    takes_args = ["src_location", "dest_location"]
96
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')
103
        try:
104
            target_bzrdir = BzrDir.open(dest_location)
105
        except NotBranchError:
106
            target_bzrdir = BzrDir.create(dest_location, format=format)
107
        try:
108
            target_repo = target_bzrdir.open_repository()
109
        except NoRepositoryPresent:
110
            target_repo = target_bzrdir.create_repository(shared=True)
111
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)
115
            try:
116
                head_bzrdir = BzrDir.open(head_loc)
117
            except NotBranchError:
118
                head_bzrdir = BzrDir.create(head_loc, format=format)
119
            try:
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))
124
125
126
register_command(cmd_git_import)
127
128
0.201.1 by Jelmer Vernooij
Add very small initial testsuite.
129
def test_suite():
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
130
    from bzrlib.plugins.git import tests
131
    return tests.test_suite()