[PATCH 2 of 8] upgrade: walk the source store file only once

Pierre-Yves David pierre-yves.david at ens-lyon.org
Mon Aug 5 12:36:30 EDT 2019


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at octobus.net>
# Date 1564250297 -7200
#      Sat Jul 27 19:58:17 2019 +0200
# Node ID 085f8c53d0067f4cbb5ed3b9738ef33dbafa0782
# Parent  8d019de36e616e8d71ba19c713a6f85cdc8beb60
# EXP-Topic upgrade-select
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 085f8c53d006
upgrade: walk the source store file only once

I don't expect this to have a significant performance impact, but it seems
simpler and saner to do the operation only once and to keep the result around.

diff --git a/mercurial/upgrade.py b/mercurial/upgrade.py
--- a/mercurial/upgrade.py
+++ b/mercurial/upgrade.py
@@ -554,9 +554,11 @@ def _copyrevlogs(ui, srcrepo, dstrepo, t
     crawsize = 0
     cdstsize = 0
 
+    alldatafiles = list(srcrepo.store.walk())
+
     # Perform a pass to collect metadata. This validates we can open all
     # source files and allows a unified progress bar to be displayed.
-    for unencoded, encoded, size in srcrepo.store.walk():
+    for unencoded, encoded, size in alldatafiles:
         if unencoded.endswith('.d'):
             continue
 
@@ -607,7 +609,7 @@ def _copyrevlogs(ui, srcrepo, dstrepo, t
     # Do the actual copying.
     # FUTURE this operation can be farmed off to worker processes.
     seen = set()
-    for unencoded, encoded, size in srcrepo.store.walk():
+    for unencoded, encoded, size in alldatafiles:
         if unencoded.endswith('.d'):
             continue
 


More information about the Mercurial-devel mailing list