bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.358.2
by Jelmer Vernooij
Refresh copyright headers, add my email. |
1 |
# Copyright (C) 2008-2018 Jelmer Vernooij <jelmer@jelmer.uk>
|
0.200.695
by Jelmer Vernooij
Clean up trailing whitespace. |
2 |
# Copyright (C) 2008 John Carr
|
0.200.1613
by Jelmer Vernooij
Handle encoding better in working tree iter changes. |
3 |
# Copyright (C) 2008-2011 Canonical Ltd
|
0.217.1
by John Carr
Start stubbing out rewritten git-serve |
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
|
|
0.358.1
by Jelmer Vernooij
Fix FSF address. |
17 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
0.217.1
by John Carr
Start stubbing out rewritten git-serve |
18 |
|
0.200.531
by Jelmer Vernooij
Support 'bzr serve --git'. |
19 |
from dulwich.server import TCPGitServer |
20 |
||
0.200.1496
by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'. |
21 |
import sys |
22 |
||
6986.2.1
by Jelmer Vernooij
Move breezy.plugins.git to breezy.git. |
23 |
from .. import ( |
0.200.1497
by Jelmer Vernooij
Fix inetd handle. |
24 |
errors, |
25 |
trace, |
|
26 |
)
|
|
0.200.1431
by Jelmer Vernooij
add test for fetching from 'bzr serve --git' server. |
27 |
|
6986.2.1
by Jelmer Vernooij
Move breezy.plugins.git to breezy.git. |
28 |
from ..controldir import ( |
0.200.1648
by Jelmer Vernooij
Fix compatibility with newer versions of breezy. |
29 |
ControlDir, |
0.200.861
by Jelmer Vernooij
Simplify ref determination, add asserts. |
30 |
)
|
0.200.292
by Jelmer Vernooij
Fix formatting. |
31 |
|
0.200.1641
by Jelmer Vernooij
Use relative imports where possible. |
32 |
from .mapping import ( |
0.200.292
by Jelmer Vernooij
Fix formatting. |
33 |
default_mapping, |
7490.70.1
by Jelmer Vernooij
Add functions for encoding/decoding git paths. |
34 |
decode_git_path, |
0.200.292
by Jelmer Vernooij
Fix formatting. |
35 |
)
|
0.200.1641
by Jelmer Vernooij
Use relative imports where possible. |
36 |
from .object_store import ( |
6997.3.1
by Jelmer Vernooij
Fix 'brz git --serve' for native git repositories. |
37 |
BazaarObjectStore, |
0.200.1433
by Jelmer Vernooij
Fix fetching between git repositories. |
38 |
get_object_store, |
0.200.456
by Jelmer Vernooij
Fix git -> git fetching. |
39 |
)
|
0.200.1641
by Jelmer Vernooij
Use relative imports where possible. |
40 |
from .refs import ( |
0.200.1433
by Jelmer Vernooij
Fix fetching between git repositories. |
41 |
get_refs_container, |
0.200.872
by Jelmer Vernooij
Move refs code to separate module. |
42 |
)
|
0.200.292
by Jelmer Vernooij
Fix formatting. |
43 |
|
0.200.1496
by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'. |
44 |
from dulwich.protocol import Protocol |
0.200.292
by Jelmer Vernooij
Fix formatting. |
45 |
from dulwich.server import ( |
46 |
Backend, |
|
0.200.831
by Jelmer Vernooij
Implement new git server backend API. |
47 |
BackendRepo, |
0.200.1496
by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'. |
48 |
ReceivePackHandler, |
49 |
UploadPackHandler, |
|
0.200.292
by Jelmer Vernooij
Fix formatting. |
50 |
)
|
0.217.32
by John Carr
Dirtyness to help pass tests |
51 |
|
7143.15.2
by Jelmer Vernooij
Run autopep8. |
52 |
|
0.217.1
by John Carr
Start stubbing out rewritten git-serve |
53 |
class BzrBackend(Backend): |
0.200.828
by Jelmer Vernooij
Fix formatting. |
54 |
"""A git serve backend that can use a Bazaar repository.""" |
0.217.1
by John Carr
Start stubbing out rewritten git-serve |
55 |
|
0.200.531
by Jelmer Vernooij
Support 'bzr serve --git'. |
56 |
def __init__(self, transport): |
57 |
self.transport = transport |
|
0.217.7
by John Carr
Create tips |
58 |
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. |
59 |
|
0.200.831
by Jelmer Vernooij
Implement new git server backend API. |
60 |
def open_repository(self, path): |
0.249.1
by Jelmer Vernooij
More work on server side. |
61 |
# FIXME: More secure path sanitization
|
7490.70.1
by Jelmer Vernooij
Add functions for encoding/decoding git paths. |
62 |
transport = self.transport.clone(decode_git_path(path).lstrip("/")) |
0.200.1431
by Jelmer Vernooij
add test for fetching from 'bzr serve --git' server. |
63 |
trace.mutter('client opens %r: %r', path, transport) |
64 |
return BzrBackendRepo(transport, self.mapping) |
|
0.200.831
by Jelmer Vernooij
Implement new git server backend API. |
65 |
|
66 |
||
67 |
class BzrBackendRepo(BackendRepo): |
|
68 |
||
69 |
def __init__(self, transport, mapping): |
|
70 |
self.mapping = mapping |
|
0.200.1648
by Jelmer Vernooij
Fix compatibility with newer versions of breezy. |
71 |
self.repo_dir = ControlDir.open_from_transport(transport) |
0.200.831
by Jelmer Vernooij
Implement new git server backend API. |
72 |
self.repo = self.repo_dir.find_repository() |
73 |
self.object_store = get_object_store(self.repo) |
|
0.200.1433
by Jelmer Vernooij
Fix fetching between git repositories. |
74 |
self.refs = get_refs_container(self.repo_dir, self.object_store) |
0.200.873
by Jelmer Vernooij
Add convenience command for accessing virtual git refs. |
75 |
|
76 |
def get_refs(self): |
|
0.200.1788
by Jelmer Vernooij
Use context managers. |
77 |
with self.object_store.lock_read(): |
0.200.1431
by Jelmer Vernooij
add test for fetching from 'bzr serve --git' server. |
78 |
return self.refs.as_dict() |
0.200.831
by Jelmer Vernooij
Implement new git server backend API. |
79 |
|
0.200.862
by Jelmer Vernooij
Fix locking. |
80 |
def get_peeled(self, name): |
0.200.1487
by Jelmer Vernooij
Use peeling. |
81 |
cached = self.refs.get_peeled(name) |
82 |
if cached is not None: |
|
83 |
return cached |
|
84 |
return self.object_store.peel_sha(self.refs[name]).id |
|
0.200.862
by Jelmer Vernooij
Fix locking. |
85 |
|
86 |
def fetch_objects(self, determine_wants, graph_walker, progress, |
|
7143.15.2
by Jelmer Vernooij
Run autopep8. |
87 |
get_tagged=None): |
0.200.1431
by Jelmer Vernooij
add test for fetching from 'bzr serve --git' server. |
88 |
"""Yield git objects to send to client """ |
0.200.1788
by Jelmer Vernooij
Use context managers. |
89 |
with self.object_store.lock_read(): |
0.200.1431
by Jelmer Vernooij
add test for fetching from 'bzr serve --git' server. |
90 |
wants = determine_wants(self.get_refs()) |
0.200.862
by Jelmer Vernooij
Fix locking. |
91 |
have = self.object_store.find_common_revisions(graph_walker) |
0.271.4
by Jelmer Vernooij
Cope with determine_wants returning None. |
92 |
if wants is None: |
93 |
return
|
|
7490.26.1
by Jelmer Vernooij
Fix shallow handling in Git. |
94 |
shallows = getattr(graph_walker, 'shallow', frozenset()) |
6997.3.1
by Jelmer Vernooij
Fix 'brz git --serve' for native git repositories. |
95 |
if isinstance(self.object_store, BazaarObjectStore): |
7143.15.3
by Jelmer Vernooij
Fix pep8 issues in breezy.git. |
96 |
return self.object_store.generate_pack_contents( |
7490.26.1
by Jelmer Vernooij
Fix shallow handling in Git. |
97 |
have, wants, shallow=shallows, |
98 |
progress=progress, get_tagged=get_tagged, lossy=True) |
|
6997.3.1
by Jelmer Vernooij
Fix 'brz git --serve' for native git repositories. |
99 |
else: |
7490.26.1
by Jelmer Vernooij
Fix shallow handling in Git. |
100 |
if shallows: |
101 |
return self.object_store.generate_pack_contents( |
|
102 |
have, wants, shallow=shallows, progress=progress) |
|
103 |
else: |
|
104 |
return self.object_store.generate_pack_contents( |
|
105 |
have, wants, progress=progress) |
|
106 |
||
0.200.531
by Jelmer Vernooij
Support 'bzr serve --git'. |
107 |
|
0.200.1437
by Jelmer Vernooij
Add bzr-git tcp server class, for better logging. |
108 |
class BzrTCPGitServer(TCPGitServer): |
109 |
||
110 |
def handle_error(self, request, client_address): |
|
111 |
trace.log_exception_quietly() |
|
112 |
trace.warning('Exception happened during processing of request ' |
|
113 |
'from %s', client_address) |
|
114 |
||
115 |
||
0.200.1611
by Jelmer Vernooij
Support optional new timeout argument to serve_git. |
116 |
def serve_git(transport, host=None, port=None, inet=False, timeout=None): |
0.200.531
by Jelmer Vernooij
Support 'bzr serve --git'. |
117 |
backend = BzrBackend(transport) |
118 |
||
0.248.1
by David Coles
Use host specified, not localhost |
119 |
if host is None: |
0.248.2
by Jelmer Vernooij
Still default to localhost, update NEWS |
120 |
host = 'localhost' |
0.248.1
by David Coles
Use host specified, not localhost |
121 |
if port: |
0.200.1437
by Jelmer Vernooij
Add bzr-git tcp server class, for better logging. |
122 |
server = BzrTCPGitServer(backend, host, port) |
0.248.1
by David Coles
Use host specified, not localhost |
123 |
else: |
0.200.1437
by Jelmer Vernooij
Add bzr-git tcp server class, for better logging. |
124 |
server = BzrTCPGitServer(backend, host) |
0.200.531
by Jelmer Vernooij
Support 'bzr serve --git'. |
125 |
server.serve_forever() |
0.271.5
by Jelmer Vernooij
Hook into loggerhead. |
126 |
|
127 |
||
128 |
def git_http_hook(branch, method, path): |
|
129 |
from dulwich.web import HTTPGitApplication, HTTPGitRequest, DEFAULT_HANDLERS |
|
130 |
handler = None |
|
131 |
for (smethod, spath) in HTTPGitApplication.services: |
|
132 |
if smethod != method: |
|
133 |
continue
|
|
134 |
mat = spath.search(path) |
|
135 |
if mat: |
|
136 |
handler = HTTPGitApplication.services[smethod, spath] |
|
137 |
break
|
|
138 |
if handler is None: |
|
139 |
return None |
|
140 |
backend = BzrBackend(branch.user_transport) |
|
7143.15.2
by Jelmer Vernooij
Run autopep8. |
141 |
|
0.271.5
by Jelmer Vernooij
Hook into loggerhead. |
142 |
def git_call(environ, start_response): |
143 |
req = HTTPGitRequest(environ, start_response, dumb=False, |
|
144 |
handlers=DEFAULT_HANDLERS) |
|
145 |
return handler(req, backend, mat) |
|
146 |
return git_call |
|
0.200.1496
by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'. |
147 |
|
148 |
||
149 |
def serve_command(handler_cls, backend, inf=sys.stdin, outf=sys.stdout): |
|
150 |
"""Serve a single command. |
|
151 |
||
152 |
This is mostly useful for the implementation of commands used by e.g. git+ssh.
|
|
153 |
||
154 |
:param handler_cls: `Handler` class to use for the request
|
|
155 |
:param argv: execv-style command-line arguments. Defaults to sys.argv.
|
|
156 |
:param backend: `Backend` to use
|
|
157 |
:param inf: File-like object to read from, defaults to standard input.
|
|
158 |
:param outf: File-like object to write to, defaults to standard output.
|
|
159 |
:return: Exit code for use with sys.exit. 0 on success, 1 on failure.
|
|
160 |
"""
|
|
161 |
def send_fn(data): |
|
162 |
outf.write(data) |
|
163 |
outf.flush() |
|
164 |
proto = Protocol(inf.read, send_fn) |
|
165 |
handler = handler_cls(backend, ["/"], proto) |
|
166 |
# FIXME: Catch exceptions and write a single-line summary to outf.
|
|
167 |
handler.handle() |
|
168 |
return 0 |
|
169 |
||
170 |
||
171 |
def serve_git_receive_pack(transport, host=None, port=None, inet=False): |
|
0.200.1497
by Jelmer Vernooij
Fix inetd handle. |
172 |
if not inet: |
7490.61.1
by Jelmer Vernooij
Rename BzrCommandError to CommandError. |
173 |
raise errors.CommandError( |
0.200.1497
by Jelmer Vernooij
Fix inetd handle. |
174 |
"git-receive-pack only works in inetd mode") |
0.200.1496
by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'. |
175 |
backend = BzrBackend(transport) |
176 |
sys.exit(serve_command(ReceivePackHandler, backend=backend)) |
|
177 |
||
178 |
||
179 |
def serve_git_upload_pack(transport, host=None, port=None, inet=False): |
|
0.200.1497
by Jelmer Vernooij
Fix inetd handle. |
180 |
if not inet: |
7490.61.1
by Jelmer Vernooij
Rename BzrCommandError to CommandError. |
181 |
raise errors.CommandError( |
0.200.1497
by Jelmer Vernooij
Fix inetd handle. |
182 |
"git-receive-pack only works in inetd mode") |
0.200.1496
by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'. |
183 |
backend = BzrBackend(transport) |
184 |
sys.exit(serve_command(UploadPackHandler, backend=backend)) |