16
16
# along with this program; if not, write to the Free Software
17
17
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
from __future__ import absolute_import
19
21
from dulwich.server import TCPGitServer
60
59
def open_repository(self, path):
61
60
# FIXME: More secure path sanitization
62
transport = self.transport.clone(decode_git_path(path).lstrip("/"))
61
transport = self.transport.clone(path.lstrip("/"))
63
62
trace.mutter('client opens %r: %r', path, transport)
64
63
return BzrBackendRepo(transport, self.mapping)
84
83
return self.object_store.peel_sha(self.refs[name]).id
86
85
def fetch_objects(self, determine_wants, graph_walker, progress,
88
87
"""Yield git objects to send to client """
89
88
with self.object_store.lock_read():
90
89
wants = determine_wants(self.get_refs())
91
90
have = self.object_store.find_common_revisions(graph_walker)
94
shallows = getattr(graph_walker, 'shallow', frozenset())
95
if isinstance(self.object_store, BazaarObjectStore):
96
return self.object_store.generate_pack_contents(
97
have, wants, shallow=shallows,
98
progress=progress, get_tagged=get_tagged, lossy=True)
101
return self.object_store.generate_pack_contents(
102
have, wants, shallow=shallows, progress=progress)
104
return self.object_store.generate_pack_contents(
105
have, wants, progress=progress)
93
return self.object_store.generate_pack_contents(have, wants, progress,
94
get_tagged, lossy=(not self.mapping.roundtripping))
108
97
class BzrTCPGitServer(TCPGitServer):
138
127
if handler is None:
140
129
backend = BzrBackend(branch.user_transport)
142
130
def git_call(environ, start_response):
143
131
req = HTTPGitRequest(environ, start_response, dumb=False,
144
132
handlers=DEFAULT_HANDLERS)
171
159
def serve_git_receive_pack(transport, host=None, port=None, inet=False):
173
raise errors.CommandError(
161
raise errors.BzrCommandError(
174
162
"git-receive-pack only works in inetd mode")
175
163
backend = BzrBackend(transport)
176
164
sys.exit(serve_command(ReceivePackHandler, backend=backend))
179
167
def serve_git_upload_pack(transport, host=None, port=None, inet=False):
181
raise errors.CommandError(
169
raise errors.BzrCommandError(
182
170
"git-receive-pack only works in inetd mode")
183
171
backend = BzrBackend(transport)
184
172
sys.exit(serve_command(UploadPackHandler, backend=backend))