D10084: copies: tests and fix parallel computation of changed file information
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Mon Mar 1 19:11:59 UTC 2021
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
The code was mixing variable name and misbehaving in some case. This changeset
fix it and also add a tests to validate it does not regress. Without the fix,
the parallel-upgrade misbehavior in random ways.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D10084
AFFECTED FILES
mercurial/metadata.py
tests/test-copies-chain-merge.t
CHANGE DETAILS
diff --git a/tests/test-copies-chain-merge.t b/tests/test-copies-chain-merge.t
--- a/tests/test-copies-chain-merge.t
+++ b/tests/test-copies-chain-merge.t
@@ -1,4 +1,4 @@
-#testcases filelog compatibility changeset sidedata upgraded
+#testcases filelog compatibility changeset sidedata upgraded upgraded-parallel
=====================================================
Test Copy tracing for chain of copies involving merge
@@ -1486,6 +1486,44 @@
#endif
+#if upgraded-parallel
+ $ cat >> $HGRCPATH << EOF
+ > [format]
+ > exp-use-side-data = yes
+ > exp-use-copies-side-data-changeset = yes
+ > [experimental]
+ > worker.repository-upgrade=yes
+ > [worker]
+ > enabled=yes
+ > numcpus=8
+ > EOF
+ $ hg debugformat -v
+ format-variant repo config default
+ fncache: yes yes yes
+ dotencode: yes yes yes
+ generaldelta: yes yes yes
+ share-safe: no no no
+ sparserevlog: yes yes yes
+ sidedata: no yes no
+ persistent-nodemap: no no no
+ copies-sdc: no yes no
+ plain-cl-delta: yes yes yes
+ compression: * (glob)
+ compression-level: default default default
+ $ hg debugupgraderepo --run --quiet
+ upgrade will perform the following actions:
+
+ requirements
+ preserved: * (glob)
+ added: exp-copies-sidedata-changeset, exp-sidedata-flag
+
+ processed revlogs:
+ - all-filelogs
+ - changelog
+ - manifest
+
+#endif
+
#if no-compatibility no-filelog no-changeset
@@ -3172,18 +3210,21 @@
a (filelog !)
a (sidedata !)
a (upgraded !)
+ a (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE,Km")' f
A f
a (filelog !)
a (sidedata !)
a (upgraded !)
+ a (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AEm")' f
A f
a (filelog !)
a (sidedata !)
a (upgraded !)
+ a (upgraded-parallel !)
The result from mEAm is the same for the subsequent merge:
@@ -3193,18 +3234,21 @@
a (filelog !)
b (sidedata !)
b (upgraded !)
+ b (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA,Jm")' f
A f
a (filelog !)
b (sidedata !)
b (upgraded !)
+ b (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EAm")' f
A f
a (filelog !)
b (sidedata !)
b (upgraded !)
+ b (upgraded-parallel !)
Subcase: chaining conflicting rename resolution
```````````````````````````````````````````````
@@ -3221,18 +3265,21 @@
r (filelog !)
p (sidedata !)
p (upgraded !)
+ p (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQ,Tm")' v
A v
r (filelog !)
p (sidedata !)
p (upgraded !)
+ p (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mT,PQm")' v
A v
r (filelog !)
p (sidedata !)
p (upgraded !)
+ p (upgraded-parallel !)
The result from mQPm is the same for the subsequent merge:
@@ -3250,6 +3297,7 @@
r (filelog !)
r (sidedata !)
r (upgraded !)
+ r (upgraded-parallel !)
Subcase: chaining salvage information during a merge
@@ -3330,11 +3378,13 @@
a (filelog !)
h (sidedata !)
h (upgraded !)
+ h (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm")' d
A d
a (filelog !)
a (sidedata !)
a (upgraded !)
+ a (upgraded-parallel !)
Chained output
@@ -3343,11 +3393,13 @@
a (filelog !)
h (sidedata !)
h (upgraded !)
+ h (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFG,Om")' d
A d
a (filelog !)
h (sidedata !)
h (upgraded !)
+ h (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGF,Nm")' d
@@ -3373,12 +3425,14 @@
a (filelog !)
a (sidedata !)
a (upgraded !)
+ a (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change,Km")' f
A f
a (filelog !)
a (sidedata !)
a (upgraded !)
+ a (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AE-change-m")' f
A f
@@ -3392,15 +3446,18 @@
a (filelog !)
b (sidedata !)
b (upgraded !)
+ b (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change,Jm")' f
A f
a (filelog !)
b (sidedata !)
b (upgraded !)
+ b (upgraded-parallel !)
$ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EA-change-m")' f
A f
a (filelog !)
b (sidedata !)
b (upgraded !)
+ b (upgraded-parallel !)
diff --git a/mercurial/metadata.py b/mercurial/metadata.py
--- a/mercurial/metadata.py
+++ b/mercurial/metadata.py
@@ -882,14 +882,14 @@
data = {}, False
if util.safehasattr(revlog, b'filteredrevs'): # this is a changelog
# Is the data previously shelved ?
- sidedata = staging.pop(rev, None)
- if sidedata is None:
+ data = staging.pop(rev, None)
+ if data is None:
# look at the queued result until we find the one we are lookig
# for (shelve the other ones)
r, data = sidedataq.get()
while r != rev:
staging[r] = data
- r, sidedata = sidedataq.get()
+ r, data = sidedataq.get()
tokens.release()
sidedata, has_copies_info = data
new_flag = 0
To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list