221
221
return RemoteGitError(message)
224
def parse_git_hangup(url, e):
225
"""Parse the error lines from a git servers stderr on hangup.
227
:param url: URL of the remote repository
228
:param e: A HangupException
230
stderr_lines = getattr(e, 'stderr_lines', None)
233
interesting_lines = [
234
line for line in stderr_lines
235
if line and line.replace('=', '')]
236
if len(interesting_lines) == 1:
237
interesting_line = interesting_lines[0]
238
return parse_git_error(url, interesting_line)
239
return RemoteGitError('\n'.join(stderr_lines))
224
242
class GitSmartTransport(Transport):
226
244
def __init__(self, url, _client=None):
420
438
prefix=(prefix.encode('utf-8') if prefix else None))
421
439
except GitProtocolError as e:
422
440
raise parse_git_error(self.transport.external_url(), e)
441
except HangupException as e:
442
raise parse_git_hangup(self.transport.external_url(), e)
424
444
if pb is not None:
443
463
except GitProtocolError as e:
444
464
raise parse_git_error(self.transport.external_url(), e)
465
except HangupException as e:
466
raise parse_git_hangup(self.transport.external_url(), e)
446
468
if pb is not None:
463
485
generate_pack_data, progress)
464
486
except GitProtocolError as e:
465
487
raise parse_git_error(self.transport.external_url(), e)
488
except HangupException as e:
489
raise parse_git_hangup(self.transport.external_url(), e)
467
491
if pb is not None:
616
640
ret[tag_name_to_ref(tagname)] = new_sha
618
642
with source_store.lock_read():
620
generate_pack_data = source_store.generate_lossy_pack_data
622
generate_pack_data = source_store.generate_pack_data
643
def generate_pack_data(have, want, progress=None,
645
git_repo = getattr(source.repository, '_git', None)
647
shallow = git_repo.get_shallow()
651
return source_store.generate_lossy_pack_data(
652
have, want, shallow=shallow,
653
progress=progress, ofs_delta=ofs_delta)
655
return source_store.generate_pack_data(
656
have, want, shallow=shallow,
657
progress=progress, ofs_delta=ofs_delta)
659
return source_store.generate_pack_data(
660
have, want, progress=progress, ofs_delta=ofs_delta)
623
661
new_refs = self.send_pack(get_changed_refs, generate_pack_data)
624
662
push_result.new_revid = repo.lookup_foreign_revision_id(
625
663
new_refs[actual_refname])
722
760
raise NotGitRepository()
723
761
elif response.status != 200:
724
762
raise GitProtocolError("unexpected http resp %d for %s" %
725
(response.code, url))
763
(response.status, url))
727
765
# TODO: Optimization available by adding `preload_content=False` to the
728
766
# request and just passing the `read` method on instead of going via