changeset 4607:d314deb12f08

evolve: run in a single transaction This speeds up `hg evolve --all` of a stack of 24 commits in the hg repo from 11.5s to 3.7s (3x). As can be seen in the tests, it also avoid some warnings about transiently unstable commits.
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 19 Apr 2019 09:41:39 -0700
parents 6c3f4cfa582e
children fe22c36b5563
files CHANGELOG hgext3rd/evolve/evolvecmd.py tests/test-evolve-content-divergent-stack.t tests/test-evolve-phase-divergence.t tests/test-evolve-progress.t tests/test-evolve-public-content-divergent-corner-cases.t
diffstat 6 files changed, 10 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGELOG	Fri Apr 19 10:01:32 2019 -0700
+++ b/CHANGELOG	Fri Apr 19 09:41:39 2019 -0700
@@ -11,6 +11,7 @@
   * evolve: drop compatibility with 4.4
   * evolve: reinstalled compatibility with narrow repositories,
   * evolve: use "unstable" instead of "troubled"
+  * evolve: run multiple stabilisation in the same transaction
 
 8.5.1 -- 2019-04-23
 -------------------
--- a/hgext3rd/evolve/evolvecmd.py	Fri Apr 19 10:01:32 2019 -0700
+++ b/hgext3rd/evolve/evolvecmd.py	Fri Apr 19 09:41:39 2019 -0700
@@ -1723,11 +1723,15 @@
         lastsolved = None
 
         activetopic = getattr(repo, 'currenttopic', '')
-        for rev in revs:
-            lastsolved = _solveonerev(ui, repo, rev, evolvestate, activetopic,
-                                      dryrunopt, confirmopt, progresscb,
-                                      targetcat, lastsolved)
-            seen += 1
+        with repo.wlock(), repo.lock():
+            tr = repo.transaction("evolve")
+            with util.acceptintervention(tr):
+                for rev in revs:
+                    lastsolved = _solveonerev(ui, repo, rev, evolvestate,
+                                              activetopic, dryrunopt,
+                                              confirmopt, progresscb,
+                                              targetcat, lastsolved)
+                    seen += 1
 
         if showprogress:
             compat.progress(ui, _('evolve'), None)
--- a/tests/test-evolve-content-divergent-stack.t	Fri Apr 19 10:01:32 2019 -0700
+++ b/tests/test-evolve-content-divergent-stack.t	Fri Apr 19 09:41:39 2019 -0700
@@ -145,7 +145,6 @@
   base: [1] added a
   merging "other" content-divergent changeset '82b74d5dc678'
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  6 new orphan changesets
   merge:[6] added b
   with: [10] added b
   base: [2] added b
@@ -322,7 +321,6 @@
   updating to "local" side of the conflict: c04ff147ef79
   merging "other" content-divergent changeset '186bdc2cdfa2'
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  6 new orphan changesets
   merge:[11] added b
   with: [6] added b
   base: [2] added b
--- a/tests/test-evolve-phase-divergence.t	Fri Apr 19 10:01:32 2019 -0700
+++ b/tests/test-evolve-phase-divergence.t	Fri Apr 19 09:41:39 2019 -0700
@@ -997,7 +997,6 @@
   recreate:[2] added m
   atop:[1] added m and n
   committed as 86419909e017
-  1 new orphan changesets
   recreate:[3] added n
   atop:[1] added m and n
   rebasing to destination parent: d3873e73d99e
@@ -1258,7 +1257,6 @@
   recreate:[2] added m
   atop:[1] added m and n
   committed as 86419909e017
-  1 new orphan changesets
   recreate:[4] added n
   atop:[1] added m and n
   rebasing to destination parent: d3873e73d99e
--- a/tests/test-evolve-progress.t	Fri Apr 19 10:01:32 2019 -0700
+++ b/tests/test-evolve-progress.t	Fri Apr 19 09:41:39 2019 -0700
@@ -38,8 +38,6 @@
   a
   committing manifest
   committing changelog
-  updating the branch cache
-  obscache is out of date
   evolve: 2/3 changesets (66.67%)
   move:[2] third
   hg rebase -r 769574b07a96 -d 5f16d91ecde0
@@ -56,8 +54,6 @@
   b
   committing manifest
   committing changelog
-  updating the branch cache
-  obscache is out of date
   evolve: 3/3 changesets (100.00%)
   move:[3] fourth
   hg rebase -r 22782fddc0ab -d 53c0008d98a0
--- a/tests/test-evolve-public-content-divergent-corner-cases.t	Fri Apr 19 10:01:32 2019 -0700
+++ b/tests/test-evolve-public-content-divergent-corner-cases.t	Fri Apr 19 09:41:39 2019 -0700
@@ -643,7 +643,6 @@
   merging "other" content-divergent changeset '0773642cfa95'
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   content divergence resolution between c7d2d47c7240 (public) and 0773642cfa95 has same content as c7d2d47c7240, discarding 0773642cfa95
-  1 new orphan changesets
   merge:[8] c_F
   with: [10] c_F
   base: [6] c_F