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