/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

  • Committer: Robert Collins
  • Date: 2007-07-15 15:40:37 UTC
  • mto: (2592.3.33 repository)
  • mto: This revision was merged to the branch mainline in revision 2624.
  • Revision ID: robertc@robertcollins.net-20070715154037-3ar8g89decddc9su
Make GraphIndex accept nodes as key, value, references, so that the method
signature is closer to what a simple key->value index delivers. Also
change the behaviour when the reference list count is zero to accept
key, value as nodes, and emit key, value to make it identical in that case
to a simple key->value index. This may not be a good idea, but for now it
seems ok.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 Canonical Ltd
2
 
# Authors: Robert Collins <robert.collins@canonical.com>
3
 
#          Jelmer Vernooij <jelmer@samba.org>
4
 
#          John Carr <john.carr@unrouted.co.uk>
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
 
 
23
 
from bzrlib import bzrdir
24
 
from bzrlib.foreign import 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
 
 
32
 
try:
33
 
    from dulwich import __version__ as dulwich_version
34
 
except ImportError:
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
 
 
42
 
from bzrlib.plugins.git.dir import LocalGitBzrDirFormat, RemoteGitBzrDirFormat
43
 
 
44
 
bzrdir.format_registry.register(
45
 
    'git', LocalGitBzrDirFormat,
46
 
    help='GIT repository.', 
47
 
    native=False, experimental=True,
48
 
    )
49
 
 
50
 
bzrdir.BzrDirFormat.register_control_format(LocalGitBzrDirFormat)
51
 
bzrdir.BzrDirFormat.register_control_format(RemoteGitBzrDirFormat)
52
 
 
53
 
register_lazy_transport("git://", 'bzrlib.plugins.git.remote',
54
 
                        'GitSmartTransport')
55
 
 
56
 
foreign_vcs_registry.register_lazy("git", 
57
 
                        "bzrlib.plugins.git.mapping", 
58
 
                        "foreign_git",
59
 
                        "Stupid content tracker")
60
 
 
61
 
 
62
 
class cmd_git_serve(Command):
63
 
    """Provide access to a Bazaar branch using the git protocol.
64
 
 
65
 
    This command is experimental and doesn't do much yet.
66
 
    """
67
 
    takes_options = [
68
 
        Option('directory',
69
 
               help='serve contents of directory',
70
 
               type=unicode)
71
 
    ]
72
 
 
73
 
    def run(self, directory=None):
74
 
        from dulwich.server import TCPGitServer
75
 
        from bzrlib.plugins.git.server import BzrBackend
76
 
        from bzrlib.trace import warning
77
 
        import os
78
 
 
79
 
        warning("server support in bzr-git is experimental.")
80
 
 
81
 
        if directory is None:
82
 
            directory = os.getcwd()
83
 
 
84
 
        backend = BzrBackend(directory)
85
 
 
86
 
        server = TCPGitServer(backend, 'localhost')
87
 
        server.serve_forever()
88
 
 
89
 
register_command(cmd_git_serve)
90
 
 
91
 
 
92
 
class cmd_git_import(Command):
93
 
    """Import all branches from a git repository.
94
 
 
95
 
    """
96
 
 
97
 
    takes_args = ["src_location", "dest_location"]
98
 
 
99
 
    def run(self, src_location, dest_location):
100
 
        from bzrlib.bzrdir import BzrDir, format_registry
101
 
        from bzrlib.errors import NoRepositoryPresent, NotBranchError
102
 
        from bzrlib.repository import Repository
103
 
        source_repo = Repository.open(src_location)
104
 
        format = format_registry.make_bzrdir('rich-root-pack')
105
 
        try:
106
 
            target_bzrdir = BzrDir.open(dest_location)
107
 
        except NotBranchError:
108
 
            target_bzrdir = BzrDir.create(dest_location, format=format)
109
 
        try:
110
 
            target_repo = target_bzrdir.open_repository()
111
 
        except NoRepositoryPresent:
112
 
            target_repo = target_bzrdir.create_repository(shared=True)
113
 
 
114
 
        target_repo.fetch(source_repo)
115
 
        for name, ref in source_repo._git.heads().iteritems():
116
 
            head_loc = os.path.join(dest_location, name)
117
 
            try:
118
 
                head_bzrdir = BzrDir.open(head_loc)
119
 
            except NotBranchError:
120
 
                head_bzrdir = BzrDir.create(head_loc, format=format)
121
 
            try:
122
 
                head_branch = head_bzrdir.open_branch()
123
 
            except NotBranchError:
124
 
                head_branch = head_bzrdir.create_branch()
125
 
            head_branch.generate_revision_history(source_repo.get_mapping().revision_id_foreign_to_bzr(ref))
126
 
 
127
 
 
128
 
register_command(cmd_git_import)
129
 
 
130
 
 
131
 
def test_suite():
132
 
    from bzrlib.plugins.git import tests
133
 
    return tests.test_suite()