/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
1
# Copyright (C) 2008 Jelmer Vernooij
2
# Copyright (C) 2008 John Carr
0.217.1 by John Carr
Start stubbing out rewritten git-serve
3
# Copyright (C) 2008 Canonical Ltd
4
#
5
# This program is free software; you can redistribute it and/or modify
6
# it under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 2 of the License, or
8
# (at your option) any later version.
9
#
10
# This program is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
0.200.531 by Jelmer Vernooij
Support 'bzr serve --git'.
19
from dulwich.server import TCPGitServer
20
0.200.495 by Jelmer Vernooij
Fix import.
21
from bzrlib.bzrdir import (
22
    BzrDir,
0.200.861 by Jelmer Vernooij
Simplify ref determination, add asserts.
23
    )
0.200.292 by Jelmer Vernooij
Fix formatting.
24
25
from bzrlib.plugins.git.mapping import (
26
    default_mapping,
27
    )
0.200.456 by Jelmer Vernooij
Fix git -> git fetching.
28
from bzrlib.plugins.git.object_store import (
0.200.485 by Jelmer Vernooij
Use ObjectStore to find revision SHA1s rather than 'simple' looups.
29
    get_object_store
0.200.456 by Jelmer Vernooij
Fix git -> git fetching.
30
    )
0.200.872 by Jelmer Vernooij
Move refs code to separate module.
31
from bzrlib.plugins.git.refs import (
0.200.873 by Jelmer Vernooij
Add convenience command for accessing virtual git refs.
32
    BazaarRefsContainer,
0.200.872 by Jelmer Vernooij
Move refs code to separate module.
33
    )
0.200.292 by Jelmer Vernooij
Fix formatting.
34
35
from dulwich.server import (
36
    Backend,
0.200.831 by Jelmer Vernooij
Implement new git server backend API.
37
    BackendRepo,
0.200.292 by Jelmer Vernooij
Fix formatting.
38
    )
0.217.32 by John Carr
Dirtyness to help pass tests
39
0.217.1 by John Carr
Start stubbing out rewritten git-serve
40
class BzrBackend(Backend):
0.200.828 by Jelmer Vernooij
Fix formatting.
41
    """A git serve backend that can use a Bazaar repository."""
0.217.1 by John Carr
Start stubbing out rewritten git-serve
42
0.200.531 by Jelmer Vernooij
Support 'bzr serve --git'.
43
    def __init__(self, transport):
44
        self.transport = transport
0.217.7 by John Carr
Create tips
45
        self.mapping = default_mapping
0.217.2 by John Carr
Fix missing imports. Update TCPGitServer instantiation to latest. BzrBackend needs to know which directory its repo is in.
46
0.200.831 by Jelmer Vernooij
Implement new git server backend API.
47
    def open_repository(self, path):
0.249.1 by Jelmer Vernooij
More work on server side.
48
        # FIXME: More secure path sanitization
0.200.861 by Jelmer Vernooij
Simplify ref determination, add asserts.
49
        return BzrBackendRepo(self.transport.clone(path.lstrip("/")),
50
            self.mapping)
0.200.831 by Jelmer Vernooij
Implement new git server backend API.
51
52
53
class BzrBackendRepo(BackendRepo):
54
55
    def __init__(self, transport, mapping):
56
        self.transport = transport
57
        self.mapping = mapping
58
        self.repo_dir = BzrDir.open_from_transport(self.transport)
59
        self.repo = self.repo_dir.find_repository()
60
        self.object_store = get_object_store(self.repo)
0.200.873 by Jelmer Vernooij
Add convenience command for accessing virtual git refs.
61
        self.refs = BazaarRefsContainer(self.repo_dir, self.object_store)
0.200.874 by Jelmer Vernooij
Support tag refs.
62
        self._refs = self.refs.as_dict() # Much faster for now..
0.200.873 by Jelmer Vernooij
Add convenience command for accessing virtual git refs.
63
64
    def get_refs(self):
0.200.874 by Jelmer Vernooij
Support tag refs.
65
        return self._refs
0.200.831 by Jelmer Vernooij
Implement new git server backend API.
66
0.200.862 by Jelmer Vernooij
Fix locking.
67
    def get_peeled(self, name):
68
        return self.get_refs()[name]
69
70
    def fetch_objects(self, determine_wants, graph_walker, progress,
71
        get_tagged=None):
0.217.1 by John Carr
Start stubbing out rewritten git-serve
72
        """ yield git objects to send to client """
0.251.1 by Jelmer Vernooij
Implement ObjectStore.add_{thin_,}pack.
73
0.217.12 by John Carr
Support ls-remote against bazaar
74
        wants = determine_wants(self.get_refs())
0.200.862 by Jelmer Vernooij
Fix locking.
75
        self.repo.lock_read()
76
        try:
77
            have = self.object_store.find_common_revisions(graph_walker)
0.200.871 by Jelmer Vernooij
Fix fetching from bzr-git's server.
78
            return self.object_store.generate_pack_contents(have, wants, progress,
79
                get_tagged)
0.200.862 by Jelmer Vernooij
Fix locking.
80
        finally:
81
            self.repo.unlock()
0.200.531 by Jelmer Vernooij
Support 'bzr serve --git'.
82
83
84
def serve_git(transport, host=None, port=None, inet=False):
85
    backend = BzrBackend(transport)
86
0.248.1 by David Coles
Use host specified, not localhost
87
    if host is None:
0.248.2 by Jelmer Vernooij
Still default to localhost, update NEWS
88
        host = 'localhost'
0.248.1 by David Coles
Use host specified, not localhost
89
    if port:
90
        server = TCPGitServer(backend, host, port)
91
    else:
92
        server = TCPGitServer(backend, host)
0.200.531 by Jelmer Vernooij
Support 'bzr serve --git'.
93
    server.serve_forever()