merge: apply non-interactive working dir updates in parallel
authorBryan O'Sullivan <bryano@fb.com>
Sat, 09 Feb 2013 15:51:32 -0800
changeset 18639 5774732bb5e5
parent 18638 047110c0e2a8
child 18640 a8648f32b8ed
merge: apply non-interactive working dir updates in parallel This has a big effect on the performance of working dir updates. Here are the results of update from null to the given rev in several repos, on a Linux 3.2 system with 32 cores running ext4, with the progress extension enabled. repo rev plain parallel speedup hg 7068089c95a2 0.9 0.3 3 mozilla-central fe1600b22c77 42.8 7.7 5.5 linux-2.6 9ef4b770e069 31.4 4.9 6.4
mercurial/merge.py
--- a/mercurial/merge.py	Sat Feb 09 15:51:32 2013 -0800
+++ b/mercurial/merge.py	Sat Feb 09 15:51:32 2013 -0800
@@ -7,7 +7,7 @@
 
 from node import nullid, nullrev, hex, bin
 from i18n import _
-import error, util, filemerge, copies, subrepo
+import error, util, filemerge, copies, subrepo, worker
 import errno, os, shutil
 
 class mergestate(object):
@@ -432,7 +432,9 @@
         subrepo.submerge(repo, wctx, mctx, wctx, overwrite)
 
     z = 0
-    for i, item in getremove(repo, mctx, overwrite, workeractions):
+    prog = worker.worker(repo.ui, 0.001, getremove, (repo, mctx, overwrite),
+                         workeractions)
+    for i, item in prog:
         z += i
         repo.ui.progress(_('updating'), z, item=item, total=numupdates,
                          unit=_('files'))