Mercurial > evolve
view tests/test-evolve-bumped.t @ 3452:8275ef099135 stable
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.
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Mon, 22 Jan 2018 14:10:59 +0530 |
parents | b237c1c6dc19 |
children | e1a230cc4527 |
line wrap: on
line source
$ hg init public $ cd public $ echo a > a $ mkcommit() { > echo "$1" > "$1" > hg add "$1" > hg ci -m "add $1" > } $ hg commit -A -m init adding a $ cd .. $ evolvepath=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/ $ hg clone -U public private $ cd private $ cat >> .hg/hgrc <<EOF > [extensions] > evolve = $evolvepath > [ui] > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline}\n > [phases] > publish = false > EOF $ cd .. $ cp -a private alice $ cp -a private bob $ cd alice $ hg update 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo a >> a $ hg commit -u alice -m 'modify a' $ hg push ../private pushing to ../private searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files $ hg log -r 'draft()' 1:4d1169d82e47@default(draft) modify a $ cd ../bob $ hg pull ../private pulling from ../private searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets 4d1169d82e47 (run 'hg update' to get a working copy) $ hg log -r 'draft()' 1:4d1169d82e47@default(draft) modify a $ hg push ../public pushing to ../public searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files $ hg log -r 'draft()' $ cd ../alice $ hg amend -m 'tweak a' $ hg pull ../public pulling from ../public searching for changes no changes found 1 new phase-divergent changesets $ hg evolve -a -A --phase-divergent recreate:[2] tweak a atop:[1] modify a computing new diff committed as 4d1169d82e47 working directory is now at 4d1169d82e47 Bumped Merge changeset: ----------------------- We currently cannot automatically solve bumped changeset that is the product of a merge, we add a test for it. $ mkcommit _a $ hg up .^ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit _b created new head $ mkcommit _c $ hg log -G @ 5:eeaf70969381@default(draft) add _c | o 4:6612fc0ddeb6@default(draft) add _b | | o 3:154ad198ff4a@default(draft) add _a |/ o 1:4d1169d82e47@default(public) modify a | o 0:d3873e73d99e@default(public) init $ hg merge 3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg commit -m "merge" $ hg commit --amend -m "New message" $ hg phase --public 551127da2a8a --hidden 1 new phase-divergent changesets $ hg log -G @ 7:b28e84916d8c@default(draft) New message |\ +---o 6:551127da2a8a@default(public) merge | |/ | o 5:eeaf70969381@default(public) add _c | | | o 4:6612fc0ddeb6@default(public) add _b | | o | 3:154ad198ff4a@default(public) add _a |/ o 1:4d1169d82e47@default(public) modify a | o 0:d3873e73d99e@default(public) init $ hg evolve --all --phase-divergent skipping b28e84916d8c : we do not handle merge yet