topicmap: massive rework
Massively rework the way we build and use topicmap. This bring massive performance
benefit.
Topic map use to be a fully independant thing that we would switch on and off
globaly. The caching on disk was broken so the performance were atrocious.
Intead, now the topic are inherited from the 'immutable' map. We gave up on
storing them on disk for now since the mutable set is usually small enough.
The activation is done by hacking new "filter" on the repository and detection
when they are one. This is hacky but core is hard to wrap here.
Overall this whole wrapping is really scary and we should massage core API to
help it.
============================================
Testing obsolescence markers push: Cases B.2
============================================
Mercurial pushes obsolescences markers relevant to the "pushed-set", the set of
all changesets that requested to be "in sync" after the push (even if they are
already on both side).
This test belongs to a series of tests checking such set is properly computed
and applied. This does not tests "obsmarkers" discovery capabilities.
Category B: pruning case
TestCase 2: Prune on targeted common changeset
Variants:
# a: explicite push
# b: bare push
B.2 Pruned changeset on head: nothing pushed
============================================
.. {{{
.. ⊗ A
.. |
.. ● O
.. }}}
..
.. Marker exist from:
..
.. * A (prune)
..
.. Command run:
..
.. * hg push -r O
.. * hg push
..
.. Expected exchange:
..
.. * prune marker for A
Setup
-----
$ . $TESTDIR/testlib/exchange-obsmarker-util.sh
Initial
$ setuprepos B.2
creating test repo for test case B.2
- pulldest
- main
- pushdest
cd into `main` and proceed with env setup
$ cd main
$ mkcommit A
$ hg prune -qd '0 0' .
$ hg log -G --hidden
x f5bc6836db60 (draft): A
|
@ a9bdc8b26820 (public): O
$ inspect_obsmarkers
obsstore content
================
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
obshashtree
===========
a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04 62d86865fd15a1e1b0ef16ebb9cb851689032dd8
f5bc6836db60e308a17ba08bf050154ba9c4fad7 6e3ba325674c3b035b63ec3db449ad2853a18372
obshashrange
============
rev node index size depth obshash
0 a9bdc8b26820 0 1 1 62d86865fd15
$ cd ..
$ cd ..
$ cp -R B.2 B.2.a
$ cp -R B.2 B.2.b
Actual Test (explicit push version)
-----------------------------------
$ dotest B.2.a O
## Running testcase B.2.a
# testing echange of "O" (a9bdc8b26820)
## initial state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pushdest
# obstore: pulldest
## pushing "O" from main to pushdest
pushing to pushdest
searching for changes
no changes found
remote: 1 new obsolescence markers
## post push state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pushdest
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pulldest
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
1 new obsolescence markers
## post pull state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pushdest
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pulldest
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
Actual Test (bare push version)
-----------------------------------
$ dotest B.2.b
## Running testcase B.2.b
## initial state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pushdest
# obstore: pulldest
## pushing from main to pushdest
pushing to pushdest
searching for changes
no changes found
remote: 1 new obsolescence markers
## post push state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pushdest
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pulldest
## pulling from main into pulldest
pulling from main
searching for changes
no changes found
1 new obsolescence markers
## post pull state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pushdest
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)
# obstore: pulldest
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (*) {'ef1': '*', 'user': 'test'} (glob)