138
138
def _get_path(self):
139
139
return urlutils.split_segment_parameters_raw(self._path)[0]
141
def fetch_pack(self, determine_wants, graph_walker, pack_data, progress=None):
144
trace.info("git: %s" % text)
145
client = self._get_client(thin_packs=False)
147
return client.fetch_pack(self._get_path(), determine_wants,
148
graph_walker, pack_data, progress)
149
except GitProtocolError, e:
150
raise parse_git_error(self.external_url(), e)
152
def send_pack(self, get_changed_refs, generate_pack_contents):
153
client = self._get_client(thin_packs=False)
155
return client.send_pack(self._get_path(), get_changed_refs,
156
generate_pack_contents)
157
except GitProtocolError, e:
158
raise parse_git_error(self.external_url(), e)
160
141
def get(self, path):
161
142
raise NoSuchFile(path)
217
198
class RemoteGitDir(GitDir):
219
def __init__(self, transport, lockfiles, format):
200
def __init__(self, transport, lockfiles, format, get_client):
220
201
self._format = format
221
202
self.root_transport = transport
222
203
self.transport = transport
223
204
self._lockfiles = lockfiles
224
205
self._mode_check_done = None
206
self._get_client = get_client
208
def fetch_pack(self, determine_wants, graph_walker, pack_data, progress=None):
211
trace.info("git: %s" % text)
212
client = self._get_client(thin_packs=False)
214
return client.fetch_pack(self.transport._get_path(), determine_wants,
215
graph_walker, pack_data, progress)
216
except GitProtocolError, e:
217
raise parse_git_error(self.transport.external_url(), e)
219
def send_pack(self, get_changed_refs, generate_pack_contents):
220
client = self._get_client(thin_packs=False)
222
return client.send_pack(self.transport._get_path(), get_changed_refs,
223
generate_pack_contents)
224
except GitProtocolError, e:
225
raise parse_git_error(self.transport.external_url(), e)
227
228
def user_url(self):
308
309
if not isinstance(transport, GitSmartTransport):
309
310
raise NotBranchError(transport.base)
310
311
lockfiles = GitLockableFiles(transport, GitLock())
311
return RemoteGitDir(transport, lockfiles, self)
312
return RemoteGitDir(transport, lockfiles, self, transport._get_client)
313
314
def get_format_description(self):
314
315
return "Remote Git Repository"
333
334
def get_refs(self):
334
335
if self._refs is not None:
335
336
return self._refs
336
self._refs = self.bzrdir.root_transport.fetch_pack(lambda x: [], None,
337
self._refs = self.bzrdir.fetch_pack(lambda x: [], None,
337
338
lambda x: None, lambda x: trace.mutter("git: %s" % x))
338
339
return self._refs
340
341
def fetch_pack(self, determine_wants, graph_walker, pack_data,
342
return self._transport.fetch_pack(determine_wants, graph_walker,
343
return self.bzrdir.fetch_pack(determine_wants, graph_walker,
343
344
pack_data, progress)
345
346
def send_pack(self, get_changed_refs, generate_pack_contents):
346
return self._transport.send_pack(get_changed_refs, generate_pack_contents)
347
return self.bzrdir.send_pack(get_changed_refs, generate_pack_contents)
348
349
def fetch_objects(self, determine_wants, graph_walker, resolve_ext_ref,