annotate tests/test-dirstate-read-race.t @ 51925:3a90a6fd710d

dirstate: subclass the new dirstate Protocol class Behold the chaos that ensues. We'll use the generated *.pyi files to apply type annotations to the interface, and see how much agrees with the documentation. Since the CamelCase name was used to try to work around pytype issues with zope interfaces and is a new innovation this cycle (see c1d7ac70980b), drop the CamelCase name. I think the Protocol classes *should* be CamelCase, but that can be done later in one pass. For now, the CamelCase alias is extra noise in the *.pyi files.
author Matt Harbison <matt_harbison@yahoo.com>
date Thu, 26 Sep 2024 18:52:46 -0400
parents e6532a7336d0
children af54626bf358
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
1 ==============================================================================
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
2 Check potential race conditions between a dirstate's read and other operations
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
3 ==============================================================================
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
4
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
5 #testcases dirstate-v1 dirstate-v2-append dirstate-v2-rewrite
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
6 #testcases pre-all-read pre-some-read
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
7
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
8 Some commands, like `hg status`, do not need to take the wlock but need to
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
9 access dirstate data.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
10 Other commands might update the dirstate data while this happens.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
11
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
12 This can create issues if repository data is read in the wrong order, or for
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
13 the dirstate-v2 format where the data is contained in multiple files.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
14
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
15 This test file is meant to test various cases where such parallel operations
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
16 happen and make sure the reading process behaves fine. We do so with a `hg
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
17 status` command since it is probably the most advanced of such read-only
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
18 command.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
19
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
20 It bears simililarity with `tests/test-dirstate-status-race.t ` but tests a
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
21 different type of race.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
22
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
23 Setup
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
24 =====
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
25
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
26 $ cat >> $HGRCPATH << EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
27 > [storage]
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
28 > dirstate-v2.slow-path=allow
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
29 > EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
30
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
31 #if no-dirstate-v1
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
32 $ cat >> $HGRCPATH << EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
33 > [format]
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
34 > use-dirstate-v2=yes
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
35 > EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
36 #else
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
37 $ cat >> $HGRCPATH << EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
38 > [format]
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
39 > use-dirstate-v2=no
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
40 > EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
41 #endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
42
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
43 #if dirstate-v2-rewrite
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
44 $ d2args="--config devel.dirstate.v2.data_update_mode=force-new"
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
45 #endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
46 #if dirstate-v2-append
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
47 $ d2args="--config devel.dirstate.v2.data_update_mode=force-append"
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
48 #endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
49
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
50
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
51 #if dirstate-v1
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
52 $ cfg="devel.sync.dirstate.pre-read-file"
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
53 #else
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
54 #if pre-all-read
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
55 $ cfg="devel.sync.dirstate.pre-read-file"
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
56 #else
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
57 $ cfg="devel.sync.dirstate.post-docket-read-file"
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
58 #endif
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
59 #endif
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
60
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
61 $ directories="dir dir/nested dir2"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
62 $ first_files="dir/nested/a dir/b dir/c dir/d dir2/e f"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
63 $ second_files="g dir/nested/h dir/i dir/j dir2/k dir2/l dir/nested/m"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
64 $ extra_files="dir/n dir/o p q"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
65
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
66 $ hg init reference-repo
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
67 $ cd reference-repo
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
68 $ mkdir -p dir/nested dir2
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
69 $ touch -t 200001010000 $first_files $directories
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
70 $ hg commit -Aqm "recreate a bunch of files to facilitate dirstate-v2 append"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
71 $ touch -t 200001010010 $second_files $directories
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
72 $ hg commit -Aqm "more files to have two commit"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
73 $ hg log -G -v
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
74 @ changeset: 1:9a86dcbfb938
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
75 | tag: tip
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
76 | user: test
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
77 | date: Thu Jan 01 00:00:00 1970 +0000
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
78 | files: dir/i dir/j dir/nested/h dir/nested/m dir2/k dir2/l g
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
79 | description:
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
80 | more files to have two commit
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
81 |
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
82 |
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
83 o changeset: 0:4f23db756b09
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
84 user: test
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
85 date: Thu Jan 01 00:00:00 1970 +0000
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
86 files: dir/b dir/c dir/d dir/nested/a dir2/e f
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
87 description:
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
88 recreate a bunch of files to facilitate dirstate-v2 append
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
89
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
90
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
91 $ hg manifest
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
92 dir/b
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
93 dir/c
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
94 dir/d
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
95 dir/i
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
96 dir/j
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
97 dir/nested/a
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
98 dir/nested/h
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
99 dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
100 dir2/e
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
101 dir2/k
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
102 dir2/l
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
103 f
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
104 g
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
105
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
106 Add some unknown files and refresh the dirstate
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
107
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
108 $ touch -t 200001010020 $extra_files
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
109 $ hg add dir/o
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
110 $ hg remove dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
111
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
112 $ hg st --config devel.dirstate.v2.data_update_mode=force-new
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
113 A dir/o
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
114 R dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
115 ? dir/n
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
116 ? p
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
117 ? q
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
118 $ hg debugstate
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
119 n 644 0 2000-01-01 00:00:00 dir/b
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
120 n 644 0 2000-01-01 00:00:00 dir/c
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
121 n 644 0 2000-01-01 00:00:00 dir/d
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
122 n 644 0 2000-01-01 00:10:00 dir/i
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
123 n 644 0 2000-01-01 00:10:00 dir/j
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
124 n 644 0 2000-01-01 00:00:00 dir/nested/a
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
125 n 644 0 2000-01-01 00:10:00 dir/nested/h
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
126 r ?????????????????????????????????? dir/nested/m (glob)
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
127 a ?????????????????????????????????? dir/o (glob)
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
128 n 644 0 2000-01-01 00:00:00 dir2/e
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
129 n 644 0 2000-01-01 00:10:00 dir2/k
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
130 n 644 0 2000-01-01 00:10:00 dir2/l
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
131 n 644 0 2000-01-01 00:00:00 f
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
132 n 644 0 2000-01-01 00:10:00 g
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
133 $ hg debugstate > ../reference
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
134 $ cd ..
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
135
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
136 Actual Testing
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
137 ==============
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
138
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
139 Race with a `hg add`
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
140 -------------------
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
141
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
142 $ cp -a reference-repo race-with-add
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
143 $ cd race-with-add
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
144
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
145 spin a `hg status` with some caches to update
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
146
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
147 $ hg st >$TESTTMP/status-race-lock.out 2>$TESTTMP/status-race-lock.log \
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
148 > --config rhg.on-unsupported=abort \
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
149 > --config ${cfg}=$TESTTMP/status-race-lock \
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
150 > &
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
151 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/status-race-lock.waiting
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
152
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
153 Add a file
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
154
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
155 $ hg $d2args add dir/n
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
156 $ touch $TESTTMP/status-race-lock
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
157 $ wait
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
158
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
159 The file should in a "added" state
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
160
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
161 $ hg status
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
162 A dir/n
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
163 A dir/o
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
164 R dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
165 ? p
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
166 ? q
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
167
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
168 The status process should return a consistent result and not crash.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
169
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
170 #if dirstate-v1
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
171 $ cat $TESTTMP/status-race-lock.out
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
172 A dir/n
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
173 A dir/o
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
174 R dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
175 ? p
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
176 ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
177 #else
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
178 #if rhg pre-some-read dirstate-v2-append
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
179 $ cat $TESTTMP/status-race-lock.out
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
180 A dir/o
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
181 R dir/nested/m
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
182 ? dir/n
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
183 ? p
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
184 ? q
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
185 #else
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
186 #if rust no-rhg dirstate-v2-append
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
187 $ cat $TESTTMP/status-race-lock.out
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
188 A dir/o
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
189 R dir/nested/m
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
190 ? dir/n
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
191 ? p
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
192 ? q
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
193 #else
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
194 $ cat $TESTTMP/status-race-lock.out
50239
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
195 A dir/n
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
196 A dir/o
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
197 R dir/nested/m
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
198 ? p
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
199 ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
200 #endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
201 #endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
202 #endif
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
203 $ cat $TESTTMP/status-race-lock.log
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
204
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
205 final cleanup
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
206
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
207 $ rm $TESTTMP/status-race-lock $TESTTMP/status-race-lock.waiting
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
208 $ cd ..
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
209
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
210 Race with a `hg commit`
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
211 -----------------------
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
212
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
213 $ cp -a reference-repo race-with-commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
214 $ cd race-with-commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
215
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
216 spin a `hg status with some cache to update
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
217
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
218 $ hg st >$TESTTMP/status-race-lock.out 2>$TESTTMP/status-race-lock.log \
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
219 > --config rhg.on-unsupported=abort \
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
220 > --config ${cfg}=$TESTTMP/status-race-lock \
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
221 > &
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
222 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/status-race-lock.waiting
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
223
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
224 Add a do a commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
225
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
226 $ hg status
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
227 A dir/o
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
228 R dir/nested/m
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
229 ? dir/n
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
230 ? p
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
231 ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
232 $ hg $d2args commit -m 'racing commit'
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
233 $ touch $TESTTMP/status-race-lock
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
234 $ wait
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
235
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
236 commit was created, and status is now clean
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
237
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
238 $ hg log -GT '{node|short} {desc}\n'
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
239 @ 02a67a77ee9b racing commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
240 |
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
241 o 9a86dcbfb938 more files to have two commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
242 |
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
243 o 4f23db756b09 recreate a bunch of files to facilitate dirstate-v2 append
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
244
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
245 $ hg status
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
246 ? dir/n
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
247 ? p
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
248 ? q
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
249
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
250 The status process should return a consistent result and not crash.
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
251
50324
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50244
diff changeset
252 #if no-rhg
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
253 $ cat $TESTTMP/status-race-lock.out
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
254 A dir/o
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
255 R dir/nested/m
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
256 ? dir/n
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
257 ? p
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
258 ? q
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
259 $ cat $TESTTMP/status-race-lock.log
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
260 #else
50324
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50244
diff changeset
261 #if pre-some-read dirstate-v2-append
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
262 $ cat $TESTTMP/status-race-lock.out
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
263 A dir/o
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
264 R dir/nested/m
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
265 ? dir/n
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
266 ? p
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
267 ? q
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
268 $ cat $TESTTMP/status-race-lock.log
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
269 #else
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
270 $ cat $TESTTMP/status-race-lock.out
50238
c9066fc609ef dirstate: deal with read-race for python code using rust object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50237
diff changeset
271 ? dir/n
c9066fc609ef dirstate: deal with read-race for python code using rust object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50237
diff changeset
272 ? p
c9066fc609ef dirstate: deal with read-race for python code using rust object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50237
diff changeset
273 ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
274 $ cat $TESTTMP/status-race-lock.log
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
275 #endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
276 #endif
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
277
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
278 final cleanup
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
279
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
280 $ rm $TESTTMP/status-race-lock $TESTTMP/status-race-lock.waiting
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
281 $ cd ..
50231
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
282
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
283 Race with a `hg update`
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
284 -----------------------
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
285
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
286 $ cp -a reference-repo race-with-update
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
287 $ cd race-with-update
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
288
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
289 spin a `hg status` with some caches to update
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
290
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
291 $ hg st >$TESTTMP/status-race-lock.out 2>$TESTTMP/status-race-lock.log \
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
292 > --config rhg.on-unsupported=abort \
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
293 > --config ${cfg}=$TESTTMP/status-race-lock \
50231
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
294 > &
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
295 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/status-race-lock.waiting
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
296 do an update
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
297
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
298 $ hg status
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
299 A dir/o
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
300 R dir/nested/m
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
301 ? dir/n
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
302 ? p
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
303 ? q
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
304 $ hg log -GT '{node|short} {desc}\n'
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
305 @ 9a86dcbfb938 more files to have two commit
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
306 |
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
307 o 4f23db756b09 recreate a bunch of files to facilitate dirstate-v2 append
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
308
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
309 $ hg $d2args update --merge ".~1"
50231
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
310 0 files updated, 0 files merged, 6 files removed, 0 files unresolved
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
311 $ touch $TESTTMP/status-race-lock
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
312 $ wait
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
313 $ hg log -GT '{node|short} {desc}\n'
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
314 o 9a86dcbfb938 more files to have two commit
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
315 |
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
316 @ 4f23db756b09 recreate a bunch of files to facilitate dirstate-v2 append
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
317
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
318 $ hg status
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
319 A dir/o
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
320 ? dir/n
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
321 ? p
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
322 ? q
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
323
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
324 The status process should return a consistent result and not crash.
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
325
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
326 #if rhg dirstate-v2-append pre-some-read
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
327 $ cat $TESTTMP/status-race-lock.out
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
328 A dir/o
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
329 R dir/nested/m
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
330 ! dir/i
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
331 ! dir/j
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
332 ! dir/nested/h
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
333 ! dir2/k
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
334 ! dir2/l
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
335 ! g
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
336 ? dir/n
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
337 ? p
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
338 ? q
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
339 #else
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
340 #if rust no-rhg dirstate-v2-append
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
341 $ cat $TESTTMP/status-race-lock.out
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
342 A dir/o
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
343 R dir/nested/m
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
344 ! dir/i
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
345 ! dir/j
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
346 ! dir/nested/h
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
347 ! dir2/k
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
348 ! dir2/l
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
349 ! g
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
350 ? dir/n
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
351 ? p
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
352 ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
353 #else
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
354 $ cat $TESTTMP/status-race-lock.out
50237
a3b1ab5f5dee dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50235
diff changeset
355 A dir/o
a3b1ab5f5dee dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50235
diff changeset
356 ? dir/n
a3b1ab5f5dee dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50235
diff changeset
357 ? p
a3b1ab5f5dee dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50235
diff changeset
358 ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
359 #endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
360 #endif
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
361 $ cat $TESTTMP/status-race-lock.log
50231
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
362
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
363 final cleanup
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
364
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
365 $ rm $TESTTMP/status-race-lock $TESTTMP/status-race-lock.waiting
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
366 $ cd ..
50232
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
367
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
368 Race with a cache updating `hg status`
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
369 --------------------------------------
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
370
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
371 It is interesting to race with "read-only" operation (that still update its cache)
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
372
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
373 $ cp -a reference-repo race-with-status
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
374 $ cd race-with-status
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
375
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
376 spin a `hg status` with some caches to update
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
377
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
378 $ hg st >$TESTTMP/status-race-lock.out 2>$TESTTMP/status-race-lock.log \
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
379 > --config rhg.on-unsupported=abort \
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
380 > --config ${cfg}=$TESTTMP/status-race-lock \
50232
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
381 > &
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
382 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/status-race-lock.waiting
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
383 do an update
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
384
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
385 $ touch -t 200001020006 f
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
386 $ hg $d2args status
50232
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
387 A dir/o
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
388 R dir/nested/m
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
389 ? dir/n
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
390 ? p
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
391 ? q
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
392 $ touch $TESTTMP/status-race-lock
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
393 $ wait
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
394
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
395 The status process should return a consistent result and not crash.
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
396
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
397 $ cat $TESTTMP/status-race-lock.out
50239
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
398 A dir/o
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
399 R dir/nested/m
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
400 ? dir/n
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
401 ? p
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
402 ? q
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
403 $ cat $TESTTMP/status-race-lock.log
50232
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
404
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
405 final cleanup
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
406
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
407 $ rm $TESTTMP/status-race-lock $TESTTMP/status-race-lock.waiting
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
408 $ cd ..