##// END OF EJS Templates
stream-clone: directly use `_entries_walk` to generate stream-v2...
marmoute -
r51528:3416b463 default
parent child Browse files
Show More
@@ -620,7 +620,7 b' def _makemap(repo):'
620 return vfsmap
620 return vfsmap
621
621
622
622
623 def _emit2(repo, entries, totalfilesize):
623 def _emit2(repo, entries):
624 """actually emit the stream bundle"""
624 """actually emit the stream bundle"""
625 vfsmap = _makemap(repo)
625 vfsmap = _makemap(repo)
626 # we keep repo.vfs out of the on purpose, ther are too many danger there
626 # we keep repo.vfs out of the on purpose, ther are too many danger there
@@ -633,27 +633,38 b' def _emit2(repo, entries, totalfilesize)'
633 b'repo.vfs must not be added to vfsmap for security reasons'
633 b'repo.vfs must not be added to vfsmap for security reasons'
634 )
634 )
635
635
636 # translate the vfs one
637 entries = [(vfs_key, vfsmap[vfs_key], e) for (vfs_key, e) in entries]
638
639 file_count = totalfilesize = 0
640 # record the expected size of every file
641 for k, vfs, e in entries:
642 for f in e.files():
643 file_count += 1
644 totalfilesize += f.file_size(vfs)
645
636 progress = repo.ui.makeprogress(
646 progress = repo.ui.makeprogress(
637 _(b'bundle'), total=totalfilesize, unit=_(b'bytes')
647 _(b'bundle'), total=totalfilesize, unit=_(b'bytes')
638 )
648 )
639 progress.update(0)
649 progress.update(0)
640 with TempCopyManager() as copy, progress:
650 with TempCopyManager() as copy, progress:
641 # copy is delayed until we are in the try
651 # create a copy of volatile files
642 entries = [_filterfull(e, copy, vfsmap) for e in entries]
652 for k, vfs, e in entries:
643 yield None # this release the lock on the repository
653 for f in e.files():
654 if f.is_volatile:
655 copy(vfs.join(f.unencoded_path))
656 # the first yield release the lock on the repository
657 yield file_count, totalfilesize
644 totalbytecount = 0
658 totalbytecount = 0
645
659
646 for src, name, ftype, data in entries:
660 for src, vfs, e in entries:
647 if True:
661 for f in e.files():
648 vfs = vfsmap[src]
649 yield src
662 yield src
663 name = f.unencoded_path
650 yield util.uvarintencode(len(name))
664 yield util.uvarintencode(len(name))
651 if ftype == _fileappend:
665 actual_path = copy[vfs.join(name)]
652 fp = vfs(name)
666 fp = open(actual_path, b'rb')
653 size = data
667 size = f.file_size(vfs)
654 elif ftype == _filefull:
655 fp = open(data, b'rb')
656 size = util.fstat(fp).st_size
657 bytecount = 0
668 bytecount = 0
658 try:
669 try:
659 yield util.uvarintencode(size)
670 yield util.uvarintencode(size)
@@ -768,20 +779,20 b' def generatev2(repo, includes, excludes,'
768
779
769 repo.ui.debug(b'scanning\n')
780 repo.ui.debug(b'scanning\n')
770
781
771 entries, totalfilesize = _v2_walk(
782 entries = _entries_walk(
772 repo,
783 repo,
773 includes=includes,
784 includes=includes,
774 excludes=excludes,
785 excludes=excludes,
775 includeobsmarkers=includeobsmarkers,
786 includeobsmarkers=includeobsmarkers,
776 )
787 )
777
788
778 chunks = _emit2(repo, entries, totalfilesize)
789 chunks = _emit2(repo, entries)
779 first = next(chunks)
790 first = next(chunks)
780 assert first is None
791 file_count, total_file_size = first
781 _test_sync_point_walk_1(repo)
792 _test_sync_point_walk_1(repo)
782 _test_sync_point_walk_2(repo)
793 _test_sync_point_walk_2(repo)
783
794
784 return len(entries), totalfilesize, chunks
795 return file_count, total_file_size, chunks
785
796
786
797
787 def generatev3(repo, includes, excludes, includeobsmarkers):
798 def generatev3(repo, includes, excludes, includeobsmarkers):
General Comments 0
You need to be logged in to leave comments. Login now