local-clone: perform the hardlink/copy based from _entries_walk returns
authorPierre-Yves David <pierre-yves.david@octobus.net>
Sun, 28 May 2023 04:12:10 +0200
changeset 50633 f2ae815ae34c
parent 50632 786443bd3bc1
child 50634 1415e17ea20f
local-clone: perform the hardlink/copy based from _entries_walk returns We previously used `_v2_walk`. However it is not bringing us much. So lets use the higher level function instead. This will offer us more flexibility with the `_v2_walk` function… like deleting it eventually.
mercurial/streamclone.py
--- a/mercurial/streamclone.py	Mon May 29 04:24:29 2023 +0200
+++ b/mercurial/streamclone.py	Sun May 28 04:12:10 2023 +0200
@@ -900,7 +900,7 @@
         hardlink[0] = False
         progress.topic = _(b'copying')
 
-    for k, path, size in entries:
+    for k, path in entries:
         src_vfs = src_vfs_map[k]
         dst_vfs = dst_vfs_map[k]
         src_path = src_vfs.join(path)
@@ -951,17 +951,19 @@
             if os.path.exists(srcbookmarks):
                 bm_count = 1
 
-            entries, totalfilesize = _v2_walk(
+            entries = _entries_walk(
                 src_repo,
                 includes=None,
                 excludes=None,
                 includeobsmarkers=True,
             )
+            entries = list(entries)
             src_vfs_map = _makemap(src_repo)
             dest_vfs_map = _makemap(dest_repo)
+            total_files = sum(len(e[1].files()) for e in entries) + bm_count
             progress = src_repo.ui.makeprogress(
                 topic=_(b'linking'),
-                total=len(entries) + bm_count,
+                total=total_files,
                 unit=_(b'files'),
             )
             # copy  files
@@ -971,7 +973,11 @@
             # this would also requires checks that nobody is appending any data
             # to the files while we do the clone, so this is not done yet. We
             # could do this blindly when copying files.
-            files = ((k, path, size) for k, path, ftype, size in entries)
+            files = [
+                (vfs_key, f.unencoded_path)
+                for vfs_key, e in entries
+                for f in e.files()
+            ]
             hardlink = _copy_files(src_vfs_map, dest_vfs_map, files, progress)
 
             # copy bookmarks over
@@ -984,7 +990,7 @@
             msg = b'linked %d files\n'
         else:
             msg = b'copied %d files\n'
-        src_repo.ui.debug(msg % (len(entries) + bm_count))
+        src_repo.ui.debug(msg % total_files)
 
         with dest_repo.transaction(b"localclone") as tr:
             dest_repo.store.write(tr)