211
211
return RemoteGitError(message)
214
def parse_git_hangup(url, e):
215
"""Parse the error lines from a git servers stderr on hangup.
217
:param url: URL of the remote repository
218
:param e: A HangupException
220
stderr_lines = getattr(e, 'stderr_lines', None)
223
interesting_lines = [
224
line for line in stderr_lines
225
if line and line.replace(b'=', b'')]
226
if len(interesting_lines) == 1:
227
interesting_line = interesting_lines[0]
228
return parse_git_error(
229
url, interesting_line.decode('utf-8', 'surrogateescape'))
230
return RemoteGitError(
231
b'\n'.join(stderr_lines).decode('utf-8', 'surrogateescape'))
214
234
class GitSmartTransport(Transport):
216
236
def __init__(self, url, _client=None):
410
430
prefix=(prefix.encode('utf-8') if prefix else None))
411
431
except GitProtocolError as e:
412
432
raise parse_git_error(self.transport.external_url(), e)
433
except HangupException as e:
434
raise parse_git_hangup(self.transport.external_url(), e)
414
436
if pb is not None:
433
455
except GitProtocolError as e:
434
456
raise parse_git_error(self.transport.external_url(), e)
457
except HangupException as e:
458
raise parse_git_hangup(self.transport.external_url(), e)
436
460
if pb is not None:
453
477
generate_pack_data, progress)
454
478
except GitProtocolError as e:
455
479
raise parse_git_error(self.transport.external_url(), e)
480
except HangupException as e:
481
raise parse_git_hangup(self.transport.external_url(), e)
457
483
if pb is not None:
606
632
ret[tag_name_to_ref(tagname)] = new_sha
608
634
with source_store.lock_read():
610
generate_pack_data = source_store.generate_lossy_pack_data
612
generate_pack_data = source_store.generate_pack_data
635
def generate_pack_data(have, want, progress=None,
637
git_repo = getattr(source.repository, '_git', None)
639
shallow = git_repo.get_shallow()
643
return source_store.generate_lossy_pack_data(
644
have, want, shallow=shallow,
645
progress=progress, ofs_delta=ofs_delta)
647
return source_store.generate_pack_data(
648
have, want, shallow=shallow,
649
progress=progress, ofs_delta=ofs_delta)
651
return source_store.generate_pack_data(
652
have, want, progress=progress, ofs_delta=ofs_delta)
613
653
new_refs = self.send_pack(get_changed_refs, generate_pack_data)
614
654
push_result.new_revid = repo.lookup_foreign_revision_id(
615
655
new_refs[actual_refname])
712
752
raise NotGitRepository()
713
753
elif response.status != 200:
714
754
raise GitProtocolError("unexpected http resp %d for %s" %
715
(response.code, url))
755
(response.status, url))
717
757
# TODO: Optimization available by adding `preload_content=False` to the
718
758
# request and just passing the `read` method on instead of going via