317
317
"""See InterRepository.copy_content."""
318
318
self.fetch(revision_id, pb, find_ghosts=False)
320
def fetch_objects(self, determine_wants, mapping, pb=None):
322
pb.update("git: %s" % text.rstrip("\r\n"), 0, 0)
323
graph_walker = BzrFetchGraphWalker(self.target, mapping)
326
create_pb = pb = ui.ui_factory.nested_progress_bar()
327
target_git_object_retriever = GitObjectConverter(self.target, mapping)
330
def record_determine_wants(heads):
331
wants = determine_wants(heads)
332
recorded_wants.extend(wants)
336
self.target.lock_write()
338
self.target.start_write_group()
340
objects_iter = self.source.fetch_objects(
341
record_determine_wants,
343
target_git_object_retriever.__getitem__,
345
import_git_objects(self.target, mapping, objects_iter,
346
target_git_object_retriever, recorded_wants, pb)
348
self.target.commit_write_group()
355
320
def fetch(self, revision_id=None, pb=None, find_ghosts=False, mapping=None,
356
321
fetch_spec=None):
357
322
self.fetch_refs(revision_id=revision_id, pb=pb, find_ghosts=find_ghosts,
378
343
self.fetch_objects(determine_wants, mapping, pb)
379
344
return self._refs
382
def is_compatible(source, target):
383
"""Be compatible with GitRepository."""
384
# FIXME: Also check target uses VersionedFile
385
return (isinstance(source, GitRepository) and
348
class InterRemoteGitNonGitRepository(InterGitNonGitRepository):
349
"""InterRepository that copies revisions from a remote Git into a non-Git
352
def fetch_objects(self, determine_wants, mapping, pb=None):
354
pb.update("git: %s" % text.rstrip("\r\n"), 0, 0)
355
graph_walker = BzrFetchGraphWalker(self.target, mapping)
358
create_pb = pb = ui.ui_factory.nested_progress_bar()
359
target_git_object_retriever = GitObjectConverter(self.target, mapping)
362
def record_determine_wants(heads):
363
wants = determine_wants(heads)
364
recorded_wants.extend(wants)
368
self.target.lock_write()
370
self.target.start_write_group()
372
objects_iter = self.source.fetch_objects(
373
record_determine_wants,
375
target_git_object_retriever.__getitem__,
377
import_git_objects(self.target, mapping, objects_iter,
378
target_git_object_retriever, recorded_wants, pb)
380
self.target.commit_write_group()
388
def is_compatible(source, target):
389
"""Be compatible with GitRepository."""
390
# FIXME: Also check target uses VersionedFile
391
return (isinstance(source, RemoteGitRepository) and
392
target.supports_rich_root() and
393
not isinstance(target, GitRepository))
396
class InterLocalGitNonGitRepository(InterGitNonGitRepository):
397
"""InterRepository that copies revisions from a remote Git into a non-Git
400
def fetch_objects(self, determine_wants, mapping, pb=None):
401
wants = determine_wants(self.source._git.get_refs())
404
create_pb = pb = ui.ui_factory.nested_progress_bar()
405
target_git_object_retriever = GitObjectConverter(self.target, mapping)
407
self.target.lock_write()
409
self.target.start_write_group()
411
import_git_objects(self.target, mapping,
412
self.source._git.object_store,
413
target_git_object_retriever, wants, pb)
415
self.target.commit_write_group()
423
def is_compatible(source, target):
424
"""Be compatible with GitRepository."""
425
# FIXME: Also check target uses VersionedFile
426
return (isinstance(source, LocalGitRepository) and
386
427
target.supports_rich_root() and
387
428
not isinstance(target, GitRepository))