390
392
def _gitrepository_class(self):
391
393
return RemoteGitRepository
393
def archive(self, format, committish, write_data, progress=None, write_error=None,
394
subdirs=None, prefix=None):
395
if format not in ('tar', 'zip'):
396
raise errors.NoSuchExportFormat(format)
395
def archive(self, format, committish, write_data, progress=None,
396
write_error=None, subdirs=None, prefix=None):
397
397
if progress is None:
398
398
pb = ui.ui_factory.nested_progress_bar()
399
399
progress = DefaultProgressReporter(pb).progress
402
def progress_wrapper(message):
403
if message.startswith(b"fatal: Unknown archive format \'"):
404
format = message.strip()[len(b"fatal: Unknown archive format '"):-1]
405
raise errors.NoSuchExportFormat(format.decode('ascii'))
406
return progress(message)
403
self._client.archive(self._client_path, committish,
404
write_data, progress, write_error, format=format,
405
subdirs=subdirs, prefix=prefix)
408
self._client.archive(
409
self._client_path, committish, write_data, progress_wrapper,
411
format=(format.encode('ascii') if format else None),
413
prefix=(prefix.encode('utf-8') if prefix else None))
406
414
except GitProtocolError as e:
407
415
raise parse_git_error(self.transport.external_url(), e)
409
417
if pb is not None:
412
def fetch_pack(self, determine_wants, graph_walker, pack_data, progress=None):
420
def fetch_pack(self, determine_wants, graph_walker, pack_data,
413
422
if progress is None:
414
423
pb = ui.ui_factory.nested_progress_bar()
415
424
progress = DefaultProgressReporter(pb).progress
419
result = self._client.fetch_pack(self._client_path, determine_wants,
420
graph_walker, pack_data, progress)
428
result = self._client.fetch_pack(
429
self._client_path, determine_wants, graph_walker, pack_data,
421
431
if result.refs is None:
423
self._refs = remote_refs_dict_to_container(result.refs, result.symrefs)
433
self._refs = remote_refs_dict_to_container(
434
result.refs, result.symrefs)
425
436
except GitProtocolError as e:
426
437
raise parse_git_error(self.transport.external_url(), e)
434
445
progress = DefaultProgressReporter(pb).progress
437
449
def get_changed_refs_wrapper(refs):
438
450
# TODO(jelmer): This drops symref information
439
451
self._refs = remote_refs_dict_to_container(refs)
440
452
return get_changed_refs(refs)
442
return self._client.send_pack(self._client_path,
443
get_changed_refs_wrapper, generate_pack_data, progress)
454
return self._client.send_pack(
455
self._client_path, get_changed_refs_wrapper,
456
generate_pack_data, progress)
444
457
except GitProtocolError as e:
445
458
raise parse_git_error(self.transport.external_url(), e)
495
508
nascent_ok=False):
496
509
repo = self.open_repository()
497
510
ref = self._get_selected_ref(name, ref)
498
if not nascent_ok and ref not in self.get_refs_container():
512
if not nascent_ok and ref not in self.get_refs_container():
513
raise NotBranchError(self.root_transport.base,
515
except NotGitRepository:
499
516
raise NotBranchError(self.root_transport.base,
501
518
ref_chain, unused_sha = self.get_refs_container().follow(ref)
549
566
new_sha = source_store._lookup_revision_sha1(revision_id)
551
new_sha = repo.lookup_bzr_revision_id(revision_id)[0]
569
new_sha = repo.lookup_bzr_revision_id(revision_id)[0]
570
except errors.NoSuchRevision:
571
raise errors.NoRoundtrippingSupport(
572
source, self.open_branch(name=name, nascent_ok=True))
552
573
if not overwrite:
553
574
if remote_divergence(ret.get(refname), new_sha, source_store):
554
575
raise DivergedBranches(
778
802
return osutils.file_iterator(f)
804
def is_versioned(self, path, file_id=None):
805
raise GitSmartRemoteNotSupported(self.is_versioned, self)
807
def has_filename(self, path):
808
raise GitSmartRemoteNotSupported(self.has_filename, self)
810
def get_file_text(self, path, file_id=None):
811
raise GitSmartRemoteNotSupported(self.get_file_text, self)
781
814
class RemoteGitRepository(GitRepository):
793
826
def fetch_pack(self, determine_wants, graph_walker, pack_data,
795
return self.controldir.fetch_pack(determine_wants, graph_walker,
828
return self.controldir.fetch_pack(
829
determine_wants, graph_walker, pack_data, progress)
798
831
def send_pack(self, get_changed_refs, generate_pack_data):
799
832
return self.controldir.send_pack(get_changed_refs, generate_pack_data)