##// END OF EJS Templates
test-dirstate: use new `--docket` flag to get the data uuid...
Raphaël Gomès -
r50048:51262af8 stable
parent child Browse files
Show More
@@ -1,177 +1,177
1 #testcases dirstate-v1 dirstate-v2
1 #testcases dirstate-v1 dirstate-v2
2
2
3 #if dirstate-v2
3 #if dirstate-v2
4 $ cat >> $HGRCPATH << EOF
4 $ cat >> $HGRCPATH << EOF
5 > [format]
5 > [format]
6 > use-dirstate-v2=1
6 > use-dirstate-v2=1
7 > [storage]
7 > [storage]
8 > dirstate-v2.slow-path=allow
8 > dirstate-v2.slow-path=allow
9 > EOF
9 > EOF
10 #endif
10 #endif
11
11
12 ------ Test dirstate._dirs refcounting
12 ------ Test dirstate._dirs refcounting
13
13
14 $ hg init t
14 $ hg init t
15 $ cd t
15 $ cd t
16 $ mkdir -p a/b/c/d
16 $ mkdir -p a/b/c/d
17 $ touch a/b/c/d/x
17 $ touch a/b/c/d/x
18 $ touch a/b/c/d/y
18 $ touch a/b/c/d/y
19 $ touch a/b/c/d/z
19 $ touch a/b/c/d/z
20 $ hg ci -Am m
20 $ hg ci -Am m
21 adding a/b/c/d/x
21 adding a/b/c/d/x
22 adding a/b/c/d/y
22 adding a/b/c/d/y
23 adding a/b/c/d/z
23 adding a/b/c/d/z
24 $ hg mv a z
24 $ hg mv a z
25 moving a/b/c/d/x to z/b/c/d/x
25 moving a/b/c/d/x to z/b/c/d/x
26 moving a/b/c/d/y to z/b/c/d/y
26 moving a/b/c/d/y to z/b/c/d/y
27 moving a/b/c/d/z to z/b/c/d/z
27 moving a/b/c/d/z to z/b/c/d/z
28
28
29 Test name collisions
29 Test name collisions
30
30
31 $ rm z/b/c/d/x
31 $ rm z/b/c/d/x
32 $ mkdir z/b/c/d/x
32 $ mkdir z/b/c/d/x
33 $ touch z/b/c/d/x/y
33 $ touch z/b/c/d/x/y
34 $ hg add z/b/c/d/x/y
34 $ hg add z/b/c/d/x/y
35 abort: file 'z/b/c/d/x' in dirstate clashes with 'z/b/c/d/x/y'
35 abort: file 'z/b/c/d/x' in dirstate clashes with 'z/b/c/d/x/y'
36 [255]
36 [255]
37 $ rm -rf z/b/c/d
37 $ rm -rf z/b/c/d
38 $ touch z/b/c/d
38 $ touch z/b/c/d
39 $ hg add z/b/c/d
39 $ hg add z/b/c/d
40 abort: directory 'z/b/c/d' already in dirstate
40 abort: directory 'z/b/c/d' already in dirstate
41 [255]
41 [255]
42
42
43 $ cd ..
43 $ cd ..
44
44
45 Issue1790: dirstate entry locked into unset if file mtime is set into
45 Issue1790: dirstate entry locked into unset if file mtime is set into
46 the future
46 the future
47
47
48 Prepare test repo:
48 Prepare test repo:
49
49
50 $ hg init u
50 $ hg init u
51 $ cd u
51 $ cd u
52 $ echo a > a
52 $ echo a > a
53 $ hg add
53 $ hg add
54 adding a
54 adding a
55 $ hg ci -m1
55 $ hg ci -m1
56
56
57 Set mtime of a into the future:
57 Set mtime of a into the future:
58
58
59 $ touch -t 203101011200 a
59 $ touch -t 203101011200 a
60
60
61 Status must not set a's entry to unset (issue1790):
61 Status must not set a's entry to unset (issue1790):
62
62
63 $ hg status
63 $ hg status
64 $ hg debugstate
64 $ hg debugstate
65 n 644 2 2031-01-01 12:00:00 a
65 n 644 2 2031-01-01 12:00:00 a
66
66
67 Test modulo storage/comparison of absurd dates:
67 Test modulo storage/comparison of absurd dates:
68
68
69 #if no-aix
69 #if no-aix
70 $ touch -t 195001011200 a
70 $ touch -t 195001011200 a
71 $ hg st
71 $ hg st
72 $ hg debugstate
72 $ hg debugstate
73 n 644 2 2018-01-19 15:14:08 a
73 n 644 2 2018-01-19 15:14:08 a
74 #endif
74 #endif
75
75
76 Verify that exceptions during a dirstate change leave the dirstate
76 Verify that exceptions during a dirstate change leave the dirstate
77 coherent (issue4353)
77 coherent (issue4353)
78
78
79 $ cat > ../dirstateexception.py <<EOF
79 $ cat > ../dirstateexception.py <<EOF
80 > from __future__ import absolute_import
80 > from __future__ import absolute_import
81 > from mercurial import (
81 > from mercurial import (
82 > error,
82 > error,
83 > extensions,
83 > extensions,
84 > mergestate as mergestatemod,
84 > mergestate as mergestatemod,
85 > )
85 > )
86 >
86 >
87 > def wraprecordupdates(*args):
87 > def wraprecordupdates(*args):
88 > raise error.Abort(b"simulated error while recording dirstateupdates")
88 > raise error.Abort(b"simulated error while recording dirstateupdates")
89 >
89 >
90 > def reposetup(ui, repo):
90 > def reposetup(ui, repo):
91 > extensions.wrapfunction(mergestatemod, 'recordupdates',
91 > extensions.wrapfunction(mergestatemod, 'recordupdates',
92 > wraprecordupdates)
92 > wraprecordupdates)
93 > EOF
93 > EOF
94
94
95 $ hg rm a
95 $ hg rm a
96 $ hg commit -m 'rm a'
96 $ hg commit -m 'rm a'
97 $ echo "[extensions]" >> .hg/hgrc
97 $ echo "[extensions]" >> .hg/hgrc
98 $ echo "dirstateex=../dirstateexception.py" >> .hg/hgrc
98 $ echo "dirstateex=../dirstateexception.py" >> .hg/hgrc
99 $ hg up 0
99 $ hg up 0
100 abort: simulated error while recording dirstateupdates
100 abort: simulated error while recording dirstateupdates
101 [255]
101 [255]
102 $ hg log -r . -T '{rev}\n'
102 $ hg log -r . -T '{rev}\n'
103 1
103 1
104 $ hg status
104 $ hg status
105 ? a
105 ? a
106
106
107 #if dirstate-v2
107 #if dirstate-v2
108 Check that folders that are prefixes of others do not throw the packer into an
108 Check that folders that are prefixes of others do not throw the packer into an
109 infinite loop.
109 infinite loop.
110
110
111 $ cd ..
111 $ cd ..
112 $ hg init infinite-loop
112 $ hg init infinite-loop
113 $ cd infinite-loop
113 $ cd infinite-loop
114 $ mkdir hgext3rd hgext
114 $ mkdir hgext3rd hgext
115 $ touch hgext3rd/__init__.py hgext/zeroconf.py
115 $ touch hgext3rd/__init__.py hgext/zeroconf.py
116 $ hg commit -Aqm0
116 $ hg commit -Aqm0
117
117
118 $ hg st -c
118 $ hg st -c
119 C hgext/zeroconf.py
119 C hgext/zeroconf.py
120 C hgext3rd/__init__.py
120 C hgext3rd/__init__.py
121
121
122 $ cd ..
122 $ cd ..
123
123
124 Check that the old dirstate data file is removed correctly and the new one is
124 Check that the old dirstate data file is removed correctly and the new one is
125 valid.
125 valid.
126
126
127 $ dirstate_data_files () {
127 $ dirstate_data_files () {
128 > find .hg -maxdepth 1 -name "dirstate.*"
128 > find .hg -maxdepth 1 -name "dirstate.*"
129 > }
129 > }
130
130
131 $ find_dirstate_uuid () {
131 $ find_dirstate_uuid () {
132 > dirstate_data_files | sed 's#.hg/dirstate.##'
132 > hg debugstate --docket | grep uuid | sed 's/.*uuid: \(.*\)/\1/'
133 > }
133 > }
134
134
135 $ dirstate_uuid_has_not_changed () {
135 $ dirstate_uuid_has_not_changed () {
136 > # Pure Python always rewrites the whole dirstate
136 > # Pure Python always rewrites the whole dirstate
137 > if [ $# -eq 1 ] || [ "$HGMODULEPOLICY" = *"rust"* ] || [ -n "$RHG_INSTALLED_AS_HG" ]; then
137 > if [ $# -eq 1 ] || [ "$HGMODULEPOLICY" = *"rust"* ] || [ -n "$RHG_INSTALLED_AS_HG" ]; then
138 > test $current_uid = $(find_dirstate_uuid)
138 > test $current_uid = $(find_dirstate_uuid)
139 > fi
139 > fi
140 > }
140 > }
141
141
142 $ cd ..
142 $ cd ..
143 $ hg init append-mostly
143 $ hg init append-mostly
144 $ cd append-mostly
144 $ cd append-mostly
145 $ mkdir dir dir2
145 $ mkdir dir dir2
146 $ touch dir/a dir/b dir/c dir/d dir/e dir2/f
146 $ touch dir/a dir/b dir/c dir/d dir/e dir2/f
147 $ hg commit -Aqm initial
147 $ hg commit -Aqm initial
148 $ hg st
148 $ hg st
149 $ dirstate_data_files | wc -l
149 $ dirstate_data_files | wc -l
150 *1 (re)
150 *1 (re)
151 $ current_uid=$(find_dirstate_uuid)
151 $ current_uid=$(find_dirstate_uuid)
152
152
153 Nothing changes here
153 Nothing changes here
154
154
155 $ hg st
155 $ hg st
156 $ dirstate_data_files | wc -l
156 $ dirstate_data_files | wc -l
157 *1 (re)
157 *1 (re)
158 $ dirstate_uuid_has_not_changed
158 $ dirstate_uuid_has_not_changed
159
159
160 Trigger an append with a small change
160 Trigger an append with a small change
161
161
162 $ echo "modified" > dir2/f
162 $ echo "modified" > dir2/f
163 $ hg st
163 $ hg st
164 M dir2/f
164 M dir2/f
165 $ dirstate_data_files | wc -l
165 $ dirstate_data_files | wc -l
166 *1 (re)
166 *1 (re)
167 $ dirstate_uuid_has_not_changed
167 $ dirstate_uuid_has_not_changed
168
168
169 Delete most of the dirstate to trigger a non-append
169 Delete most of the dirstate to trigger a non-append
170 $ hg rm dir/a dir/b dir/c dir/d
170 $ hg rm dir/a dir/b dir/c dir/d
171 $ dirstate_data_files | wc -l
171 $ dirstate_data_files | wc -l
172 *1 (re)
172 *1 (re)
173 $ dirstate_uuid_has_not_changed also-if-python
173 $ dirstate_uuid_has_not_changed also-if-python
174 [1]
174 [1]
175
175
176 $ cd ..
176 $ cd ..
177 #endif
177 #endif
General Comments 0
You need to be logged in to leave comments. Login now