764
765
class InterGitGitRepository(InterFromGitRepository):
765
766
"""InterRepository that copies between Git repositories."""
767
def fetch_objects(self, determine_wants, mapping, pb=None):
768
def fetch_refs(self, update_refs, lossy=False):
770
raise errors.LossyPushToSameVCS(self.source, self.target)
771
old_refs = self.target._git.get_refs()
773
def determine_wants(heads):
774
old_refs = dict([(k, (v, None)) for (k, v) in heads.iteritems()])
775
new_refs = update_refs(old_refs)
776
ref_changes.update(new_refs)
777
return [sha1 for (sha1, bzr_revid) in new_refs.itervalues()]
778
self.fetch_objects(determine_wants)
779
for k, (git_sha, bzr_revid) in ref_changes.iteritems():
780
self.target._git.refs[k] = git_sha
781
new_refs = self.target._git.get_refs()
782
return None, old_refs, new_refs
784
def fetch_objects(self, determine_wants, mapping=None, pb=None):
768
785
def progress(text):
769
786
trace.note("git: %s", text)
770
787
graphwalker = self.target._git.get_graph_walker()
778
795
raise NotImplementedError
779
796
elif (isinstance(self.source, RemoteGitRepository) and
780
797
isinstance(self.target, LocalGitRepository)):
781
f, commit = self.target._git.object_store.add_thin_pack()
798
f, commit = self.target._git.object_store.add_pack()
783
refs = self.source.bzrdir.root_transport.fetch_pack(
800
refs = self.source.bzrdir.fetch_pack(
784
801
determine_wants, graphwalker, f.write, progress)
786
803
return (None, None, refs)
808
raise AssertionError("fetching between %r and %r not supported" %
809
(self.source, self.target))
793
811
def _target_has_shas(self, shas):
794
812
return set([sha for sha in shas if self.target._git.object_store])