##// END OF EJS Templates
streamingclone: extract the scanning part from the generation part...
marmoute -
r48237:2f4ca480 default
parent child Browse files
Show More
@@ -603,21 +603,19 def _test_sync_point_walk_2(repo):
603 603 """a function for synchronisation during tests"""
604 604
605 605
606 def generatev2(repo, includes, excludes, includeobsmarkers):
607 """Emit content for version 2 of a streaming clone.
606 def _v2_walk(repo, includes, excludes, includeobsmarkers):
607 """emit a seris of files information useful to clone a repo
608
609 return (entries, totalfilesize)
610
611 entries is a list of tuple (vfs-key, file-path, file-type, size)
608 612
609 the data stream consists the following entries:
610 1) A char representing the file destination (eg: store or cache)
611 2) A varint containing the length of the filename
612 3) A varint containing the length of file data
613 4) N bytes containing the filename (the internal, store-agnostic form)
614 5) N bytes containing the file data
615
616 Returns a 3-tuple of (file count, file size, data iterator).
613 - `vfs-key`: is a key to the right vfs to write the file (see _makemap)
614 - `name`: file path of the file to copy (to be feed to the vfss)
615 - `file-type`: do this file need to be copied with the source lock ?
616 - `size`: the size of the file (or None)
617 617 """
618
619 with repo.lock():
620
618 assert repo._currentlock(repo._lockref) is not None
621 619 entries = []
622 620 totalfilesize = 0
623 621
@@ -625,7 +623,6 def generatev2(repo, includes, excludes,
625 623 if includes or excludes:
626 624 matcher = narrowspec.match(repo.root, includes, excludes)
627 625
628 repo.ui.debug(b'scanning\n')
629 626 for rl_type, name, ename, size in _walkstreamfiles(repo, matcher):
630 627 if size:
631 628 ft = _fileappend
@@ -644,6 +641,32 def generatev2(repo, includes, excludes,
644 641 if repo.cachevfs.exists(name):
645 642 totalfilesize += repo.cachevfs.lstat(name).st_size
646 643 entries.append((_srccache, name, _filefull, None))
644 return entries, totalfilesize
645
646
647 def generatev2(repo, includes, excludes, includeobsmarkers):
648 """Emit content for version 2 of a streaming clone.
649
650 the data stream consists the following entries:
651 1) A char representing the file destination (eg: store or cache)
652 2) A varint containing the length of the filename
653 3) A varint containing the length of file data
654 4) N bytes containing the filename (the internal, store-agnostic form)
655 5) N bytes containing the file data
656
657 Returns a 3-tuple of (file count, file size, data iterator).
658 """
659
660 with repo.lock():
661
662 repo.ui.debug(b'scanning\n')
663
664 entries, totalfilesize = _v2_walk(
665 repo,
666 includes=includes,
667 excludes=excludes,
668 includeobsmarkers=includeobsmarkers,
669 )
647 670
648 671 chunks = _emit2(repo, entries, totalfilesize)
649 672 first = next(chunks)
General Comments 0
You need to be logged in to leave comments. Login now