/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
1
# Copyright (C) 2006-2009 Canonical Ltd
2
3
# Authors: Robert Collins <robert.collins@canonical.com>
4
#          Jelmer Vernooij <jelmer@samba.org>
5
#          John Carr <john.carr@unrouted.co.uk>
6
#
7
# This program is free software; you can redistribute it and/or modify
8
# it under the terms of the GNU General Public License as published by
9
# the Free Software Foundation; either version 2 of the License, or
10
# (at your option) any later version.
11
#
12
# This program is distributed in the hope that it will be useful,
13
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
# GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with this program; if not, write to the Free Software
19
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20
21
"""Git-specific subcommands for Bazaar."""
22
23
from bzrlib.commands import Command
24
from bzrlib.option import Option
25
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
26
from bzrlib.plugins.git import get_rich_root_format
27
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
28
class cmd_git_serve(Command):
29
    """Provide access to a Bazaar branch using the git protocol.
30
31
    This command is experimental and doesn't do much yet.
32
    """
33
    takes_options = [
34
        Option('directory',
35
               help='serve contents of directory',
36
               type=unicode)
37
    ]
38
39
    def run(self, directory=None):
40
        lazy_check_versions()
41
        from dulwich.server import TCPGitServer
42
        from bzrlib.plugins.git.server import BzrBackend
43
        from bzrlib.trace import warning
44
        import os
45
46
        warning("server support in bzr-git is experimental.")
47
48
        if directory is None:
49
            directory = os.getcwd()
50
51
        backend = BzrBackend(directory)
52
53
        server = TCPGitServer(backend, 'localhost')
54
        server.serve_forever()
55
0.200.252 by Jelmer Vernooij
Clarify history, copyright.
56
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
57
class cmd_git_import(Command):
58
    """Import all branches from a git repository.
59
60
    """
61
0.200.234 by Jelmer Vernooij
Derive to_location from from_location, simialr to bzr branch.
62
    takes_args = ["src_location", "dest_location?"]
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
63
0.200.234 by Jelmer Vernooij
Derive to_location from from_location, simialr to bzr branch.
64
    def run(self, src_location, dest_location=None):
0.200.247 by Jelmer Vernooij
Fix git-import.
65
        import os
66
        from bzrlib import (
67
            ui,
68
            urlutils,
69
            )
70
        from bzrlib.bzrdir import (
71
            BzrDir,
72
            format_registry,
73
            )
0.200.243 by Jelmer Vernooij
Error out on non-git repositories.
74
        from bzrlib.errors import (
75
            BzrCommandError,
76
            NoRepositoryPresent,
77
            NotBranchError,
78
            )
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
79
        from bzrlib.repository import Repository
0.200.247 by Jelmer Vernooij
Fix git-import.
80
        from bzrlib.plugins.git.fetch import InterGitNonGitRepository
0.200.243 by Jelmer Vernooij
Error out on non-git repositories.
81
        from bzrlib.plugins.git.repository import GitRepository
0.200.234 by Jelmer Vernooij
Derive to_location from from_location, simialr to bzr branch.
82
83
        if dest_location is None:
84
            dest_location = os.path.basename(src_location.rstrip("/\\"))
85
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
86
        source_repo = Repository.open(src_location)
0.200.243 by Jelmer Vernooij
Error out on non-git repositories.
87
        if not isinstance(source_repo, GitRepository):
88
            raise BzrCommandError("%r is not a git repository" % src_location)
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
89
        format = get_rich_root_format()
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
90
        try:
91
            target_bzrdir = BzrDir.open(dest_location)
92
        except NotBranchError:
93
            target_bzrdir = BzrDir.create(dest_location, format=format)
94
        try:
95
            target_repo = target_bzrdir.open_repository()
96
        except NoRepositoryPresent:
97
            target_repo = target_bzrdir.create_repository(shared=True)
98
0.200.247 by Jelmer Vernooij
Fix git-import.
99
        interrepo = InterGitNonGitRepository(source_repo, target_repo)
100
        mapping = source_repo.get_mapping()
101
        refs = interrepo.fetch_refs()
102
        pb = ui.ui_factory.nested_progress_bar()
103
        try:
104
            for i, (name, ref) in enumerate(refs.iteritems()):
0.200.271 by Jelmer Vernooij
Stop importing tags as branches as part of git-import.
105
                if name.startswith("refs/tags/"):
106
                    continue
0.200.247 by Jelmer Vernooij
Fix git-import.
107
                pb.update("creating branches", i, len(refs))
108
                head_loc = os.path.join(dest_location, name)
109
                try:
110
                    head_bzrdir = BzrDir.open(head_loc)
111
                except NotBranchError:
112
                    parent_path = urlutils.dirname(head_loc)
113
                    if not os.path.isdir(parent_path):
114
                        os.makedirs(parent_path)
115
                    head_bzrdir = BzrDir.create(head_loc, format=format)
116
                try:
117
                    head_branch = head_bzrdir.open_branch()
118
                except NotBranchError:
119
                    head_branch = head_bzrdir.create_branch()
0.200.271 by Jelmer Vernooij
Stop importing tags as branches as part of git-import.
120
                revid = mapping.revision_id_foreign_to_bzr(ref)
0.200.247 by Jelmer Vernooij
Fix git-import.
121
                head_branch.generate_revision_history(revid)
122
        finally:
123
            pb.finished()
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
124