amend: query the wdir parent after taking lock (issue5266)
If we query wdir parent without taking a lock, that can lead to bugs because the
wdir parent can change is another process has changed the wdir parent.
One such example of this was issue 5266. When a user is running amend and that
amend is waiting for commit message, the user runs another amend which waits for
lock. The second amend is waiting for lock, but has already read the description
from the parent of working directory to use. Once the first amend completes the
wdir parent changes but we still have the description from an old wdir parent.
This patch fixes the bug by querying the description after taking lock.
Attempts were made to add test for this but the results were unstable because
they depend on time in which lock is released.
============================================
Testing obsolescence markers push: Cases A.7
============================================
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 A: simple cases
TestCase 7: markers one non targeted common changeset
A.7 non targeted common changeset
=================================
.. {{{
.. ⇠◕ A
.. |
.. ● O
.. }}}
..
.. Markers exist from:
..
.. * Chain from A
..
.. Command run:
..
.. * hg push -r O
..
.. Expected exchange:
..
.. * ø
Setup
-----
$ . $TESTDIR/testlib/exchange-obsmarker-util.sh
Initial
$ setuprepos A.7
creating test repo for test case A.7
- pulldest
- main
- pushdest
cd into `main` and proceed with env setup
$ cd main
$ mkcommit A
$ hg push -q ../pushdest
$ hg push -q ../pulldest
$ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid 'desc(A)'`
$ hg log -G --hidden
@ f5bc6836db60 (draft): A
|
o a9bdc8b26820 (public): O
$ inspect_obsmarkers
obsstore content
================
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
obshashtree
===========
a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04 0000000000000000000000000000000000000000
f5bc6836db60e308a17ba08bf050154ba9c4fad7 50656e04a95ecdfed94659dd61f663b2caa55e98
obshashrange
============
rev node index size depth obshash
1 f5bc6836db60 0 2 2 50656e04a95e
0 a9bdc8b26820 0 1 1 000000000000
1 f5bc6836db60 1 1 2 50656e04a95e
$ cd ..
$ cd ..
Actual Test
-----------------------------------
$ dotest A.7 O
## Running testcase A.7
# testing echange of "O" (a9bdc8b26820)
## initial state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
# obstore: pushdest
# obstore: pulldest
## pushing "O" from main to pushdest
pushing to pushdest
searching for changes
no changes found
## post push state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
# obstore: pushdest
# obstore: pulldest
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
## post pull state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
# obstore: pushdest
# obstore: pulldest