Mercurial > hg
view tests/test-merge-combination-misc.t @ 50242:379a78001d8e stable
dirstate: set identity whenever we read the dirstate's v2 docket
The docket can be loaded outside of a full read (for exemple when
pre-fetching parents), so the current code would read/set the identity
after loading the data, opening a race condition:
A0: first process docket is read
B0: other process appends new data to the dirstate (and changes the docket)
A1: first process sets the identity (based on pre-B content, but with post-B identity)
A1: first process loads the dirstatemap from the data file
A1: first process does not detect the race and overwrites the update from B.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 01 Mar 2023 02:38:20 +0100 |
parents | e8b0c519dfb3 |
children |
line wrap: on
line source
Testing recorded "modified" files for merge commit ================================================== This file shows what hg says are "modified" files for a merge commit (hg log -T {files}), somewhat exhaustively. This file test multiple corner case. For merges that involve files contents changing, check test-merge-combination-file-content.t For merges that involve executable bit changing, check test-merge-combination-exec-bytes.t Case with multiple or zero merge ancestors, copies/renames, and identical file contents with different filelog revisions are not currently covered. $ . $TESTDIR/testlib/merge-combination-util.sh Files modified or cleanly merged, with no greatest common ancestors: $ hg init repo; cd repo $ touch a0 b0; hg commit -qAm 0 $ hg up -qr null; touch a1 b1; hg commit -qAm 1 $ hg merge -qr 0; rm b*; hg commit -qAm 2 $ hg log -r . -T '{files}\n' b0 b1 $ cd ../ $ rm -rf repo A few cases of criss-cross merges involving deletions (listing all such merges is probably too much). Both gcas contain $files, so we expect the final merge to behave like a merge with a single gca containing $files. $ hg init repo; cd repo $ files="c1 u1 c2 u2" $ touch $files; hg commit -qAm '0 root' $ for f in $files; do echo f > $f; done; hg commit -qAm '1 gca1' $ hg up -qr0; hg revert -qr 1 --all; hg commit -qAm '2 gca2' $ hg up -qr 1; hg merge -qr 2; rm *1; hg commit -qAm '3 p1' $ hg up -qr 2; hg merge -qr 1; rm *2; hg commit -qAm '4 p2' $ hg merge -qr 3; echo f > u1; echo f > u2; rm -f c1 c2 $ hg commit -qAm '5 merge with two gcas' $ hg log -r . -T '{files}\n' # expecting u1 u2 $ cd ../ $ rm -rf repo