bookmark: fix remote bookmark deletion when the push is raced
Before this patch, running `hg push -B book` to push the `book` bookmark
sideway at the same time as a commit making it moving forward might result in
the removal of the bookmark remotely.
After this changeset, the push can still be raced, but to remove deletion
happens. This is progress.
==========================================================
Test file dedicated to checking side-data related behavior
==========================================================
Check data can be written/read from sidedata
============================================
$ cat << EOF >> $HGRCPATH
> [extensions]
> testsidedata=$TESTDIR/testlib/ext-sidedata.py
> EOF
$ hg init test-sidedata --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data
$ cd test-sidedata
$ echo aaa > a
$ hg add a
$ hg commit -m a --traceback
$ echo aaa > b
$ hg add b
$ hg commit -m b
$ echo xxx >> a
$ hg commit -m aa
$ hg debugsidedata -c 0
2 sidedata entries
entry-0001 size 4
entry-0002 size 32
$ hg debugsidedata -c 1 -v
2 sidedata entries
entry-0001 size 4
'\x00\x00\x006'
entry-0002 size 32
'\x98\t\xf9\xc4v\xf0\xc5P\x90\xf7wRf\xe8\xe27e\xfc\xc1\x93\xa4\x96\xd0\x1d\x97\xaaG\x1d\xd7t\xfa\xde'
$ hg debugsidedata -m 2
2 sidedata entries
entry-0001 size 4
entry-0002 size 32
$ hg debugsidedata a 1
2 sidedata entries
entry-0001 size 4
entry-0002 size 32
$ hg debug-revlog-index --verbose -c
rev rank linkrev nodeid p1-rev p1-nodeid p2-rev p2-nodeid full-size delta-base flags comp-mode data-offset chunk-size sd-comp-mode sidedata-offset sd-chunk-size
0 -1 0 7049e48789d7 -1 000000000000 -1 000000000000 54 0 0 0 0 54 plain 0 90
1 -1 1 2707720c6597 0 7049e48789d7 -1 000000000000 54 1 0 0 54 54 plain 90 90
2 -1 2 40f977031323 1 2707720c6597 -1 000000000000 55 2 0 0 108 55 plain 180 90
$ hg debug-revlog-index --verbose -m
rev rank linkrev nodeid p1-rev p1-nodeid p2-rev p2-nodeid full-size delta-base flags comp-mode data-offset chunk-size sd-comp-mode sidedata-offset sd-chunk-size
0 -1 0 b85d294330e3 -1 000000000000 -1 000000000000 43 0 0 0 0 43 plain 0 90
1 -1 1 1a0aec305c63 0 b85d294330e3 -1 000000000000 86 0 0 0 43 55 plain 90 90
2 -1 2 104258a4f75f 1 1a0aec305c63 -1 000000000000 86 1 0 0 98 55 plain 180 90
Check upgrade behavior
======================
Right now, sidedata has not upgrade support
Check that we can upgrade to sidedata
-------------------------------------
$ hg init up-no-side-data --config experimental.revlogv2=no
$ hg debugformat -v -R up-no-side-data | grep -E 'changelog-v2|revlog-v2'
revlog-v2: no no no
changelog-v2: no no no
$ hg debugformat -v -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data | grep -E 'changelog-v2|revlog-v2'
revlog-v2: no yes no
changelog-v2: no no no
$ hg debugupgraderepo -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data > /dev/null
Check that we can downgrade from sidedata
-----------------------------------------
$ hg init up-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data
$ hg debugformat -v -R up-side-data | grep -E 'changelog-v2|revlog-v2'
revlog-v2: yes no no
changelog-v2: no no no
$ hg debugformat -v -R up-side-data --config experimental.revlogv2=no | grep -E 'changelog-v2|revlog-v2'
revlog-v2: yes no no
changelog-v2: no no no
$ hg debugupgraderepo -R up-side-data --config experimental.revlogv2=no > /dev/null