##// 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 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 > dirstate_data_files | sed 's#.hg/dirstate.##'
132 > hg debugstate --docket | grep uuid | sed 's/.*uuid: \(.*\)/\1/'
133 133 > }
134 134
135 135 $ dirstate_uuid_has_not_changed () {
136 136 > # Pure Python always rewrites the whole dirstate
137 137 > if [ $# -eq 1 ] || [ "$HGMODULEPOLICY" = *"rust"* ] || [ -n "$RHG_INSTALLED_AS_HG" ]; then
138 138 > test $current_uid = $(find_dirstate_uuid)
139 139 > fi
140 140 > }
141 141
142 142 $ cd ..
143 143 $ hg init append-mostly
144 144 $ cd append-mostly
145 145 $ mkdir dir dir2
146 146 $ touch dir/a dir/b dir/c dir/d dir/e dir2/f
147 147 $ hg commit -Aqm initial
148 148 $ hg st
149 149 $ dirstate_data_files | wc -l
150 150 *1 (re)
151 151 $ current_uid=$(find_dirstate_uuid)
152 152
153 153 Nothing changes here
154 154
155 155 $ hg st
156 156 $ dirstate_data_files | wc -l
157 157 *1 (re)
158 158 $ dirstate_uuid_has_not_changed
159 159
160 160 Trigger an append with a small change
161 161
162 162 $ echo "modified" > dir2/f
163 163 $ hg st
164 164 M dir2/f
165 165 $ dirstate_data_files | wc -l
166 166 *1 (re)
167 167 $ dirstate_uuid_has_not_changed
168 168
169 169 Delete most of the dirstate to trigger a non-append
170 170 $ hg rm dir/a dir/b dir/c dir/d
171 171 $ dirstate_data_files | wc -l
172 172 *1 (re)
173 173 $ dirstate_uuid_has_not_changed also-if-python
174 174 [1]
175 175
176 176 $ cd ..
177 177 #endif
General Comments 0
You need to be logged in to leave comments. Login now