##// END OF EJS Templates
branching: merge default into stable for 6.6rc0
Raphaël Gomès -
r52018:4224b1aa merge stable
parent child Browse files
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -0,0 +1,422 b''
1 $!
2 $! Build Python C extension
3 $!
4 $ cc/name=(short,as_is)-
5 /incl=("/python$root/include", "../../mercurial") -
6 [--.mercurial.cext]base85.c
7 $ cc/name=(short,as_is)-
8 /incl=("/python$root/include", "../../mercurial") -
9 [--.mercurial]bdiff.c
10 $ cc/name=(short,as_is)-
11 /incl=("/python$root/include", "../../mercurial") -
12 [--.mercurial.cext]bdiff.c -
13 /obj=[]bdiff-mod.obj
14 $ cc/name=(short,as_is)-
15 /incl=("/python$root/include", "../../mercurial") -
16 [--.mercurial.thirdparty.xdiff]xdiffi.c
17 $ cc/name=(short,as_is)-
18 /incl=("/python$root/include", "../../mercurial") -
19 [--.mercurial.thirdparty.xdiff]xprepare.c
20 $ cc/name=(short,as_is)-
21 /incl=("/python$root/include", "../../mercurial") -
22 [--.mercurial.thirdparty.xdiff]xutils.c
23 $ cc/name=(short,as_is)-
24 /incl=("/python$root/include", "../../mercurial") -
25 [--.mercurial.cext]mpatch.c/obj=mpatch-mod.obj
26 $ cc/name=(short,as_is)-
27 /incl=("/python$root/include", "../../mercurial") -
28 [--.mercurial]mpatch.c
29 $ cc/name=(short,as_is)-
30 /incl=("/python$root/include", "../../mercurial") -
31 /warn=disa=QUESTCOMPARE -
32 [--.mercurial.cext]dirs.c
33 $ cc/name=(short,as_is)-
34 /incl=("/python$root/include", "../../mercurial") -
35 [--.mercurial.cext]charencode.c
36 $ cc/name=(short,as_is)-
37 /incl=("/python$root/include", "../../mercurial") -
38 [--.mercurial.cext]revlog.c
39 $ cc/name=(short,as_is)-
40 /incl=("/python$root/include", "../../mercurial") -
41 [--.mercurial.cext]manifest.c
42 $ cc/name=(short,as_is)-
43 /incl=("/python$root/include", "../../mercurial") -
44 [--.mercurial.cext]pathencode.c
45 $ cc/name=(short,as_is)-
46 /incl=("/python$root/include", "../../mercurial") -
47 /warn=disa=CVTDIFTYPES -
48 [--.mercurial.cext]osutil.c
49 $ cc/name=(short,as_is)-
50 /incl=("/python$root/include", "../../mercurial") -
51 /warn=disa=EXTRASEMI -
52 [--.mercurial.cext]parsers.c
53 $ cc/name=(short,as_is)-
54 /incl=("/python$root/include", "../../mercurial", -
55 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
56 "../python-zstandard/zstd/dictBuilder") -
57 [-.python-zstandard]zstd.c
58 $ cc/name=(short,as_is)-
59 /incl=("/python$root/include", "../../mercurial", -
60 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
61 "../python-zstandard/zstd/dictBuilder") -
62 [-.python-zstandard.c-ext]frameparams.c
63 $ cc/name=(short,as_is)-
64 /incl=("/python$root/include", "../../mercurial", -
65 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
66 "../python-zstandard/zstd/dictBuilder") -
67 [-.python-zstandard.c-ext]compressobj.c
68 $ cc/name=(short,as_is)-
69 /incl=("/python$root/include", "../../mercurial", -
70 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
71 "../python-zstandard/zstd/dictBuilder", -
72 "../python-zstandard/zstd/common") -
73 [-.python-zstandard.c-ext]compressor.c
74 $ cc/name=(short,as_is)-
75 /incl=("/python$root/include", "../../mercurial", -
76 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
77 "../python-zstandard/zstd/dictBuilder") -
78 [-.python-zstandard.c-ext]bufferutil.c
79 $ cc/name=(short,as_is)-
80 /incl=("/python$root/include", "../../mercurial", -
81 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
82 "../python-zstandard/zstd/dictBuilder") -
83 [-.python-zstandard.c-ext]decompressoriterator.c
84 $ cc/name=(short,as_is)-
85 /incl=("/python$root/include", "../../mercurial", -
86 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
87 "../python-zstandard/zstd/dictBuilder", -
88 "../python-zstandard/zstd/common") -
89 [-.python-zstandard.c-ext]decompressor.c
90 $ cc/name=(short,as_is)-
91 /incl=("/python$root/include", "../../mercurial", -
92 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
93 "../python-zstandard/zstd/dictBuilder") -
94 [-.python-zstandard.c-ext]frameparams.c
95 $ cc/name=(short,as_is)-
96 /incl=("/python$root/include", "../../mercurial", -
97 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
98 "../python-zstandard/zstd/dictBuilder") -
99 [-.python-zstandard.c-ext]constants.c
100 $ cc/name=(short,as_is)-
101 /incl=("/python$root/include", "../../mercurial", -
102 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
103 "../python-zstandard/zstd/dictBuilder") -
104 [-.python-zstandard.c-ext]decompressionreader.c
105 $ cc/name=(short,as_is)-
106 /incl=("/python$root/include", "../../mercurial", -
107 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
108 "../python-zstandard/zstd/dictBuilder") -
109 [-.python-zstandard.c-ext]decompressionwriter.c
110 $ cc/name=(short,as_is)-
111 /incl=("/python$root/include", "../../mercurial", -
112 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
113 "../python-zstandard/zstd/dictBuilder") -
114 [-.python-zstandard.c-ext]compressiondict.c
115 $ cc/name=(short,as_is)-
116 /incl=("/python$root/include", "../../mercurial", -
117 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
118 "../python-zstandard/zstd/dictBuilder") -
119 [-.python-zstandard.c-ext]decompressobj.c
120 $ cc/name=(short,as_is)-
121 /incl=("/python$root/include", "../../mercurial", -
122 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
123 "../python-zstandard/zstd/dictBuilder") -
124 [-.python-zstandard.c-ext]compressionwriter.c
125 $ cc/name=(short,as_is)-
126 /incl=("/python$root/include", "../../mercurial", -
127 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
128 "../python-zstandard/zstd/dictBuilder") -
129 [-.python-zstandard.c-ext]compressionreader.c
130 $ cc/name=(short,as_is)-
131 /incl=("/python$root/include", "../../mercurial", -
132 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
133 "../python-zstandard/zstd/dictBuilder") -
134 [-.python-zstandard.c-ext]compressoriterator.c
135 $ cc/name=(short,as_is)-
136 /incl=("/python$root/include", "../../mercurial", -
137 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
138 "../python-zstandard/zstd/dictBuilder") -
139 [-.python-zstandard.c-ext]compressionparams.c
140 $ cc/name=(short,as_is)-
141 /incl=("/python$root/include", "../../mercurial", -
142 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
143 "../python-zstandard/zstd/dictBuilder") -
144 [-.python-zstandard.c-ext]compressionchunker.c
145 $ cc/name=(short,as_is)-
146 /incl=("/python$root/include", "../../mercurial", -
147 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
148 "../python-zstandard/zstd/dictBuilder") -
149 [-.python-zstandard.zstd.common]zstd_common.c
150 $ cc/name=(short,as_is)-
151 /incl=("/python$root/include", "../../mercurial", -
152 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
153 "../python-zstandard/zstd/dictBuilder") -
154 [-.python-zstandard.zstd.common]error_private.c
155 $ cc/name=(short,as_is)-
156 /incl=("/python$root/include", "../../mercurial", -
157 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
158 "../python-zstandard/zstd/dictBuilder", -
159 "../python-zstandard/zstd/common") -
160 /warn=disa=TOOFEWACTUALS -
161 [-.python-zstandard.zstd.compress]zstd_compress.c
162 $ cc/name=(short,as_is)-
163 /incl=("/python$root/include", "../../mercurial", -
164 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
165 "../python-zstandard/zstd/dictBuilder", -
166 "../python-zstandard/zstd/common") -
167 /warn=disa=TOOFEWACTUALS -
168 [-.python-zstandard.zstd.compress]zstd_ldm.c
169 $ cc/name=(short,as_is)-
170 /incl=("/python$root/include", "../../mercurial", -
171 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
172 "../python-zstandard/zstd/dictBuilder", -
173 "../python-zstandard/zstd/common") -
174 /warn=disa=TOOFEWACTUALS -
175 [-.python-zstandard.zstd.compress]zstd_opt.c
176 $ cc/name=(short,as_is)-
177 /incl=("/python$root/include", "../../mercurial", -
178 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
179 "../python-zstandard/zstd/dictBuilder", -
180 "../python-zstandard/zstd/common") -
181 /warn=disa=TOOFEWACTUALS -
182 [-.python-zstandard.zstd.compress]zstd_lazy.c
183 $ cc/name=(short,as_is)-
184 /incl=("/python$root/include", "../../mercurial", -
185 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
186 "../python-zstandard/zstd/dictBuilder", -
187 "../python-zstandard/zstd/common") -
188 [-.python-zstandard.zstd.compress]huf_compress.c
189 $ cc/name=(short,as_is)-
190 /incl=("/python$root/include", "../../mercurial", -
191 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
192 "../python-zstandard/zstd/dictBuilder", -
193 "../python-zstandard/zstd/common") -
194 [-.python-zstandard.zstd.common]entropy_common.c
195 $ cc/name=(short,as_is)-
196 /incl=("/python$root/include", "../../mercurial", -
197 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
198 "../python-zstandard/zstd/dictBuilder", -
199 "../python-zstandard/zstd/common") -
200 [-.python-zstandard.zstd.compress]fse_compress.c
201 $ cc/name=(short,as_is)-
202 /incl=("/python$root/include", "../../mercurial", -
203 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
204 "../python-zstandard/zstd/dictBuilder", -
205 "../python-zstandard/zstd/common") -
206 /warn=disa=TOOFEWACTUALS -
207 [-.python-zstandard.zstd.compress]zstd_fast.c
208 $ cc/name=(short,as_is)-
209 /incl=("/python$root/include", "../../mercurial", -
210 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
211 "../python-zstandard/zstd/dictBuilder", -
212 "../python-zstandard/zstd/common") -
213 [-.python-zstandard.zstd.common]fse_decompress.c
214 $ cc/name=(short,as_is)-
215 /incl=("/python$root/include", "../../mercurial", -
216 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
217 "../python-zstandard/zstd/dictBuilder", -
218 "../python-zstandard/zstd/common") -
219 [-.python-zstandard.zstd.compress]hist.c
220 $ cc/name=(short,as_is)-
221 /incl=("/python$root/include", "../../mercurial", -
222 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
223 "../python-zstandard/zstd/dictBuilder", -
224 "../python-zstandard/zstd/common") -
225 /warn=disa=TOOFEWACTUALS -
226 [-.python-zstandard.zstd.compress]zstd_double_fast.c
227 $ cc/name=(short,as_is)-
228 /incl=("/python$root/include", "../../mercurial", -
229 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
230 "../python-zstandard/zstd/dictBuilder", -
231 "../python-zstandard/zstd/common") -
232 [-.python-zstandard.zstd.common]pool.c
233 $ cc/name=(short,as_is)-
234 /incl=("/python$root/include", "../../mercurial", -
235 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
236 "../python-zstandard/zstd/dictBuilder", -
237 "../python-zstandard/zstd/common") -
238 [-.python-zstandard.zstd.common]xxhash.c
239 $ cc/name=(short,as_is)-
240 /incl=("/python$root/include", "../../mercurial", -
241 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
242 "../python-zstandard/zstd/dictBuilder", -
243 "../python-zstandard/zstd/common") -
244 /warn=disa=TOOFEWACTUALS -
245 [-.python-zstandard.zstd.compress]zstd_compress_sequences.c
246 $ cc/name=(short,as_is)-
247 /incl=("/python$root/include", "../../mercurial", -
248 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
249 "../python-zstandard/zstd/dictBuilder", -
250 "../python-zstandard/zstd/common") -
251 /warn=disa=TOOFEWACTUALS -
252 [-.python-zstandard.zstd.compress]zstd_compress_literals.c
253 $ cc/name=(short,as_is)-
254 /incl=("/python$root/include", "../../mercurial", -
255 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
256 "../python-zstandard/zstd/dictBuilder", -
257 "../python-zstandard/zstd/common") -
258 /warn=disa=TOOFEWACTUALS -
259 [-.python-zstandard.zstd.decompress]zstd_ddict.c
260 $ cc/name=(short,as_is)-
261 /incl=("/python$root/include", "../../mercurial", -
262 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
263 "../python-zstandard/zstd/dictBuilder", -
264 "../python-zstandard/zstd/common") -
265 /warn=disa=TOOFEWACTUALS -
266 [-.python-zstandard.zstd.decompress]zstd_decompress.c
267 $ cc/name=(short,as_is)-
268 /incl=("/python$root/include", "../../mercurial", -
269 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
270 "../python-zstandard/zstd/dictBuilder", -
271 "../python-zstandard/zstd/common") -
272 [-.python-zstandard.zstd.decompress]huf_decompress.c
273 $ cc/name=(short,as_is)-
274 /incl=("/python$root/include", "../../mercurial", -
275 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
276 "../python-zstandard/zstd/dictBuilder", -
277 "../python-zstandard/zstd/common") -
278 /warn=disa=TOOFEWACTUALS -
279 [-.python-zstandard.zstd.decompress]zstd_decompress_block.c
280 $ cc/name=(short,as_is)-
281 /incl=("/python$root/include", "../../mercurial", -
282 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
283 "../python-zstandard/zstd/dictBuilder", -
284 "../python-zstandard/zstd/common") -
285 /warn=disa=TOOFEWACTUALS -
286 [-.python-zstandard.zstd.compress]zstdmt_compress.c
287 $ cc/name=(short,as_is)-
288 /incl=("/python$root/include", "../../mercurial", -
289 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
290 "../python-zstandard/zstd/dictBuilder", -
291 "../python-zstandard/zstd/common") -
292 [-.python-zstandard.zstd.dictBuilder]cover.c
293 $ cc/name=(short,as_is)-
294 /incl=("/python$root/include", "../../mercurial", -
295 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
296 "../python-zstandard/zstd/dictBuilder", -
297 "../python-zstandard/zstd/common") -
298 [-.python-zstandard.zstd.dictBuilder]fastcover.c
299 $ cc/name=(short,as_is)-
300 /incl=("/python$root/include", "../../mercurial", -
301 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
302 "../python-zstandard/zstd/dictBuilder", -
303 "../python-zstandard/zstd/common") -
304 [-.python-zstandard.zstd.dictBuilder]divsufsort.c
305 $ cc/name=(short,as_is)-
306 /incl=("/python$root/include", "../../mercurial", -
307 "../python-zstandard/c-ext", "../python-zstandard/zstd", -
308 "../python-zstandard/zstd/dictBuilder", -
309 "../python-zstandard/zstd/common") -
310 [-.python-zstandard.zstd.dictBuilder]zdict.c
311 $
312 $ link/share=base65.exe sys$input/opt
313 GSMATCH=lequal,1,1000
314 case_sensitive=YES
315 SYMBOL_VECTOR = (PyInit_base85=PROCEDURE)
316 SYMBOL_VECTOR = (PYINIT_BASE85/PyInit_base85=PROCEDURE)
317 base85.obj
318 python$shr/share
319 case_sensitive=NO
320 $
321 $ link/share=bdiff.exe sys$input/opt
322 GSMATCH=lequal,1,1000
323 case_sensitive=YES
324 SYMBOL_VECTOR = (PyInit_bdiff=PROCEDURE)
325 SYMBOL_VECTOR = (PYINIT_BDIFF/PyInit_bdiff=PROCEDURE)
326 bdiff.obj
327 bdiff-mod.obj
328 xdiffi.obj
329 xprepare.obj
330 xutils.obj
331 python$shr/share
332 case_sensitive=NO
333 $
334 $ link/share=mpatch.exe sys$input/opt
335 GSMATCH=lequal,1,1000
336 case_sensitive=YES
337 SYMBOL_VECTOR = (PyInit_mpatch=PROCEDURE)
338 SYMBOL_VECTOR = (PYINIT_MPATCH/PyInit_mpatch=PROCEDURE)
339 mpatch.obj
340 mpatch-mod.obj
341 python$shr/share
342 case_sensitive=NO
343 $
344 $ link/share=osutil.exe sys$input/opt
345 GSMATCH=lequal,1,1000
346 case_sensitive=YES
347 SYMBOL_VECTOR = (PyInit_osutil=PROCEDURE)
348 SYMBOL_VECTOR = (PYINIT_OSUTIL/PyInit_osutil=PROCEDURE)
349 osutil.obj
350 python$shr/share
351 case_sensitive=NO
352 $
353 $ link/share=parsers.exe sys$input/opt
354 GSMATCH=lequal,1,1000
355 case_sensitive=YES
356 SYMBOL_VECTOR = (PyInit_parsers=PROCEDURE)
357 SYMBOL_VECTOR = (PYINIT_PARSERS/PyInit_parsers=PROCEDURE)
358 parsers.obj
359 dirs.obj
360 charencode.obj
361 pathencode.obj
362 revlog.obj
363 manifest.obj
364 python$shr/share
365 case_sensitive=NO
366 $
367 $ link/share=zstd.exe sys$input/opt
368 GSMATCH=lequal,1,1000
369 case_sensitive=YES
370 SYMBOL_VECTOR = (PyInit_zstd=PROCEDURE)
371 SYMBOL_VECTOR = (PYINIT_ZSTD/PyInit_zstd=PROCEDURE)
372 zstd.obj
373 frameparams.obj
374 decompressobj.obj
375 zstd_common.obj
376 compressionreader.obj
377 compressionwriter.obj
378 compressoriterator.obj
379 zstd_compress.obj
380 zstd_opt.obj
381 zstd_lazy.obj
382 huf_compress.obj
383 entropy_common.obj
384 fse_compress.obj
385 fse_decompress.obj
386 zstd_fast.obj
387 zstd_ldm.obj
388 hist.obj
389 zstd_double_fast.obj
390 zstd_compress_sequences.obj
391 zstd_compress_literals.obj
392 zstdmt_compress.obj
393 compressiondict.obj
394 zstd_ddict.obj
395 zstd_decompress.obj
396 zstd_decompress_block.obj
397 zdict.obj
398 huf_decompress.obj
399 compressionparams.obj
400 compressobj.obj
401 decompressionreader.obj
402 compressionchunker.obj
403 decompressionwriter.obj
404 decompressor.obj
405 decompressoriterator.obj
406 compressor.obj
407 divsufsort.obj
408 bufferutil.obj
409 constants.obj
410 error_private.obj
411 cover.obj
412 fastcover.obj
413 pool.obj
414 xxhash.obj
415 python$shr/share
416 case_sensitive=NO
417 $
418 $ delete/noconf *.obj;
419 $ rename zstd.exe [--.mercurial]/log
420 $ rename *.exe [--.mercurial.cext]/log
421 $
422 $ exit
@@ -0,0 +1,12 b''
1 $!
2 $! Call OpenVMS editor with a conversion from Unix filename syntax to OpenVMS syntax
3 $!
4 $ set proc/par=extend
5 $ ufile = p1
6 $ tovms :== $ MERCURIAL_ROOT:[vms]tovms
7 $ tovms 'ufile'
8 $ vfile = tmpfn
9 $ deassign sys$input
10 $ edit 'vfile'
11 $ purge/nolog 'vfile'
12 $ exit
@@ -0,0 +1,76 b''
1 $!
2 $! Custom merge tool to help solve merge conflict in OpenVMS
3 $! We recommand to solve this on other system
4 $!
5 $ set proc/par=extend
6 $ mine = p1
7 $ orig = p2
8 $ theirs = p3
9 $ tovms :== $ MERCURIAL_ROOT:[vms]tovms
10 $ merged = p1 + ".hgmerge"
11 $ tovms 'merged'
12 $ merged = tmpfn
13 $
14 $ define DECC$UNIX_LEVEL 90
15 $ gdiff3 :== $ MERCURIAL_ROOT:[vms]gdiff3
16 $ gdiff == "$ MERCURIAL_ROOT:[VMS]gdiff"
17 $! gdiff -u 'orig' 'mine'
18 $! gdiff -u 'orig' 'theirs'
19 $ if (f$search("''merged'") .nes. "") then -
20 delete 'merged';*
21 $ define sys$output 'merged'
22 $ gdiff3 -"L" mine -"L" original -"L" theirs -"E" -m 'mine' 'orig' 'theirs'
23 $ status = $status
24 $ deassign sys$output
25 $ convert/fdl=mercurial_root:[vms]stmlf.fdl 'merged' 'merged'
26 $ purge/nolog 'merged'
27 $! No conflicts found. Merge done.
28 $ if status .eqs. "%X006C8009"
29 $ then
30 $ tovms 'p1'
31 $ mine = tmpfn
32 $ rename 'merged' 'mine'
33 $ purge/nolog 'mine'
34 $ write sys$output "Merged ''mine'"
35 $ exit 1
36 $ endif
37 $
38 $! In all other cases, diff3 has found conflicts, added the proper conflict
39 $! markers to the merged file and we should now edit this file. Fire up an
40 $! editor with the merged file and let the user manually resolve the conflicts.
41 $! When the editor exits successfully, there should be no conflict markers in
42 $! the merged file, otherwise we consider this merge failed.
43 $
44 $ if status .eqs. "%X006C8013"
45 $ then
46 $ deassign sys$input
47 $ edit 'merged'
48 $ open fi 'merged'
49 $ loop:
50 $ read fi srec/end=endloop
51 $ rec7 = f$extract(0, 7, srec)
52 $ if rec7 .eqs. "<<<<<<<" then goto conflict
53 $ if rec7 .eqs. "|||||||" then goto conflict
54 $ if rec7 .eqs. "=======" then goto conflict
55 $ if rec7 .eqs. ">>>>>>>" then goto conflict
56 $ goto loop
57 $ endloop:
58 $ close fi
59 $ tovms 'p1'
60 $ mine = tmpfn
61 $ rename 'merged' 'mine'
62 $ purge/nolog 'mine'
63 $ exit
64 $ endif
65 $ if (f$search("''merged'") .nes. "") then -
66 delete 'merged';*
67 $ write sys$output "serious diff3 error, while trying to merge ''mine'"
68 $ exit 44
69 $
70 $ conflict:
71 $ close fi
72 $ if (f$search("''merged'") .nes. "") then -
73 delete 'merged';*
74 $ write sys$output -
75 "conflict markers still found in the working-copy. Merge aborted for ''mine'"
76 $ exit 44
@@ -0,0 +1,20 b''
1 $!
2 $! Define mercurial_root logical
3 $! p1: define parameter (/system for example)
4 $!
5 $ proc = f$environment("PROCEDURE")
6 $ proc = f$parse(proc,"sys$disk:[]",,,"NO_CONCEAL")
7 $ cur_dev = f$parse(proc,,,"DEVICE","SYNTAX_ONLY")
8 $ cur_dir = f$parse(proc,,,"DIRECTORY","SYNTAX_ONLY")
9 $ cur_dir = f$extract(1,f$length(cur_dir)-2,cur_dir)
10 $ cur_dir = cur_dir - "["
11 $ cur_dir = cur_dir - "]"
12 $ cur_dir = cur_dir - "<"
13 $ cur_dir = cur_dir - ">"
14 $
15 $! remove trailing .VMS
16 $ root_dir = f$extract(0,f$length(cur_dir)-4,cur_dir)
17 $
18 $ define/nolog 'p1' /trans=concealed mercurial_root 'cur_dev'['root_dir'.]
19 $
20 $ exit
@@ -0,0 +1,7 b''
1 $!
2 $! Set hg and hgeditor symbol
3 $!
4 $ HG == "$ PYTHON$ROOT:[BIN]PYTHON /MERCURIAL_ROOT/HG"
5 $ HGEDITOR == "@MERCURIAL_ROOT:[VMS]HGEDITOR"
6 $
7 $ exit No newline at end of file
@@ -0,0 +1,12 b''
1 $!
2 $! Mercurial startup file
3 $!
4 $ proc = f$environment("PROCEDURE")
5 $ cur_dev = f$parse(proc,,,"DEVICE","SYNTAX_ONLY")
6 $ cur_dir = f$parse(proc,,,"DIRECTORY","SYNTAX_ONLY")
7 $!
8 $! Define logicals
9 $!
10 $ @'cur_dev''cur_dir'logicals "/system/exec"
11 $
12 $ exit
@@ -0,0 +1,7 b''
1 !
2 ! Used by hgmerge.com to convert file to stream_lf record format
3 !
4 RECORD
5 BLOCK_SPAN yes
6 CARRIAGE_CONTROL carriage_return
7 FORMAT stream_lf
1 NO CONTENT: new file 100644
@@ -0,0 +1,341 b''
1 # admin/verify.py - better repository integrity checking for Mercurial
2 #
3 # Copyright 2023 Octobus <contact@octobus.net>
4 #
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
7
8 import collections
9 import copy
10 import functools
11
12 from ..i18n import _
13 from .. import error, pycompat, registrar, requirements
14 from ..utils import stringutil
15
16
17 verify_table = {}
18 verify_alias_table = {}
19 check = registrar.verify_check(verify_table, verify_alias_table)
20
21
22 # Use this to declare options/aliases in the middle of the hierarchy.
23 # Checks like these are not run themselves and cannot have a body.
24 # For an example, see the `revlogs` check.
25 def noop_func(*args, **kwargs):
26 return
27
28
29 @check(b"working-copy.dirstate", alias=b"dirstate")
30 def check_dirstate(ui, repo, **options):
31 ui.status(_(b"checking dirstate\n"))
32
33 parent1, parent2 = repo.dirstate.parents()
34 m1 = repo[parent1].manifest()
35 m2 = repo[parent2].manifest()
36 errors = 0
37
38 is_narrow = requirements.NARROW_REQUIREMENT in repo.requirements
39 narrow_matcher = repo.narrowmatch() if is_narrow else None
40
41 for err in repo.dirstate.verify(m1, m2, narrow_matcher):
42 ui.warn(err[0] % err[1:])
43 errors += 1
44
45 return errors
46
47
48 # Tree of all checks and their associated function
49 pyramid = {}
50
51
52 def build_pyramid(table, full_pyramid):
53 """Create a pyramid of checks of the registered checks.
54 It is a name-based hierarchy that can be arbitrarily nested."""
55 for entry, func in sorted(table.items(), key=lambda x: x[0], reverse=True):
56 cursor = full_pyramid
57 levels = entry.split(b".")
58 for level in levels[:-1]:
59 current_node = cursor.setdefault(level, {})
60 cursor = current_node
61 if cursor.get(levels[-1]) is None:
62 cursor[levels[-1]] = (entry, func)
63 elif func is not noop_func:
64 m = b"intermediate checks need to use `verify.noop_func`"
65 raise error.ProgrammingError(m)
66
67
68 def find_checks(name, table=None, alias_table=None, full_pyramid=None):
69 """Find all checks for a given name and returns a dict of
70 (qualified_check_name, check_function)
71
72 # Examples
73
74 Using a full qualified name:
75 "working-copy.dirstate" -> {
76 "working-copy.dirstate": CF,
77 }
78
79 Using a *prefix* of a qualified name:
80 "store.revlogs" -> {
81 "store.revlogs.changelog": CF,
82 "store.revlogs.manifestlog": CF,
83 "store.revlogs.filelog": CF,
84 }
85
86 Using a defined alias:
87 "revlogs" -> {
88 "store.revlogs.changelog": CF,
89 "store.revlogs.manifestlog": CF,
90 "store.revlogs.filelog": CF,
91 }
92
93 Using something that is none of the above will be an error.
94 """
95 if table is None:
96 table = verify_table
97 if alias_table is None:
98 alias_table = verify_alias_table
99
100 if name == b"full":
101 return table
102 checks = {}
103
104 # is it a full name?
105 check = table.get(name)
106
107 if check is None:
108 # is it an alias?
109 qualified_name = alias_table.get(name)
110 if qualified_name is not None:
111 name = qualified_name
112 check = table.get(name)
113 else:
114 split = name.split(b".", 1)
115 if len(split) == 2:
116 # split[0] can be an alias
117 qualified_name = alias_table.get(split[0])
118 if qualified_name is not None:
119 name = b"%s.%s" % (qualified_name, split[1])
120 check = table.get(name)
121 else:
122 qualified_name = name
123
124 # Maybe it's a subtree in the check hierarchy that does not
125 # have an explicit alias.
126 levels = name.split(b".")
127 if full_pyramid is not None:
128 if not full_pyramid:
129 build_pyramid(table, full_pyramid)
130
131 pyramid.clear()
132 pyramid.update(full_pyramid.items())
133 else:
134 build_pyramid(table, pyramid)
135
136 subtree = pyramid
137 # Find subtree
138 for level in levels:
139 subtree = subtree.get(level)
140 if subtree is None:
141 hint = error.getsimilar(list(alias_table) + list(table), name)
142 hint = error.similarity_hint(hint)
143
144 raise error.InputError(_(b"unknown check %s" % name), hint=hint)
145
146 # Get all checks in that subtree
147 if isinstance(subtree, dict):
148 stack = list(subtree.items())
149 while stack:
150 current_name, entry = stack.pop()
151 if isinstance(entry, dict):
152 stack.extend(entry.items())
153 else:
154 # (qualified_name, func)
155 checks[entry[0]] = entry[1]
156 else:
157 checks[name] = check
158
159 return checks
160
161
162 def pass_options(
163 ui,
164 checks,
165 options,
166 table=None,
167 alias_table=None,
168 full_pyramid=None,
169 ):
170 """Given a dict of checks (fully qualified name to function), and a list
171 of options as given by the user, pass each option down to the right check
172 function."""
173 ui.debug(b"passing options to check functions\n")
174 to_modify = collections.defaultdict(dict)
175
176 if not checks:
177 raise error.Error(_(b"`checks` required"))
178
179 for option in sorted(options):
180 split = option.split(b":")
181 hint = _(
182 b"syntax is 'check:option=value', "
183 b"eg. revlogs.changelog:copies=yes"
184 )
185 option_error = error.InputError(
186 _(b"invalid option '%s'") % option, hint=hint
187 )
188 if len(split) != 2:
189 raise option_error
190
191 check_name, option_value = split
192 if not option_value:
193 raise option_error
194
195 split = option_value.split(b"=")
196 if len(split) != 2:
197 raise option_error
198
199 option_name, value = split
200 if not value:
201 raise option_error
202
203 path = b"%s:%s" % (check_name, option_name)
204
205 matching_checks = find_checks(
206 check_name,
207 table=table,
208 alias_table=alias_table,
209 full_pyramid=full_pyramid,
210 )
211 for name in matching_checks:
212 check = checks.get(name)
213 if check is None:
214 msg = _(b"specified option '%s' for unselected check '%s'\n")
215 raise error.InputError(msg % (name, option_name))
216
217 assert hasattr(check, "func") # help Pytype
218
219 if not hasattr(check.func, "options"):
220 raise error.InputError(
221 _(b"check '%s' has no option '%s'") % (name, option_name)
222 )
223
224 try:
225 matching_option = next(
226 (o for o in check.func.options if o[0] == option_name)
227 )
228 except StopIteration:
229 raise error.InputError(
230 _(b"check '%s' has no option '%s'") % (name, option_name)
231 )
232
233 # transform the argument from cli string to the expected Python type
234 _name, typ, _docstring = matching_option
235
236 as_typed = None
237 if isinstance(typ, bool):
238 as_bool = stringutil.parsebool(value)
239 if as_bool is None:
240 raise error.InputError(
241 _(b"'%s' is not a boolean ('%s')") % (path, value)
242 )
243 as_typed = as_bool
244 elif isinstance(typ, list):
245 as_list = stringutil.parselist(value)
246 if as_list is None:
247 raise error.InputError(
248 _(b"'%s' is not a list ('%s')") % (path, value)
249 )
250 as_typed = as_list
251 else:
252 raise error.ProgrammingError(b"unsupported type %s", type(typ))
253
254 if option_name in to_modify[name]:
255 raise error.InputError(
256 _(b"duplicated option '%s' for '%s'") % (option_name, name)
257 )
258 else:
259 assert as_typed is not None
260 to_modify[name][option_name] = as_typed
261
262 # Manage case where a check is set but without command line options
263 # it will later be set with default check options values
264 for name, f in checks.items():
265 if name not in to_modify:
266 to_modify[name] = {}
267
268 # Merge default options with command line options
269 for check_name, cmd_options in to_modify.items():
270 check = checks.get(check_name)
271 func = checks[check_name]
272 merged_options = {}
273 # help Pytype
274 assert check is not None
275 assert check.func is not None
276 assert hasattr(check.func, "options")
277
278 if check.func.options:
279 # copy the default value in case it's mutable (list, etc.)
280 merged_options = {
281 o[0]: copy.deepcopy(o[1]) for o in check.func.options
282 }
283 if cmd_options:
284 for k, v in cmd_options.items():
285 merged_options[k] = v
286 options = pycompat.strkwargs(merged_options)
287 checks[check_name] = functools.partial(func, **options)
288 ui.debug(b"merged options for '%s': '%r'\n" % (check_name, options))
289
290 return checks
291
292
293 def get_checks(
294 repo,
295 ui,
296 names=None,
297 options=None,
298 table=None,
299 alias_table=None,
300 full_pyramid=None,
301 ):
302 """Given a list of function names and optionally a list of
303 options, return matched checks with merged options (command line options
304 values take precedence on default ones)
305
306 It runs find checks, then resolve options and returns a dict of matched
307 functions with resolved options.
308 """
309 funcs = {}
310
311 if names is None:
312 names = []
313
314 if options is None:
315 options = []
316
317 # find checks
318 for name in names:
319 matched = find_checks(
320 name,
321 table=table,
322 alias_table=alias_table,
323 full_pyramid=full_pyramid,
324 )
325 matched_names = b", ".join(matched)
326 ui.debug(b"found checks '%s' for name '%s'\n" % (matched_names, name))
327 funcs.update(matched)
328
329 funcs = {n: functools.partial(f, ui, repo) for n, f in funcs.items()}
330
331 # resolve options
332 checks = pass_options(
333 ui,
334 funcs,
335 options,
336 table=table,
337 alias_table=alias_table,
338 full_pyramid=full_pyramid,
339 )
340
341 return checks
@@ -0,0 +1,49 b''
1 # admin_commands.py - command processing for admin* commands
2 #
3 # Copyright 2022 Mercurial Developers
4 #
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
7
8 from .i18n import _
9 from .admin import verify
10 from . import error, registrar, transaction
11
12
13 table = {}
14 command = registrar.command(table)
15
16
17 @command(
18 b'admin::verify',
19 [
20 (b'c', b'check', [], _(b'add a check'), _(b'CHECK')),
21 (b'o', b'option', [], _(b'pass an option to a check'), _(b'OPTION')),
22 ],
23 helpcategory=command.CATEGORY_MAINTENANCE,
24 )
25 def admin_verify(ui, repo, **opts):
26 """verify the integrity of the repository
27
28 Alternative UI to `hg verify` with a lot more control over the
29 verification process and better error reporting.
30 """
31
32 if not repo.url().startswith(b'file:'):
33 raise error.Abort(_(b"cannot verify bundle or remote repos"))
34
35 if transaction.has_abandoned_transaction(repo):
36 ui.warn(_(b"abandoned transaction found - run hg recover\n"))
37
38 checks = opts.get("check", [])
39 options = opts.get("option", [])
40
41 funcs = verify.get_checks(repo, ui, names=checks, options=options)
42
43 ui.status(_(b"running %d checks\n") % len(funcs))
44 # Done in two times so the execution is separated from the resolving step
45 for name, func in sorted(funcs.items(), key=lambda x: x[0]):
46 ui.status(_(b"running %s\n") % name)
47 errors = func()
48 if errors:
49 ui.warn(_(b"found %d errors\n") % len(errors))
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -40,7 +40,6 b' from mercurial import ('
40 40 extensions,
41 41 hg,
42 42 ui as uimod,
43 util,
44 43 )
45 44
46 45 basedir = os.path.abspath(
@@ -66,7 +65,7 b' def runperfcommand(reponame, command, *a'
66 65 os.environ["HGRCPATH"] = os.environ.get("ASVHGRCPATH", "")
67 66 # for "historical portability"
68 67 # ui.load() has been available since d83ca85
69 if util.safehasattr(uimod.ui, "load"):
68 if hasattr(uimod.ui, "load"):
70 69 ui = uimod.ui.load()
71 70 else:
72 71 ui = uimod.ui()
@@ -212,18 +212,14 b' def replacetokens(tokens, opts):'
212 212 fn = t.string
213 213
214 214 # *attr() builtins don't accept byte strings to 2nd argument.
215 if (
216 fn
217 in (
218 'getattr',
219 'setattr',
220 'hasattr',
221 'safehasattr',
222 'wrapfunction',
223 'wrapclass',
224 'addattr',
225 )
226 and (opts['allow-attr-methods'] or not _isop(i - 1, '.'))
215 if fn in (
216 'getattr',
217 'setattr',
218 'hasattr',
219 'safehasattr',
220 'wrapfunction',
221 'wrapclass',
222 'addattr',
227 223 ):
228 224 arg1idx = _findargnofcall(1)
229 225 if arg1idx is not None:
@@ -312,12 +308,6 b' def main():'
312 308 help='rewrite iteritems() and itervalues()',
313 309 ),
314 310 ap.add_argument(
315 '--allow-attr-methods',
316 action='store_true',
317 default=False,
318 help='also handle attr*() when they are methods',
319 ),
320 ap.add_argument(
321 311 '--treat-as-kwargs',
322 312 nargs="+",
323 313 default=[],
@@ -328,7 +318,6 b' def main():'
328 318 opts = {
329 319 'dictiter': args.dictiter,
330 320 'treat-as-kwargs': set(args.treat_as_kwargs),
331 'allow-attr-methods': args.allow_attr_methods,
332 321 }
333 322 for fname in args.files:
334 323 fname = os.path.realpath(fname)
@@ -383,12 +383,6 b' commonpypats = ['
383 383 "use True/False for constant Boolean expression",
384 384 ),
385 385 (r'^\s*if False(:| +and)', 'Remove code instead of using `if False`'),
386 (
387 r'(?:(?<!def)\s+|\()hasattr\(',
388 'hasattr(foo, bar) is broken on py2, use util.safehasattr(foo, bar) '
389 'instead',
390 r'#.*hasattr-py3-only',
391 ),
392 386 (r'opener\([^)]*\).read\(', "use opener.read() instead"),
393 387 (r'opener\([^)]*\).write\(', "use opener.write() instead"),
394 388 (r'(?i)descend[e]nt', "the proper spelling is descendAnt"),
@@ -26,7 +26,6 b' cd `hg root`'
26 26 # hgext/githelp.py # [attribute-error] [wrong-arg-types]
27 27 # hgext/hgk.py # [attribute-error]
28 28 # hgext/histedit.py # [attribute-error], [wrong-arg-types]
29 # hgext/infinitepush # using bytes for str literal; scheduled for removal
30 29 # hgext/keyword.py # [attribute-error]
31 30 # hgext/largefiles/storefactory.py # [attribute-error]
32 31 # hgext/lfs/__init__.py # [attribute-error]
@@ -88,7 +87,6 b' pytype -V 3.7 --keep-going --jobs auto \\'
88 87 -x hgext/githelp.py \
89 88 -x hgext/hgk.py \
90 89 -x hgext/histedit.py \
91 -x hgext/infinitepush \
92 90 -x hgext/keyword.py \
93 91 -x hgext/largefiles/storefactory.py \
94 92 -x hgext/lfs/__init__.py \
@@ -45,6 +45,7 b' allowsymbolimports = ('
45 45 'mercurial.thirdparty',
46 46 'mercurial.thirdparty.attr',
47 47 'mercurial.thirdparty.jaraco.collections',
48 'mercurial.thirdparty.tomli',
48 49 'mercurial.thirdparty.zope',
49 50 'mercurial.thirdparty.zope.interface',
50 51 'typing',
@@ -12,6 +12,55 b' dependencies = ['
12 12 ]
13 13
14 14 [[package]]
15 name = "anstream"
16 version = "0.3.2"
17 source = "registry+https://github.com/rust-lang/crates.io-index"
18 checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
19 dependencies = [
20 "anstyle",
21 "anstyle-parse",
22 "anstyle-query",
23 "anstyle-wincon",
24 "colorchoice",
25 "is-terminal",
26 "utf8parse",
27 ]
28
29 [[package]]
30 name = "anstyle"
31 version = "1.0.1"
32 source = "registry+https://github.com/rust-lang/crates.io-index"
33 checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
34
35 [[package]]
36 name = "anstyle-parse"
37 version = "0.2.1"
38 source = "registry+https://github.com/rust-lang/crates.io-index"
39 checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
40 dependencies = [
41 "utf8parse",
42 ]
43
44 [[package]]
45 name = "anstyle-query"
46 version = "1.0.0"
47 source = "registry+https://github.com/rust-lang/crates.io-index"
48 checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
49 dependencies = [
50 "windows-sys",
51 ]
52
53 [[package]]
54 name = "anstyle-wincon"
55 version = "1.0.1"
56 source = "registry+https://github.com/rust-lang/crates.io-index"
57 checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
58 dependencies = [
59 "anstyle",
60 "windows-sys",
61 ]
62
63 [[package]]
15 64 name = "assert_cmd"
16 65 version = "2.0.4"
17 66 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -26,17 +75,6 b' dependencies = ['
26 75 ]
27 76
28 77 [[package]]
29 name = "atty"
30 version = "0.2.14"
31 source = "registry+https://github.com/rust-lang/crates.io-index"
32 checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
33 dependencies = [
34 "hermit-abi",
35 "libc",
36 "winapi",
37 ]
38
39 [[package]]
40 78 name = "autocfg"
41 79 version = "1.1.0"
42 80 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -44,9 +82,9 b' checksum = "d468802bab17cbc0cc575e9b053f'
44 82
45 83 [[package]]
46 84 name = "bitflags"
47 version = "1.3.2"
85 version = "2.3.3"
48 86 source = "registry+https://github.com/rust-lang/crates.io-index"
49 checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
87 checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
50 88
51 89 [[package]]
52 90 name = "bstr"
@@ -60,36 +98,59 b' dependencies = ['
60 98 ]
61 99
62 100 [[package]]
101 name = "cc"
102 version = "1.0.79"
103 source = "registry+https://github.com/rust-lang/crates.io-index"
104 checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
105
106 [[package]]
63 107 name = "clap"
64 version = "3.1.6"
108 version = "4.3.17"
65 109 source = "registry+https://github.com/rust-lang/crates.io-index"
66 checksum = "d8c93436c21e4698bacadf42917db28b23017027a4deccb35dbe47a7e7840123"
110 checksum = "5b0827b011f6f8ab38590295339817b0d26f344aa4932c3ced71b45b0c54b4a9"
67 111 dependencies = [
68 "atty",
69 "bitflags",
112 "clap_builder",
70 113 "clap_derive",
71 "indexmap",
72 "lazy_static",
73 "os_str_bytes",
114 "once_cell",
115 ]
116
117 [[package]]
118 name = "clap_builder"
119 version = "4.3.17"
120 source = "registry+https://github.com/rust-lang/crates.io-index"
121 checksum = "9441b403be87be858db6a23edb493e7f694761acdc3343d5a0fcaafd304cbc9e"
122 dependencies = [
123 "anstream",
124 "anstyle",
125 "clap_lex",
74 126 "strsim",
75 "termcolor",
76 "textwrap",
77 127 ]
78 128
79 129 [[package]]
80 130 name = "clap_derive"
81 version = "3.1.4"
131 version = "4.3.12"
82 132 source = "registry+https://github.com/rust-lang/crates.io-index"
83 checksum = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16"
133 checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
84 134 dependencies = [
85 135 "heck",
86 "proc-macro-error",
87 136 "proc-macro2",
88 137 "quote",
89 "syn",
138 "syn 2.0.27",
90 139 ]
91 140
92 141 [[package]]
142 name = "clap_lex"
143 version = "0.5.0"
144 source = "registry+https://github.com/rust-lang/crates.io-index"
145 checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
146
147 [[package]]
148 name = "colorchoice"
149 version = "1.0.0"
150 source = "registry+https://github.com/rust-lang/crates.io-index"
151 checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
152
153 [[package]]
93 154 name = "console"
94 155 version = "0.15.0"
95 156 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -127,6 +188,27 b' source = "registry+https://github.com/ru'
127 188 checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
128 189
129 190 [[package]]
191 name = "errno"
192 version = "0.3.1"
193 source = "registry+https://github.com/rust-lang/crates.io-index"
194 checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
195 dependencies = [
196 "errno-dragonfly",
197 "libc",
198 "windows-sys",
199 ]
200
201 [[package]]
202 name = "errno-dragonfly"
203 version = "0.1.2"
204 source = "registry+https://github.com/rust-lang/crates.io-index"
205 checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
206 dependencies = [
207 "cc",
208 "libc",
209 ]
210
211 [[package]]
130 212 name = "fuchsia-cprng"
131 213 version = "0.1.1"
132 214 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -146,12 +228,9 b' checksum = "2540771e65fc8cb83cd6e8a237f7'
146 228
147 229 [[package]]
148 230 name = "hermit-abi"
149 version = "0.1.19"
231 version = "0.3.2"
150 232 source = "registry+https://github.com/rust-lang/crates.io-index"
151 checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
152 dependencies = [
153 "libc",
154 ]
233 checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
155 234
156 235 [[package]]
157 236 name = "indexmap"
@@ -178,6 +257,17 b' dependencies = ['
178 257 ]
179 258
180 259 [[package]]
260 name = "is-terminal"
261 version = "0.4.9"
262 source = "registry+https://github.com/rust-lang/crates.io-index"
263 checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
264 dependencies = [
265 "hermit-abi",
266 "rustix",
267 "windows-sys",
268 ]
269
270 [[package]]
181 271 name = "itertools"
182 272 version = "0.10.3"
183 273 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -200,9 +290,9 b' checksum = "e2abad23fbc42b3700f2f279844d'
200 290
201 291 [[package]]
202 292 name = "libc"
203 version = "0.2.119"
293 version = "0.2.147"
204 294 source = "registry+https://github.com/rust-lang/crates.io-index"
205 checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
295 checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
206 296
207 297 [[package]]
208 298 name = "linked-hash-map"
@@ -211,6 +301,12 b' source = "registry+https://github.com/ru'
211 301 checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
212 302
213 303 [[package]]
304 name = "linux-raw-sys"
305 version = "0.4.3"
306 source = "registry+https://github.com/rust-lang/crates.io-index"
307 checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
308
309 [[package]]
214 310 name = "memchr"
215 311 version = "2.4.1"
216 312 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -231,18 +327,9 b' dependencies = ['
231 327
232 328 [[package]]
233 329 name = "once_cell"
234 version = "1.10.0"
330 version = "1.18.0"
235 331 source = "registry+https://github.com/rust-lang/crates.io-index"
236 checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
237
238 [[package]]
239 name = "os_str_bytes"
240 version = "6.0.0"
241 source = "registry+https://github.com/rust-lang/crates.io-index"
242 checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
243 dependencies = [
244 "memchr",
245 ]
332 checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
246 333
247 334 [[package]]
248 335 name = "predicates"
@@ -272,43 +359,19 b' dependencies = ['
272 359 ]
273 360
274 361 [[package]]
275 name = "proc-macro-error"
276 version = "1.0.4"
362 name = "proc-macro2"
363 version = "1.0.66"
277 364 source = "registry+https://github.com/rust-lang/crates.io-index"
278 checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
365 checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
279 366 dependencies = [
280 "proc-macro-error-attr",
281 "proc-macro2",
282 "quote",
283 "syn",
284 "version_check",
285 ]
286
287 [[package]]
288 name = "proc-macro-error-attr"
289 version = "1.0.4"
290 source = "registry+https://github.com/rust-lang/crates.io-index"
291 checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
292 dependencies = [
293 "proc-macro2",
294 "quote",
295 "version_check",
296 ]
297
298 [[package]]
299 name = "proc-macro2"
300 version = "1.0.36"
301 source = "registry+https://github.com/rust-lang/crates.io-index"
302 checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
303 dependencies = [
304 "unicode-xid",
367 "unicode-ident",
305 368 ]
306 369
307 370 [[package]]
308 371 name = "quote"
309 version = "1.0.15"
372 version = "1.0.31"
310 373 source = "registry+https://github.com/rust-lang/crates.io-index"
311 checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
374 checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
312 375 dependencies = [
313 376 "proc-macro2",
314 377 ]
@@ -383,6 +446,19 b' dependencies = ['
383 446 ]
384 447
385 448 [[package]]
449 name = "rustix"
450 version = "0.38.4"
451 source = "registry+https://github.com/rust-lang/crates.io-index"
452 checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
453 dependencies = [
454 "bitflags",
455 "errno",
456 "libc",
457 "linux-raw-sys",
458 "windows-sys",
459 ]
460
461 [[package]]
386 462 name = "ryu"
387 463 version = "1.0.9"
388 464 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -405,7 +481,7 b' checksum = "08597e7152fcd306f41838ed3e37'
405 481 dependencies = [
406 482 "proc-macro2",
407 483 "quote",
408 "syn",
484 "syn 1.0.87",
409 485 ]
410 486
411 487 [[package]]
@@ -458,6 +534,17 b' dependencies = ['
458 534 ]
459 535
460 536 [[package]]
537 name = "syn"
538 version = "2.0.27"
539 source = "registry+https://github.com/rust-lang/crates.io-index"
540 checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0"
541 dependencies = [
542 "proc-macro2",
543 "quote",
544 "unicode-ident",
545 ]
546
547 [[package]]
461 548 name = "tempdir"
462 549 version = "0.3.7"
463 550 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -468,15 +555,6 b' dependencies = ['
468 555 ]
469 556
470 557 [[package]]
471 name = "termcolor"
472 version = "1.1.3"
473 source = "registry+https://github.com/rust-lang/crates.io-index"
474 checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
475 dependencies = [
476 "winapi-util",
477 ]
478
479 [[package]]
480 558 name = "terminal_size"
481 559 version = "0.1.17"
482 560 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -493,10 +571,10 b' source = "registry+https://github.com/ru'
493 571 checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b"
494 572
495 573 [[package]]
496 name = "textwrap"
497 version = "0.15.0"
574 name = "unicode-ident"
575 version = "1.0.11"
498 576 source = "registry+https://github.com/rust-lang/crates.io-index"
499 checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
577 checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
500 578
501 579 [[package]]
502 580 name = "unicode-xid"
@@ -505,10 +583,10 b' source = "registry+https://github.com/ru'
505 583 checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
506 584
507 585 [[package]]
508 name = "version_check"
509 version = "0.9.4"
586 name = "utf8parse"
587 version = "0.2.1"
510 588 source = "registry+https://github.com/rust-lang/crates.io-index"
511 checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
589 checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
512 590
513 591 [[package]]
514 592 name = "wait-timeout"
@@ -536,21 +614,78 b' source = "registry+https://github.com/ru'
536 614 checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
537 615
538 616 [[package]]
539 name = "winapi-util"
540 version = "0.1.5"
541 source = "registry+https://github.com/rust-lang/crates.io-index"
542 checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
543 dependencies = [
544 "winapi",
545 ]
546
547 [[package]]
548 617 name = "winapi-x86_64-pc-windows-gnu"
549 618 version = "0.4.0"
550 619 source = "registry+https://github.com/rust-lang/crates.io-index"
551 620 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
552 621
553 622 [[package]]
623 name = "windows-sys"
624 version = "0.48.0"
625 source = "registry+https://github.com/rust-lang/crates.io-index"
626 checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
627 dependencies = [
628 "windows-targets",
629 ]
630
631 [[package]]
632 name = "windows-targets"
633 version = "0.48.1"
634 source = "registry+https://github.com/rust-lang/crates.io-index"
635 checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
636 dependencies = [
637 "windows_aarch64_gnullvm",
638 "windows_aarch64_msvc",
639 "windows_i686_gnu",
640 "windows_i686_msvc",
641 "windows_x86_64_gnu",
642 "windows_x86_64_gnullvm",
643 "windows_x86_64_msvc",
644 ]
645
646 [[package]]
647 name = "windows_aarch64_gnullvm"
648 version = "0.48.0"
649 source = "registry+https://github.com/rust-lang/crates.io-index"
650 checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
651
652 [[package]]
653 name = "windows_aarch64_msvc"
654 version = "0.48.0"
655 source = "registry+https://github.com/rust-lang/crates.io-index"
656 checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
657
658 [[package]]
659 name = "windows_i686_gnu"
660 version = "0.48.0"
661 source = "registry+https://github.com/rust-lang/crates.io-index"
662 checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
663
664 [[package]]
665 name = "windows_i686_msvc"
666 version = "0.48.0"
667 source = "registry+https://github.com/rust-lang/crates.io-index"
668 checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
669
670 [[package]]
671 name = "windows_x86_64_gnu"
672 version = "0.48.0"
673 source = "registry+https://github.com/rust-lang/crates.io-index"
674 checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
675
676 [[package]]
677 name = "windows_x86_64_gnullvm"
678 version = "0.48.0"
679 source = "registry+https://github.com/rust-lang/crates.io-index"
680 checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
681
682 [[package]]
683 name = "windows_x86_64_msvc"
684 version = "0.48.0"
685 source = "registry+https://github.com/rust-lang/crates.io-index"
686 checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
687
688 [[package]]
554 689 name = "yaml-rust"
555 690 version = "0.4.5"
556 691 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -10,7 +10,7 b' edition = "2021"'
10 10 rust-version = "1.59"
11 11
12 12 [dependencies]
13 clap = { version = "3.1.6", features = ["derive"] }
13 clap = { version = "4.3.17", features = ["derive"] }
14 14 itertools = "0.10.3"
15 15 regex = "1.5.5"
16 16 similar = { version="2.1.0", features = ["bytes"] }
@@ -456,7 +456,7 b' def gettimer(ui, opts=None):'
456 456 return functools.partial(stub_timer, fm), fm
457 457
458 458 # experimental config: perf.all-timing
459 displayall = ui.configbool(b"perf", b"all-timing", False)
459 displayall = ui.configbool(b"perf", b"all-timing", True)
460 460
461 461 # experimental config: perf.run-limits
462 462 limitspec = ui.configlist(b"perf", b"run-limits", [])
@@ -3479,7 +3479,7 b' def perfrevlogwrite(ui, repo, file_=None'
3479 3479
3480 3480 # get a formatter
3481 3481 fm = ui.formatter(b'perf', opts)
3482 displayall = ui.configbool(b"perf", b"all-timing", False)
3482 displayall = ui.configbool(b"perf", b"all-timing", True)
3483 3483
3484 3484 # print individual details if requested
3485 3485 if opts['details']:
@@ -3549,7 +3549,10 b' def _timeonewrite('
3549 3549 timings = []
3550 3550 tr = _faketr()
3551 3551 with _temprevlog(ui, orig, startrev) as dest:
3552 dest._lazydeltabase = lazydeltabase
3552 if hasattr(dest, "delta_config"):
3553 dest.delta_config.lazy_delta_base = lazydeltabase
3554 else:
3555 dest._lazydeltabase = lazydeltabase
3553 3556 revs = list(orig.revs(startrev, stoprev))
3554 3557 total = len(revs)
3555 3558 topic = 'adding'
@@ -3717,11 +3720,15 b' def perfrevlogchunks(ui, repo, file_=Non'
3717 3720
3718 3721 rl = cmdutil.openrevlog(repo, b'perfrevlogchunks', file_, opts)
3719 3722
3720 # _chunkraw was renamed to _getsegmentforrevs.
3723 # - _chunkraw was renamed to _getsegmentforrevs
3724 # - _getsegmentforrevs was moved on the inner object
3721 3725 try:
3722 segmentforrevs = rl._getsegmentforrevs
3726 segmentforrevs = rl._inner.get_segment_for_revs
3723 3727 except AttributeError:
3724 segmentforrevs = rl._chunkraw
3728 try:
3729 segmentforrevs = rl._getsegmentforrevs
3730 except AttributeError:
3731 segmentforrevs = rl._chunkraw
3725 3732
3726 3733 # Verify engines argument.
3727 3734 if engines:
@@ -3744,62 +3751,101 b' def perfrevlogchunks(ui, repo, file_=Non'
3744 3751
3745 3752 revs = list(rl.revs(startrev, len(rl) - 1))
3746 3753
3747 def rlfh(rl):
3748 if rl._inline:
3754 @contextlib.contextmanager
3755 def reading(rl):
3756 if getattr(rl, 'reading', None) is not None:
3757 with rl.reading():
3758 yield None
3759 elif rl._inline:
3749 3760 indexfile = getattr(rl, '_indexfile', None)
3750 3761 if indexfile is None:
3751 3762 # compatibility with <= hg-5.8
3752 3763 indexfile = getattr(rl, 'indexfile')
3753 return getsvfs(repo)(indexfile)
3764 yield getsvfs(repo)(indexfile)
3754 3765 else:
3755 3766 datafile = getattr(rl, 'datafile', getattr(rl, 'datafile'))
3756 return getsvfs(repo)(datafile)
3767 yield getsvfs(repo)(datafile)
3768
3769 if getattr(rl, 'reading', None) is not None:
3770
3771 @contextlib.contextmanager
3772 def lazy_reading(rl):
3773 with rl.reading():
3774 yield
3775
3776 else:
3777
3778 @contextlib.contextmanager
3779 def lazy_reading(rl):
3780 yield
3757 3781
3758 3782 def doread():
3759 3783 rl.clearcaches()
3760 3784 for rev in revs:
3761 segmentforrevs(rev, rev)
3785 with lazy_reading(rl):
3786 segmentforrevs(rev, rev)
3762 3787
3763 3788 def doreadcachedfh():
3764 3789 rl.clearcaches()
3765 fh = rlfh(rl)
3766 for rev in revs:
3767 segmentforrevs(rev, rev, df=fh)
3790 with reading(rl) as fh:
3791 if fh is not None:
3792 for rev in revs:
3793 segmentforrevs(rev, rev, df=fh)
3794 else:
3795 for rev in revs:
3796 segmentforrevs(rev, rev)
3768 3797
3769 3798 def doreadbatch():
3770 3799 rl.clearcaches()
3771 segmentforrevs(revs[0], revs[-1])
3800 with lazy_reading(rl):
3801 segmentforrevs(revs[0], revs[-1])
3772 3802
3773 3803 def doreadbatchcachedfh():
3774 3804 rl.clearcaches()
3775 fh = rlfh(rl)
3776 segmentforrevs(revs[0], revs[-1], df=fh)
3805 with reading(rl) as fh:
3806 if fh is not None:
3807 segmentforrevs(revs[0], revs[-1], df=fh)
3808 else:
3809 segmentforrevs(revs[0], revs[-1])
3777 3810
3778 3811 def dochunk():
3779 3812 rl.clearcaches()
3780 fh = rlfh(rl)
3781 for rev in revs:
3782 rl._chunk(rev, df=fh)
3813 # chunk used to be available directly on the revlog
3814 _chunk = getattr(rl, '_inner', rl)._chunk
3815 with reading(rl) as fh:
3816 if fh is not None:
3817 for rev in revs:
3818 _chunk(rev, df=fh)
3819 else:
3820 for rev in revs:
3821 _chunk(rev)
3783 3822
3784 3823 chunks = [None]
3785 3824
3786 3825 def dochunkbatch():
3787 3826 rl.clearcaches()
3788 fh = rlfh(rl)
3789 # Save chunks as a side-effect.
3790 chunks[0] = rl._chunks(revs, df=fh)
3827 _chunks = getattr(rl, '_inner', rl)._chunks
3828 with reading(rl) as fh:
3829 if fh is not None:
3830 # Save chunks as a side-effect.
3831 chunks[0] = _chunks(revs, df=fh)
3832 else:
3833 # Save chunks as a side-effect.
3834 chunks[0] = _chunks(revs)
3791 3835
3792 3836 def docompress(compressor):
3793 3837 rl.clearcaches()
3794 3838
3839 compressor_holder = getattr(rl, '_inner', rl)
3840
3795 3841 try:
3796 3842 # Swap in the requested compression engine.
3797 oldcompressor = rl._compressor
3798 rl._compressor = compressor
3843 oldcompressor = compressor_holder._compressor
3844 compressor_holder._compressor = compressor
3799 3845 for chunk in chunks[0]:
3800 3846 rl.compress(chunk)
3801 3847 finally:
3802 rl._compressor = oldcompressor
3848 compressor_holder._compressor = oldcompressor
3803 3849
3804 3850 benches = [
3805 3851 (lambda: doread(), b'read'),
@@ -3857,13 +3903,29 b' def perfrevlogrevision(ui, repo, file_, '
3857 3903
3858 3904 # _chunkraw was renamed to _getsegmentforrevs.
3859 3905 try:
3860 segmentforrevs = r._getsegmentforrevs
3906 segmentforrevs = r._inner.get_segment_for_revs
3861 3907 except AttributeError:
3862 segmentforrevs = r._chunkraw
3908 try:
3909 segmentforrevs = r._getsegmentforrevs
3910 except AttributeError:
3911 segmentforrevs = r._chunkraw
3863 3912
3864 3913 node = r.lookup(rev)
3865 3914 rev = r.rev(node)
3866 3915
3916 if getattr(r, 'reading', None) is not None:
3917
3918 @contextlib.contextmanager
3919 def lazy_reading(r):
3920 with r.reading():
3921 yield
3922
3923 else:
3924
3925 @contextlib.contextmanager
3926 def lazy_reading(r):
3927 yield
3928
3867 3929 def getrawchunks(data, chain):
3868 3930 start = r.start
3869 3931 length = r.length
@@ -3897,7 +3959,8 b' def perfrevlogrevision(ui, repo, file_, '
3897 3959 if not cache:
3898 3960 r.clearcaches()
3899 3961 for item in slicedchain:
3900 segmentforrevs(item[0], item[-1])
3962 with lazy_reading(r):
3963 segmentforrevs(item[0], item[-1])
3901 3964
3902 3965 def doslice(r, chain, size):
3903 3966 for s in slicechunk(r, chain, targetsize=size):
@@ -3935,13 +3998,19 b' def perfrevlogrevision(ui, repo, file_, '
3935 3998
3936 3999 size = r.length(rev)
3937 4000 chain = r._deltachain(rev)[0]
3938 if not getattr(r, '_withsparseread', False):
4001
4002 with_sparse_read = False
4003 if hasattr(r, 'data_config'):
4004 with_sparse_read = r.data_config.with_sparse_read
4005 elif hasattr(r, '_withsparseread'):
4006 with_sparse_read = r._withsparseread
4007 if with_sparse_read:
3939 4008 slicedchain = (chain,)
3940 4009 else:
3941 4010 slicedchain = tuple(slicechunk(r, chain, targetsize=size))
3942 4011 data = [segmentforrevs(seg[0], seg[-1])[1] for seg in slicedchain]
3943 4012 rawchunks = getrawchunks(data, slicedchain)
3944 bins = r._chunks(chain)
4013 bins = r._inner._chunks(chain)
3945 4014 text = bytes(bins[0])
3946 4015 bins = bins[1:]
3947 4016 text = mdiff.patches(text, bins)
@@ -3952,7 +4021,7 b' def perfrevlogrevision(ui, repo, file_, '
3952 4021 (lambda: doread(chain), b'read'),
3953 4022 ]
3954 4023
3955 if getattr(r, '_withsparseread', False):
4024 if with_sparse_read:
3956 4025 slicing = (lambda: doslice(r, chain, size), b'slice-sparse-chain')
3957 4026 benches.append(slicing)
3958 4027
@@ -4541,7 +4610,8 b' def uisetup(ui):'
4541 4610 )
4542 4611 return orig(repo, cmd, file_, opts)
4543 4612
4544 extensions.wrapfunction(cmdutil, b'openrevlog', openrevlog)
4613 name = _sysstr(b'openrevlog')
4614 extensions.wrapfunction(cmdutil, name, openrevlog)
4545 4615
4546 4616
4547 4617 @command(
@@ -337,9 +337,6 b' test-import-unknown.t'
337 337 test-import.t
338 338 test-imports-checker.t
339 339 test-incoming-outgoing.t
340 test-infinitepush-bundlestore.t
341 test-infinitepush-ci.t
342 test-infinitepush.t
343 340 test-inherit-mode.t
344 341 test-init.t
345 342 test-install.t
@@ -299,7 +299,7 b' class filefixupstate:'
299 299 4. read results from "finalcontents", or call getfinalcontent
300 300 """
301 301
302 def __init__(self, fctxs, path, ui=None, opts=None):
302 def __init__(self, fctxs, path, ui=None, **opts):
303 303 """([fctx], ui or None) -> None
304 304
305 305 fctxs should be linear, and sorted by topo order - oldest first.
@@ -308,7 +308,7 b' class filefixupstate:'
308 308 self.fctxs = fctxs
309 309 self.path = path
310 310 self.ui = ui or nullui()
311 self.opts = opts or {}
311 self.opts = opts
312 312
313 313 # following fields are built from fctxs. they exist for perf reason
314 314 self.contents = [f.data() for f in fctxs]
@@ -375,7 +375,7 b' class filefixupstate:'
375 375 % (short(self.fctxs[idx].node()), a1, a2, len(blines))
376 376 )
377 377 self.linelog.replacelines(rev, a1, a2, b1, b2)
378 if self.opts.get(b'edit_lines', False):
378 if self.opts.get('edit_lines', False):
379 379 self.finalcontents = self._checkoutlinelogwithedits()
380 380 else:
381 381 self.finalcontents = self._checkoutlinelog()
@@ -668,7 +668,7 b' class fixupstate:'
668 668 4. call commit, to commit changes to hg database
669 669 """
670 670
671 def __init__(self, stack, ui=None, opts=None):
671 def __init__(self, stack, ui=None, **opts):
672 672 """([ctx], ui or None) -> None
673 673
674 674 stack: should be linear, and sorted by topo order - oldest first.
@@ -676,7 +676,7 b' class fixupstate:'
676 676 """
677 677 assert stack
678 678 self.ui = ui or nullui()
679 self.opts = opts or {}
679 self.opts = opts
680 680 self.stack = stack
681 681 self.repo = stack[-1].repo().unfiltered()
682 682
@@ -696,7 +696,7 b' class fixupstate:'
696 696 self.paths = []
697 697 # but if --edit-lines is used, the user may want to edit files
698 698 # even if they are not modified
699 editopt = self.opts.get(b'edit_lines')
699 editopt = self.opts.get('edit_lines')
700 700 if not self.status.modified and editopt and match:
701 701 interestingpaths = match.files()
702 702 else:
@@ -720,7 +720,7 b' class fixupstate:'
720 720 continue
721 721 seenfctxs.update(fctxs[1:])
722 722 self.fctxmap[path] = ctx2fctx
723 fstate = filefixupstate(fctxs, path, ui=self.ui, opts=self.opts)
723 fstate = filefixupstate(fctxs, path, ui=self.ui, **self.opts)
724 724 if fm is not None:
725 725 fm.startitem()
726 726 fm.plain(b'showing changes for ')
@@ -873,7 +873,7 b' class fixupstate:'
873 873 # be slow. in absorb's case, no need to invalidate fsmonitorstate.
874 874 noop = lambda: 0
875 875 restore = noop
876 if util.safehasattr(dirstate, '_fsmonitorstate'):
876 if hasattr(dirstate, '_fsmonitorstate'):
877 877 bak = dirstate._fsmonitorstate.invalidate
878 878
879 879 def restore():
@@ -1009,7 +1009,7 b' def overlaydiffcontext(ctx, chunks):'
1009 1009 return overlaycontext(memworkingcopy, ctx)
1010 1010
1011 1011
1012 def absorb(ui, repo, stack=None, targetctx=None, pats=None, opts=None):
1012 def absorb(ui, repo, stack=None, targetctx=None, pats=None, **opts):
1013 1013 """pick fixup chunks from targetctx, apply them to stack.
1014 1014
1015 1015 if targetctx is None, the working copy context will be used.
@@ -1036,22 +1036,21 b' def absorb(ui, repo, stack=None, targetc'
1036 1036 targetctx = repo[None]
1037 1037 if pats is None:
1038 1038 pats = ()
1039 if opts is None:
1040 opts = {}
1041 state = fixupstate(stack, ui=ui, opts=opts)
1042 matcher = scmutil.match(targetctx, pats, opts)
1043 if opts.get(b'interactive'):
1039
1040 state = fixupstate(stack, ui=ui, **opts)
1041 matcher = scmutil.match(targetctx, pats, pycompat.byteskwargs(opts))
1042 if opts.get('interactive'):
1044 1043 diff = patch.diff(repo, stack[-1].node(), targetctx.node(), matcher)
1045 1044 origchunks = patch.parsepatch(diff)
1046 1045 chunks = cmdutil.recordfilter(ui, origchunks, matcher)[0]
1047 1046 targetctx = overlaydiffcontext(stack[-1], chunks)
1048 if opts.get(b'edit_lines'):
1047 if opts.get('edit_lines'):
1049 1048 # If we're going to open the editor, don't ask the user to confirm
1050 1049 # first
1051 opts[b'apply_changes'] = True
1050 opts['apply_changes'] = True
1052 1051 fm = None
1053 if opts.get(b'print_changes') or not opts.get(b'apply_changes'):
1054 fm = ui.formatter(b'absorb', opts)
1052 if opts.get('print_changes') or not opts.get('apply_changes'):
1053 fm = ui.formatter(b'absorb', pycompat.byteskwargs(opts))
1055 1054 state.diffwith(targetctx, matcher, fm)
1056 1055 if fm is not None:
1057 1056 fm.startitem()
@@ -1074,9 +1073,9 b' def absorb(ui, repo, stack=None, targetc'
1074 1073 label=b'absorb.description',
1075 1074 )
1076 1075 fm.end()
1077 if not opts.get(b'dry_run'):
1076 if not opts.get('dry_run'):
1078 1077 if (
1079 not opts.get(b'apply_changes')
1078 not opts.get('apply_changes')
1080 1079 and state.ctxaffected
1081 1080 and ui.promptchoice(
1082 1081 b"apply changes (y/N)? $$ &Yes $$ &No", default=1
@@ -1154,12 +1153,10 b' def absorbcmd(ui, repo, *pats, **opts):'
1154 1153
1155 1154 Returns 0 on success, 1 if all chunks were ignored and nothing amended.
1156 1155 """
1157 opts = pycompat.byteskwargs(opts)
1158
1159 1156 with repo.wlock(), repo.lock():
1160 if not opts[b'dry_run']:
1157 if not opts['dry_run']:
1161 1158 cmdutil.checkunfinished(repo)
1162 1159
1163 state = absorb(ui, repo, pats=pats, opts=opts)
1160 state = absorb(ui, repo, pats=pats, **opts)
1164 1161 if sum(s[0] for s in state.chunkstats.values()) == 0:
1165 1162 return 1
@@ -56,9 +56,8 b' def extsetup(ui):'
56 56
57 57 def mvcheck(orig, ui, repo, *pats, **opts):
58 58 """Hook to check for moves at commit time"""
59 opts = pycompat.byteskwargs(opts)
60 59 renames = None
61 disabled = opts.pop(b'no_automv', False)
60 disabled = opts.pop('no_automv', False)
62 61 with repo.wlock():
63 62 if not disabled:
64 63 threshold = ui.configint(b'automv', b'similarity')
@@ -67,7 +66,9 b' def mvcheck(orig, ui, repo, *pats, **opt'
67 66 _(b'automv.similarity must be between 0 and 100')
68 67 )
69 68 if threshold > 0:
70 match = scmutil.match(repo[None], pats, opts)
69 match = scmutil.match(
70 repo[None], pats, pycompat.byteskwargs(opts)
71 )
71 72 added, removed = _interestingfiles(repo, match)
72 73 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
73 74 renames = _findrenames(
@@ -82,7 +83,7 b' def mvcheck(orig, ui, repo, *pats, **opt'
82 83 # current extension structure, and this is not worse than what
83 84 # happened before.
84 85 scmutil._markchanges(repo, (), (), renames)
85 return orig(ui, repo, *pats, **pycompat.strkwargs(opts))
86 return orig(ui, repo, *pats, **opts)
86 87
87 88
88 89 def _interestingfiles(repo, matcher):
@@ -103,5 +103,5 b' def extsetup(ui):'
103 103 )
104 104 return
105 105
106 extensions.wrapfunction(graphmod, b'outputgraph', outputprettygraph)
107 extensions.wrapfunction(templatekw, b'getgraphnode', getprettygraphnode)
106 extensions.wrapfunction(graphmod, 'outputgraph', outputprettygraph)
107 extensions.wrapfunction(templatekw, 'getgraphnode', getprettygraphnode)
@@ -67,48 +67,6 b" testedwith = b'ships-with-hg-core'"
67 67 cmdtable = {}
68 68 command = registrar.command(cmdtable)
69 69
70 configtable = {}
71 configitem = registrar.configitem(configtable)
72
73 configitem(
74 b'blackbox',
75 b'dirty',
76 default=False,
77 )
78 configitem(
79 b'blackbox',
80 b'maxsize',
81 default=b'1 MB',
82 )
83 configitem(
84 b'blackbox',
85 b'logsource',
86 default=False,
87 )
88 configitem(
89 b'blackbox',
90 b'maxfiles',
91 default=7,
92 )
93 configitem(
94 b'blackbox',
95 b'track',
96 default=lambda: [b'*'],
97 )
98 # Debug config option that also display the blackbox output on stderr
99 # (in addition to writing it to disk)
100 configitem(
101 b'blackbox',
102 b'debug.to-stderr',
103 default=False,
104 )
105 configitem(
106 b'blackbox',
107 b'ignore',
108 default=lambda: [b'chgserver', b'cmdserver', b'extension'],
109 )
110 configitem(b'blackbox', b'date-format', default=b'')
111
112 70 _lastlogger = loggingutil.proxylogger()
113 71
114 72
@@ -117,8 +117,8 b' def cwd_at_bookmark(repo, mark):'
117 117
118 118
119 119 def uisetup(ui):
120 extensions.wrapfunction(bookmarks, b'update', bookmarks_update)
121 extensions.wrapfunction(bookmarks, b'addbookmarks', bookmarks_addbookmarks)
120 extensions.wrapfunction(bookmarks, 'update', bookmarks_update)
121 extensions.wrapfunction(bookmarks, 'addbookmarks', bookmarks_addbookmarks)
122 122 extensions.wrapcommand(commands.table, b'commit', commands_commit)
123 123 extensions.wrapcommand(commands.table, b'pull', commands_pull)
124 124 if not ui.configbool(MY_NAME, b'enable-branches'):
@@ -766,13 +766,13 b' class cookietransportrequest:'
766 766 # inheritance with a new-style class.
767 767 class cookietransport(cookietransportrequest, xmlrpclib.Transport):
768 768 def __init__(self, use_datetime=0):
769 if util.safehasattr(xmlrpclib.Transport, "__init__"):
769 if hasattr(xmlrpclib.Transport, "__init__"):
770 770 xmlrpclib.Transport.__init__(self, use_datetime)
771 771
772 772
773 773 class cookiesafetransport(cookietransportrequest, xmlrpclib.SafeTransport):
774 774 def __init__(self, use_datetime=0):
775 if util.safehasattr(xmlrpclib.Transport, "__init__"):
775 if hasattr(xmlrpclib.Transport, "__init__"):
776 776 xmlrpclib.SafeTransport.__init__(self, use_datetime)
777 777
778 778
@@ -67,8 +67,7 b' def children(ui, repo, file_=None, **opt'
67 67 See :hg:`help log` and :hg:`help revsets.children`.
68 68
69 69 """
70 opts = pycompat.byteskwargs(opts)
71 rev = opts.get(b'rev')
70 rev = opts.get('rev')
72 71 ctx = logcmdutil.revsingle(repo, rev)
73 72 if file_:
74 73 fctx = repo.filectx(file_, changeid=ctx.rev())
@@ -76,7 +75,9 b' def children(ui, repo, file_=None, **opt'
76 75 else:
77 76 childctxs = ctx.children()
78 77
79 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
78 displayer = logcmdutil.changesetdisplayer(
79 ui, repo, pycompat.byteskwargs(opts)
80 )
80 81 for cctx in childctxs:
81 82 displayer.show(cctx)
82 83 displayer.close()
@@ -52,18 +52,17 b' def changedlines(ui, repo, ctx1, ctx2, f'
52 52
53 53 def countrate(ui, repo, amap, *pats, **opts):
54 54 """Calculate stats"""
55 opts = pycompat.byteskwargs(opts)
56 if opts.get(b'dateformat'):
55 if opts.get('dateformat'):
57 56
58 57 def getkey(ctx):
59 58 t, tz = ctx.date()
60 59 date = datetime.datetime(*time.gmtime(float(t) - tz)[:6])
61 60 return encoding.strtolocal(
62 date.strftime(encoding.strfromlocal(opts[b'dateformat']))
61 date.strftime(encoding.strfromlocal(opts['dateformat']))
63 62 )
64 63
65 64 else:
66 tmpl = opts.get(b'oldtemplate') or opts.get(b'template')
65 tmpl = opts.get('oldtemplate') or opts.get('template')
67 66 tmpl = logcmdutil.maketemplater(ui, repo, tmpl)
68 67
69 68 def getkey(ctx):
@@ -80,7 +79,7 b' def countrate(ui, repo, amap, *pats, **o'
80 79 rev = ctx.rev()
81 80 key = getkey(ctx).strip()
82 81 key = amap.get(key, key) # alias remap
83 if opts.get(b'changesets'):
82 if opts.get('changesets'):
84 83 rate[key] = (rate.get(key, (0,))[0] + 1, 0)
85 84 else:
86 85 parents = ctx.parents()
@@ -96,11 +95,11 b' def countrate(ui, repo, amap, *pats, **o'
96 95
97 96 wopts = logcmdutil.walkopts(
98 97 pats=pats,
99 opts=opts,
100 revspec=opts[b'rev'],
101 date=opts[b'date'],
102 include_pats=opts[b'include'],
103 exclude_pats=opts[b'exclude'],
98 opts=pycompat.byteskwargs(opts),
99 revspec=opts['rev'],
100 date=opts['date'],
101 include_pats=opts['include'],
102 exclude_pats=opts['exclude'],
104 103 )
105 104 revs, makefilematcher = logcmdutil.makewalker(repo, wopts)
106 105 for ctx in scmutil.walkchangerevs(repo, revs, makefilematcher, prep):
@@ -349,7 +349,7 b' def capabilities(orig, repo, proto):'
349 349
350 350
351 351 def extsetup(ui):
352 extensions.wrapfunction(wireprotov1server, b'_capabilities', capabilities)
352 extensions.wrapfunction(wireprotov1server, '_capabilities', capabilities)
353 353
354 354
355 355 # logic for bundle auto-generation
@@ -987,7 +987,7 b' def reposetup(ui, repo):'
987 987 @localrepo.unfilteredmethod
988 988 def clonebundles_lock(self, wait=True):
989 989 '''Lock the repository file related to clone bundles'''
990 if not util.safehasattr(self, '_cb_lock_ref'):
990 if not hasattr(self, '_cb_lock_ref'):
991 991 self._cb_lock_ref = None
992 992 l = self._currentlock(self._cb_lock_ref)
993 993 if l is not None:
@@ -54,19 +54,16 b' def close_branch(ui, repo, *revs, **opts'
54 54 text=message,
55 55 files=[],
56 56 filectxfn=None,
57 user=opts.get(b'user'),
58 date=opts.get(b'date'),
57 user=opts.get('user'),
58 date=opts.get('date'),
59 59 extra=extra,
60 60 )
61 tr = repo.transaction(b'commit')
62 ret = repo.commitctx(cctx, True)
63 bookmarks.update(repo, [rev, None], ret)
64 cctx.markcommitted(ret)
65 tr.close()
61 with repo.transaction(b'commit'):
62 ret = repo.commitctx(cctx, True)
63 bookmarks.update(repo, [rev, None], ret)
64 cctx.markcommitted(ret)
66 65
67 opts = pycompat.byteskwargs(opts)
68
69 revs += tuple(opts.get(b'rev', []))
66 revs += tuple(opts.get('rev', []))
70 67 revs = logcmdutil.revrange(repo, revs)
71 68
72 69 if not revs:
@@ -80,7 +77,7 b' def close_branch(ui, repo, *revs, **opts'
80 77 if rev not in heads:
81 78 raise error.Abort(_(b'revision is not an open head: %d') % rev)
82 79
83 message = cmdutil.logmessage(ui, opts)
80 message = cmdutil.logmessage(ui, pycompat.byteskwargs(opts))
84 81 if not message:
85 82 raise error.Abort(_(b"no commit message specified with -l or -m"))
86 83 extra = {b'close': b'1'}
@@ -16,7 +16,6 b' from mercurial import ('
16 16 error,
17 17 extensions,
18 18 registrar,
19 util,
20 19 )
21 20
22 21 cmdtable = {}
@@ -52,7 +51,7 b' def extsetup(ui):'
52 51
53 52
54 53 def _commit(orig, ui, repo, *pats, **opts):
55 if util.safehasattr(repo, 'unfiltered'):
54 if hasattr(repo, 'unfiltered'):
56 55 repo = repo.unfiltered()
57 56
58 57 class repoextra(repo.__class__):
@@ -435,7 +435,13 b' class converter:'
435 435 """Sort revisions by date."""
436 436
437 437 def getdate(n):
438 return dateutil.parsedate(self.commitcache[n].date)
438 commit = self.commitcache[n]
439 # The other entries are here as tie breaker for stability
440 return (
441 dateutil.parsedate(commit.date),
442 commit.rev,
443 commit.branch,
444 )
439 445
440 446 return keysorter(getdate)
441 447
@@ -12,7 +12,6 b' import socket'
12 12
13 13 from mercurial.i18n import _
14 14 from mercurial.pycompat import (
15 getattr,
16 15 open,
17 16 )
18 17 from mercurial import (
@@ -198,9 +198,9 b' def createlog(ui, directory=None, root=b'
198 198 oldlog = pickle.load(open(cachefile, b'rb'))
199 199 for e in oldlog:
200 200 if not (
201 util.safehasattr(e, b'branchpoints')
202 and util.safehasattr(e, b'commitid')
203 and util.safehasattr(e, b'mergepoint')
201 hasattr(e, b'branchpoints')
202 and hasattr(e, b'commitid')
203 and hasattr(e, b'mergepoint')
204 204 ):
205 205 ui.status(_(b'ignoring old cache\n'))
206 206 oldlog = []
@@ -298,8 +298,9 b' class mercurial_sink(common.converter_si'
298 298 parents = pl
299 299 nparents = len(parents)
300 300 if self.filemapmode and nparents == 1:
301 m1node = self.repo.changelog.read(bin(parents[0]))[0]
302 301 parent = parents[0]
302 p1_node = bin(parent)
303 m1node = self.repo.changelog.changelogrevision(p1_node).manifest
303 304
304 305 if len(parents) < 2:
305 306 parents.append(self.repo.nullid)
@@ -27,9 +27,6 b' import svn.ra'
27 27 Pool = svn.core.Pool
28 28 SubversionException = svn.core.SubversionException
29 29
30 from mercurial.pycompat import getattr
31 from mercurial import util
32
33 30 # Some older versions of the Python bindings need to be
34 31 # explicitly initialized. But what we want to do probably
35 32 # won't work worth a darn against those libraries anyway!
@@ -63,7 +60,7 b' def _create_auth_baton(pool):'
63 60 if p:
64 61 providers.append(p)
65 62 else:
66 if util.safehasattr(svn.client, b'get_windows_simple_provider'):
63 if hasattr(svn.client, 'get_windows_simple_provider'):
67 64 providers.append(svn.client.get_windows_simple_provider(pool))
68 65
69 66 return svn.core.svn_auth_open(providers, pool)
@@ -85,7 +82,7 b' class SvnRaTransport:'
85 82 self.password = b''
86 83
87 84 # Only Subversion 1.4 has reparent()
88 if ra is None or not util.safehasattr(svn.ra, b'reparent'):
85 if ra is None or not hasattr(svn.ra, 'reparent'):
89 86 self.client = svn.client.create_context(self.pool)
90 87 ab = _create_auth_baton(self.pool)
91 88 self.client.auth_baton = ab
@@ -48,7 +48,6 b' service entry controls the service name '
48 48
49 49 import os
50 50 from mercurial.i18n import _
51 from mercurial.pycompat import setattr
52 51 from mercurial.utils import procutil
53 52 from mercurial import (
54 53 error,
@@ -19,7 +19,6 b' from mercurial import ('
19 19 pycompat,
20 20 registrar,
21 21 scmutil,
22 util,
23 22 )
24 23
25 24 from . import (
@@ -218,7 +217,7 b' def fastannotate(ui, repo, *pats, **opts'
218 217 paths = list(_matchpaths(repo, rev, pats, opts, aopts))
219 218
220 219 # for client, prefetch from the server
221 if util.safehasattr(repo, 'prefetchfastannotate'):
220 if hasattr(repo, 'prefetchfastannotate'):
222 221 repo.prefetchfastannotate(paths)
223 222
224 223 for path in paths:
@@ -273,7 +272,7 b' def _annotatewrapper(orig, ui, repo, *pa'
273 272
274 273 # check if we need to do prefetch (client-side)
275 274 rev = opts.get('rev')
276 if util.safehasattr(repo, 'prefetchfastannotate') and rev is not None:
275 if hasattr(repo, 'prefetchfastannotate') and rev is not None:
277 276 paths = list(_matchpaths(repo, rev, pats, pycompat.byteskwargs(opts)))
278 277 repo.prefetchfastannotate(paths)
279 278
@@ -320,7 +319,7 b' def debugbuildannotatecache(ui, repo, *p'
320 319 ctx = logcmdutil.revsingle(repo, rev)
321 320 m = scmutil.match(ctx, pats, opts)
322 321 paths = list(ctx.walk(m))
323 if util.safehasattr(repo, 'prefetchfastannotate'):
322 if hasattr(repo, 'prefetchfastannotate'):
324 323 # client
325 324 if opts.get(b'REV'):
326 325 raise error.Abort(_(b'--rev cannot be used for client'))
@@ -12,9 +12,7 b' import os'
12 12
13 13 from mercurial.i18n import _
14 14 from mercurial.pycompat import (
15 getattr,
16 15 open,
17 setattr,
18 16 )
19 17 from mercurial.node import (
20 18 bin,
@@ -151,7 +149,10 b' def encodedir(path):'
151 149
152 150 def hashdiffopts(diffopts):
153 151 diffoptstr = stringutil.pprint(
154 sorted((k, getattr(diffopts, k)) for k in mdiff.diffopts.defaults)
152 sorted(
153 (k, getattr(diffopts, pycompat.sysstr(k)))
154 for k in mdiff.diffopts.defaults
155 )
155 156 )
156 157 return hex(hashutil.sha1(diffoptstr).digest())[:6]
157 158
@@ -167,13 +168,12 b' class annotateopts:'
167 168 """
168 169
169 170 defaults = {
170 b'diffopts': None,
171 b'followrename': True,
172 b'followmerge': True,
171 'diffopts': None,
172 'followrename': True,
173 'followmerge': True,
173 174 }
174 175
175 176 def __init__(self, **opts):
176 opts = pycompat.byteskwargs(opts)
177 177 for k, v in self.defaults.items():
178 178 setattr(self, k, opts.get(k, v))
179 179
@@ -322,7 +322,7 b' class _annotatecontext:'
322 322 b'(resolved fctx: %s)\n'
323 323 % (
324 324 self.path,
325 stringutil.pprint(util.safehasattr(revfctx, b'node')),
325 stringutil.pprint(hasattr(revfctx, 'node')),
326 326 )
327 327 )
328 328 return self.annotatedirectly(revfctx, showpath, showlines)
@@ -101,7 +101,7 b' def _registerwireprotocommand():'
101 101
102 102 def serveruisetup(ui):
103 103 _registerwireprotocommand()
104 extensions.wrapfunction(wireprotov1server, b'_capabilities', _capabilities)
104 extensions.wrapfunction(wireprotov1server, '_capabilities', _capabilities)
105 105
106 106
107 107 # client-side
@@ -6,7 +6,6 b''
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8
9 from mercurial.pycompat import getattr
10 9 from mercurial import (
11 10 context as hgcontext,
12 11 dagop,
@@ -129,8 +128,8 b' def _remotefctxannotate(orig, self, foll'
129 128
130 129
131 130 def replacehgwebannotate():
132 extensions.wrapfunction(hgweb.webutil, b'annotate', _hgwebannotate)
131 extensions.wrapfunction(hgweb.webutil, 'annotate', _hgwebannotate)
133 132
134 133
135 134 def replacefctxannotate():
136 extensions.wrapfunction(hgcontext.basefilectx, b'annotate', _fctxannotate)
135 extensions.wrapfunction(hgcontext.basefilectx, 'annotate', _fctxannotate)
@@ -15,7 +15,6 b' from mercurial.utils import stringutil'
15 15 from mercurial import (
16 16 error,
17 17 logcmdutil,
18 pycompat,
19 18 registrar,
20 19 scmutil,
21 20 )
@@ -46,9 +45,9 b' def convert_to_git_user(authormap, user,'
46 45 % rev
47 46 )
48 47 if user_person:
49 return b'"' + user_person + b'" <' + user_email + b'>'
48 return b'"%s" <%s>' % (user_person, user_email)
50 49 else:
51 return b"<" + user_email + b">"
50 return b"<%s>" % user_email
52 51
53 52
54 53 def convert_to_git_date(date):
@@ -176,22 +175,20 b' def fastexport(ui, repo, *revs, **opts):'
176 175 It can be piped into corresponding import routines like "git fast-import".
177 176 Incremental dumps can be created by using marks files.
178 177 """
179 opts = pycompat.byteskwargs(opts)
180
181 revs += tuple(opts.get(b"rev", []))
178 revs += tuple(opts.get("rev", []))
182 179 if not revs:
183 180 revs = scmutil.revrange(repo, [b":"])
184 181 else:
185 182 revs = logcmdutil.revrange(repo, revs)
186 183 if not revs:
187 184 raise error.Abort(_(b"no revisions matched"))
188 authorfile = opts.get(b"authormap")
185 authorfile = opts.get("authormap")
189 186 if authorfile:
190 187 authormap = convcmd.readauthormap(ui, authorfile)
191 188 else:
192 189 authormap = {}
193 190
194 import_marks = opts.get(b"import_marks")
191 import_marks = opts.get("import_marks")
195 192 marks = {}
196 193 if import_marks:
197 194 with open(import_marks, "rb") as import_marks_file:
@@ -209,7 +206,7 b' def fastexport(ui, repo, *revs, **opts):'
209 206 export_commit(ui, repo, rev, marks, authormap)
210 207 progress.increment()
211 208
212 export_marks = opts.get(b"export_marks")
209 export_marks = opts.get("export_marks")
213 210 if export_marks:
214 211 with open(export_marks, "wb") as export_marks_file:
215 212 output_marks = [None] * len(marks)
@@ -74,10 +74,9 b" def fetch(ui, repo, source=b'default', *"
74 74 Returns 0 on success.
75 75 """
76 76
77 opts = pycompat.byteskwargs(opts)
78 date = opts.get(b'date')
77 date = opts.get('date')
79 78 if date:
80 opts[b'date'] = dateutil.parsedate(date)
79 opts['date'] = dateutil.parsedate(date)
81 80
82 81 parent = repo.dirstate.p1()
83 82 branch = repo.dirstate.branch()
@@ -109,12 +108,12 b" def fetch(ui, repo, source=b'default', *"
109 108 )
110 109
111 110 path = urlutil.get_unique_pull_path_obj(b'fetch', ui, source)
112 other = hg.peer(repo, opts, path)
111 other = hg.peer(repo, pycompat.byteskwargs(opts), path)
113 112 ui.status(_(b'pulling from %s\n') % urlutil.hidepassword(path.loc))
114 113 revs = None
115 if opts[b'rev']:
114 if opts['rev']:
116 115 try:
117 revs = [other.lookup(rev) for rev in opts[b'rev']]
116 revs = [other.lookup(rev) for rev in opts['rev']]
118 117 except error.CapabilityError:
119 118 err = _(
120 119 b"other repository doesn't support revision lookup, "
@@ -162,7 +161,7 b" def fetch(ui, repo, source=b'default', *"
162 161 # By default, we consider the repository we're pulling
163 162 # *from* as authoritative, so we merge our changes into
164 163 # theirs.
165 if opts[b'switch_parent']:
164 if opts['switch_parent']:
166 165 firstparent, secondparent = newparent, newheads[0]
167 166 else:
168 167 firstparent, secondparent = newheads[0], newparent
@@ -179,14 +178,12 b" def fetch(ui, repo, source=b'default', *"
179 178
180 179 if not err:
181 180 # we don't translate commit messages
182 message = cmdutil.logmessage(ui, opts) or (
181 message = cmdutil.logmessage(ui, pycompat.byteskwargs(opts)) or (
183 182 b'Automated merge with %s' % urlutil.removeauth(other.url())
184 183 )
185 editopt = opts.get(b'edit') or opts.get(b'force_editor')
184 editopt = opts.get('edit') or opts.get('force_editor')
186 185 editor = cmdutil.getcommiteditor(edit=editopt, editform=b'fetch')
187 n = repo.commit(
188 message, opts[b'user'], opts[b'date'], editor=editor
189 )
186 n = repo.commit(message, opts['user'], opts['date'], editor=editor)
190 187 ui.status(
191 188 _(b'new changeset %d:%s merges remote changes with local\n')
192 189 % (repo.changelog.rev(n), short(n))
@@ -332,7 +332,7 b' def overridewalk(orig, self, match, subr'
332 332 matchfn = match.matchfn
333 333 matchalways = match.always()
334 334 dmap = self._map
335 if util.safehasattr(dmap, b'_map'):
335 if hasattr(dmap, b'_map'):
336 336 # for better performance, directly access the inner dirstate map if the
337 337 # standard dirstate implementation is in use.
338 338 dmap = dmap._map
@@ -744,7 +744,7 b' def makedirstate(repo, dirstate):'
744 744 def wrapdirstate(orig, self):
745 745 ds = orig(self)
746 746 # only override the dirstate when Watchman is available for the repo
747 if util.safehasattr(self, b'_fsmonitorstate'):
747 if hasattr(self, b'_fsmonitorstate'):
748 748 makedirstate(self, ds)
749 749 return ds
750 750
@@ -755,9 +755,9 b' def extsetup(ui):'
755 755 )
756 756 if pycompat.isdarwin:
757 757 # An assist for avoiding the dangling-symlink fsevents bug
758 extensions.wrapfunction(os, b'symlink', wrapsymlink)
758 extensions.wrapfunction(os, 'symlink', wrapsymlink)
759 759
760 extensions.wrapfunction(merge, b'_update', wrapupdate)
760 extensions.wrapfunction(merge, '_update', wrapupdate)
761 761
762 762
763 763 def wrapsymlink(orig, source, link_name):
@@ -811,7 +811,7 b' class state_update:'
811 811 self.oldnode = self.repo[b'.'].node()
812 812
813 813 if self.repo.currentwlock() is None:
814 if util.safehasattr(self.repo, b'wlocknostateupdate'):
814 if hasattr(self.repo, b'wlocknostateupdate'):
815 815 self._lock = self.repo.wlocknostateupdate()
816 816 else:
817 817 self._lock = self.repo.wlock()
@@ -839,7 +839,7 b' class state_update:'
839 839 self._lock.release()
840 840
841 841 def _state(self, cmd, commithash, status=b'ok'):
842 if not util.safehasattr(self.repo, b'_watchmanclient'):
842 if not hasattr(self.repo, b'_watchmanclient'):
843 843 return False
844 844 try:
845 845 self.repo._watchmanclient.command(
@@ -69,7 +69,7 b' class client:'
69 69
70 70 def getcurrentclock(self):
71 71 result = self.command(b'clock')
72 if not util.safehasattr(result, 'clock'):
72 if not hasattr(result, 'clock'):
73 73 raise Unavailable(
74 74 b'clock result is missing clock value', invalidate=True
75 75 )
@@ -342,8 +342,8 b' def _featuresetup(ui, supported):'
342 342
343 343
344 344 def extsetup(ui):
345 extensions.wrapfunction(localrepo, b'makestore', _makestore)
346 extensions.wrapfunction(localrepo, b'makefilestorage', _makefilestorage)
345 extensions.wrapfunction(localrepo, 'makestore', _makestore)
346 extensions.wrapfunction(localrepo, 'makefilestorage', _makefilestorage)
347 347 # Inject --git flag for `hg init`
348 348 entry = extensions.wrapcommand(commands.table, b'init', init)
349 349 entry[1].extend(
@@ -47,7 +47,7 b' def readpatternfile(orig, filepath, warn'
47 47 return result, warnings
48 48
49 49
50 extensions.wrapfunction(matchmod, b'readpatternfile', readpatternfile)
50 extensions.wrapfunction(matchmod, 'readpatternfile', readpatternfile)
51 51
52 52
53 53 _STATUS_MAP = {}
@@ -301,13 +301,13 b' def sign(ui, repo, *revs, **opts):'
301 301
302 302 def _dosign(ui, repo, *revs, **opts):
303 303 mygpg = newgpg(ui, **opts)
304 opts = pycompat.byteskwargs(opts)
304
305 305 sigver = b"0"
306 306 sigmessage = b""
307 307
308 date = opts.get(b'date')
308 date = opts.get('date')
309 309 if date:
310 opts[b'date'] = dateutil.parsedate(date)
310 opts['date'] = dateutil.parsedate(date)
311 311
312 312 if revs:
313 313 nodes = [repo.lookup(n) for n in revs]
@@ -335,42 +335,39 b' def _dosign(ui, repo, *revs, **opts):'
335 335 sigmessage += b"%s %s %s\n" % (hexnode, sigver, sig)
336 336
337 337 # write it
338 if opts[b'local']:
338 if opts['local']:
339 339 repo.vfs.append(b"localsigs", sigmessage)
340 340 return
341 341
342 342 msigs = match.exact([b'.hgsigs'])
343 343
344 if not opts[b"force"]:
344 if not opts["force"]:
345 345 if any(repo.status(match=msigs, unknown=True, ignored=True)):
346 346 raise error.Abort(
347 347 _(b"working copy of .hgsigs is changed "),
348 348 hint=_(b"please commit .hgsigs manually"),
349 349 )
350 350
351 sigsfile = repo.wvfs(b".hgsigs", b"ab")
352 sigsfile.write(sigmessage)
353 sigsfile.close()
351 with repo.wvfs(b".hgsigs", b"ab") as sigsfile:
352 sigsfile.write(sigmessage)
354 353
355 354 if b'.hgsigs' not in repo.dirstate:
356 355 with repo.dirstate.changing_files(repo):
357 356 repo[None].add([b".hgsigs"])
358 357
359 if opts[b"no_commit"]:
358 if opts["no_commit"]:
360 359 return
361 360
362 message = opts[b'message']
361 message = opts['message']
363 362 if not message:
364 363 # we don't translate commit messages
365 364 message = b"\n".join(
366 365 [b"Added signature for changeset %s" % short(n) for n in nodes]
367 366 )
368 367 try:
369 editor = cmdutil.getcommiteditor(
370 editform=b'gpg.sign', **pycompat.strkwargs(opts)
371 )
368 editor = cmdutil.getcommiteditor(editform=b'gpg.sign', **opts)
372 369 repo.commit(
373 message, opts[b'user'], opts[b'date'], match=msigs, editor=editor
370 message, opts['user'], opts['date'], match=msigs, editor=editor
374 371 )
375 372 except ValueError as inst:
376 373 raise error.Abort(pycompat.bytestr(inst))
@@ -101,8 +101,8 b' def generate_css(web):'
101 101 def extsetup(ui):
102 102 # monkeypatch in the new version
103 103 extensions.wrapfunction(
104 webcommands, b'_filerevision', filerevision_highlight
104 webcommands, '_filerevision', filerevision_highlight
105 105 )
106 extensions.wrapfunction(webcommands, b'annotate', annotate_highlight)
106 extensions.wrapfunction(webcommands, 'annotate', annotate_highlight)
107 107 webcommands.highlightcss = generate_css
108 108 webcommands.__all__.append(b'highlightcss')
@@ -207,7 +207,6 b' import struct'
207 207
208 208 from mercurial.i18n import _
209 209 from mercurial.pycompat import (
210 getattr,
211 210 open,
212 211 )
213 212 from mercurial.node import (
@@ -2652,7 +2651,7 b' def stripwrapper(orig, ui, repo, nodelis'
2652 2651 return orig(ui, repo, nodelist, *args, **kwargs)
2653 2652
2654 2653
2655 extensions.wrapfunction(repair, b'strip', stripwrapper)
2654 extensions.wrapfunction(repair, 'strip', stripwrapper)
2656 2655
2657 2656
2658 2657 def summaryhook(ui, repo):
@@ -66,13 +66,13 b' sharednamespaces = {'
66 66
67 67 # Journal recording, register hooks and storage object
68 68 def extsetup(ui):
69 extensions.wrapfunction(dispatch, b'runcommand', runcommand)
70 extensions.wrapfunction(bookmarks.bmstore, b'_write', recordbookmarks)
69 extensions.wrapfunction(dispatch, 'runcommand', runcommand)
70 extensions.wrapfunction(bookmarks.bmstore, '_write', recordbookmarks)
71 71 extensions.wrapfilecache(
72 72 localrepo.localrepository, b'dirstate', wrapdirstate
73 73 )
74 extensions.wrapfunction(hg, b'postshare', wrappostshare)
75 extensions.wrapfunction(hg, b'copystore', unsharejournal)
74 extensions.wrapfunction(hg, 'postshare', wrappostshare)
75 extensions.wrapfunction(hg, 'copystore', unsharejournal)
76 76
77 77
78 78 def reposetup(ui, repo):
@@ -103,7 +103,7 b' def _setupdirstate(repo, dirstate):'
103 103 def wrapdirstate(orig, repo):
104 104 """Make journal storage available to the dirstate object"""
105 105 dirstate = orig(repo)
106 if util.safehasattr(repo, 'journal'):
106 if hasattr(repo, 'journal'):
107 107 _setupdirstate(repo, dirstate)
108 108 return dirstate
109 109
@@ -112,7 +112,7 b' def recorddirstateparents(dirstate, old,'
112 112 """Records all dirstate parent changes in the journal."""
113 113 old = list(old)
114 114 new = list(new)
115 if util.safehasattr(dirstate, 'journalstorage'):
115 if hasattr(dirstate, 'journalstorage'):
116 116 # only record two hashes if there was a merge
117 117 oldhashes = old[:1] if old[1] == dirstate._nodeconstants.nullid else old
118 118 newhashes = new[:1] if new[1] == dirstate._nodeconstants.nullid else new
@@ -125,9 +125,12 b' def recorddirstateparents(dirstate, old,'
125 125 def recordbookmarks(orig, store, fp):
126 126 """Records all bookmark changes in the journal."""
127 127 repo = store._repo
128 if util.safehasattr(repo, 'journal'):
128 if hasattr(repo, 'journal'):
129 129 oldmarks = bookmarks.bmstore(repo)
130 for mark, value in store.items():
130 all_marks = set(b for b, n in oldmarks.items())
131 all_marks.update(b for b, n in store.items())
132 for mark in sorted(all_marks):
133 value = store.get(mark, repo.nullid)
131 134 oldvalue = oldmarks.get(mark, repo.nullid)
132 135 if value != oldvalue:
133 136 repo.journal.record(bookmarktype, mark, oldvalue, value)
@@ -182,11 +185,7 b' def wrappostshare(orig, sourcerepo, dest'
182 185
183 186 def unsharejournal(orig, ui, repo, repopath):
184 187 """Copy shared journal entries into this repo when unsharing"""
185 if (
186 repo.path == repopath
187 and repo.shared()
188 and util.safehasattr(repo, 'journal')
189 ):
188 if repo.path == repopath and repo.shared() and hasattr(repo, 'journal'):
190 189 sharedrepo = hg.sharedreposource(repo)
191 190 sharedfeatures = _readsharedfeatures(repo)
192 191 if sharedrepo and sharedfeatures > {b'journal'}:
@@ -88,7 +88,6 b' import re'
88 88 import weakref
89 89
90 90 from mercurial.i18n import _
91 from mercurial.pycompat import getattr
92 91 from mercurial.hgweb import webcommands
93 92
94 93 from mercurial import (
@@ -131,7 +130,7 b' nokwcommands = ('
131 130 )
132 131
133 132 # webcommands that do not act on keywords
134 nokwwebcommands = b'annotate changeset rev filediff diff comparison'
133 nokwwebcommands = 'annotate changeset rev filediff diff comparison'
135 134
136 135 # hg commands that trigger expansion only when writing to working dir,
137 136 # not when reading filelog, and unexpand when reading from working dir
@@ -420,11 +419,10 b' def _status(ui, repo, wctx, kwt, *pats, '
420 419 """Bails out if [keyword] configuration is not active.
421 420 Returns status of working directory."""
422 421 if kwt:
423 opts = pycompat.byteskwargs(opts)
424 422 return repo.status(
425 match=scmutil.match(wctx, pats, opts),
423 match=scmutil.match(wctx, pats, pycompat.byteskwargs(opts)),
426 424 clean=True,
427 unknown=opts.get(b'unknown') or opts.get(b'all'),
425 unknown=opts.get('unknown') or opts.get('all'),
428 426 )
429 427 if ui.configitems(b'keyword'):
430 428 raise error.Abort(_(b'[keyword] patterns cannot match'))
@@ -604,26 +602,26 b' def files(ui, repo, *pats, **opts):'
604 602 else:
605 603 cwd = b''
606 604 files = []
607 opts = pycompat.byteskwargs(opts)
608 if not opts.get(b'unknown') or opts.get(b'all'):
605
606 if not opts.get('unknown') or opts.get('all'):
609 607 files = sorted(status.modified + status.added + status.clean)
610 608 kwfiles = kwt.iskwfile(files, wctx)
611 609 kwdeleted = kwt.iskwfile(status.deleted, wctx)
612 610 kwunknown = kwt.iskwfile(status.unknown, wctx)
613 if not opts.get(b'ignore') or opts.get(b'all'):
611 if not opts.get('ignore') or opts.get('all'):
614 612 showfiles = kwfiles, kwdeleted, kwunknown
615 613 else:
616 614 showfiles = [], [], []
617 if opts.get(b'all') or opts.get(b'ignore'):
615 if opts.get('all') or opts.get('ignore'):
618 616 showfiles += (
619 617 [f for f in files if f not in kwfiles],
620 618 [f for f in status.unknown if f not in kwunknown],
621 619 )
622 620 kwlabels = b'enabled deleted enabledunknown ignored ignoredunknown'.split()
623 621 kwstates = zip(kwlabels, pycompat.bytestr(b'K!kIi'), showfiles)
624 fm = ui.formatter(b'kwfiles', opts)
622 fm = ui.formatter(b'kwfiles', pycompat.byteskwargs(opts))
625 623 fmt = b'%.0s%s\n'
626 if opts.get(b'all') or ui.verbose:
624 if opts.get('all') or ui.verbose:
627 625 fmt = b'%s %s\n'
628 626 for kwstate, char, filenames in kwstates:
629 627 label = b'kwfiles.' + kwstate
@@ -806,14 +804,14 b' def uisetup(ui):'
806 804 kwtools[b'hgcmd'] = cmd
807 805 return cmd, func, args, options, cmdoptions
808 806
809 extensions.wrapfunction(dispatch, b'_parse', kwdispatch_parse)
807 extensions.wrapfunction(dispatch, '_parse', kwdispatch_parse)
810 808
811 extensions.wrapfunction(context.filectx, b'cmp', kwfilectx_cmp)
812 extensions.wrapfunction(patch.patchfile, b'__init__', kwpatchfile_init)
813 extensions.wrapfunction(patch, b'diff', kwdiff)
814 extensions.wrapfunction(cmdutil, b'amend', kw_amend)
815 extensions.wrapfunction(cmdutil, b'copy', kw_copy)
816 extensions.wrapfunction(cmdutil, b'dorecord', kw_dorecord)
809 extensions.wrapfunction(context.filectx, 'cmp', kwfilectx_cmp)
810 extensions.wrapfunction(patch.patchfile, '__init__', kwpatchfile_init)
811 extensions.wrapfunction(patch, 'diff', kwdiff)
812 extensions.wrapfunction(cmdutil, 'amend', kw_amend)
813 extensions.wrapfunction(cmdutil, 'copy', kw_copy)
814 extensions.wrapfunction(cmdutil, 'dorecord', kw_dorecord)
817 815 for c in nokwwebcommands.split():
818 816 extensions.wrapfunction(webcommands, c, kwweb_skip)
819 817
@@ -184,7 +184,7 b' def _uisetup(ui):'
184 184 )
185 185
186 186 extensions.wrapfunction(
187 wireprotov1server.commands[b'heads'], b'func', proto.heads
187 wireprotov1server.commands[b'heads'], 'func', proto.heads
188 188 )
189 189 # TODO also wrap wireproto.commandsv2 once heads is implemented there.
190 190
@@ -193,7 +193,7 b' def _uisetup(ui):'
193 193 if name == b'rebase':
194 194 # TODO: teach exthelper to handle this
195 195 extensions.wrapfunction(
196 module, b'rebase', overrides.overriderebasecmd
196 module, 'rebase', overrides.overriderebasecmd
197 197 )
198 198
199 199
@@ -27,7 +27,6 b' from mercurial import ('
27 27 lock,
28 28 logcmdutil,
29 29 match as matchmod,
30 pycompat,
31 30 scmutil,
32 31 util,
33 32 )
@@ -87,12 +86,11 b' def lfconvert(ui, src, dest, *pats, **op'
87 86 Use --to-normal to convert largefiles back to normal files; after
88 87 this, the DEST repository can be used without largefiles at all."""
89 88
90 opts = pycompat.byteskwargs(opts)
91 if opts[b'to_normal']:
89 if opts['to_normal']:
92 90 tolfile = False
93 91 else:
94 92 tolfile = True
95 size = lfutil.getminsize(ui, True, opts.get(b'size'), default=None)
93 size = lfutil.getminsize(ui, True, opts.get('size'), default=None)
96 94
97 95 if not hg.islocal(src):
98 96 raise error.Abort(_(b'%s is not a local Mercurial repo') % src)
@@ -814,7 +814,7 b' def getstatuswriter(ui, repo, forcibly=N'
814 814 Otherwise, this returns the function to always write out (or
815 815 ignore if ``not forcibly``) status.
816 816 """
817 if forcibly is None and util.safehasattr(repo, b'_largefilesenabled'):
817 if forcibly is None and hasattr(repo, '_largefilesenabled'):
818 818 return repo._lfstatuswriters[-1]
819 819 else:
820 820 if forcibly:
@@ -243,7 +243,7 b' def removelargefiles(ui, repo, isaddremo'
243 243
244 244 # For overriding mercurial.hgweb.webcommands so that largefiles will
245 245 # appear at their right place in the manifests.
246 @eh.wrapfunction(webcommands, b'decodepath')
246 @eh.wrapfunction(webcommands, 'decodepath')
247 247 def decodepath(orig, path):
248 248 return lfutil.splitstandin(path) or path
249 249
@@ -273,7 +273,7 b' def overrideadd(orig, ui, repo, *pats, *'
273 273 return orig(ui, repo, *pats, **opts)
274 274
275 275
276 @eh.wrapfunction(cmdutil, b'add')
276 @eh.wrapfunction(cmdutil, 'add')
277 277 def cmdutiladd(orig, ui, repo, matcher, prefix, uipathfn, explicitonly, **opts):
278 278 # The --normal flag short circuits this override
279 279 if opts.get('normal'):
@@ -289,7 +289,7 b' def cmdutiladd(orig, ui, repo, matcher, '
289 289 return bad
290 290
291 291
292 @eh.wrapfunction(cmdutil, b'remove')
292 @eh.wrapfunction(cmdutil, 'remove')
293 293 def cmdutilremove(
294 294 orig, ui, repo, matcher, prefix, uipathfn, after, force, subrepos, dryrun
295 295 ):
@@ -313,7 +313,7 b' def cmdutilremove('
313 313 )
314 314
315 315
316 @eh.wrapfunction(dirstate.dirstate, b'_changing')
316 @eh.wrapfunction(dirstate.dirstate, '_changing')
317 317 @contextlib.contextmanager
318 318 def _changing(orig, self, repo, change_type):
319 319 pre = sub_dirstate = getattr(self, '_sub_dirstate', None)
@@ -334,7 +334,7 b' def _changing(orig, self, repo, change_t'
334 334 self._sub_dirstate = pre
335 335
336 336
337 @eh.wrapfunction(dirstate.dirstate, b'running_status')
337 @eh.wrapfunction(dirstate.dirstate, 'running_status')
338 338 @contextlib.contextmanager
339 339 def running_status(orig, self, repo):
340 340 pre = sub_dirstate = getattr(self, '_sub_dirstate', None)
@@ -355,7 +355,7 b' def running_status(orig, self, repo):'
355 355 self._sub_dirstate = pre
356 356
357 357
358 @eh.wrapfunction(subrepo.hgsubrepo, b'status')
358 @eh.wrapfunction(subrepo.hgsubrepo, 'status')
359 359 def overridestatusfn(orig, repo, rev2, **opts):
360 360 with lfstatus(repo._repo):
361 361 return orig(repo, rev2, **opts)
@@ -367,7 +367,7 b' def overridestatus(orig, ui, repo, *pats'
367 367 return orig(ui, repo, *pats, **opts)
368 368
369 369
370 @eh.wrapfunction(subrepo.hgsubrepo, b'dirty')
370 @eh.wrapfunction(subrepo.hgsubrepo, 'dirty')
371 371 def overridedirty(orig, repo, ignoreupdate=False, missing=False):
372 372 with lfstatus(repo._repo):
373 373 return orig(repo, ignoreupdate=ignoreupdate, missing=missing)
@@ -485,10 +485,10 b' def overridelog(orig, ui, repo, *pats, *'
485 485 return lambda ctx: match
486 486
487 487 wrappedmatchandpats = extensions.wrappedfunction(
488 scmutil, b'matchandpats', overridematchandpats
488 scmutil, 'matchandpats', overridematchandpats
489 489 )
490 490 wrappedmakefilematcher = extensions.wrappedfunction(
491 logcmdutil, b'_makenofollowfilematcher', overridemakefilematcher
491 logcmdutil, '_makenofollowfilematcher', overridemakefilematcher
492 492 )
493 493 with wrappedmatchandpats, wrappedmakefilematcher:
494 494 return orig(ui, repo, *pats, **opts)
@@ -554,7 +554,7 b' def overridedebugstate(orig, ui, repo, *'
554 554 # The overridden function filters the unknown files by removing any
555 555 # largefiles. This makes the merge proceed and we can then handle this
556 556 # case further in the overridden calculateupdates function below.
557 @eh.wrapfunction(merge, b'_checkunknownfile')
557 @eh.wrapfunction(merge, '_checkunknownfile')
558 558 def overridecheckunknownfile(
559 559 origfn, dirstate, wvfs, dircache, wctx, mctx, f, f2=None
560 560 ):
@@ -589,7 +589,7 b' def overridecheckunknownfile('
589 589 # Finally, the merge.applyupdates function will then take care of
590 590 # writing the files into the working copy and lfcommands.updatelfiles
591 591 # will update the largefiles.
592 @eh.wrapfunction(merge, b'calculateupdates')
592 @eh.wrapfunction(merge, 'calculateupdates')
593 593 def overridecalculateupdates(
594 594 origfn, repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs
595 595 ):
@@ -700,7 +700,7 b' def overridecalculateupdates('
700 700 return mresult
701 701
702 702
703 @eh.wrapfunction(mergestatemod, b'recordupdates')
703 @eh.wrapfunction(mergestatemod, 'recordupdates')
704 704 def mergerecordupdates(orig, repo, actions, branchmerge, getfiledata):
705 705 if MERGE_ACTION_LARGEFILE_MARK_REMOVED in actions:
706 706 lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
@@ -716,7 +716,7 b' def mergerecordupdates(orig, repo, actio'
716 716
717 717 # Override filemerge to prompt the user about how they wish to merge
718 718 # largefiles. This will handle identical edits without prompting the user.
719 @eh.wrapfunction(filemerge, b'filemerge')
719 @eh.wrapfunction(filemerge, 'filemerge')
720 720 def overridefilemerge(
721 721 origfn, repo, wctx, mynode, orig, fcd, fco, fca, labels=None
722 722 ):
@@ -748,7 +748,7 b' def overridefilemerge('
748 748 return 0, False
749 749
750 750
751 @eh.wrapfunction(copiesmod, b'pathcopies')
751 @eh.wrapfunction(copiesmod, 'pathcopies')
752 752 def copiespathcopies(orig, ctx1, ctx2, match=None):
753 753 copies = orig(ctx1, ctx2, match=match)
754 754 updated = {}
@@ -764,7 +764,7 b' def copiespathcopies(orig, ctx1, ctx2, m'
764 764 # checks if the destination largefile already exists. It also keeps a
765 765 # list of copied files so that the largefiles can be copied and the
766 766 # dirstate updated.
767 @eh.wrapfunction(cmdutil, b'copy')
767 @eh.wrapfunction(cmdutil, 'copy')
768 768 def overridecopy(orig, ui, repo, pats, opts, rename=False):
769 769 # doesn't remove largefile on rename
770 770 if len(pats) < 2:
@@ -793,7 +793,7 b' def overridecopy(orig, ui, repo, pats, o'
793 793 match = orig(ctx, pats, opts, globbed, default, badfn=badfn)
794 794 return composenormalfilematcher(match, manifest)
795 795
796 with extensions.wrappedfunction(scmutil, b'match', normalfilesmatchfn):
796 with extensions.wrappedfunction(scmutil, 'match', normalfilesmatchfn):
797 797 try:
798 798 result = orig(ui, repo, pats, opts, rename)
799 799 except error.Abort as e:
@@ -887,8 +887,8 b' def overridecopy(orig, ui, repo, pats, o'
887 887 copiedfiles.append((src, dest))
888 888 orig(src, dest, *args, **kwargs)
889 889
890 with extensions.wrappedfunction(util, b'copyfile', overridecopyfile):
891 with extensions.wrappedfunction(scmutil, b'match', overridematch):
890 with extensions.wrappedfunction(util, 'copyfile', overridecopyfile):
891 with extensions.wrappedfunction(scmutil, 'match', overridematch):
892 892 result += orig(ui, repo, listpats, opts, rename)
893 893
894 894 lfdirstate = lfutil.openlfdirstate(ui, repo)
@@ -936,7 +936,7 b' def overridecopy(orig, ui, repo, pats, o'
936 936 # commits. Update the standins then run the original revert, changing
937 937 # the matcher to hit standins instead of largefiles. Based on the
938 938 # resulting standins update the largefiles.
939 @eh.wrapfunction(cmdutil, b'revert')
939 @eh.wrapfunction(cmdutil, 'revert')
940 940 def overriderevert(orig, ui, repo, ctx, *pats, **opts):
941 941 # Because we put the standins in a bad state (by updating them)
942 942 # and then return them to a correct state we need to lock to
@@ -999,7 +999,7 b' def overriderevert(orig, ui, repo, ctx, '
999 999 m.matchfn = matchfn
1000 1000 return m
1001 1001
1002 with extensions.wrappedfunction(scmutil, b'match', overridematch):
1002 with extensions.wrappedfunction(scmutil, 'match', overridematch):
1003 1003 orig(ui, repo, ctx, *pats, **opts)
1004 1004
1005 1005 newstandins = lfutil.getstandinsstate(repo)
@@ -1079,7 +1079,7 b' def overridepush(orig, ui, repo, *args, '
1079 1079 return orig(ui, repo, *args, **kwargs)
1080 1080
1081 1081
1082 @eh.wrapfunction(exchange, b'pushoperation')
1082 @eh.wrapfunction(exchange, 'pushoperation')
1083 1083 def exchangepushoperation(orig, *args, **kwargs):
1084 1084 """Override pushoperation constructor and store lfrevs parameter"""
1085 1085 lfrevs = kwargs.pop('lfrevs', None)
@@ -1139,7 +1139,7 b' def overrideclone(orig, ui, source, dest'
1139 1139 return orig(ui, source, dest, **opts)
1140 1140
1141 1141
1142 @eh.wrapfunction(hg, b'clone')
1142 @eh.wrapfunction(hg, 'clone')
1143 1143 def hgclone(orig, ui, opts, *args, **kwargs):
1144 1144 result = orig(ui, opts, *args, **kwargs)
1145 1145
@@ -1167,7 +1167,7 b' def hgclone(orig, ui, opts, *args, **kwa'
1167 1167
1168 1168 @eh.wrapcommand(b'rebase', extension=b'rebase')
1169 1169 def overriderebasecmd(orig, ui, repo, **opts):
1170 if not util.safehasattr(repo, b'_largefilesenabled'):
1170 if not hasattr(repo, '_largefilesenabled'):
1171 1171 return orig(ui, repo, **opts)
1172 1172
1173 1173 resuming = opts.get('continue')
@@ -1195,7 +1195,7 b' def overriderebase(ui):'
1195 1195 kwargs['inmemory'] = False
1196 1196 return orig(*args, **kwargs)
1197 1197
1198 extensions.wrapfunction(rebase, b'_dorebase', _dorebase)
1198 extensions.wrapfunction(rebase, '_dorebase', _dorebase)
1199 1199
1200 1200
1201 1201 @eh.wrapcommand(b'archive')
@@ -1204,13 +1204,13 b' def overridearchivecmd(orig, ui, repo, d'
1204 1204 return orig(ui, repo.unfiltered(), dest, **opts)
1205 1205
1206 1206
1207 @eh.wrapfunction(webcommands, b'archive')
1207 @eh.wrapfunction(webcommands, 'archive')
1208 1208 def hgwebarchive(orig, web):
1209 1209 with lfstatus(web.repo):
1210 1210 return orig(web)
1211 1211
1212 1212
1213 @eh.wrapfunction(archival, b'archive')
1213 @eh.wrapfunction(archival, 'archive')
1214 1214 def overridearchive(
1215 1215 orig,
1216 1216 repo,
@@ -1298,7 +1298,7 b' def overridearchive('
1298 1298 # allow only hgsubrepos to set this, instead of the current scheme
1299 1299 # where the parent sets this for the child.
1300 1300 with (
1301 util.safehasattr(sub, '_repo')
1301 hasattr(sub, '_repo')
1302 1302 and lfstatus(sub._repo)
1303 1303 or util.nullcontextmanager()
1304 1304 ):
@@ -1307,9 +1307,9 b' def overridearchive('
1307 1307 archiver.done()
1308 1308
1309 1309
1310 @eh.wrapfunction(subrepo.hgsubrepo, b'archive')
1310 @eh.wrapfunction(subrepo.hgsubrepo, 'archive')
1311 1311 def hgsubrepoarchive(orig, repo, archiver, prefix, match=None, decode=True):
1312 lfenabled = util.safehasattr(repo._repo, b'_largefilesenabled')
1312 lfenabled = hasattr(repo._repo, '_largefilesenabled')
1313 1313 if not lfenabled or not repo._repo.lfstatus:
1314 1314 return orig(repo, archiver, prefix, match, decode)
1315 1315
@@ -1364,7 +1364,7 b' def hgsubrepoarchive(orig, repo, archive'
1364 1364 # would allow only hgsubrepos to set this, instead of the current scheme
1365 1365 # where the parent sets this for the child.
1366 1366 with (
1367 util.safehasattr(sub, '_repo')
1367 hasattr(sub, '_repo')
1368 1368 and lfstatus(sub._repo)
1369 1369 or util.nullcontextmanager()
1370 1370 ):
@@ -1375,7 +1375,7 b' def hgsubrepoarchive(orig, repo, archive'
1375 1375 # standin until a commit. cmdutil.bailifchanged() raises an exception
1376 1376 # if the repo has uncommitted changes. Wrap it to also check if
1377 1377 # largefiles were changed. This is used by bisect, backout and fetch.
1378 @eh.wrapfunction(cmdutil, b'bailifchanged')
1378 @eh.wrapfunction(cmdutil, 'bailifchanged')
1379 1379 def overridebailifchanged(orig, repo, *args, **kwargs):
1380 1380 orig(repo, *args, **kwargs)
1381 1381 with lfstatus(repo):
@@ -1384,13 +1384,13 b' def overridebailifchanged(orig, repo, *a'
1384 1384 raise error.Abort(_(b'uncommitted changes'))
1385 1385
1386 1386
1387 @eh.wrapfunction(cmdutil, b'postcommitstatus')
1387 @eh.wrapfunction(cmdutil, 'postcommitstatus')
1388 1388 def postcommitstatus(orig, repo, *args, **kwargs):
1389 1389 with lfstatus(repo):
1390 1390 return orig(repo, *args, **kwargs)
1391 1391
1392 1392
1393 @eh.wrapfunction(cmdutil, b'forget')
1393 @eh.wrapfunction(cmdutil, 'forget')
1394 1394 def cmdutilforget(
1395 1395 orig, ui, repo, match, prefix, uipathfn, explicitonly, dryrun, interactive
1396 1396 ):
@@ -1559,7 +1559,7 b' def overridesummary(orig, ui, repo, *pat'
1559 1559 orig(ui, repo, *pats, **opts)
1560 1560
1561 1561
1562 @eh.wrapfunction(scmutil, b'addremove')
1562 @eh.wrapfunction(scmutil, 'addremove')
1563 1563 def scmutiladdremove(
1564 1564 orig,
1565 1565 repo,
@@ -1717,11 +1717,10 b' def overridetransplant(orig, ui, repo, *'
1717 1717
1718 1718 @eh.wrapcommand(b'cat')
1719 1719 def overridecat(orig, ui, repo, file1, *pats, **opts):
1720 opts = pycompat.byteskwargs(opts)
1721 ctx = logcmdutil.revsingle(repo, opts.get(b'rev'))
1720 ctx = logcmdutil.revsingle(repo, opts.get('rev'))
1722 1721 err = 1
1723 1722 notbad = set()
1724 m = scmutil.match(ctx, (file1,) + pats, opts)
1723 m = scmutil.match(ctx, (file1,) + pats, pycompat.byteskwargs(opts))
1725 1724 origmatchfn = m.matchfn
1726 1725
1727 1726 def lfmatchfn(f):
@@ -1758,12 +1757,12 b' def overridecat(orig, ui, repo, file1, *'
1758 1757 m.visitdir = lfvisitdirfn
1759 1758
1760 1759 for f in ctx.walk(m):
1761 with cmdutil.makefileobj(ctx, opts.get(b'output'), pathname=f) as fp:
1760 with cmdutil.makefileobj(ctx, opts.get('output'), pathname=f) as fp:
1762 1761 lf = lfutil.splitstandin(f)
1763 1762 if lf is None or origmatchfn(f):
1764 1763 # duplicating unreachable code from commands.cat
1765 1764 data = ctx[f].data()
1766 if opts.get(b'decode'):
1765 if opts.get('decode'):
1767 1766 data = repo.wwritedata(f, data)
1768 1767 fp.write(data)
1769 1768 else:
@@ -1787,7 +1786,7 b' def overridecat(orig, ui, repo, file1, *'
1787 1786 return err
1788 1787
1789 1788
1790 @eh.wrapfunction(merge, b'_update')
1789 @eh.wrapfunction(merge, '_update')
1791 1790 def mergeupdate(orig, repo, node, branchmerge, force, *args, **kwargs):
1792 1791 matcher = kwargs.get('matcher', None)
1793 1792 # note if this is a partial update
@@ -1880,7 +1879,7 b' def mergeupdate(orig, repo, node, branch'
1880 1879 return result
1881 1880
1882 1881
1883 @eh.wrapfunction(scmutil, b'marktouched')
1882 @eh.wrapfunction(scmutil, 'marktouched')
1884 1883 def scmutilmarktouched(orig, repo, files, *args, **kwargs):
1885 1884 result = orig(repo, files, *args, **kwargs)
1886 1885
@@ -1901,8 +1900,8 b' def scmutilmarktouched(orig, repo, files'
1901 1900 return result
1902 1901
1903 1902
1904 @eh.wrapfunction(upgrade_actions, b'preservedrequirements')
1905 @eh.wrapfunction(upgrade_actions, b'supporteddestrequirements')
1903 @eh.wrapfunction(upgrade_actions, 'preservedrequirements')
1904 @eh.wrapfunction(upgrade_actions, 'supporteddestrequirements')
1906 1905 def upgraderequirements(orig, repo):
1907 1906 reqs = orig(repo)
1908 1907 if b'largefiles' in repo.requirements:
@@ -1913,7 +1912,7 b' def upgraderequirements(orig, repo):'
1913 1912 _lfscheme = b'largefile://'
1914 1913
1915 1914
1916 @eh.wrapfunction(urlmod, b'open')
1915 @eh.wrapfunction(urlmod, 'open')
1917 1916 def openlargefile(orig, ui, url_, data=None, **kwargs):
1918 1917 if url_.startswith(_lfscheme):
1919 1918 if data:
@@ -200,7 +200,7 b' def wirereposetup(ui, repo):'
200 200
201 201
202 202 # advertise the largefiles=serve capability
203 @eh.wrapfunction(wireprotov1server, b'_capabilities')
203 @eh.wrapfunction(wireprotov1server, '_capabilities')
204 204 def _capabilities(orig, repo, proto):
205 205 '''announce largefile server capability'''
206 206 caps = orig(repo, proto)
@@ -5,7 +5,6 b''
5 5 import re
6 6
7 7 from mercurial.i18n import _
8 from mercurial.pycompat import getattr
9 8 from mercurial import (
10 9 error,
11 10 hg,
@@ -57,7 +56,7 b' def openstore(repo=None, remote=None, pu'
57 56
58 57 # The path could be a scheme so use Mercurial's normal functionality
59 58 # to resolve the scheme to a repository and use its path
60 path = util.safehasattr(remote, b'url') and remote.url() or remote.path
59 path = hasattr(remote, 'url') and remote.url() or remote.path
61 60
62 61 match = _scheme_re.match(path)
63 62 if not match: # regular filesystem path
@@ -342,7 +342,7 b' def wrapfilelog(filelog):'
342 342 wrapfunction(filelog, 'size', wrapper.filelogsize)
343 343
344 344
345 @eh.wrapfunction(localrepo, b'resolverevlogstorevfsoptions')
345 @eh.wrapfunction(localrepo, 'resolverevlogstorevfsoptions')
346 346 def _resolverevlogstorevfsoptions(orig, ui, requirements, features):
347 347 opts = orig(ui, requirements, features)
348 348 for name, module in extensions.extensions(ui):
@@ -15,7 +15,6 b' import re'
15 15 import socket
16 16
17 17 from mercurial.i18n import _
18 from mercurial.pycompat import getattr
19 18 from mercurial.node import hex
20 19
21 20 from mercurial import (
@@ -271,7 +270,7 b' def _urlerrorreason(urlerror):'
271 270 if isinstance(urlerror.reason, Exception):
272 271 inst = urlerror.reason
273 272
274 if util.safehasattr(inst, b'reason'):
273 if hasattr(inst, 'reason'):
275 274 try: # usually it is in the form (errno, strerror)
276 275 reason = inst.reason.args[1]
277 276 except (AttributeError, IndexError):
@@ -751,7 +750,7 b' def remote(repo, remote=None):'
751 750 if lfsurl is None:
752 751 if remote:
753 752 path = remote
754 elif util.safehasattr(repo, b'_subtoppath'):
753 elif hasattr(repo, '_subtoppath'):
755 754 # The pull command sets this during the optional update phase, which
756 755 # tells exactly where the pull originated, whether 'paths.default'
757 756 # or explicit.
@@ -16,7 +16,6 b' from mercurial.hgweb import common as hg'
16 16 from mercurial import (
17 17 exthelper,
18 18 pycompat,
19 util,
20 19 wireprotoserver,
21 20 )
22 21
@@ -33,7 +32,7 b' HTTP_UNSUPPORTED_MEDIA_TYPE = hgwebcommo'
33 32 eh = exthelper.exthelper()
34 33
35 34
36 @eh.wrapfunction(wireprotoserver, b'handlewsgirequest')
35 @eh.wrapfunction(wireprotoserver, 'handlewsgirequest')
37 36 def handlewsgirequest(orig, rctx, req, res, checkperm):
38 37 """Wrap wireprotoserver.handlewsgirequest() to possibly process an LFS
39 38 request if it is left unprocessed by the wrapped method.
@@ -44,7 +43,7 b' def handlewsgirequest(orig, rctx, req, r'
44 43 if not rctx.repo.ui.configbool(b'experimental', b'lfs.serve'):
45 44 return False
46 45
47 if not util.safehasattr(rctx.repo.svfs, 'lfslocalblobstore'):
46 if not hasattr(rctx.repo.svfs, 'lfslocalblobstore'):
48 47 return False
49 48
50 49 if not req.dispatchpath:
@@ -10,10 +10,6 b' import hashlib'
10 10
11 11 from mercurial.i18n import _
12 12 from mercurial.node import bin, hex, short
13 from mercurial.pycompat import (
14 getattr,
15 setattr,
16 )
17 13
18 14 from mercurial import (
19 15 bundle2,
@@ -26,7 +22,6 b' from mercurial import ('
26 22 localrepo,
27 23 revlog,
28 24 scmutil,
29 util,
30 25 vfs as vfsmod,
31 26 wireprotov1server,
32 27 )
@@ -53,7 +48,7 b' from . import ('
53 48 eh = exthelper.exthelper()
54 49
55 50
56 @eh.wrapfunction(localrepo, b'makefilestorage')
51 @eh.wrapfunction(localrepo, 'makefilestorage')
57 52 def localrepomakefilestorage(orig, requirements, features, **kwargs):
58 53 if b'lfs' in requirements:
59 54 features.add(repository.REPO_FEATURE_LFS)
@@ -61,18 +56,18 b' def localrepomakefilestorage(orig, requi'
61 56 return orig(requirements=requirements, features=features, **kwargs)
62 57
63 58
64 @eh.wrapfunction(changegroup, b'allsupportedversions')
59 @eh.wrapfunction(changegroup, 'allsupportedversions')
65 60 def allsupportedversions(orig, ui):
66 61 versions = orig(ui)
67 62 versions.add(b'03')
68 63 return versions
69 64
70 65
71 @eh.wrapfunction(wireprotov1server, b'_capabilities')
66 @eh.wrapfunction(wireprotov1server, '_capabilities')
72 67 def _capabilities(orig, repo, proto):
73 68 '''Wrap server command to announce lfs server capability'''
74 69 caps = orig(repo, proto)
75 if util.safehasattr(repo.svfs, b'lfslocalblobstore'):
70 if hasattr(repo.svfs, 'lfslocalblobstore'):
76 71 # Advertise a slightly different capability when lfs is *required*, so
77 72 # that the client knows it MUST load the extension. If lfs is not
78 73 # required on the server, there's no reason to autoload the extension
@@ -227,7 +222,7 b' def filelogsize(orig, self, rev):'
227 222 return orig(self, rev)
228 223
229 224
230 @eh.wrapfunction(revlog, b'_verify_revision')
225 @eh.wrapfunction(revlog, '_verify_revision')
231 226 def _verify_revision(orig, rl, skipflags, state, node):
232 227 if _islfs(rl, node=node):
233 228 rawtext = rl.rawdata(node)
@@ -246,7 +241,7 b' def _verify_revision(orig, rl, skipflags'
246 241 orig(rl, skipflags, state, node)
247 242
248 243
249 @eh.wrapfunction(context.basefilectx, b'cmp')
244 @eh.wrapfunction(context.basefilectx, 'cmp')
250 245 def filectxcmp(orig, self, fctx):
251 246 """returns True if text is different than fctx"""
252 247 # some fctx (ex. hg-git) is not based on basefilectx and do not have islfs
@@ -258,7 +253,7 b' def filectxcmp(orig, self, fctx):'
258 253 return orig(self, fctx)
259 254
260 255
261 @eh.wrapfunction(context.basefilectx, b'isbinary')
256 @eh.wrapfunction(context.basefilectx, 'isbinary')
262 257 def filectxisbinary(orig, self):
263 258 if self.islfs():
264 259 # fast path: use lfs metadata to answer isbinary
@@ -272,13 +267,13 b' def filectxislfs(self):'
272 267 return _islfs(self.filelog()._revlog, self.filenode())
273 268
274 269
275 @eh.wrapfunction(cmdutil, b'_updatecatformatter')
270 @eh.wrapfunction(cmdutil, '_updatecatformatter')
276 271 def _updatecatformatter(orig, fm, ctx, matcher, path, decode):
277 272 orig(fm, ctx, matcher, path, decode)
278 273 fm.data(rawdata=ctx[path].rawdata())
279 274
280 275
281 @eh.wrapfunction(scmutil, b'wrapconvertsink')
276 @eh.wrapfunction(scmutil, 'wrapconvertsink')
282 277 def convertsink(orig, sink):
283 278 sink = orig(sink)
284 279 if sink.repotype == b'hg':
@@ -325,7 +320,7 b' def convertsink(orig, sink):'
325 320
326 321 # bundlerepo uses "vfsmod.readonlyvfs(othervfs)", we need to make sure lfs
327 322 # options and blob stores are passed from othervfs to the new readonlyvfs.
328 @eh.wrapfunction(vfsmod.readonlyvfs, b'__init__')
323 @eh.wrapfunction(vfsmod.readonlyvfs, '__init__')
329 324 def vfsinit(orig, self, othervfs):
330 325 orig(self, othervfs)
331 326 # copy lfs related options
@@ -334,15 +329,15 b' def vfsinit(orig, self, othervfs):'
334 329 self.options[k] = v
335 330 # also copy lfs blobstores. note: this can run before reposetup, so lfs
336 331 # blobstore attributes are not always ready at this time.
337 for name in [b'lfslocalblobstore', b'lfsremoteblobstore']:
338 if util.safehasattr(othervfs, name):
332 for name in ['lfslocalblobstore', 'lfsremoteblobstore']:
333 if hasattr(othervfs, name):
339 334 setattr(self, name, getattr(othervfs, name))
340 335
341 336
342 337 def _prefetchfiles(repo, revmatches):
343 338 """Ensure that required LFS blobs are present, fetching them as a group if
344 339 needed."""
345 if not util.safehasattr(repo.svfs, b'lfslocalblobstore'):
340 if not hasattr(repo.svfs, 'lfslocalblobstore'):
346 341 return
347 342
348 343 pointers = []
@@ -366,7 +361,7 b' def _prefetchfiles(repo, revmatches):'
366 361
367 362 def _canskipupload(repo):
368 363 # Skip if this hasn't been passed to reposetup()
369 if not util.safehasattr(repo.svfs, b'lfsremoteblobstore'):
364 if not hasattr(repo.svfs, 'lfsremoteblobstore'):
370 365 return True
371 366
372 367 # if remotestore is a null store, upload is a no-op and can be skipped
@@ -375,7 +370,7 b' def _canskipupload(repo):'
375 370
376 371 def candownload(repo):
377 372 # Skip if this hasn't been passed to reposetup()
378 if not util.safehasattr(repo.svfs, b'lfsremoteblobstore'):
373 if not hasattr(repo.svfs, 'lfsremoteblobstore'):
379 374 return False
380 375
381 376 # if remotestore is a null store, downloads will lead to nothing
@@ -383,10 +378,7 b' def candownload(repo):'
383 378
384 379
385 380 def uploadblobsfromrevs(repo, revs):
386 """upload lfs blobs introduced by revs
387
388 Note: also used by other extensions e. g. infinitepush. avoid renaming.
389 """
381 """upload lfs blobs introduced by revs"""
390 382 if _canskipupload(repo):
391 383 return
392 384 pointers = extractpointers(repo, revs)
@@ -403,7 +395,7 b' def prepush(pushop):'
403 395 return uploadblobsfromrevs(pushop.repo, pushop.outgoing.missing)
404 396
405 397
406 @eh.wrapfunction(exchange, b'push')
398 @eh.wrapfunction(exchange, 'push')
407 399 def push(orig, repo, remote, *args, **kwargs):
408 400 """bail on push if the extension isn't enabled on remote when needed, and
409 401 update the remote store based on the destination path."""
@@ -433,7 +425,7 b' def push(orig, repo, remote, *args, **kw'
433 425
434 426
435 427 # when writing a bundle via "hg bundle" command, upload related LFS blobs
436 @eh.wrapfunction(bundle2, b'writenewbundle')
428 @eh.wrapfunction(bundle2, 'writenewbundle')
437 429 def writenewbundle(
438 430 orig, ui, repo, source, filename, bundletype, outgoing, *args, **kwargs
439 431 ):
@@ -522,14 +514,14 b' def uploadblobs(repo, pointers):'
522 514 remoteblob.writebatch(pointers, repo.svfs.lfslocalblobstore)
523 515
524 516
525 @eh.wrapfunction(upgrade_engine, b'finishdatamigration')
517 @eh.wrapfunction(upgrade_engine, 'finishdatamigration')
526 518 def upgradefinishdatamigration(orig, ui, srcrepo, dstrepo, requirements):
527 519 orig(ui, srcrepo, dstrepo, requirements)
528 520
529 521 # Skip if this hasn't been passed to reposetup()
530 if util.safehasattr(
531 srcrepo.svfs, b'lfslocalblobstore'
532 ) and util.safehasattr(dstrepo.svfs, b'lfslocalblobstore'):
522 if hasattr(srcrepo.svfs, 'lfslocalblobstore') and hasattr(
523 dstrepo.svfs, 'lfslocalblobstore'
524 ):
533 525 srclfsvfs = srcrepo.svfs.lfslocalblobstore.vfs
534 526 dstlfsvfs = dstrepo.svfs.lfslocalblobstore.vfs
535 527
@@ -539,8 +531,8 b' def upgradefinishdatamigration(orig, ui,'
539 531 lfutil.link(srclfsvfs.join(oid), dstlfsvfs.join(oid))
540 532
541 533
542 @eh.wrapfunction(upgrade_actions, b'preservedrequirements')
543 @eh.wrapfunction(upgrade_actions, b'supporteddestrequirements')
534 @eh.wrapfunction(upgrade_actions, 'preservedrequirements')
535 @eh.wrapfunction(upgrade_actions, 'supporteddestrequirements')
544 536 def upgraderequirements(orig, repo):
545 537 reqs = orig(repo)
546 538 if b'lfs' in repo.requirements:
@@ -75,8 +75,6 b' from mercurial.node import ('
75 75 short,
76 76 )
77 77 from mercurial.pycompat import (
78 delattr,
79 getattr,
80 78 open,
81 79 )
82 80 from mercurial import (
@@ -4186,7 +4184,7 b' def reposetup(ui, repo):'
4186 4184
4187 4185
4188 4186 def mqimport(orig, ui, repo, *args, **kwargs):
4189 if util.safehasattr(repo, b'abortifwdirpatched') and not kwargs.get(
4187 if hasattr(repo, 'abortifwdirpatched') and not kwargs.get(
4190 4188 'no_commit', False
4191 4189 ):
4192 4190 repo.abortifwdirpatched(
@@ -259,7 +259,7 b' def _handlechangespec(op, inpart):'
259 259 # will currently always be there when using the core+narrowhg server, but
260 260 # other servers may include a changespec part even when not widening (e.g.
261 261 # because we're deepening a shallow repo).
262 if util.safehasattr(repo, 'setnewnarrowpats'):
262 if hasattr(repo, 'setnewnarrowpats'):
263 263 op.gettransaction()
264 264 repo.setnewnarrowpats()
265 265
@@ -333,9 +333,9 b' def setup():'
333 333
334 334 def wrappedcghandler(op, inpart):
335 335 origcghandler(op, inpart)
336 if util.safehasattr(op, '_widen_bundle'):
336 if hasattr(op, '_widen_bundle'):
337 337 handlechangegroup_widen(op, inpart)
338 if util.safehasattr(op, '_bookmarksbackup'):
338 if hasattr(op, '_bookmarksbackup'):
339 339 localrepo.localrepository._bookmarks.set(
340 340 op.repo, op._bookmarksbackup
341 341 )
@@ -87,9 +87,8 b' def setup():'
87 87
88 88 def clonenarrowcmd(orig, ui, repo, *args, **opts):
89 89 """Wraps clone command, so 'hg clone' first wraps localrepo.clone()."""
90 opts = pycompat.byteskwargs(opts)
91 90 wrappedextraprepare = util.nullcontextmanager()
92 narrowspecfile = opts[b'narrowspec']
91 narrowspecfile = opts['narrowspec']
93 92
94 93 if narrowspecfile:
95 94 filepath = os.path.join(encoding.getcwd(), narrowspecfile)
@@ -115,24 +114,25 b' def clonenarrowcmd(orig, ui, repo, *args'
115 114 narrowspec.validatepatterns(excludes)
116 115
117 116 # narrowspec is passed so we should assume that user wants narrow clone
118 opts[b'narrow'] = True
119 opts[b'include'].extend(includes)
120 opts[b'exclude'].extend(excludes)
117 opts['narrow'] = True
118 opts['include'].extend(includes)
119 opts['exclude'].extend(excludes)
121 120
122 if opts[b'narrow']:
121 if opts['narrow']:
123 122
124 123 def pullbundle2extraprepare_widen(orig, pullop, kwargs):
125 124 orig(pullop, kwargs)
126 125
127 if opts.get(b'depth'):
128 kwargs[b'depth'] = opts[b'depth']
126 if opts.get('depth'):
127 # TODO: fix exchange._pullbundle2extraprepare()
128 kwargs[b'depth'] = opts['depth']
129 129
130 130 wrappedextraprepare = extensions.wrappedfunction(
131 exchange, b'_pullbundle2extraprepare', pullbundle2extraprepare_widen
131 exchange, '_pullbundle2extraprepare', pullbundle2extraprepare_widen
132 132 )
133 133
134 134 with wrappedextraprepare:
135 return orig(ui, repo, *args, **pycompat.strkwargs(opts))
135 return orig(ui, repo, *args, **opts)
136 136
137 137
138 138 def pullnarrowcmd(orig, ui, repo, *args, **opts):
@@ -146,7 +146,7 b' def pullnarrowcmd(orig, ui, repo, *args,'
146 146 kwargs[b'depth'] = opts['depth']
147 147
148 148 wrappedextraprepare = extensions.wrappedfunction(
149 exchange, b'_pullbundle2extraprepare', pullbundle2extraprepare_widen
149 exchange, '_pullbundle2extraprepare', pullbundle2extraprepare_widen
150 150 )
151 151
152 152 with wrappedextraprepare:
@@ -201,7 +201,7 b' def pullbundle2extraprepare(orig, pullop'
201 201
202 202
203 203 extensions.wrapfunction(
204 exchange, b'_pullbundle2extraprepare', pullbundle2extraprepare
204 exchange, '_pullbundle2extraprepare', pullbundle2extraprepare
205 205 )
206 206
207 207
@@ -366,7 +366,7 b' def _widen('
366 366 kwargs[b'excludepats'] = newexcludes
367 367
368 368 wrappedextraprepare = extensions.wrappedfunction(
369 exchange, b'_pullbundle2extraprepare', pullbundle2extraprepare_widen
369 exchange, '_pullbundle2extraprepare', pullbundle2extraprepare_widen
370 370 )
371 371
372 372 # define a function that narrowbundle2 can call after creating the
@@ -511,7 +511,6 b' def trackedcmd(ui, repo, remotepath=None'
511 511 add --addinclude, --addexclude rules in bulk. Like the other include and
512 512 exclude switches, the changes are applied immediately.
513 513 """
514 opts = pycompat.byteskwargs(opts)
515 514 if requirements.NARROW_REQUIREMENT not in repo.requirements:
516 515 raise error.InputError(
517 516 _(
@@ -522,14 +521,14 b' def trackedcmd(ui, repo, remotepath=None'
522 521
523 522 # Before supporting, decide whether it "hg tracked --clear" should mean
524 523 # tracking no paths or all paths.
525 if opts[b'clear']:
524 if opts['clear']:
526 525 raise error.InputError(_(b'the --clear option is not yet supported'))
527 526
528 527 # import rules from a file
529 newrules = opts.get(b'import_rules')
528 newrules = opts.get('import_rules')
530 529 if newrules:
530 filepath = os.path.join(encoding.getcwd(), newrules)
531 531 try:
532 filepath = os.path.join(encoding.getcwd(), newrules)
533 532 fdata = util.readfile(filepath)
534 533 except IOError as inst:
535 534 raise error.StorageError(
@@ -546,16 +545,16 b' def trackedcmd(ui, repo, remotepath=None'
546 545 b"is not supported in narrowspec"
547 546 )
548 547 )
549 opts[b'addinclude'].extend(includepats)
550 opts[b'addexclude'].extend(excludepats)
548 opts['addinclude'].extend(includepats)
549 opts['addexclude'].extend(excludepats)
551 550
552 addedincludes = narrowspec.parsepatterns(opts[b'addinclude'])
553 removedincludes = narrowspec.parsepatterns(opts[b'removeinclude'])
554 addedexcludes = narrowspec.parsepatterns(opts[b'addexclude'])
555 removedexcludes = narrowspec.parsepatterns(opts[b'removeexclude'])
556 autoremoveincludes = opts[b'auto_remove_includes']
551 addedincludes = narrowspec.parsepatterns(opts['addinclude'])
552 removedincludes = narrowspec.parsepatterns(opts['removeinclude'])
553 addedexcludes = narrowspec.parsepatterns(opts['addexclude'])
554 removedexcludes = narrowspec.parsepatterns(opts['removeexclude'])
555 autoremoveincludes = opts['auto_remove_includes']
557 556
558 update_working_copy = opts[b'update_working_copy']
557 update_working_copy = opts['update_working_copy']
559 558 only_show = not (
560 559 addedincludes
561 560 or removedincludes
@@ -570,7 +569,7 b' def trackedcmd(ui, repo, remotepath=None'
570 569 if only_show:
571 570 oldincludes, oldexcludes = repo.narrowpats
572 571 ui.pager(b'tracked')
573 fm = ui.formatter(b'narrow', opts)
572 fm = ui.formatter(b'narrow', pycompat.byteskwargs(opts))
574 573 for i in sorted(oldincludes):
575 574 fm.startitem()
576 575 fm.write(b'status', b'%s ', b'I', label=b'narrow.included')
@@ -614,7 +613,7 b' def trackedcmd(ui, repo, remotepath=None'
614 613 # also define the set of revisions to update for widening.
615 614 path = urlutil.get_unique_pull_path_obj(b'tracked', ui, remotepath)
616 615 ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(path.loc))
617 remote = hg.peer(repo, opts, path)
616 remote = hg.peer(repo, pycompat.byteskwargs(opts), path)
618 617
619 618 try:
620 619 # check narrow support before doing anything if widening needs to be
@@ -670,8 +669,8 b' def trackedcmd(ui, repo, remotepath=None'
670 669 oldexcludes,
671 670 newincludes,
672 671 newexcludes,
673 opts[b'force_delete_local_changes'],
674 opts[b'backup'],
672 opts['force_delete_local_changes'],
673 opts['backup'],
675 674 )
676 675 # _narrow() updated the narrowspec and _widen() below needs to
677 676 # use the updated values as its base (otherwise removed includes
@@ -36,7 +36,7 b' def reposetup(repo):'
36 36 kwargs["excludepats"] = b','.join(exclude)
37 37 return orig(cmd, *args, **kwargs)
38 38
39 extensions.wrapfunction(peer, b'_calltwowaystream', wrapped)
39 extensions.wrapfunction(peer, '_calltwowaystream', wrapped)
40 40
41 41 hg.wirepeersetupfuncs.append(wirereposetup)
42 42
@@ -76,7 +76,7 b' def uisetup(ui):'
76 76 ui.disablepager()
77 77 return orig(ui, options, cmd, cmdfunc)
78 78
79 extensions.wrapfunction(dispatch, b'_runcommand', pagecmd)
79 extensions.wrapfunction(dispatch, '_runcommand', pagecmd)
80 80
81 81
82 82 attended = [b'annotate', b'cat', b'diff', b'export', b'glog', b'log', b'qdiff']
@@ -71,7 +71,6 b' import time'
71 71
72 72 from mercurial.node import bin, short
73 73 from mercurial.i18n import _
74 from mercurial.pycompat import getattr
75 74 from mercurial.thirdparty import attr
76 75 from mercurial import (
77 76 cmdutil,
@@ -24,7 +24,6 b' from mercurial import ('
24 24 error,
25 25 logcmdutil,
26 26 minirst,
27 pycompat,
28 27 registrar,
29 28 util,
30 29 )
@@ -665,17 +664,16 b' def releasenotes(ui, repo, file_=None, *'
665 664 admonitions (if any).
666 665 """
667 666
668 opts = pycompat.byteskwargs(opts)
669 667 sections = releasenotessections(ui, repo)
670 668
671 cmdutil.check_incompatible_arguments(opts, b'list', [b'rev', b'check'])
669 cmdutil.check_incompatible_arguments(opts, 'list', ['rev', 'check'])
672 670
673 if opts.get(b'list'):
671 if opts.get('list'):
674 672 return _getadmonitionlist(ui, sections)
675 673
676 rev = opts.get(b'rev')
674 rev = opts.get('rev')
677 675 revs = logcmdutil.revrange(repo, [rev or b'not public()'])
678 if opts.get(b'check'):
676 if opts.get('check'):
679 677 return checkadmonitions(ui, repo, sections.names(), revs)
680 678
681 679 incoming = parsenotesfromrevisions(repo, sections.names(), revs)
@@ -60,9 +60,7 b' def relink(ui, repo, origin=None, **opts'
60 60 command is running. (Both repositories will be locked against
61 61 writes.)
62 62 """
63 if not util.safehasattr(util, b'samefile') or not util.safehasattr(
64 util, b'samedevice'
65 ):
63 if not hasattr(util, 'samefile') or not hasattr(util, 'samedevice'):
66 64 raise error.Abort(_(b'hardlinks are not supported on this system'))
67 65
68 66 if origin is None and b'default-relink' in ui.paths:
@@ -317,31 +317,31 b' def uisetup(ui):'
317 317 changegroup.cgpacker = shallowbundle.shallowcg1packer
318 318
319 319 extensions.wrapfunction(
320 changegroup, b'_addchangegroupfiles', shallowbundle.addchangegroupfiles
320 changegroup, '_addchangegroupfiles', shallowbundle.addchangegroupfiles
321 321 )
322 322 extensions.wrapfunction(
323 changegroup, b'makechangegroup', shallowbundle.makechangegroup
323 changegroup, 'makechangegroup', shallowbundle.makechangegroup
324 324 )
325 extensions.wrapfunction(localrepo, b'makestore', storewrapper)
326 extensions.wrapfunction(exchange, b'pull', exchangepull)
327 extensions.wrapfunction(merge, b'applyupdates', applyupdates)
328 extensions.wrapfunction(merge, b'_checkunknownfiles', checkunknownfiles)
329 extensions.wrapfunction(context.workingctx, b'_checklookup', checklookup)
330 extensions.wrapfunction(scmutil, b'_findrenames', findrenames)
325 extensions.wrapfunction(localrepo, 'makestore', storewrapper)
326 extensions.wrapfunction(exchange, 'pull', exchangepull)
327 extensions.wrapfunction(merge, 'applyupdates', applyupdates)
328 extensions.wrapfunction(merge, '_checkunknownfiles', checkunknownfiles)
329 extensions.wrapfunction(context.workingctx, '_checklookup', checklookup)
330 extensions.wrapfunction(scmutil, '_findrenames', findrenames)
331 331 extensions.wrapfunction(
332 copies, b'_computeforwardmissing', computeforwardmissing
332 copies, '_computeforwardmissing', computeforwardmissing
333 333 )
334 extensions.wrapfunction(dispatch, b'runcommand', runcommand)
335 extensions.wrapfunction(repair, b'_collectbrokencsets', _collectbrokencsets)
336 extensions.wrapfunction(context.changectx, b'filectx', filectx)
337 extensions.wrapfunction(context.workingctx, b'filectx', workingfilectx)
338 extensions.wrapfunction(patch, b'trydiff', trydiff)
339 extensions.wrapfunction(hg, b'verify', _verify)
334 extensions.wrapfunction(dispatch, 'runcommand', runcommand)
335 extensions.wrapfunction(repair, '_collectbrokencsets', _collectbrokencsets)
336 extensions.wrapfunction(context.changectx, 'filectx', filectx)
337 extensions.wrapfunction(context.workingctx, 'filectx', workingfilectx)
338 extensions.wrapfunction(patch, 'trydiff', trydiff)
339 extensions.wrapfunction(hg, 'verify', _verify)
340 340 scmutil.fileprefetchhooks.add(b'remotefilelog', _fileprefetchhook)
341 341
342 342 # disappointing hacks below
343 extensions.wrapfunction(scmutil, b'getrenamedfn', getrenamedfn)
344 extensions.wrapfunction(revset, b'filelog', filelogrevset)
343 extensions.wrapfunction(scmutil, 'getrenamedfn', getrenamedfn)
344 extensions.wrapfunction(revset, 'filelog', filelogrevset)
345 345 revset.symbols[b'filelog'] = revset.filelog
346 346
347 347
@@ -374,7 +374,7 b' def cloneshallow(orig, ui, repo, *args, '
374 374 else:
375 375 return orig(self, *args, **kwargs)
376 376
377 extensions.wrapfunction(exchange, b'pull', pull_shallow)
377 extensions.wrapfunction(exchange, 'pull', pull_shallow)
378 378
379 379 # Wrap the stream logic to add requirements and to pass include/exclude
380 380 # patterns around.
@@ -393,14 +393,14 b' def cloneshallow(orig, ui, repo, *args, '
393 393 else:
394 394 return orig()
395 395
396 extensions.wrapfunction(remote, b'stream_out', stream_out_shallow)
396 extensions.wrapfunction(remote, 'stream_out', stream_out_shallow)
397 397
398 398 def stream_wrap(orig, op):
399 399 setup_streamout(op.repo, op.remote)
400 400 return orig(op)
401 401
402 402 extensions.wrapfunction(
403 streamclone, b'maybeperformlegacystreamclone', stream_wrap
403 streamclone, 'maybeperformlegacystreamclone', stream_wrap
404 404 )
405 405
406 406 def canperformstreamclone(orig, pullop, bundle2=False):
@@ -417,7 +417,7 b' def cloneshallow(orig, ui, repo, *args, '
417 417 return supported, requirements
418 418
419 419 extensions.wrapfunction(
420 streamclone, b'canperformstreamclone', canperformstreamclone
420 streamclone, 'canperformstreamclone', canperformstreamclone
421 421 )
422 422
423 423 try:
@@ -425,7 +425,7 b' def cloneshallow(orig, ui, repo, *args, '
425 425 finally:
426 426 if opts.get('shallow'):
427 427 for r in repos:
428 if util.safehasattr(r, b'fileservice'):
428 if hasattr(r, 'fileservice'):
429 429 r.fileservice.close()
430 430
431 431
@@ -721,7 +721,7 b' def onetimeclientsetup(ui):'
721 721 )
722 722
723 723 extensions.wrapfunction(
724 remotefilelog.remotefilelog, b'addrawrevision', addrawrevision
724 remotefilelog.remotefilelog, 'addrawrevision', addrawrevision
725 725 )
726 726
727 727 def changelogadd(orig, self, *args, **kwargs):
@@ -749,7 +749,7 b' def onetimeclientsetup(ui):'
749 749 del pendingfilecommits[:]
750 750 return node
751 751
752 extensions.wrapfunction(changelog.changelog, b'add', changelogadd)
752 extensions.wrapfunction(changelog.changelog, 'add', changelogadd)
753 753
754 754
755 755 def getrenamedfn(orig, repo, endrev=None):
@@ -904,7 +904,7 b' def gcclient(ui, cachepath):'
904 904 if not isenabled(repo):
905 905 continue
906 906
907 if not util.safehasattr(repo, b'name'):
907 if not hasattr(repo, 'name'):
908 908 ui.warn(
909 909 _(b"repo %s is a misconfigured remotefilelog repo\n") % path
910 910 )
@@ -1034,7 +1034,7 b' def wcpprefetch(ui, repo, **kwargs):'
1034 1034 bgprefetchrevs = revdatelimit(ui, bgprefetchrevs)
1035 1035
1036 1036 def anon(unused_success):
1037 if util.safehasattr(repo, b'ranprefetch') and repo.ranprefetch:
1037 if hasattr(repo, 'ranprefetch') and repo.ranprefetch:
1038 1038 return
1039 1039 repo.ranprefetch = True
1040 1040 repo.backgroundprefetch(bgprefetchrevs, repack=bgrepack)
@@ -1080,10 +1080,10 b' def exchangepull(orig, repo, remote, *ar'
1080 1080 source, heads=heads, common=common, bundlecaps=bundlecaps, **kwargs
1081 1081 )
1082 1082
1083 if util.safehasattr(remote, b'_callstream'):
1083 if hasattr(remote, '_callstream'):
1084 1084 remote._localrepo = repo
1085 elif util.safehasattr(remote, b'getbundle'):
1086 extensions.wrapfunction(remote, b'getbundle', localgetbundle)
1085 elif hasattr(remote, 'getbundle'):
1086 extensions.wrapfunction(remote, 'getbundle', localgetbundle)
1087 1087
1088 1088 return orig(repo, remote, *args, **kwargs)
1089 1089
@@ -7,7 +7,6 b' import time'
7 7
8 8 from mercurial.i18n import _
9 9 from mercurial.pycompat import (
10 getattr,
11 10 open,
12 11 )
13 12 from mercurial.node import hex
@@ -415,7 +415,7 b' class baseunionstore:'
415 415
416 416 def markforrefresh(self):
417 417 for store in self.stores:
418 if util.safehasattr(store, b'markforrefresh'):
418 if hasattr(store, b'markforrefresh'):
419 419 store.markforrefresh()
420 420
421 421 @staticmethod
@@ -9,7 +9,6 b''
9 9 from mercurial import (
10 10 hg,
11 11 sshpeer,
12 util,
13 12 )
14 13
15 14 _sshv1peer = sshpeer.sshv1peer
@@ -41,14 +40,14 b' class connectionpool:'
41 40 if conn is None:
42 41
43 42 peer = hg.peer(self._repo.ui, {}, path)
44 if util.safehasattr(peer, '_cleanup'):
43 if hasattr(peer, '_cleanup'):
45 44
46 45 class mypeer(peer.__class__):
47 46 def _cleanup(self, warn=None):
48 47 # close pipee first so peer.cleanup reading it won't
49 48 # deadlock, if there are other processes with pipeo
50 49 # open (i.e. us).
51 if util.safehasattr(self, 'pipee'):
50 if hasattr(self, 'pipee'):
52 51 self.pipee.close()
53 52 return super(mypeer, self)._cleanup()
54 53
@@ -83,5 +82,5 b' class connection:'
83 82 self.close()
84 83
85 84 def close(self):
86 if util.safehasattr(self.peer, 'cleanup'):
85 if hasattr(self.peer, 'cleanup'):
87 86 self.peer.cleanup()
@@ -4,7 +4,6 b' from mercurial.node import ('
4 4 hex,
5 5 sha1nodeconstants,
6 6 )
7 from mercurial.pycompat import getattr
8 7 from mercurial import (
9 8 mdiff,
10 9 revlog,
@@ -92,7 +92,7 b' def peersetup(ui, peer):'
92 92 not in self.capabilities()
93 93 ):
94 94 return
95 if not util.safehasattr(self, '_localrepo'):
95 if not hasattr(self, '_localrepo'):
96 96 return
97 97 if (
98 98 constants.SHALLOWREPO_REQUIREMENT
@@ -132,7 +132,7 b' def peersetup(ui, peer):'
132 132
133 133 def _callstream(self, command, **opts):
134 134 supertype = super(remotefilepeer, self)
135 if not util.safehasattr(supertype, '_sendrequest'):
135 if not hasattr(supertype, '_sendrequest'):
136 136 self._updatecallstreamopts(command, pycompat.byteskwargs(opts))
137 137 return super(remotefilepeer, self)._callstream(command, **opts)
138 138
@@ -641,9 +641,7 b' class fileserverclient:'
641 641 self._lfsprefetch(fileids)
642 642
643 643 def _lfsprefetch(self, fileids):
644 if not _lfsmod or not util.safehasattr(
645 self.repo.svfs, b'lfslocalblobstore'
646 ):
644 if not _lfsmod or not hasattr(self.repo.svfs, b'lfslocalblobstore'):
647 645 return
648 646 if not _lfsmod.wrapper.candownload(self.repo):
649 647 return
@@ -44,7 +44,6 b' class remotefilelognodemap:'
44 44
45 45 class remotefilelog:
46 46
47 _generaldelta = True
48 47 _flagserrorclass = error.RevlogError
49 48
50 49 def __init__(self, opener, path, repo):
@@ -67,7 +67,7 b' def setupserver(ui, repo):'
67 67 )
68 68
69 69 extensions.wrapfunction(
70 changegroup.cgpacker, b'generatefiles', generatefiles
70 changegroup.cgpacker, 'generatefiles', generatefiles
71 71 )
72 72
73 73
@@ -207,7 +207,7 b' def onetimesetup(ui):'
207 207 ):
208 208 yield x
209 209
210 extensions.wrapfunction(streamclone, b'_walkstreamfiles', _walkstreamfiles)
210 extensions.wrapfunction(streamclone, '_walkstreamfiles', _walkstreamfiles)
211 211
212 212 # expose remotefilelog capabilities
213 213 def _capabilities(orig, repo, proto):
@@ -222,18 +222,18 b' def onetimesetup(ui):'
222 222 caps.append(b'x_rfl_getfile')
223 223 return caps
224 224
225 extensions.wrapfunction(wireprotov1server, b'_capabilities', _capabilities)
225 extensions.wrapfunction(wireprotov1server, '_capabilities', _capabilities)
226 226
227 227 def _adjustlinkrev(orig, self, *args, **kwargs):
228 228 # When generating file blobs, taking the real path is too slow on large
229 229 # repos, so force it to just return the linkrev directly.
230 230 repo = self._repo
231 if util.safehasattr(repo, b'forcelinkrev') and repo.forcelinkrev:
231 if hasattr(repo, 'forcelinkrev') and repo.forcelinkrev:
232 232 return self._filelog.linkrev(self._filelog.rev(self._filenode))
233 233 return orig(self, *args, **kwargs)
234 234
235 235 extensions.wrapfunction(
236 context.basefilectx, b'_adjustlinkrev', _adjustlinkrev
236 context.basefilectx, '_adjustlinkrev', _adjustlinkrev
237 237 )
238 238
239 239 def _iscmd(orig, cmd):
@@ -241,7 +241,7 b' def onetimesetup(ui):'
241 241 return False
242 242 return orig(cmd)
243 243
244 extensions.wrapfunction(wireprotoserver, b'iscmd', _iscmd)
244 extensions.wrapfunction(wireprotoserver, 'iscmd', _iscmd)
245 245
246 246
247 247 def _loadfileblob(repo, cachepath, path, node):
@@ -49,7 +49,7 b' def backgroundrepack(repo, incremental=T'
49 49
50 50 def fullrepack(repo, options=None):
51 51 """If ``packsonly`` is True, stores creating only loose objects are skipped."""
52 if util.safehasattr(repo, 'shareddatastores'):
52 if hasattr(repo, 'shareddatastores'):
53 53 datasource = contentstore.unioncontentstore(*repo.shareddatastores)
54 54 historysource = metadatastore.unionmetadatastore(
55 55 *repo.sharedhistorystores, allowincomplete=True
@@ -67,7 +67,7 b' def fullrepack(repo, options=None):'
67 67 options=options,
68 68 )
69 69
70 if util.safehasattr(repo.manifestlog, 'datastore'):
70 if hasattr(repo.manifestlog, 'datastore'):
71 71 localdata, shareddata = _getmanifeststores(repo)
72 72 lpackpath, ldstores, lhstores = localdata
73 73 spackpath, sdstores, shstores = shareddata
@@ -107,7 +107,7 b' def incrementalrepack(repo, options=None'
107 107 """This repacks the repo by looking at the distribution of pack files in the
108 108 repo and performing the most minimal repack to keep the repo in good shape.
109 109 """
110 if util.safehasattr(repo, 'shareddatastores'):
110 if hasattr(repo, 'shareddatastores'):
111 111 packpath = shallowutil.getcachepackpath(
112 112 repo, constants.FILEPACK_CATEGORY
113 113 )
@@ -120,7 +120,7 b' def incrementalrepack(repo, options=None'
120 120 options=options,
121 121 )
122 122
123 if util.safehasattr(repo.manifestlog, 'datastore'):
123 if hasattr(repo.manifestlog, 'datastore'):
124 124 localdata, shareddata = _getmanifeststores(repo)
125 125 lpackpath, ldstores, lhstores = localdata
126 126 spackpath, sdstores, shstores = shareddata
@@ -895,7 +895,7 b' class repackentry:'
895 895
896 896
897 897 def repacklockvfs(repo):
898 if util.safehasattr(repo, 'name'):
898 if hasattr(repo, 'name'):
899 899 # Lock in the shared cache so repacks across multiple copies of the same
900 900 # repo are coordinated.
901 901 sharedcachepath = shallowutil.getcachepackpath(
@@ -340,7 +340,7 b' def wraprepo(repo):'
340 340 repo.excludepattern = repo.ui.configlist(
341 341 b"remotefilelog", b"excludepattern", None
342 342 )
343 if not util.safehasattr(repo, 'connectionpool'):
343 if not hasattr(repo, 'connectionpool'):
344 344 repo.connectionpool = connectionpool.connectionpool(repo)
345 345
346 346 if repo.includepattern or repo.excludepattern:
@@ -255,7 +255,7 b' def wrapprintbookmarks(orig, ui, repo, f'
255 255
256 256
257 257 def extsetup(ui):
258 extensions.wrapfunction(bookmarks, b'_printbookmarks', wrapprintbookmarks)
258 extensions.wrapfunction(bookmarks, '_printbookmarks', wrapprintbookmarks)
259 259
260 260
261 261 def reposetup(ui, repo):
@@ -159,7 +159,7 b' def extsetup(ui):'
159 159 else:
160 160 hg.repo_schemes[scheme] = ShortRepository(url, scheme, t)
161 161
162 extensions.wrapfunction(urlutil, b'hasdriveletter', hasdriveletter)
162 extensions.wrapfunction(urlutil, 'hasdriveletter', hasdriveletter)
163 163
164 164
165 165 @command(b'debugexpandscheme', norepo=True)
@@ -162,9 +162,9 b' def clone(orig, ui, source, *args, **opt'
162 162
163 163
164 164 def extsetup(ui):
165 extensions.wrapfunction(bookmarks, b'_getbkfile', getbkfile)
166 extensions.wrapfunction(bookmarks.bmstore, b'_recordchange', recordchange)
167 extensions.wrapfunction(bookmarks.bmstore, b'_writerepo', writerepo)
165 extensions.wrapfunction(bookmarks, '_getbkfile', getbkfile)
166 extensions.wrapfunction(bookmarks.bmstore, '_recordchange', recordchange)
167 extensions.wrapfunction(bookmarks.bmstore, '_writerepo', writerepo)
168 168 extensions.wrapcommand(commands.table, b'clone', clone)
169 169
170 170
@@ -73,7 +73,6 b' certain files::'
73 73
74 74
75 75 from mercurial.i18n import _
76 from mercurial.pycompat import setattr
77 76 from mercurial import (
78 77 cmdutil,
79 78 commands,
@@ -146,7 +145,7 b' def _setuplog(ui):'
146 145 revs = revs.filter(ctxmatch)
147 146 return revs
148 147
149 extensions.wrapfunction(logcmdutil, b'_initialrevs', _initialrevs)
148 extensions.wrapfunction(logcmdutil, '_initialrevs', _initialrevs)
150 149
151 150
152 151 def _clonesparsecmd(orig, ui, repo, *args, **opts):
@@ -170,7 +169,7 b' def _clonesparsecmd(orig, ui, repo, *arg'
170 169 )
171 170 return orig(ctx, *args, **kwargs)
172 171
173 extensions.wrapfunction(mergemod, b'update', clonesparse)
172 extensions.wrapfunction(mergemod, 'update', clonesparse)
174 173 return orig(ui, repo, *args, **opts)
175 174
176 175
@@ -22,7 +22,6 b' from mercurial import ('
22 22 error,
23 23 hg,
24 24 logcmdutil,
25 pycompat,
26 25 registrar,
27 26 revsetlang,
28 27 rewriteutil,
@@ -65,10 +64,9 b' def split(ui, repo, *revs, **opts):'
65 64 By default, rebase connected non-obsoleted descendants onto the new
66 65 changeset. Use --no-rebase to avoid the rebase.
67 66 """
68 opts = pycompat.byteskwargs(opts)
69 67 revlist = []
70 if opts.get(b'rev'):
71 revlist.append(opts.get(b'rev'))
68 if opts.get('rev'):
69 revlist.append(opts.get('rev'))
72 70 revlist.extend(revs)
73 71 with repo.wlock(), repo.lock():
74 72 tr = repo.transaction(b'split')
@@ -89,7 +87,7 b' def split(ui, repo, *revs, **opts):'
89 87 if ctx.node() is None:
90 88 raise error.InputError(_(b'cannot split working directory'))
91 89
92 if opts.get(b'rebase'):
90 if opts.get('rebase'):
93 91 # Skip obsoleted descendants and their descendants so the rebase
94 92 # won't cause conflicts for sure.
95 93 descendants = list(repo.revs(b'(%d::) - (%d)', rev, rev))
@@ -116,7 +114,7 b' def split(ui, repo, *revs, **opts):'
116 114 wnode = repo[b'.'].node()
117 115 top = None
118 116 try:
119 top = dosplit(ui, repo, tr, ctx, opts)
117 top = dosplit(ui, repo, tr, ctx, **opts)
120 118 finally:
121 119 # top is None: split failed, need update --clean recovery.
122 120 # wnode == ctx.node(): wnode split, no need to update.
@@ -128,7 +126,7 b' def split(ui, repo, *revs, **opts):'
128 126 dorebase(ui, repo, torebase, top)
129 127
130 128
131 def dosplit(ui, repo, tr, ctx, opts):
129 def dosplit(ui, repo, tr, ctx, **opts):
132 130 committed = [] # [ctx]
133 131
134 132 # Set working parent to ctx.p1(), and keep working copy as ctx's content
@@ -166,13 +164,13 b' def dosplit(ui, repo, tr, ctx, opts):'
166 164 ) % short(ctx.node())
167 165 opts.update(
168 166 {
169 b'edit': True,
170 b'interactive': True,
171 b'message': header + ctx.description(),
167 'edit': True,
168 'interactive': True,
169 'message': header + ctx.description(),
172 170 }
173 171 )
174 172 origctx = repo[b'.']
175 commands.commit(ui, repo, **pycompat.strkwargs(opts))
173 commands.commit(ui, repo, **opts)
176 174 newctx = repo[b'.']
177 175 # Ensure user didn't do a "no-op" split (such as deselecting
178 176 # everything).
@@ -1330,11 +1330,11 b' def verifierinit(orig, self, *args, **kw'
1330 1330 def extsetup(ui):
1331 1331 localrepo.featuresetupfuncs.add(featuresetup)
1332 1332 extensions.wrapfunction(
1333 localrepo, b'newreporequirements', newreporequirements
1333 localrepo, 'newreporequirements', newreporequirements
1334 1334 )
1335 extensions.wrapfunction(localrepo, b'makefilestorage', makefilestorage)
1336 extensions.wrapfunction(localrepo, b'makemain', makemain)
1337 extensions.wrapfunction(verify.verifier, b'__init__', verifierinit)
1335 extensions.wrapfunction(localrepo, 'makefilestorage', makefilestorage)
1336 extensions.wrapfunction(localrepo, 'makemain', makemain)
1337 extensions.wrapfunction(verify.verifier, '__init__', verifierinit)
1338 1338
1339 1339
1340 1340 def reposetup(ui, repo):
@@ -152,7 +152,6 b' def uncommit(ui, repo, *pats, **opts):'
152 152 """
153 153 cmdutil.check_note_size(opts)
154 154 cmdutil.resolve_commit_options(ui, opts)
155 opts = pycompat.byteskwargs(opts)
156 155
157 156 with repo.wlock(), repo.lock():
158 157
@@ -160,7 +159,7 b' def uncommit(ui, repo, *pats, **opts):'
160 159 m, a, r, d = st.modified, st.added, st.removed, st.deleted
161 160 isdirtypath = any(set(m + a + r + d) & set(pats))
162 161 allowdirtywcopy = opts[
163 b'allow_dirty_working_copy'
162 'allow_dirty_working_copy'
164 163 ] or repo.ui.configbool(b'experimental', b'uncommitondirtywdir')
165 164 if not allowdirtywcopy and (not pats or isdirtypath):
166 165 cmdutil.bailifchanged(
@@ -172,7 +171,7 b' def uncommit(ui, repo, *pats, **opts):'
172 171 if len(old.parents()) > 1:
173 172 raise error.InputError(_(b"cannot uncommit merge changeset"))
174 173
175 match = scmutil.match(old, pats, opts)
174 match = scmutil.match(old, pats, pycompat.byteskwargs(opts))
176 175
177 176 # Check all explicitly given files; abort if there's a problem.
178 177 if match.files():
@@ -203,14 +202,14 b' def uncommit(ui, repo, *pats, **opts):'
203 202 )
204 203
205 204 with repo.transaction(b'uncommit'):
206 if not (opts[b'message'] or opts[b'logfile']):
207 opts[b'message'] = old.description()
208 message = cmdutil.logmessage(ui, opts)
205 if not (opts['message'] or opts['logfile']):
206 opts['message'] = old.description()
207 message = cmdutil.logmessage(ui, pycompat.byteskwargs(opts))
209 208
210 209 keepcommit = pats
211 210 if not keepcommit:
212 if opts.get(b'keep') is not None:
213 keepcommit = opts.get(b'keep')
211 if opts.get('keep') is not None:
212 keepcommit = opts.get('keep')
214 213 else:
215 214 keepcommit = ui.configbool(
216 215 b'experimental', b'uncommit.keep'
@@ -221,8 +220,8 b' def uncommit(ui, repo, *pats, **opts):'
221 220 match,
222 221 keepcommit,
223 222 message=message,
224 user=opts.get(b'user'),
225 date=opts.get(b'date'),
223 user=opts.get('user'),
224 date=opts.get('date'),
226 225 )
227 226 if newid is None:
228 227 ui.status(_(b"nothing to uncommit\n"))
@@ -49,7 +49,6 b' import os'
49 49 import sys
50 50
51 51 from mercurial.i18n import _
52 from mercurial.pycompat import getattr, setattr
53 52 from mercurial import (
54 53 encoding,
55 54 error,
@@ -233,10 +233,10 b' def cleanupafterdispatch(orig, ui, optio'
233 233 server.close()
234 234
235 235
236 extensions.wrapfunction(dispatch, b'_runcommand', cleanupafterdispatch)
236 extensions.wrapfunction(dispatch, '_runcommand', cleanupafterdispatch)
237 237
238 extensions.wrapfunction(uimod.ui, b'config', config)
239 extensions.wrapfunction(uimod.ui, b'configitems', configitems)
240 extensions.wrapfunction(uimod.ui, b'configsuboptions', configsuboptions)
241 extensions.wrapfunction(hg, b'defaultdest', defaultdest)
242 extensions.wrapfunction(servermod, b'create_server', zc_create_server)
238 extensions.wrapfunction(uimod.ui, 'config', config)
239 extensions.wrapfunction(uimod.ui, 'configitems', configitems)
240 extensions.wrapfunction(uimod.ui, 'configsuboptions', configsuboptions)
241 extensions.wrapfunction(hg, 'defaultdest', defaultdest)
242 extensions.wrapfunction(servermod, 'create_server', zc_create_server)
@@ -5875,13 +5875,6 b' msgid " store some pushes in a remote bl'
5875 5875 msgstr "共有元情報を相対パスで保持 (実験的実装)"
5876 5876
5877 5877 msgid ""
5878 " [infinitepush]\n"
5879 " # Server-side and client-side option. Pattern of the infinitepush "
5880 "bookmark\n"
5881 " branchpattern = PATTERN"
5882 msgstr ""
5883
5884 msgid ""
5885 5878 " # Server or client\n"
5886 5879 " server = False"
5887 5880 msgstr ""
@@ -5973,12 +5966,6 b' msgid ""'
5973 5966 msgstr ""
5974 5967
5975 5968 msgid ""
5976 " # Instructs infinitepush to forward all received bundle2 parts to the\n"
5977 " # bundle for storage. Defaults to False.\n"
5978 " storeallparts = True"
5979 msgstr ""
5980
5981 msgid ""
5982 5969 " # routes each incoming push to the bundlestore. defaults to False\n"
5983 5970 " pushtobundlestore = True"
5984 5971 msgstr ""
@@ -5991,24 +5978,10 b' msgid ""'
5991 5978 " bookmarks = True\n"
5992 5979 msgstr ""
5993 5980
5994 msgid "please set infinitepush.sqlhost"
5995 msgstr ""
5996
5997 msgid "please set infinitepush.reponame"
5998 msgstr ""
5999
6000 5981 #, fuzzy, python-format
6001 5982 msgid "invalid log level %s"
6002 5983 msgstr "不正なローカルアドレス: %s"
6003 5984
6004 #, fuzzy, python-format
6005 msgid "unknown infinitepush store type specified %s"
6006 msgstr "--type に未知のバンドル種別が指定されました"
6007
6008 #, fuzzy, python-format
6009 msgid "unknown infinitepush index type specified %s"
6010 msgstr "--type に未知のバンドル種別が指定されました"
6011
6012 5985 #, fuzzy
6013 5986 msgid "force push to go to bundle store (EXPERIMENTAL)"
6014 5987 msgstr "表示対象リビジョン"
@@ -6019,10 +5992,6 b' msgstr "\xe3\x83\x87\xe3\x83\x95\xe3\x82\xa9\xe3\x83\xab\xe3\x83\x88\xe3\x81\xae\xe9\x80\xa3\xe6\x90\xba\xe5\x85\x88\xe3\x81\x8c\xe8\xa8\xad\xe5\xae\x9a\xe3\x81\x95\xe3\x82\x8c\xe3\x81\xa6\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93"'
6019 5992 msgid "see 'hg help config.paths'"
6020 5993 msgstr "詳細は 'hg help config.paths' 参照"
6021 5994
6022 #, fuzzy
6023 msgid "infinitepush bookmark '{}' does not exist in path '{}'"
6024 msgstr "ブックマーク '%s' は存在しません"
6025
6026 5995 msgid "no changes found\n"
6027 5996 msgstr "差分はありません\n"
6028 5997
@@ -5940,12 +5940,6 b' msgid " store some pushes in a remote bl'
5940 5940 msgstr ""
5941 5941
5942 5942 msgid ""
5943 " [infinitepush]\n"
5944 " # Server-side and client-side option. Pattern of the infinitepush bookmark\n"
5945 " branchpattern = PATTERN"
5946 msgstr ""
5947
5948 msgid ""
5949 5943 " # Server or client\n"
5950 5944 " server = False"
5951 5945 msgstr ""
@@ -6034,12 +6028,6 b' msgid ""'
6034 6028 msgstr ""
6035 6029
6036 6030 msgid ""
6037 " # Instructs infinitepush to forward all received bundle2 parts to the\n"
6038 " # bundle for storage. Defaults to False.\n"
6039 " storeallparts = True"
6040 msgstr ""
6041
6042 msgid ""
6043 6031 " # routes each incoming push to the bundlestore. defaults to False\n"
6044 6032 " pushtobundlestore = True"
6045 6033 msgstr ""
@@ -6052,24 +6040,10 b' msgid ""'
6052 6040 " bookmarks = True\n"
6053 6041 msgstr ""
6054 6042
6055 msgid "please set infinitepush.sqlhost"
6056 msgstr ""
6057
6058 msgid "please set infinitepush.reponame"
6059 msgstr ""
6060
6061 6043 #, python-format
6062 6044 msgid "invalid log level %s"
6063 6045 msgstr ""
6064 6046
6065 #, python-format
6066 msgid "unknown infinitepush store type specified %s"
6067 msgstr ""
6068
6069 #, python-format
6070 msgid "unknown infinitepush index type specified %s"
6071 msgstr ""
6072
6073 6047 msgid "force push to go to bundle store (EXPERIMENTAL)"
6074 6048 msgstr ""
6075 6049
@@ -6079,9 +6053,6 b' msgstr "o caminho default do reposit\xc3\xb3rio n\xc3\xa3o foi configurado!"'
6079 6053 msgid "see 'hg help config.paths'"
6080 6054 msgstr "veja 'hg help config.paths'"
6081 6055
6082 msgid "infinitepush bookmark '{}' does not exist in path '{}'"
6083 msgstr ""
6084
6085 6056 msgid "no changes found\n"
6086 6057 msgstr "nenhuma alteração encontrada\n"
6087 6058
@@ -14,7 +14,6 b' from .node import ('
14 14 hex,
15 15 short,
16 16 )
17 from .pycompat import getattr
18 17 from . import (
19 18 encoding,
20 19 error,
@@ -980,7 +980,7 b' class unbundle20(unpackermixin):'
980 980
981 981 def close(self):
982 982 """close underlying file"""
983 if util.safehasattr(self._fp, 'close'):
983 if hasattr(self._fp, 'close'):
984 984 return self._fp.close()
985 985
986 986
@@ -1068,7 +1068,7 b' class bundlepart:'
1068 1068
1069 1069 The new part have the very same content but no partid assigned yet.
1070 1070 Parts with generated data cannot be copied."""
1071 assert not util.safehasattr(self.data, 'next')
1071 assert not hasattr(self.data, 'next')
1072 1072 return self.__class__(
1073 1073 self.type,
1074 1074 self._mandatoryparams,
@@ -1137,9 +1137,7 b' class bundlepart:'
1137 1137 msg.append(b')')
1138 1138 if not self.data:
1139 1139 msg.append(b' empty payload')
1140 elif util.safehasattr(self.data, 'next') or util.safehasattr(
1141 self.data, b'__next__'
1142 ):
1140 elif hasattr(self.data, 'next') or hasattr(self.data, '__next__'):
1143 1141 msg.append(b' streamed payload')
1144 1142 else:
1145 1143 msg.append(b' %i bytes payload' % len(self.data))
@@ -1233,9 +1231,7 b' class bundlepart:'
1233 1231 Exists to handle the different methods to provide data to a part."""
1234 1232 # we only support fixed size data now.
1235 1233 # This will be improved in the future.
1236 if util.safehasattr(self.data, 'next') or util.safehasattr(
1237 self.data, '__next__'
1238 ):
1234 if hasattr(self.data, 'next') or hasattr(self.data, '__next__'):
1239 1235 buff = util.chunkbuffer(self.data)
1240 1236 chunk = buff.read(preferedchunksize)
1241 1237 while chunk:
@@ -1380,9 +1376,7 b' class unbundlepart(unpackermixin):'
1380 1376
1381 1377 def __init__(self, ui, header, fp):
1382 1378 super(unbundlepart, self).__init__(fp)
1383 self._seekable = util.safehasattr(fp, 'seek') and util.safehasattr(
1384 fp, 'tell'
1385 )
1379 self._seekable = hasattr(fp, 'seek') and hasattr(fp, 'tell')
1386 1380 self.ui = ui
1387 1381 # unbundle state attr
1388 1382 self._headerdata = header
@@ -12,6 +12,7 b' were part of the actual repository.'
12 12 """
13 13
14 14
15 import contextlib
15 16 import os
16 17 import shutil
17 18
@@ -108,7 +109,15 b' class bundlerevlog(revlog.revlog):'
108 109 self.bundlerevs.add(n)
109 110 n += 1
110 111
111 def _chunk(self, rev, df=None):
112 @contextlib.contextmanager
113 def reading(self):
114 if self.repotiprev < 0:
115 yield
116 else:
117 with super().reading() as x:
118 yield x
119
120 def _chunk(self, rev):
112 121 # Warning: in case of bundle, the diff is against what we stored as
113 122 # delta base, not against rev - 1
114 123 # XXX: could use some caching
@@ -129,7 +138,7 b' class bundlerevlog(revlog.revlog):'
129 138
130 139 return mdiff.textdiff(self.rawdata(rev1), self.rawdata(rev2))
131 140
132 def _rawtext(self, node, rev, _df=None):
141 def _rawtext(self, node, rev):
133 142 if rev is None:
134 143 rev = self.rev(node)
135 144 validated = False
@@ -138,8 +147,11 b' class bundlerevlog(revlog.revlog):'
138 147 iterrev = rev
139 148 # reconstruct the revision if it is from a changegroup
140 149 while iterrev > self.repotiprev:
141 if self._revisioncache and self._revisioncache[1] == iterrev:
142 rawtext = self._revisioncache[2]
150 if (
151 self._inner._revisioncache
152 and self._inner._revisioncache[1] == iterrev
153 ):
154 rawtext = self._inner._revisioncache[2]
143 155 break
144 156 chain.append(iterrev)
145 157 iterrev = self.index[iterrev][3]
@@ -147,7 +159,8 b' class bundlerevlog(revlog.revlog):'
147 159 rawtext = b''
148 160 elif rawtext is None:
149 161 r = super(bundlerevlog, self)._rawtext(
150 self.node(iterrev), iterrev, _df=_df
162 self.node(iterrev),
163 iterrev,
151 164 )
152 165 __, rawtext, validated = r
153 166 if chain:
@@ -194,6 +207,8 b' class bundlemanifest(bundlerevlog, manif'
194 207 dirlogstarts=None,
195 208 dir=b'',
196 209 ):
210 # XXX manifestrevlog is not actually a revlog , so mixing it with
211 # bundlerevlog is not a good idea.
197 212 manifest.manifestrevlog.__init__(self, nodeconstants, opener, tree=dir)
198 213 bundlerevlog.__init__(
199 214 self,
@@ -245,7 +260,7 b' class bundlepeer(localrepo.localpeer):'
245 260 class bundlephasecache(phases.phasecache):
246 261 def __init__(self, *args, **kwargs):
247 262 super(bundlephasecache, self).__init__(*args, **kwargs)
248 if util.safehasattr(self, 'opener'):
263 if hasattr(self, 'opener'):
249 264 self.opener = vfsmod.readonlyvfs(self.opener)
250 265
251 266 def write(self):
@@ -1043,7 +1043,7 b' def _resolvenarrowrevisioninfo('
1043 1043 return i
1044 1044 # We failed to resolve a parent for this node, so
1045 1045 # we crash the changegroup construction.
1046 if util.safehasattr(store, 'target'):
1046 if hasattr(store, 'target'):
1047 1047 target = store.display_id
1048 1048 else:
1049 1049 # some revlog not actually a revlog
@@ -91,102 +91,6 b' def stripdesc(desc):'
91 91 return b'\n'.join([l.rstrip() for l in desc.splitlines()]).strip(b'\n')
92 92
93 93
94 class appender:
95 """the changelog index must be updated last on disk, so we use this class
96 to delay writes to it"""
97
98 def __init__(self, vfs, name, mode, buf):
99 self.data = buf
100 fp = vfs(name, mode)
101 self.fp = fp
102 self.offset = fp.tell()
103 self.size = vfs.fstat(fp).st_size
104 self._end = self.size
105
106 def end(self):
107 return self._end
108
109 def tell(self):
110 return self.offset
111
112 def flush(self):
113 pass
114
115 @property
116 def closed(self):
117 return self.fp.closed
118
119 def close(self):
120 self.fp.close()
121
122 def seek(self, offset, whence=0):
123 '''virtual file offset spans real file and data'''
124 if whence == 0:
125 self.offset = offset
126 elif whence == 1:
127 self.offset += offset
128 elif whence == 2:
129 self.offset = self.end() + offset
130 if self.offset < self.size:
131 self.fp.seek(self.offset)
132
133 def read(self, count=-1):
134 '''only trick here is reads that span real file and data'''
135 ret = b""
136 if self.offset < self.size:
137 s = self.fp.read(count)
138 ret = s
139 self.offset += len(s)
140 if count > 0:
141 count -= len(s)
142 if count != 0:
143 doff = self.offset - self.size
144 self.data.insert(0, b"".join(self.data))
145 del self.data[1:]
146 s = self.data[0][doff : doff + count]
147 self.offset += len(s)
148 ret += s
149 return ret
150
151 def write(self, s):
152 self.data.append(bytes(s))
153 self.offset += len(s)
154 self._end += len(s)
155
156 def __enter__(self):
157 self.fp.__enter__()
158 return self
159
160 def __exit__(self, *args):
161 return self.fp.__exit__(*args)
162
163
164 class _divertopener:
165 def __init__(self, opener, target):
166 self._opener = opener
167 self._target = target
168
169 def __call__(self, name, mode=b'r', checkambig=False, **kwargs):
170 if name != self._target:
171 return self._opener(name, mode, **kwargs)
172 return self._opener(name + b".a", mode, **kwargs)
173
174 def __getattr__(self, attr):
175 return getattr(self._opener, attr)
176
177
178 def _delayopener(opener, target, buf):
179 """build an opener that stores chunks in 'buf' instead of 'target'"""
180
181 def _delay(name, mode=b'r', checkambig=False, **kwargs):
182 if name != target:
183 return opener(name, mode, **kwargs)
184 assert not kwargs
185 return appender(opener, name, mode, buf)
186
187 return _delay
188
189
190 94 @attr.s
191 95 class _changelogrevision:
192 96 # Extensions might modify _defaultextra, so let the constructor below pass
@@ -410,17 +314,14 b' class changelog(revlog.revlog):'
410 314 # changelogs don't benefit from generaldelta.
411 315
412 316 self._format_flags &= ~revlog.FLAG_GENERALDELTA
413 self._generaldelta = False
317 self.delta_config.general_delta = False
414 318
415 319 # Delta chains for changelogs tend to be very small because entries
416 320 # tend to be small and don't delta well with each. So disable delta
417 321 # chains.
418 322 self._storedeltachains = False
419 323
420 self._realopener = opener
421 self._delayed = False
422 self._delaybuf = None
423 self._divert = False
324 self._v2_delayed = False
424 325 self._filteredrevs = frozenset()
425 326 self._filteredrevs_hashcache = {}
426 327 self._copiesstorage = opener.options.get(b'copies-storage')
@@ -437,83 +338,50 b' class changelog(revlog.revlog):'
437 338 self._filteredrevs_hashcache = {}
438 339
439 340 def _write_docket(self, tr):
440 if not self._delayed:
341 if not self._v2_delayed:
441 342 super(changelog, self)._write_docket(tr)
442 343
443 344 def delayupdate(self, tr):
444 345 """delay visibility of index updates to other readers"""
445 if self._docket is None and not self._delayed:
446 if len(self) == 0:
447 self._divert = True
448 if self._realopener.exists(self._indexfile + b'.a'):
449 self._realopener.unlink(self._indexfile + b'.a')
450 self.opener = _divertopener(self._realopener, self._indexfile)
451 else:
452 self._delaybuf = []
453 self.opener = _delayopener(
454 self._realopener, self._indexfile, self._delaybuf
455 )
456 self._segmentfile.opener = self.opener
457 self._segmentfile_sidedata.opener = self.opener
458 self._delayed = True
346 assert not self._inner.is_open
347 if self._docket is not None:
348 self._v2_delayed = True
349 else:
350 new_index = self._inner.delay()
351 if new_index is not None:
352 self._indexfile = new_index
353 tr.registertmp(new_index)
459 354 tr.addpending(b'cl-%i' % id(self), self._writepending)
460 355 tr.addfinalize(b'cl-%i' % id(self), self._finalize)
461 356
462 357 def _finalize(self, tr):
463 358 """finalize index updates"""
464 self._delayed = False
465 self.opener = self._realopener
466 self._segmentfile.opener = self.opener
467 self._segmentfile_sidedata.opener = self.opener
468 # move redirected index data back into place
359 assert not self._inner.is_open
469 360 if self._docket is not None:
470 self._write_docket(tr)
471 elif self._divert:
472 assert not self._delaybuf
473 tmpname = self._indexfile + b".a"
474 nfile = self.opener.open(tmpname)
475 nfile.close()
476 self.opener.rename(tmpname, self._indexfile, checkambig=True)
477 elif self._delaybuf:
478 fp = self.opener(self._indexfile, b'a', checkambig=True)
479 fp.write(b"".join(self._delaybuf))
480 fp.close()
481 self._delaybuf = None
482 self._divert = False
483 # split when we're done
484 self._enforceinlinesize(tr, side_write=False)
361 self._docket.write(tr)
362 self._v2_delayed = False
363 else:
364 new_index_file = self._inner.finalize_pending()
365 self._indexfile = new_index_file
366 # split when we're done
367 self._enforceinlinesize(tr, side_write=False)
485 368
486 369 def _writepending(self, tr):
487 370 """create a file containing the unfinalized state for
488 371 pretxnchangegroup"""
372 assert not self._inner.is_open
489 373 if self._docket:
490 return self._docket.write(tr, pending=True)
491 if self._delaybuf:
492 # make a temporary copy of the index
493 fp1 = self._realopener(self._indexfile)
494 pendingfilename = self._indexfile + b".a"
495 # register as a temp file to ensure cleanup on failure
496 tr.registertmp(pendingfilename)
497 # write existing data
498 fp2 = self._realopener(pendingfilename, b"w")
499 fp2.write(fp1.read())
500 # add pending data
501 fp2.write(b"".join(self._delaybuf))
502 fp2.close()
503 # switch modes so finalize can simply rename
504 self._delaybuf = None
505 self._divert = True
506 self.opener = _divertopener(self._realopener, self._indexfile)
507 self._segmentfile.opener = self.opener
508 self._segmentfile_sidedata.opener = self.opener
509
510 if self._divert:
511 return True
512
513 return False
374 any_pending = self._docket.write(tr, pending=True)
375 self._v2_delayed = False
376 else:
377 new_index, any_pending = self._inner.write_pending()
378 if new_index is not None:
379 self._indexfile = new_index
380 tr.registertmp(new_index)
381 return any_pending
514 382
515 383 def _enforceinlinesize(self, tr, side_write=True):
516 if not self._delayed:
384 if not self.is_delaying:
517 385 revlog.revlog._enforceinlinesize(self, tr, side_write=side_write)
518 386
519 387 def read(self, nodeorrev):
@@ -49,10 +49,6 b' import struct'
49 49 import time
50 50
51 51 from .i18n import _
52 from .pycompat import (
53 getattr,
54 setattr,
55 )
56 52 from .node import hex
57 53
58 54 from . import (
@@ -236,7 +232,7 b' def _newchgui(srcui, csystem, attachio):'
236 232 # will behave differently (i.e. write to stdout).
237 233 if (
238 234 out is not self.fout
239 or not util.safehasattr(self.fout, 'fileno')
235 or not hasattr(self.fout, 'fileno')
240 236 or self.fout.fileno() != procutil.stdout.fileno()
241 237 or self._finoutredirected
242 238 ):
@@ -260,9 +256,9 b' def _loadnewui(srcui, args, cdebug):'
260 256 from . import dispatch # avoid cycle
261 257
262 258 newui = srcui.__class__.load()
263 for a in [b'fin', b'fout', b'ferr', b'environ']:
259 for a in ['fin', 'fout', 'ferr', 'environ']:
264 260 setattr(newui, a, getattr(srcui, a))
265 if util.safehasattr(srcui, '_csystem'):
261 if hasattr(srcui, '_csystem'):
266 262 newui._csystem = srcui._csystem
267 263
268 264 # command line args
@@ -348,9 +344,9 b' class channeledsystem:'
348 344
349 345 _iochannels = [
350 346 # server.ch, ui.fp, mode
351 (b'cin', b'fin', 'rb'),
352 (b'cout', b'fout', 'wb'),
353 (b'cerr', b'ferr', 'wb'),
347 ('cin', 'fin', 'rb'),
348 ('cout', 'fout', 'wb'),
349 ('cerr', 'ferr', 'wb'),
354 350 ]
355 351
356 352
@@ -603,7 +599,7 b' class chgcmdserver(commandserver.server)'
603 599 }
604 600 )
605 601
606 if util.safehasattr(procutil, 'setprocname'):
602 if hasattr(procutil, 'setprocname'):
607 603
608 604 def setprocname(self):
609 605 """Change process title"""
@@ -28,9 +28,7 b' from .node import ('
28 28 short,
29 29 )
30 30 from .pycompat import (
31 getattr,
32 31 open,
33 setattr,
34 32 )
35 33 from .thirdparty import attr
36 34
@@ -813,18 +811,17 b' def tersedir(statuslist, terseargs):'
813 811 # creating a dirnode object for the root of the repo
814 812 rootobj = dirnode(b'')
815 813 pstatus = (
816 b'modified',
817 b'added',
818 b'deleted',
819 b'clean',
820 b'unknown',
821 b'ignored',
822 b'removed',
814 ('modified', b'm'),
815 ('added', b'a'),
816 ('deleted', b'd'),
817 ('clean', b'c'),
818 ('unknown', b'u'),
819 ('ignored', b'i'),
820 ('removed', b'r'),
823 821 )
824 822
825 823 tersedict = {}
826 for attrname in pstatus:
827 statuschar = attrname[0:1]
824 for attrname, statuschar in pstatus:
828 825 for f in getattr(statuslist, attrname):
829 826 rootobj.addfile(f, statuschar)
830 827 tersedict[statuschar] = []
@@ -1007,7 +1004,7 b' def findcmd(cmd, table, strict=True):'
1007 1004 raise error.UnknownCommand(cmd, allcmds)
1008 1005
1009 1006
1010 def changebranch(ui, repo, revs, label, opts):
1007 def changebranch(ui, repo, revs, label, **opts):
1011 1008 """Change the branch name of given revs to label"""
1012 1009
1013 1010 with repo.wlock(), repo.lock(), repo.transaction(b'branches'):
@@ -1026,7 +1023,7 b' def changebranch(ui, repo, revs, label, '
1026 1023 root = repo[roots.first()]
1027 1024 rpb = {parent.branch() for parent in root.parents()}
1028 1025 if (
1029 not opts.get(b'force')
1026 not opts.get('force')
1030 1027 and label not in rpb
1031 1028 and label in repo.branchmap()
1032 1029 ):
@@ -1450,7 +1447,7 b' def openstorage(repo, cmd, file_, opts, '
1450 1447 if returnrevlog:
1451 1448 if isinstance(r, revlog.revlog):
1452 1449 pass
1453 elif util.safehasattr(r, '_revlog'):
1450 elif hasattr(r, '_revlog'):
1454 1451 r = r._revlog # pytype: disable=attribute-error
1455 1452 elif r is not None:
1456 1453 raise error.InputError(
@@ -3329,9 +3326,7 b' def buildcommittext(repo, ctx, subs, ext'
3329 3326 return b"\n".join(edittext)
3330 3327
3331 3328
3332 def commitstatus(repo, node, branch, bheads=None, tip=None, opts=None):
3333 if opts is None:
3334 opts = {}
3329 def commitstatus(repo, node, branch, bheads=None, tip=None, **opts):
3335 3330 ctx = repo[node]
3336 3331 parents = ctx.parents()
3337 3332
@@ -3341,7 +3336,7 b' def commitstatus(repo, node, branch, bhe'
3341 3336 # for most instances
3342 3337 repo.ui.warn(_(b"warning: commit already existed in the repository!\n"))
3343 3338 elif (
3344 not opts.get(b'amend')
3339 not opts.get('amend')
3345 3340 and bheads
3346 3341 and node not in bheads
3347 3342 and not any(
@@ -3378,7 +3373,7 b' def commitstatus(repo, node, branch, bhe'
3378 3373 #
3379 3374 # H H n head merge: head count decreases
3380 3375
3381 if not opts.get(b'close_branch'):
3376 if not opts.get('close_branch'):
3382 3377 for r in parents:
3383 3378 if r.closesbranch() and r.branch() == branch:
3384 3379 repo.ui.status(
@@ -9,7 +9,6 b''
9 9 import re
10 10
11 11 from .i18n import _
12 from .pycompat import getattr
13 12
14 13 from . import (
15 14 encoding,
@@ -18,8 +18,8 b' from .node import ('
18 18 short,
19 19 wdirrev,
20 20 )
21 from .pycompat import open
22 21 from . import (
22 admin_commands as admin_commands_mod,
23 23 archival,
24 24 bookmarks,
25 25 bundle2,
@@ -76,6 +76,7 b' from .utils import ('
76 76
77 77 table = {}
78 78 table.update(debugcommandsmod.command._table)
79 table.update(admin_commands_mod.command._table)
79 80
80 81 command = registrar.command(table)
81 82 INTENT_READONLY = registrar.INTENT_READONLY
@@ -646,8 +647,7 b' def archive(ui, repo, dest, **opts):'
646 647 Returns 0 on success.
647 648 """
648 649
649 opts = pycompat.byteskwargs(opts)
650 rev = opts.get(b'rev')
650 rev = opts.get('rev')
651 651 if rev:
652 652 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
653 653 ctx = logcmdutil.revsingle(repo, rev)
@@ -660,8 +660,8 b' def archive(ui, repo, dest, **opts):'
660 660 if os.path.realpath(dest) == repo.root:
661 661 raise error.InputError(_(b'repository root cannot be destination'))
662 662
663 kind = opts.get(b'type') or archival.guesskind(dest) or b'files'
664 prefix = opts.get(b'prefix')
663 kind = opts.get('type') or archival.guesskind(dest) or b'files'
664 prefix = opts.get('prefix')
665 665
666 666 if dest == b'-':
667 667 if kind == b'files':
@@ -671,16 +671,16 b' def archive(ui, repo, dest, **opts):'
671 671 prefix = os.path.basename(repo.root) + b'-%h'
672 672
673 673 prefix = cmdutil.makefilename(ctx, prefix)
674 match = scmutil.match(ctx, [], opts)
674 match = scmutil.match(ctx, [], pycompat.byteskwargs(opts))
675 675 archival.archive(
676 676 repo,
677 677 dest,
678 678 node,
679 679 kind,
680 not opts.get(b'no_decode'),
680 not opts.get('no_decode'),
681 681 match,
682 682 prefix,
683 subrepos=opts.get(b'subrepos'),
683 subrepos=opts.get('subrepos'),
684 684 )
685 685
686 686
@@ -775,7 +775,6 b' def backout(ui, repo, node=None, rev=Non'
775 775
776 776 def _dobackout(ui, repo, node=None, rev=None, **opts):
777 777 cmdutil.check_incompatible_arguments(opts, 'no_commit', ['commit', 'merge'])
778 opts = pycompat.byteskwargs(opts)
779 778
780 779 if rev and node:
781 780 raise error.InputError(_(b"please specify just one revision"))
@@ -786,9 +785,9 b' def _dobackout(ui, repo, node=None, rev='
786 785 if not rev:
787 786 raise error.InputError(_(b"please specify a revision to backout"))
788 787
789 date = opts.get(b'date')
788 date = opts.get('date')
790 789 if date:
791 opts[b'date'] = dateutil.parsedate(date)
790 opts['date'] = dateutil.parsedate(date)
792 791
793 792 cmdutil.checkunfinished(repo)
794 793 cmdutil.bailifchanged(repo)
@@ -805,16 +804,16 b' def _dobackout(ui, repo, node=None, rev='
805 804 if p1 == repo.nullid:
806 805 raise error.InputError(_(b'cannot backout a change with no parents'))
807 806 if p2 != repo.nullid:
808 if not opts.get(b'parent'):
807 if not opts.get('parent'):
809 808 raise error.InputError(_(b'cannot backout a merge changeset'))
810 p = repo.lookup(opts[b'parent'])
809 p = repo.lookup(opts['parent'])
811 810 if p not in (p1, p2):
812 811 raise error.InputError(
813 812 _(b'%s is not a parent of %s') % (short(p), short(node))
814 813 )
815 814 parent = p
816 815 else:
817 if opts.get(b'parent'):
816 if opts.get('parent'):
818 817 raise error.InputError(
819 818 _(b'cannot use --parent on non-merge changeset')
820 819 )
@@ -824,9 +823,9 b' def _dobackout(ui, repo, node=None, rev='
824 823 branch = repo.dirstate.branch()
825 824 bheads = repo.branchheads(branch)
826 825 rctx = scmutil.revsingle(repo, hex(parent))
827 if not opts.get(b'merge') and op1 != node:
826 if not opts.get('merge') and op1 != node:
828 827 with repo.transaction(b"backout"):
829 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')}
828 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')}
830 829 with ui.configoverride(overrides, b'backout'):
831 830 stats = mergemod.back_out(ctx, parent=repo[parent])
832 831 repo.setparents(op1, op2)
@@ -841,7 +840,7 b' def _dobackout(ui, repo, node=None, rev='
841 840 repo.dirstate.setbranch(branch, repo.currenttransaction())
842 841 cmdutil.revert(ui, repo, rctx)
843 842
844 if opts.get(b'no_commit'):
843 if opts.get('no_commit'):
845 844 msg = _(b"changeset %s backed out, don't forget to commit.\n")
846 845 ui.status(msg % short(node))
847 846 return 0
@@ -862,7 +861,9 b' def _dobackout(ui, repo, node=None, rev='
862 861 # save to detect changes
863 862 tip = repo.changelog.tip()
864 863
865 newnode = cmdutil.commit(ui, repo, commitfunc, [], opts)
864 newnode = cmdutil.commit(
865 ui, repo, commitfunc, [], pycompat.byteskwargs(opts)
866 )
866 867 if not newnode:
867 868 ui.status(_(b"nothing changed\n"))
868 869 return 1
@@ -875,10 +876,10 b' def _dobackout(ui, repo, node=None, rev='
875 876 _(b'changeset %s backs out changeset %s\n')
876 877 % (nice(newnode), nice(node))
877 878 )
878 if opts.get(b'merge') and op1 != node:
879 if opts.get('merge') and op1 != node:
879 880 hg.clean(repo, op1, show_stats=False)
880 881 ui.status(_(b'merging with changeset %s\n') % nice(newnode))
881 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')}
882 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')}
882 883 with ui.configoverride(overrides, b'backout'):
883 884 return hg.merge(repo[b'tip'])
884 885 return 0
@@ -1239,56 +1240,55 b' def bookmark(ui, repo, *names, **opts):'
1239 1240
1240 1241 hg book -ql .
1241 1242 """
1242 opts = pycompat.byteskwargs(opts)
1243 force = opts.get(b'force')
1244 rev = opts.get(b'rev')
1245 inactive = opts.get(b'inactive') # meaning add/rename to inactive bookmark
1246
1247 action = cmdutil.check_at_most_one_arg(opts, b'delete', b'rename', b'list')
1243 force = opts.get('force')
1244 rev = opts.get('rev')
1245 inactive = opts.get('inactive') # meaning add/rename to inactive bookmark
1246
1247 action = cmdutil.check_at_most_one_arg(opts, 'delete', 'rename', 'list')
1248 1248 if action:
1249 cmdutil.check_incompatible_arguments(opts, action, [b'rev'])
1249 cmdutil.check_incompatible_arguments(opts, action, ['rev'])
1250 1250 elif names or rev:
1251 action = b'add'
1251 action = 'add'
1252 1252 elif inactive:
1253 action = b'inactive' # meaning deactivate
1253 action = 'inactive' # meaning deactivate
1254 1254 else:
1255 action = b'list'
1256
1257 cmdutil.check_incompatible_arguments(
1258 opts, b'inactive', [b'delete', b'list']
1259 )
1260 if not names and action in {b'add', b'delete'}:
1255 action = 'list'
1256
1257 cmdutil.check_incompatible_arguments(opts, 'inactive', ['delete', 'list'])
1258 if not names and action in {'add', 'delete'}:
1261 1259 raise error.InputError(_(b"bookmark name required"))
1262 1260
1263 if action in {b'add', b'delete', b'rename', b'inactive'}:
1261 if action in {'add', 'delete', 'rename', 'inactive'}:
1264 1262 with repo.wlock(), repo.lock(), repo.transaction(b'bookmark') as tr:
1265 if action == b'delete':
1263 if action == 'delete':
1266 1264 names = pycompat.maplist(repo._bookmarks.expandname, names)
1267 1265 bookmarks.delete(repo, tr, names)
1268 elif action == b'rename':
1266 elif action == 'rename':
1269 1267 if not names:
1270 1268 raise error.InputError(_(b"new bookmark name required"))
1271 1269 elif len(names) > 1:
1272 1270 raise error.InputError(
1273 1271 _(b"only one new bookmark name allowed")
1274 1272 )
1275 oldname = repo._bookmarks.expandname(opts[b'rename'])
1273 oldname = repo._bookmarks.expandname(opts['rename'])
1276 1274 bookmarks.rename(repo, tr, oldname, names[0], force, inactive)
1277 elif action == b'add':
1275 elif action == 'add':
1278 1276 bookmarks.addbookmarks(repo, tr, names, rev, force, inactive)
1279 elif action == b'inactive':
1277 elif action == 'inactive':
1280 1278 if len(repo._bookmarks) == 0:
1281 1279 ui.status(_(b"no bookmarks set\n"))
1282 1280 elif not repo._activebookmark:
1283 1281 ui.status(_(b"no active bookmark\n"))
1284 1282 else:
1285 1283 bookmarks.deactivate(repo)
1286 elif action == b'list':
1284 elif action == 'list':
1287 1285 names = pycompat.maplist(repo._bookmarks.expandname, names)
1288 with ui.formatter(b'bookmarks', opts) as fm:
1286 with ui.formatter(b'bookmarks', pycompat.byteskwargs(opts)) as fm:
1289 1287 bookmarks.printbookmarks(ui, repo, fm, names)
1290 1288 else:
1291 raise error.ProgrammingError(b'invalid action: %s' % action)
1289 raise error.ProgrammingError(
1290 b'invalid action: %s' % pycompat.sysbytes(action)
1291 )
1292 1292
1293 1293
1294 1294 @command(
@@ -1340,12 +1340,11 b' def branch(ui, repo, label=None, **opts)'
1340 1340
1341 1341 Returns 0 on success.
1342 1342 """
1343 opts = pycompat.byteskwargs(opts)
1344 revs = opts.get(b'rev')
1343 revs = opts.get('rev')
1345 1344 if label:
1346 1345 label = label.strip()
1347 1346
1348 if not opts.get(b'clean') and not label:
1347 if not opts.get('clean') and not label:
1349 1348 if revs:
1350 1349 raise error.InputError(
1351 1350 _(b"no branch name specified for the revisions")
@@ -1354,7 +1353,7 b' def branch(ui, repo, label=None, **opts)'
1354 1353 return
1355 1354
1356 1355 with repo.wlock():
1357 if opts.get(b'clean'):
1356 if opts.get('clean'):
1358 1357 label = repo[b'.'].branch()
1359 1358 repo.dirstate.setbranch(label, repo.currenttransaction())
1360 1359 ui.status(_(b'reset working directory to branch %s\n') % label)
@@ -1362,9 +1361,9 b' def branch(ui, repo, label=None, **opts)'
1362 1361
1363 1362 scmutil.checknewlabel(repo, label, b'branch')
1364 1363 if revs:
1365 return cmdutil.changebranch(ui, repo, revs, label, opts)
1366
1367 if not opts.get(b'force') and label in repo.branchmap():
1364 return cmdutil.changebranch(ui, repo, revs, label, **opts)
1365
1366 if not opts.get('force') and label in repo.branchmap():
1368 1367 if label not in [p.branch() for p in repo[None].parents()]:
1369 1368 raise error.InputError(
1370 1369 _(b'a branch of the same name already exists'),
@@ -1428,8 +1427,7 b' def branches(ui, repo, active=False, clo'
1428 1427 Returns 0.
1429 1428 """
1430 1429
1431 opts = pycompat.byteskwargs(opts)
1432 revs = opts.get(b'rev')
1430 revs = opts.get('rev')
1433 1431 selectedbranches = None
1434 1432 if revs:
1435 1433 revs = logcmdutil.revrange(repo, revs)
@@ -1437,7 +1435,7 b' def branches(ui, repo, active=False, clo'
1437 1435 selectedbranches = {getbi(r)[0] for r in revs}
1438 1436
1439 1437 ui.pager(b'branches')
1440 fm = ui.formatter(b'branches', opts)
1438 fm = ui.formatter(b'branches', pycompat.byteskwargs(opts))
1441 1439 hexfunc = fm.hexfunc
1442 1440
1443 1441 allheads = set(repo.heads())
@@ -1568,16 +1566,15 b' def bundle(ui, repo, fname, *dests, **op'
1568 1566
1569 1567 Returns 0 on success, 1 if no changes found.
1570 1568 """
1571 opts = pycompat.byteskwargs(opts)
1572 1569
1573 1570 revs = None
1574 if b'rev' in opts:
1575 revstrings = opts[b'rev']
1571 if 'rev' in opts:
1572 revstrings = opts['rev']
1576 1573 revs = logcmdutil.revrange(repo, revstrings)
1577 1574 if revstrings and not revs:
1578 1575 raise error.InputError(_(b'no commits to bundle'))
1579 1576
1580 bundletype = opts.get(b'type', b'bzip2').lower()
1577 bundletype = opts.get('type', b'bzip2').lower()
1581 1578 try:
1582 1579 bundlespec = bundlecaches.parsebundlespec(
1583 1580 repo, bundletype, strict=False
@@ -1596,28 +1593,28 b' def bundle(ui, repo, fname, *dests, **op'
1596 1593 hint=_(b"use 'hg debugcreatestreamclonebundle'"),
1597 1594 )
1598 1595
1599 if opts.get(b'all'):
1596 if opts.get('all'):
1600 1597 if dests:
1601 1598 raise error.InputError(
1602 1599 _(b"--all is incompatible with specifying destinations")
1603 1600 )
1604 if opts.get(b'base'):
1601 if opts.get('base'):
1605 1602 ui.warn(_(b"ignoring --base because --all was specified\n"))
1606 if opts.get(b'exact'):
1603 if opts.get('exact'):
1607 1604 ui.warn(_(b"ignoring --exact because --all was specified\n"))
1608 1605 base = [nullrev]
1609 elif opts.get(b'exact'):
1606 elif opts.get('exact'):
1610 1607 if dests:
1611 1608 raise error.InputError(
1612 1609 _(b"--exact is incompatible with specifying destinations")
1613 1610 )
1614 if opts.get(b'base'):
1611 if opts.get('base'):
1615 1612 ui.warn(_(b"ignoring --base because --exact was specified\n"))
1616 1613 base = repo.revs(b'parents(%ld) - %ld', revs, revs)
1617 1614 if not base:
1618 1615 base = [nullrev]
1619 1616 else:
1620 base = logcmdutil.revrange(repo, opts.get(b'base'))
1617 base = logcmdutil.revrange(repo, opts.get('base'))
1621 1618 if cgversion not in changegroup.supportedoutgoingversions(repo):
1622 1619 raise error.Abort(
1623 1620 _(b"repository does not support bundle version %s") % cgversion
@@ -1638,7 +1635,7 b' def bundle(ui, repo, fname, *dests, **op'
1638 1635 missing = set()
1639 1636 excluded = set()
1640 1637 for path in urlutil.get_push_paths(repo, ui, dests):
1641 other = hg.peer(repo, opts, path)
1638 other = hg.peer(repo, pycompat.byteskwargs(opts), path)
1642 1639 if revs is not None:
1643 1640 hex_revs = [repo[r].hex() for r in revs]
1644 1641 else:
@@ -1656,7 +1653,7 b' def bundle(ui, repo, fname, *dests, **op'
1656 1653 repo,
1657 1654 other,
1658 1655 onlyheads=heads,
1659 force=opts.get(b'force'),
1656 force=opts.get('force'),
1660 1657 portable=True,
1661 1658 )
1662 1659 missing.update(outgoing.missing)
@@ -1794,25 +1791,22 b' def cat(ui, repo, file1, *pats, **opts):'
1794 1791
1795 1792 Returns 0 on success.
1796 1793 """
1797 opts = pycompat.byteskwargs(opts)
1798 rev = opts.get(b'rev')
1794 rev = opts.get('rev')
1799 1795 if rev:
1800 1796 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
1801 1797 ctx = logcmdutil.revsingle(repo, rev)
1802 m = scmutil.match(ctx, (file1,) + pats, opts)
1803 fntemplate = opts.pop(b'output', b'')
1798 m = scmutil.match(ctx, (file1,) + pats, pycompat.byteskwargs(opts))
1799 fntemplate = opts.pop('output', b'')
1804 1800 if cmdutil.isstdiofilename(fntemplate):
1805 1801 fntemplate = b''
1806 1802
1807 1803 if fntemplate:
1808 fm = formatter.nullformatter(ui, b'cat', opts)
1804 fm = formatter.nullformatter(ui, b'cat', pycompat.byteskwargs(opts))
1809 1805 else:
1810 1806 ui.pager(b'cat')
1811 fm = ui.formatter(b'cat', opts)
1807 fm = ui.formatter(b'cat', pycompat.byteskwargs(opts))
1812 1808 with fm:
1813 return cmdutil.cat(
1814 ui, repo, ctx, m, fm, fntemplate, b'', **pycompat.strkwargs(opts)
1815 )
1809 return cmdutil.cat(ui, repo, ctx, m, fm, fntemplate, b'', **opts)
1816 1810
1817 1811
1818 1812 @command(
@@ -1972,37 +1966,36 b' def clone(ui, source, dest=None, **opts)'
1972 1966
1973 1967 Returns 0 on success.
1974 1968 """
1975 opts = pycompat.byteskwargs(opts)
1976 cmdutil.check_at_most_one_arg(opts, b'noupdate', b'updaterev')
1969 cmdutil.check_at_most_one_arg(opts, 'noupdate', 'updaterev')
1977 1970
1978 1971 # --include/--exclude can come from narrow or sparse.
1979 1972 includepats, excludepats = None, None
1980 1973
1981 1974 # hg.clone() differentiates between None and an empty set. So make sure
1982 1975 # patterns are sets if narrow is requested without patterns.
1983 if opts.get(b'narrow'):
1976 if opts.get('narrow'):
1984 1977 includepats = set()
1985 1978 excludepats = set()
1986 1979
1987 if opts.get(b'include'):
1988 includepats = narrowspec.parsepatterns(opts.get(b'include'))
1989 if opts.get(b'exclude'):
1990 excludepats = narrowspec.parsepatterns(opts.get(b'exclude'))
1980 if opts.get('include'):
1981 includepats = narrowspec.parsepatterns(opts.get('include'))
1982 if opts.get('exclude'):
1983 excludepats = narrowspec.parsepatterns(opts.get('exclude'))
1991 1984
1992 1985 r = hg.clone(
1993 1986 ui,
1994 opts,
1987 pycompat.byteskwargs(opts),
1995 1988 source,
1996 1989 dest,
1997 pull=opts.get(b'pull'),
1998 stream=opts.get(b'stream') or opts.get(b'uncompressed'),
1999 revs=opts.get(b'rev'),
2000 update=opts.get(b'updaterev') or not opts.get(b'noupdate'),
2001 branch=opts.get(b'branch'),
2002 shareopts=opts.get(b'shareopts'),
1990 pull=opts.get('pull'),
1991 stream=opts.get('stream') or opts.get('uncompressed'),
1992 revs=opts.get('rev'),
1993 update=opts.get('updaterev') or not opts.get('noupdate'),
1994 branch=opts.get('branch'),
1995 shareopts=opts.get('shareopts'),
2003 1996 storeincludepats=includepats,
2004 1997 storeexcludepats=excludepats,
2005 depth=opts.get(b'depth') or None,
1998 depth=opts.get('depth') or None,
2006 1999 )
2007 2000
2008 2001 return r is None
@@ -2178,7 +2171,6 b' def _docommit(ui, repo, *pats, **opts):'
2178 2171 cmdutil.checkunfinished(repo)
2179 2172
2180 2173 node = cmdutil.amend(ui, repo, old, extra, pats, opts)
2181 opts = pycompat.byteskwargs(opts)
2182 2174 if node == old.node():
2183 2175 ui.status(_(b"nothing changed\n"))
2184 2176 return 1
@@ -2209,11 +2201,14 b' def _docommit(ui, repo, *pats, **opts):'
2209 2201 extra=extra,
2210 2202 )
2211 2203
2212 opts = pycompat.byteskwargs(opts)
2213 node = cmdutil.commit(ui, repo, commitfunc, pats, opts)
2204 node = cmdutil.commit(
2205 ui, repo, commitfunc, pats, pycompat.byteskwargs(opts)
2206 )
2214 2207
2215 2208 if not node:
2216 stat = cmdutil.postcommitstatus(repo, pats, opts)
2209 stat = cmdutil.postcommitstatus(
2210 repo, pats, pycompat.byteskwargs(opts)
2211 )
2217 2212 if stat.deleted:
2218 2213 ui.status(
2219 2214 _(
@@ -2226,7 +2221,7 b' def _docommit(ui, repo, *pats, **opts):'
2226 2221 ui.status(_(b"nothing changed\n"))
2227 2222 return 1
2228 2223
2229 cmdutil.commitstatus(repo, node, branch, bheads, tip, opts)
2224 cmdutil.commitstatus(repo, node, branch, bheads, tip, **opts)
2230 2225
2231 2226 if not ui.quiet and ui.configbool(b'commands', b'commit.post-status'):
2232 2227 status(
@@ -2237,7 +2232,7 b' def _docommit(ui, repo, *pats, **opts):'
2237 2232 removed=True,
2238 2233 deleted=True,
2239 2234 unknown=True,
2240 subrepos=opts.get(b'subrepos'),
2235 subrepos=opts.get('subrepos'),
2241 2236 )
2242 2237
2243 2238
@@ -2319,19 +2314,18 b' def config(ui, repo, *values, **opts):'
2319 2314
2320 2315 """
2321 2316
2322 opts = pycompat.byteskwargs(opts)
2323 editopts = (b'edit', b'local', b'global', b'shared', b'non_shared')
2317 editopts = ('edit', 'local', 'global', 'shared', 'non_shared')
2324 2318 if any(opts.get(o) for o in editopts):
2325 2319 cmdutil.check_at_most_one_arg(opts, *editopts[1:])
2326 if opts.get(b'local'):
2320 if opts.get('local'):
2327 2321 if not repo:
2328 2322 raise error.InputError(
2329 2323 _(b"can't use --local outside a repository")
2330 2324 )
2331 2325 paths = [repo.vfs.join(b'hgrc')]
2332 elif opts.get(b'global'):
2326 elif opts.get('global'):
2333 2327 paths = rcutil.systemrcpath()
2334 elif opts.get(b'shared'):
2328 elif opts.get('shared'):
2335 2329 if not repo.shared():
2336 2330 raise error.InputError(
2337 2331 _(b"repository is not shared; can't use --shared")
@@ -2344,7 +2338,7 b' def config(ui, repo, *values, **opts):'
2344 2338 )
2345 2339 )
2346 2340 paths = [vfsmod.vfs(repo.sharedpath).join(b'hgrc')]
2347 elif opts.get(b'non_shared'):
2341 elif opts.get('non_shared'):
2348 2342 paths = [repo.vfs.join(b'hgrc-not-shared')]
2349 2343 else:
2350 2344 paths = rcutil.userrcpath()
@@ -2353,17 +2347,15 b' def config(ui, repo, *values, **opts):'
2353 2347 if os.path.exists(f):
2354 2348 break
2355 2349 else:
2356 if opts.get(b'global'):
2350 if opts.get('global'):
2357 2351 samplehgrc = uimod.samplehgrcs[b'global']
2358 elif opts.get(b'local'):
2352 elif opts.get('local'):
2359 2353 samplehgrc = uimod.samplehgrcs[b'local']
2360 2354 else:
2361 2355 samplehgrc = uimod.samplehgrcs[b'user']
2362 2356
2363 2357 f = paths[0]
2364 fp = open(f, b"wb")
2365 fp.write(util.tonativeeol(samplehgrc))
2366 fp.close()
2358 util.writefile(f, util.tonativeeol(samplehgrc))
2367 2359
2368 2360 editor = ui.geteditor()
2369 2361 ui.system(
@@ -2374,7 +2366,7 b' def config(ui, repo, *values, **opts):'
2374 2366 )
2375 2367 return
2376 2368 ui.pager(b'config')
2377 fm = ui.formatter(b'config', opts)
2369 fm = ui.formatter(b'config', pycompat.byteskwargs(opts))
2378 2370 for t, f in rcutil.rccomponents():
2379 2371 if t == b'path':
2380 2372 ui.debug(b'read config from: %s\n' % f)
@@ -2385,7 +2377,7 b' def config(ui, repo, *values, **opts):'
2385 2377 pass
2386 2378 else:
2387 2379 raise error.ProgrammingError(b'unknown rctype: %s' % t)
2388 untrusted = bool(opts.get(b'untrusted'))
2380 untrusted = bool(opts.get('untrusted'))
2389 2381
2390 2382 selsections = selentries = []
2391 2383 if values:
@@ -2396,8 +2388,8 b' def config(ui, repo, *values, **opts):'
2396 2388 selentries = set(selentries)
2397 2389
2398 2390 matched = False
2399 all_known = opts[b'exp_all_known']
2400 show_source = ui.debugflag or opts.get(b'source')
2391 all_known = opts['exp_all_known']
2392 show_source = ui.debugflag or opts.get('source')
2401 2393 entries = ui.walkconfig(untrusted=untrusted, all_known=all_known)
2402 2394 for section, name, value in entries:
2403 2395 source = ui.configsource(section, name, untrusted)
@@ -2506,11 +2498,10 b' def copy(ui, repo, *pats, **opts):'
2506 2498
2507 2499 Returns 0 on success, 1 if errors are encountered.
2508 2500 """
2509 opts = pycompat.byteskwargs(opts)
2510 2501
2511 2502 context = lambda repo: repo.dirstate.changing_files(repo)
2512 rev = opts.get(b'at_rev')
2513 ctx = None
2503 rev = opts.get('at_rev')
2504
2514 2505 if rev:
2515 2506 ctx = logcmdutil.revsingle(repo, rev)
2516 2507 if ctx.rev() is not None:
@@ -2518,9 +2509,9 b' def copy(ui, repo, *pats, **opts):'
2518 2509 def context(repo):
2519 2510 return util.nullcontextmanager()
2520 2511
2521 opts[b'at_rev'] = ctx.rev()
2512 opts['at_rev'] = ctx.rev()
2522 2513 with repo.wlock(), context(repo):
2523 return cmdutil.copy(ui, repo, pats, opts)
2514 return cmdutil.copy(ui, repo, pats, pycompat.byteskwargs(opts))
2524 2515
2525 2516
2526 2517 @command(
@@ -2984,13 +2975,12 b' def forget(ui, repo, *pats, **opts):'
2984 2975 Returns 0 on success.
2985 2976 """
2986 2977
2987 opts = pycompat.byteskwargs(opts)
2988 2978 if not pats:
2989 2979 raise error.InputError(_(b'no files specified'))
2990 2980
2991 2981 with repo.wlock(), repo.dirstate.changing_files(repo):
2992 m = scmutil.match(repo[None], pats, opts)
2993 dryrun, interactive = opts.get(b'dry_run'), opts.get(b'interactive')
2982 m = scmutil.match(repo[None], pats, pycompat.byteskwargs(opts))
2983 dryrun, interactive = opts.get('dry_run'), opts.get('interactive')
2994 2984 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
2995 2985 rejected = cmdutil.forget(
2996 2986 ui,
@@ -3755,19 +3745,18 b' def heads(ui, repo, *branchrevs, **opts)'
3755 3745 Returns 0 if matching heads are found, 1 if not.
3756 3746 """
3757 3747
3758 opts = pycompat.byteskwargs(opts)
3759 3748 start = None
3760 rev = opts.get(b'rev')
3749 rev = opts.get('rev')
3761 3750 if rev:
3762 3751 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
3763 3752 start = logcmdutil.revsingle(repo, rev, None).node()
3764 3753
3765 if opts.get(b'topo'):
3754 if opts.get('topo'):
3766 3755 heads = [repo[h] for h in repo.heads(start)]
3767 3756 else:
3768 3757 heads = []
3769 3758 for branch in repo.branchmap():
3770 heads += repo.branchheads(branch, start, opts.get(b'closed'))
3759 heads += repo.branchheads(branch, start, opts.get('closed'))
3771 3760 heads = [repo[h] for h in heads]
3772 3761
3773 3762 if branchrevs:
@@ -3776,7 +3765,7 b' def heads(ui, repo, *branchrevs, **opts)'
3776 3765 }
3777 3766 heads = [h for h in heads if h.branch() in branches]
3778 3767
3779 if opts.get(b'active') and branchrevs:
3768 if opts.get('active') and branchrevs:
3780 3769 dagheads = repo.heads(start)
3781 3770 heads = [h for h in heads if h.node() in dagheads]
3782 3771
@@ -3785,8 +3774,8 b' def heads(ui, repo, *branchrevs, **opts)'
3785 3774 if branches - haveheads:
3786 3775 headless = b', '.join(b for b in branches - haveheads)
3787 3776 msg = _(b'no open branch heads found on branches %s')
3788 if opts.get(b'rev'):
3789 msg += _(b' (started at %s)') % opts[b'rev']
3777 if opts.get('rev'):
3778 msg += _(b' (started at %s)') % opts['rev']
3790 3779 ui.warn((msg + b'\n') % headless)
3791 3780
3792 3781 if not heads:
@@ -3794,7 +3783,9 b' def heads(ui, repo, *branchrevs, **opts)'
3794 3783
3795 3784 ui.pager(b'heads')
3796 3785 heads = sorted(heads, key=lambda x: -(x.rev()))
3797 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
3786 displayer = logcmdutil.changesetdisplayer(
3787 ui, repo, pycompat.byteskwargs(opts)
3788 )
3798 3789 for ctx in heads:
3799 3790 displayer.show(ctx)
3800 3791 displayer.close()
@@ -4221,20 +4212,20 b' def import_(ui, repo, patch1=None, *patc'
4221 4212 opts, 'no_commit', ['bypass', 'secret']
4222 4213 )
4223 4214 cmdutil.check_incompatible_arguments(opts, 'exact', ['edit', 'prefix'])
4224 opts = pycompat.byteskwargs(opts)
4215
4225 4216 if not patch1:
4226 4217 raise error.InputError(_(b'need at least one patch to import'))
4227 4218
4228 4219 patches = (patch1,) + patches
4229 4220
4230 date = opts.get(b'date')
4221 date = opts.get('date')
4231 4222 if date:
4232 opts[b'date'] = dateutil.parsedate(date)
4233
4234 exact = opts.get(b'exact')
4235 update = not opts.get(b'bypass')
4223 opts['date'] = dateutil.parsedate(date)
4224
4225 exact = opts.get('exact')
4226 update = not opts.get('bypass')
4236 4227 try:
4237 sim = float(opts.get(b'similarity') or 0)
4228 sim = float(opts.get('similarity') or 0)
4238 4229 except ValueError:
4239 4230 raise error.InputError(_(b'similarity must be a number'))
4240 4231 if sim < 0 or sim > 100:
@@ -4242,17 +4233,17 b' def import_(ui, repo, patch1=None, *patc'
4242 4233 if sim and not update:
4243 4234 raise error.InputError(_(b'cannot use --similarity with --bypass'))
4244 4235
4245 base = opts[b"base"]
4236 base = opts["base"]
4246 4237 msgs = []
4247 4238 ret = 0
4248 4239
4249 4240 with repo.wlock():
4250 4241 if update:
4251 4242 cmdutil.checkunfinished(repo)
4252 if exact or not opts.get(b'force'):
4243 if exact or not opts.get('force'):
4253 4244 cmdutil.bailifchanged(repo)
4254 4245
4255 if not opts.get(b'no_commit'):
4246 if not opts.get('no_commit'):
4256 4247 lock = repo.lock
4257 4248 tr = lambda: repo.transaction(b'import')
4258 4249 else:
@@ -4274,7 +4265,13 b' def import_(ui, repo, patch1=None, *patc'
4274 4265 for hunk in patch.split(patchfile):
4275 4266 with patch.extract(ui, hunk) as patchdata:
4276 4267 msg, node, rej = cmdutil.tryimportone(
4277 ui, repo, patchdata, parents, opts, msgs, hg.clean
4268 ui,
4269 repo,
4270 patchdata,
4271 parents,
4272 pycompat.byteskwargs(opts),
4273 msgs,
4274 hg.clean,
4278 4275 )
4279 4276 if msg:
4280 4277 haspatch = True
@@ -4502,16 +4499,19 b' def locate(ui, repo, *pats, **opts):'
4502 4499
4503 4500 Returns 0 if a match is found, 1 otherwise.
4504 4501 """
4505 opts = pycompat.byteskwargs(opts)
4506 if opts.get(b'print0'):
4502 if opts.get('print0'):
4507 4503 end = b'\0'
4508 4504 else:
4509 4505 end = b'\n'
4510 ctx = logcmdutil.revsingle(repo, opts.get(b'rev'), None)
4506 ctx = logcmdutil.revsingle(repo, opts.get('rev'), None)
4511 4507
4512 4508 ret = 1
4513 4509 m = scmutil.match(
4514 ctx, pats, opts, default=b'relglob', badfn=lambda x, y: False
4510 ctx,
4511 pats,
4512 pycompat.byteskwargs(opts),
4513 default=b'relglob',
4514 badfn=lambda x, y: False,
4515 4515 )
4516 4516
4517 4517 ui.pager(b'locate')
@@ -4523,7 +4523,7 b' def locate(ui, repo, *pats, **opts):'
4523 4523 filesgen = ctx.matches(m)
4524 4524 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=bool(pats))
4525 4525 for abs in filesgen:
4526 if opts.get(b'fullpath'):
4526 if opts.get('fullpath'):
4527 4527 ui.write(repo.wjoin(abs), end)
4528 4528 else:
4529 4529 ui.write(uipathfn(abs), end)
@@ -4823,10 +4823,9 b' def manifest(ui, repo, node=None, rev=No'
4823 4823
4824 4824 Returns 0 on success.
4825 4825 """
4826 opts = pycompat.byteskwargs(opts)
4827 fm = ui.formatter(b'manifest', opts)
4828
4829 if opts.get(b'all'):
4826 fm = ui.formatter(b'manifest', pycompat.byteskwargs(opts))
4827
4828 if opts.get('all'):
4830 4829 if rev or node:
4831 4830 raise error.InputError(_(b"can't specify a revision with --all"))
4832 4831
@@ -4917,11 +4916,10 b' def merge(ui, repo, node=None, **opts):'
4917 4916 Returns 0 on success, 1 if there are unresolved files.
4918 4917 """
4919 4918
4920 opts = pycompat.byteskwargs(opts)
4921 abort = opts.get(b'abort')
4919 abort = opts.get('abort')
4922 4920 if abort and repo.dirstate.p2() == repo.nullid:
4923 4921 cmdutil.wrongtooltocontinue(repo, _(b'merge'))
4924 cmdutil.check_incompatible_arguments(opts, b'abort', [b'rev', b'preview'])
4922 cmdutil.check_incompatible_arguments(opts, 'abort', ['rev', 'preview'])
4925 4923 if abort:
4926 4924 state = cmdutil.getunfinishedstate(repo)
4927 4925 if state and state._opname != b'merge':
@@ -4933,10 +4931,10 b' def merge(ui, repo, node=None, **opts):'
4933 4931 raise error.InputError(_(b"cannot specify a node with --abort"))
4934 4932 return hg.abortmerge(repo.ui, repo)
4935 4933
4936 if opts.get(b'rev') and node:
4934 if opts.get('rev') and node:
4937 4935 raise error.InputError(_(b"please specify just one revision"))
4938 4936 if not node:
4939 node = opts.get(b'rev')
4937 node = opts.get('rev')
4940 4938
4941 4939 if node:
4942 4940 ctx = logcmdutil.revsingle(repo, node)
@@ -4955,22 +4953,24 b' def merge(ui, repo, node=None, **opts):'
4955 4953 _(b'merging with the working copy has no effect')
4956 4954 )
4957 4955
4958 if opts.get(b'preview'):
4956 if opts.get('preview'):
4959 4957 # find nodes that are ancestors of p2 but not of p1
4960 4958 p1 = repo[b'.'].node()
4961 4959 p2 = ctx.node()
4962 4960 nodes = repo.changelog.findmissing(common=[p1], heads=[p2])
4963 4961
4964 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
4962 displayer = logcmdutil.changesetdisplayer(
4963 ui, repo, pycompat.byteskwargs(opts)
4964 )
4965 4965 for node in nodes:
4966 4966 displayer.show(repo[node])
4967 4967 displayer.close()
4968 4968 return 0
4969 4969
4970 4970 # ui.forcemerge is an internal variable, do not document
4971 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')}
4971 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')}
4972 4972 with ui.configoverride(overrides, b'merge'):
4973 force = opts.get(b'force')
4973 force = opts.get('force')
4974 4974 labels = [b'working copy', b'merge rev', b'common ancestor']
4975 4975 return hg.merge(ctx, force=force, labels=labels)
4976 4976
@@ -5198,12 +5198,10 b' def paths(ui, repo, search=None, **opts)'
5198 5198 Returns 0 on success.
5199 5199 """
5200 5200
5201 opts = pycompat.byteskwargs(opts)
5202
5203 5201 pathitems = urlutil.list_paths(ui, search)
5204 5202 ui.pager(b'paths')
5205 5203
5206 fm = ui.formatter(b'paths', opts)
5204 fm = ui.formatter(b'paths', pycompat.byteskwargs(opts))
5207 5205 if fm.isplain():
5208 5206 hidepassword = urlutil.hidepassword
5209 5207 else:
@@ -5457,33 +5455,37 b' def pull(ui, repo, *sources, **opts):'
5457 5455 Returns 0 on success, 1 if an update had unresolved files.
5458 5456 """
5459 5457
5460 opts = pycompat.byteskwargs(opts)
5461 if ui.configbool(b'commands', b'update.requiredest') and opts.get(
5462 b'update'
5463 ):
5458 if ui.configbool(b'commands', b'update.requiredest') and opts.get('update'):
5464 5459 msg = _(b'update destination required by configuration')
5465 5460 hint = _(b'use hg pull followed by hg update DEST')
5466 5461 raise error.InputError(msg, hint=hint)
5467 5462
5463 update_conflict = None
5464
5468 5465 for path in urlutil.get_pull_paths(repo, ui, sources):
5469 5466 ui.status(_(b'pulling from %s\n') % urlutil.hidepassword(path.loc))
5470 5467 ui.flush()
5471 other = hg.peer(repo, opts, path, remotehidden=opts[b'remote_hidden'])
5468 other = hg.peer(
5469 repo,
5470 pycompat.byteskwargs(opts),
5471 path,
5472 remotehidden=opts['remote_hidden'],
5473 )
5472 5474 update_conflict = None
5473 5475 try:
5474 branches = (path.branch, opts.get(b'branch', []))
5476 branches = (path.branch, opts.get('branch', []))
5475 5477 revs, checkout = hg.addbranchrevs(
5476 5478 repo,
5477 5479 other,
5478 5480 branches,
5479 opts.get(b'rev'),
5480 remotehidden=opts[b'remote_hidden'],
5481 opts.get('rev'),
5482 remotehidden=opts['remote_hidden'],
5481 5483 )
5482 5484
5483 5485 pullopargs = {}
5484 5486
5485 5487 nodes = None
5486 if opts.get(b'bookmark') or revs:
5488 if opts.get('bookmark') or revs:
5487 5489 # The list of bookmark used here is the same used to actually update
5488 5490 # the bookmark names, to avoid the race from issue 4689 and we do
5489 5491 # all lookup and bookmark queries in one go so they see the same
@@ -5506,7 +5508,7 b' def pull(ui, repo, *sources, **opts):'
5506 5508 remotebookmarks = fremotebookmarks.result()
5507 5509 remotebookmarks = bookmarks.unhexlifybookmarks(remotebookmarks)
5508 5510 pullopargs[b'remotebookmarks'] = remotebookmarks
5509 for b in opts.get(b'bookmark', []):
5511 for b in opts.get('bookmark', []):
5510 5512 b = repo._bookmarks.expandname(b)
5511 5513 if b not in remotebookmarks:
5512 5514 raise error.InputError(
@@ -5520,19 +5522,19 b' def pull(ui, repo, *sources, **opts):'
5520 5522 checkout = node
5521 5523
5522 5524 wlock = util.nullcontextmanager()
5523 if opts.get(b'update'):
5525 if opts.get('update'):
5524 5526 wlock = repo.wlock()
5525 5527 with wlock:
5526 pullopargs.update(opts.get(b'opargs', {}))
5528 pullopargs.update(opts.get('opargs', {}))
5527 5529 modheads = exchange.pull(
5528 5530 repo,
5529 5531 other,
5530 5532 path=path,
5531 5533 heads=nodes,
5532 force=opts.get(b'force'),
5533 bookmarks=opts.get(b'bookmark', ()),
5534 force=opts.get('force'),
5535 bookmarks=opts.get('bookmark', ()),
5534 5536 opargs=pullopargs,
5535 confirm=opts.get(b'confirm'),
5537 confirm=opts.get('confirm'),
5536 5538 ).cgresult
5537 5539
5538 5540 # brev is a name, which might be a bookmark to be activated at
@@ -5546,10 +5548,10 b' def pull(ui, repo, *sources, **opts):'
5546 5548 # order below depends on implementation of
5547 5549 # hg.addbranchrevs(). opts['bookmark'] is ignored,
5548 5550 # because 'checkout' is determined without it.
5549 if opts.get(b'rev'):
5550 brev = opts[b'rev'][0]
5551 elif opts.get(b'branch'):
5552 brev = opts[b'branch'][0]
5551 if opts.get('rev'):
5552 brev = opts['rev'][0]
5553 elif opts.get('branch'):
5554 brev = opts['branch'][0]
5553 5555 else:
5554 5556 brev = path.branch
5555 5557
@@ -5559,7 +5561,7 b' def pull(ui, repo, *sources, **opts):'
5559 5561 repo._subtoppath = path.loc
5560 5562 try:
5561 5563 update_conflict = postincoming(
5562 ui, repo, modheads, opts.get(b'update'), checkout, brev
5564 ui, repo, modheads, opts.get('update'), checkout, brev
5563 5565 )
5564 5566 except error.FilteredRepoLookupError as exc:
5565 5567 msg = _(b'cannot update to target: %s') % exc.args[0]
@@ -5633,24 +5635,23 b' def purge(ui, repo, *dirs, **opts):'
5633 5635 list of files that this program would delete, use the --print
5634 5636 option.
5635 5637 """
5636 opts = pycompat.byteskwargs(opts)
5637 cmdutil.check_at_most_one_arg(opts, b'all', b'ignored')
5638
5639 act = not opts.get(b'print')
5638 cmdutil.check_at_most_one_arg(opts, 'all', 'ignored')
5639
5640 act = not opts.get('print')
5640 5641 eol = b'\n'
5641 if opts.get(b'print0'):
5642 if opts.get('print0'):
5642 5643 eol = b'\0'
5643 5644 act = False # --print0 implies --print
5644 if opts.get(b'all', False):
5645 if opts.get('all', False):
5645 5646 ignored = True
5646 5647 unknown = True
5647 5648 else:
5648 ignored = opts.get(b'ignored', False)
5649 ignored = opts.get('ignored', False)
5649 5650 unknown = not ignored
5650 5651
5651 removefiles = opts.get(b'files')
5652 removedirs = opts.get(b'dirs')
5653 confirm = opts.get(b'confirm')
5652 removefiles = opts.get('files')
5653 removedirs = opts.get('dirs')
5654 confirm = opts.get('confirm')
5654 5655 if confirm is None:
5655 5656 try:
5656 5657 extensions.find(b'purge')
@@ -5662,7 +5663,7 b' def purge(ui, repo, *dirs, **opts):'
5662 5663 removefiles = True
5663 5664 removedirs = True
5664 5665
5665 match = scmutil.match(repo[None], dirs, opts)
5666 match = scmutil.match(repo[None], dirs, pycompat.byteskwargs(opts))
5666 5667
5667 5668 paths = mergemod.purge(
5668 5669 repo,
@@ -5671,7 +5672,7 b' def purge(ui, repo, *dirs, **opts):'
5671 5672 ignored=ignored,
5672 5673 removeemptydirs=removedirs,
5673 5674 removefiles=removefiles,
5674 abortonerror=opts.get(b'abort_on_err'),
5675 abortonerror=opts.get('abort_on_err'),
5675 5676 noop=not act,
5676 5677 confirm=confirm,
5677 5678 )
@@ -5974,15 +5975,14 b' def remove(ui, repo, *pats, **opts):'
5974 5975 Returns 0 on success, 1 if any warnings encountered.
5975 5976 """
5976 5977
5977 opts = pycompat.byteskwargs(opts)
5978 after, force = opts.get(b'after'), opts.get(b'force')
5979 dryrun = opts.get(b'dry_run')
5978 after, force = opts.get('after'), opts.get('force')
5979 dryrun = opts.get('dry_run')
5980 5980 if not pats and not after:
5981 5981 raise error.InputError(_(b'no files specified'))
5982 5982
5983 5983 with repo.wlock(), repo.dirstate.changing_files(repo):
5984 m = scmutil.match(repo[None], pats, opts)
5985 subrepos = opts.get(b'subrepos')
5984 m = scmutil.match(repo[None], pats, pycompat.byteskwargs(opts))
5985 subrepos = opts.get('subrepos')
5986 5986 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
5987 5987 return cmdutil.remove(
5988 5988 ui, repo, m, b"", uipathfn, after, force, subrepos, dryrun=dryrun
@@ -6034,10 +6034,9 b' def rename(ui, repo, *pats, **opts):'
6034 6034
6035 6035 Returns 0 on success, 1 if errors are encountered.
6036 6036 """
6037 opts = pycompat.byteskwargs(opts)
6038 6037 context = lambda repo: repo.dirstate.changing_files(repo)
6039 rev = opts.get(b'at_rev')
6040 ctx = None
6038 rev = opts.get('at_rev')
6039
6041 6040 if rev:
6042 6041 ctx = logcmdutil.revsingle(repo, rev)
6043 6042 if ctx.rev() is not None:
@@ -6045,9 +6044,11 b' def rename(ui, repo, *pats, **opts):'
6045 6044 def context(repo):
6046 6045 return util.nullcontextmanager()
6047 6046
6048 opts[b'at_rev'] = ctx.rev()
6047 opts['at_rev'] = ctx.rev()
6049 6048 with repo.wlock(), context(repo):
6050 return cmdutil.copy(ui, repo, pats, opts, rename=True)
6049 return cmdutil.copy(
6050 ui, repo, pats, pycompat.byteskwargs(opts), rename=True
6051 )
6051 6052
6052 6053
6053 6054 @command(
@@ -6398,30 +6399,29 b' def revert(ui, repo, *pats, **opts):'
6398 6399 Returns 0 on success.
6399 6400 """
6400 6401
6401 opts = pycompat.byteskwargs(opts)
6402 if opts.get(b"date"):
6403 cmdutil.check_incompatible_arguments(opts, b'date', [b'rev'])
6404 opts[b"rev"] = cmdutil.finddate(ui, repo, opts[b"date"])
6402 if opts.get("date"):
6403 cmdutil.check_incompatible_arguments(opts, 'date', ['rev'])
6404 opts["rev"] = cmdutil.finddate(ui, repo, opts["date"])
6405 6405
6406 6406 parent, p2 = repo.dirstate.parents()
6407 if not opts.get(b'rev') and p2 != repo.nullid:
6407 if not opts.get('rev') and p2 != repo.nullid:
6408 6408 # revert after merge is a trap for new users (issue2915)
6409 6409 raise error.InputError(
6410 6410 _(b'uncommitted merge with no revision specified'),
6411 6411 hint=_(b"use 'hg update' or see 'hg help revert'"),
6412 6412 )
6413 6413
6414 rev = opts.get(b'rev')
6414 rev = opts.get('rev')
6415 6415 if rev:
6416 6416 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
6417 6417 ctx = logcmdutil.revsingle(repo, rev)
6418 6418
6419 6419 if not (
6420 6420 pats
6421 or opts.get(b'include')
6422 or opts.get(b'exclude')
6423 or opts.get(b'all')
6424 or opts.get(b'interactive')
6421 or opts.get('include')
6422 or opts.get('exclude')
6423 or opts.get('all')
6424 or opts.get('interactive')
6425 6425 ):
6426 6426 msg = _(b"no files or directories specified")
6427 6427 if p2 != repo.nullid:
@@ -6455,7 +6455,7 b' def revert(ui, repo, *pats, **opts):'
6455 6455 hint = _(b"use --all to revert all files")
6456 6456 raise error.InputError(msg, hint=hint)
6457 6457
6458 return cmdutil.revert(ui, repo, ctx, *pats, **pycompat.strkwargs(opts))
6458 return cmdutil.revert(ui, repo, ctx, *pats, **opts)
6459 6459
6460 6460
6461 6461 @command(
@@ -7117,7 +7117,6 b' def summary(ui, repo, **opts):'
7117 7117 Returns 0 on success.
7118 7118 """
7119 7119
7120 opts = pycompat.byteskwargs(opts)
7121 7120 ui.pager(b'summary')
7122 7121 ctx = repo[None]
7123 7122 parents = ctx.parents()
@@ -7306,11 +7305,13 b' def summary(ui, repo, **opts):'
7306 7305
7307 7306 cmdutil.summaryhooks(ui, repo)
7308 7307
7309 if opts.get(b'remote'):
7308 if opts.get('remote'):
7310 7309 needsincoming, needsoutgoing = True, True
7311 7310 else:
7312 7311 needsincoming, needsoutgoing = False, False
7313 for i, o in cmdutil.summaryremotehooks(ui, repo, opts, None):
7312 for i, o in cmdutil.summaryremotehooks(
7313 ui, repo, pycompat.byteskwargs(opts), None
7314 ):
7314 7315 if i:
7315 7316 needsincoming = True
7316 7317 if o:
@@ -7327,7 +7328,7 b' def summary(ui, repo, **opts):'
7327 7328 try:
7328 7329 other = hg.peer(repo, {}, path)
7329 7330 except error.RepoError:
7330 if opts.get(b'remote'):
7331 if opts.get('remote'):
7331 7332 raise
7332 7333 return path.loc, sbranch, None, None, None
7333 7334 branches = (path.branch, [])
@@ -7366,7 +7367,7 b' def summary(ui, repo, **opts):'
7366 7367 try:
7367 7368 dother = hg.peer(repo, {}, path if path is not None else dest)
7368 7369 except error.RepoError:
7369 if opts.get(b'remote'):
7370 if opts.get('remote'):
7370 7371 raise
7371 7372 return dest, dbranch, None, None
7372 7373 ui.debug(b'comparing with %s\n' % urlutil.hidepassword(dest))
@@ -7392,7 +7393,7 b' def summary(ui, repo, **opts):'
7392 7393 else:
7393 7394 dest = dbranch = dother = outgoing = None
7394 7395
7395 if opts.get(b'remote'):
7396 if opts.get('remote'):
7396 7397 # Help pytype. --remote sets both `needsincoming` and `needsoutgoing`.
7397 7398 # The former always sets `sother` (or raises an exception if it can't);
7398 7399 # the latter always sets `outgoing`.
@@ -7423,7 +7424,7 b' def summary(ui, repo, **opts):'
7423 7424 cmdutil.summaryremotehooks(
7424 7425 ui,
7425 7426 repo,
7426 opts,
7427 pycompat.byteskwargs(opts),
7427 7428 (
7428 7429 (source, sbranch, sother, commoninc),
7429 7430 (dest, dbranch, dother, outgoing),
@@ -7479,7 +7480,7 b' def tag(ui, repo, name1, *names, **opts)'
7479 7480 Returns 0 on success.
7480 7481 """
7481 7482 cmdutil.check_incompatible_arguments(opts, 'remove', ['rev'])
7482 opts = pycompat.byteskwargs(opts)
7483
7483 7484 with repo.wlock(), repo.lock():
7484 7485 rev_ = b"."
7485 7486 names = [t.strip() for t in (name1,) + names]
@@ -7491,11 +7492,11 b' def tag(ui, repo, name1, *names, **opts)'
7491 7492 raise error.InputError(
7492 7493 _(b'tag names cannot consist entirely of whitespace')
7493 7494 )
7494 if opts.get(b'rev'):
7495 rev_ = opts[b'rev']
7496 message = opts.get(b'message')
7497 if opts.get(b'remove'):
7498 if opts.get(b'local'):
7495 if opts.get('rev'):
7496 rev_ = opts['rev']
7497 message = opts.get('message')
7498 if opts.get('remove'):
7499 if opts.get('local'):
7499 7500 expectedtype = b'local'
7500 7501 else:
7501 7502 expectedtype = b'global'
@@ -7522,18 +7523,18 b' def tag(ui, repo, name1, *names, **opts)'
7522 7523 if not message:
7523 7524 # we don't translate commit messages
7524 7525 message = b'Removed tag %s' % b', '.join(names)
7525 elif not opts.get(b'force'):
7526 elif not opts.get('force'):
7526 7527 for n in names:
7527 7528 if n in repo.tags():
7528 7529 raise error.InputError(
7529 7530 _(b"tag '%s' already exists (use -f to force)") % n
7530 7531 )
7531 if not opts.get(b'local'):
7532 if not opts.get('local'):
7532 7533 p1, p2 = repo.dirstate.parents()
7533 7534 if p2 != repo.nullid:
7534 7535 raise error.StateError(_(b'uncommitted merge'))
7535 7536 bheads = repo.branchheads()
7536 if not opts.get(b'force') and bheads and p1 not in bheads:
7537 if not opts.get('force') and bheads and p1 not in bheads:
7537 7538 raise error.InputError(
7538 7539 _(
7539 7540 b'working directory is not at a branch head '
@@ -7545,7 +7546,7 b' def tag(ui, repo, name1, *names, **opts)'
7545 7546 # don't allow tagging the null rev or the working directory
7546 7547 if node is None:
7547 7548 raise error.InputError(_(b"cannot tag working directory"))
7548 elif not opts.get(b'remove') and node == nullid:
7549 elif not opts.get('remove') and node == nullid:
7549 7550 raise error.InputError(_(b"cannot tag null revision"))
7550 7551
7551 7552 if not message:
@@ -7555,25 +7556,23 b' def tag(ui, repo, name1, *names, **opts)'
7555 7556 short(node),
7556 7557 )
7557 7558
7558 date = opts.get(b'date')
7559 date = opts.get('date')
7559 7560 if date:
7560 7561 date = dateutil.parsedate(date)
7561 7562
7562 if opts.get(b'remove'):
7563 if opts.get('remove'):
7563 7564 editform = b'tag.remove'
7564 7565 else:
7565 7566 editform = b'tag.add'
7566 editor = cmdutil.getcommiteditor(
7567 editform=editform, **pycompat.strkwargs(opts)
7568 )
7567 editor = cmdutil.getcommiteditor(editform=editform, **opts)
7569 7568
7570 7569 tagsmod.tag(
7571 7570 repo,
7572 7571 names,
7573 7572 node,
7574 7573 message,
7575 opts.get(b'local'),
7576 opts.get(b'user'),
7574 opts.get('local'),
7575 opts.get('user'),
7577 7576 date,
7578 7577 editor=editor,
7579 7578 )
@@ -7606,9 +7605,8 b' def tags(ui, repo, **opts):'
7606 7605 Returns 0 on success.
7607 7606 """
7608 7607
7609 opts = pycompat.byteskwargs(opts)
7610 7608 ui.pager(b'tags')
7611 fm = ui.formatter(b'tags', opts)
7609 fm = ui.formatter(b'tags', pycompat.byteskwargs(opts))
7612 7610 hexfunc = fm.hexfunc
7613 7611
7614 7612 for t, n in reversed(repo.tagslist()):
@@ -7963,12 +7961,13 b' def verify(ui, repo, **opts):'
7963 7961 for more information about recovery from corruption of the
7964 7962 repository.
7965 7963
7964 For an alternative UI with a lot more control over the verification
7965 process and better error reporting, try `hg help admin::verify`.
7966
7966 7967 Returns 0 on success, 1 if errors are encountered.
7967 7968 """
7968 opts = pycompat.byteskwargs(opts)
7969
7970 7969 level = None
7971 if opts[b'full']:
7970 if opts['full']:
7972 7971 level = verifymod.VERIFY_FULL
7973 7972 return hg.verify(repo, level)
7974 7973
@@ -7998,10 +7997,9 b' def version_(ui, **opts):'
7998 7997 :bundled: Boolean. True if included in the release.
7999 7998 :name: String. Extension name.
8000 7999 """
8001 opts = pycompat.byteskwargs(opts)
8002 8000 if ui.verbose:
8003 8001 ui.pager(b'version')
8004 fm = ui.formatter(b"version", opts)
8002 fm = ui.formatter(b"version", pycompat.byteskwargs(opts))
8005 8003 fm.startitem()
8006 8004 fm.write(
8007 8005 b"ver", _(b"Mercurial Distributed SCM (version %s)\n"), util.version()
@@ -16,7 +16,6 b' import struct'
16 16 import traceback
17 17
18 18 from .i18n import _
19 from .pycompat import getattr
20 19 from . import (
21 20 encoding,
22 21 error,
@@ -332,7 +331,7 b' class server:'
332 331 # any kind of interaction must use server channels, but chg may
333 332 # replace channels by fully functional tty files. so nontty is
334 333 # enforced only if cin is a channel.
335 if not util.safehasattr(self.cin, 'fileno'):
334 if not hasattr(self.cin, 'fileno'):
336 335 ui.setconfig(b'ui', b'nontty', b'true', b'commandserver')
337 336
338 337 req = dispatch.request(
@@ -384,7 +383,7 b' class server:'
384 383 if self.cmsg:
385 384 hellomsg += b'message-encoding: %s\n' % self.cmsg.encoding
386 385 hellomsg += b'pid: %d' % procutil.getpid()
387 if util.safehasattr(os, 'getpgid'):
386 if hasattr(os, 'getpgid'):
388 387 hellomsg += b'\n'
389 388 hellomsg += b'pgid: %d' % os.getpgid(0)
390 389
@@ -559,7 +558,7 b' class unixforkingservice:'
559 558 self.ui = ui
560 559 self.repo = repo
561 560 self.address = opts[b'address']
562 if not util.safehasattr(socket, 'AF_UNIX'):
561 if not hasattr(socket, 'AF_UNIX'):
563 562 raise error.Abort(_(b'unsupported platform'))
564 563 if not self.address:
565 564 raise error.Abort(_(b'no socket path specified with --address'))
@@ -588,7 +587,7 b' class unixforkingservice:'
588 587 o = socket.socketpair(socket.AF_UNIX, socket.SOCK_DGRAM)
589 588 self._mainipc, self._workeripc = o
590 589 self._servicehandler.bindsocket(self._sock, self.address)
591 if util.safehasattr(procutil, 'unblocksignal'):
590 if hasattr(procutil, 'unblocksignal'):
592 591 procutil.unblocksignal(signal.SIGCHLD)
593 592 o = signal.signal(signal.SIGCHLD, self._sigchldhandler)
594 593 self._oldsigchldhandler = o
@@ -10,7 +10,6 b' import errno'
10 10 import os
11 11
12 12 from .i18n import _
13 from .pycompat import getattr
14 13 from . import (
15 14 encoding,
16 15 error,
This diff has been collapsed as it changes many lines, (2938 lines changed) Show them Hide them
@@ -9,11 +9,21 b''
9 9 import functools
10 10 import re
11 11
12 from .utils import resourceutil
13
12 14 from . import (
13 15 encoding,
14 16 error,
15 17 )
16 18
19 try:
20 import tomllib # pytype: disable=import-error
21
22 tomllib.load # trigger lazy import
23 except ModuleNotFoundError:
24 # Python <3.11 compat
25 from .thirdparty import tomli as tomllib
26
17 27
18 28 def loadconfigtable(ui, extname, configtable):
19 29 """update config item known to the ui with the extension ones"""
@@ -22,7 +32,7 b' def loadconfigtable(ui, extname, configt'
22 32 knownkeys = set(knownitems)
23 33 newkeys = set(items)
24 34 for key in sorted(knownkeys & newkeys):
25 msg = b"extension '%s' overwrite config item '%s.%s'"
35 msg = b"extension '%s' overwrites config item '%s.%s'"
26 36 msg %= (extname, section, key)
27 37 ui.develwarn(msg, config=b'warn-config')
28 38
@@ -48,15 +58,19 b' class configitem:'
48 58 generic=False,
49 59 priority=0,
50 60 experimental=False,
61 documentation="",
62 in_core_extension=None,
51 63 ):
52 64 self.section = section
53 65 self.name = name
54 66 self.default = default
67 self.documentation = documentation
55 68 self.alias = list(alias)
56 69 self.generic = generic
57 70 self.priority = priority
58 71 self.experimental = experimental
59 72 self._re = None
73 self.in_core_extension = in_core_extension
60 74 if generic:
61 75 self._re = re.compile(self.name)
62 76
@@ -102,6 +116,74 b' class itemregister(dict):'
102 116 return None
103 117
104 118
119 def sanitize_item(item):
120 """Apply the transformations that are encoded on top of the pure data"""
121
122 # Set the special defaults
123 default_type_key = "default-type"
124 default_type = item.pop(default_type_key, None)
125 if default_type == "dynamic":
126 item["default"] = dynamicdefault
127 elif default_type == "list_type":
128 item["default"] = list
129 elif default_type == "lambda":
130 assert isinstance(item["default"], list)
131 default = [e.encode() for e in item["default"]]
132 item["default"] = lambda: default
133 elif default_type == "lazy_module":
134 item["default"] = lambda: encoding.encoding
135 else:
136 if default_type is not None:
137 msg = "invalid default config type %r for '%s.%s'"
138 msg %= (default_type, item["section"], item["name"])
139 raise error.ProgrammingError(msg)
140
141 # config expects bytes
142 alias = item.get("alias")
143 if alias:
144 item["alias"] = [(k.encode(), v.encode()) for (k, v) in alias]
145 if isinstance(item.get("default"), str):
146 item["default"] = item["default"].encode()
147 item["section"] = item["section"].encode()
148 item["name"] = item["name"].encode()
149
150
151 def read_configitems_file():
152 """Returns the deserialized TOML structure from the configitems file"""
153 with resourceutil.open_resource(b"mercurial", b"configitems.toml") as fp:
154 return tomllib.load(fp)
155
156
157 def configitems_from_toml(items):
158 """Register the configitems from the *deserialized* toml file"""
159 for item in items["items"]:
160 sanitize_item(item)
161 coreconfigitem(**item)
162
163 templates = items["templates"]
164
165 for application in items["template-applications"]:
166 template_items = templates[application["template"]]
167
168 for template_item in template_items:
169 item = template_item.copy()
170 prefix = application.get("prefix", "")
171 item["section"] = application["section"]
172 if prefix:
173 item["name"] = f'{prefix}.{item["suffix"]}'
174 else:
175 item["name"] = item["suffix"]
176
177 sanitize_item(item)
178 item.pop("suffix", None)
179 coreconfigitem(**item)
180
181
182 def import_configitems_from_file():
183 as_toml = read_configitems_file()
184 configitems_from_toml(as_toml)
185
186
105 187 coreitems = {}
106 188
107 189
@@ -129,2856 +211,4 b' def getitemregister(configtable):'
129 211
130 212 coreconfigitem = getitemregister(coreitems)
131 213
132
133 def _registerdiffopts(section, configprefix=b''):
134 coreconfigitem(
135 section,
136 configprefix + b'nodates',
137 default=False,
138 )
139 coreconfigitem(
140 section,
141 configprefix + b'showfunc',
142 default=False,
143 )
144 coreconfigitem(
145 section,
146 configprefix + b'unified',
147 default=None,
148 )
149 coreconfigitem(
150 section,
151 configprefix + b'git',
152 default=False,
153 )
154 coreconfigitem(
155 section,
156 configprefix + b'ignorews',
157 default=False,
158 )
159 coreconfigitem(
160 section,
161 configprefix + b'ignorewsamount',
162 default=False,
163 )
164 coreconfigitem(
165 section,
166 configprefix + b'ignoreblanklines',
167 default=False,
168 )
169 coreconfigitem(
170 section,
171 configprefix + b'ignorewseol',
172 default=False,
173 )
174 coreconfigitem(
175 section,
176 configprefix + b'nobinary',
177 default=False,
178 )
179 coreconfigitem(
180 section,
181 configprefix + b'noprefix',
182 default=False,
183 )
184 coreconfigitem(
185 section,
186 configprefix + b'word-diff',
187 default=False,
188 )
189
190
191 coreconfigitem(
192 b'alias',
193 b'.*',
194 default=dynamicdefault,
195 generic=True,
196 )
197 coreconfigitem(
198 b'auth',
199 b'cookiefile',
200 default=None,
201 )
202 _registerdiffopts(section=b'annotate')
203 # bookmarks.pushing: internal hack for discovery
204 coreconfigitem(
205 b'bookmarks',
206 b'pushing',
207 default=list,
208 )
209 # bundle.mainreporoot: internal hack for bundlerepo
210 coreconfigitem(
211 b'bundle',
212 b'mainreporoot',
213 default=b'',
214 )
215 coreconfigitem(
216 b'censor',
217 b'policy',
218 default=b'abort',
219 experimental=True,
220 )
221 coreconfigitem(
222 b'chgserver',
223 b'idletimeout',
224 default=3600,
225 )
226 coreconfigitem(
227 b'chgserver',
228 b'skiphash',
229 default=False,
230 )
231 coreconfigitem(
232 b'cmdserver',
233 b'log',
234 default=None,
235 )
236 coreconfigitem(
237 b'cmdserver',
238 b'max-log-files',
239 default=7,
240 )
241 coreconfigitem(
242 b'cmdserver',
243 b'max-log-size',
244 default=b'1 MB',
245 )
246 coreconfigitem(
247 b'cmdserver',
248 b'max-repo-cache',
249 default=0,
250 experimental=True,
251 )
252 coreconfigitem(
253 b'cmdserver',
254 b'message-encodings',
255 default=list,
256 )
257 coreconfigitem(
258 b'cmdserver',
259 b'track-log',
260 default=lambda: [b'chgserver', b'cmdserver', b'repocache'],
261 )
262 coreconfigitem(
263 b'cmdserver',
264 b'shutdown-on-interrupt',
265 default=True,
266 )
267 coreconfigitem(
268 b'color',
269 b'.*',
270 default=None,
271 generic=True,
272 )
273 coreconfigitem(
274 b'color',
275 b'mode',
276 default=b'auto',
277 )
278 coreconfigitem(
279 b'color',
280 b'pagermode',
281 default=dynamicdefault,
282 )
283 coreconfigitem(
284 b'command-templates',
285 b'graphnode',
286 default=None,
287 alias=[(b'ui', b'graphnodetemplate')],
288 )
289 coreconfigitem(
290 b'command-templates',
291 b'log',
292 default=None,
293 alias=[(b'ui', b'logtemplate')],
294 )
295 coreconfigitem(
296 b'command-templates',
297 b'mergemarker',
298 default=(
299 b'{node|short} '
300 b'{ifeq(tags, "tip", "", '
301 b'ifeq(tags, "", "", "{tags} "))}'
302 b'{if(bookmarks, "{bookmarks} ")}'
303 b'{ifeq(branch, "default", "", "{branch} ")}'
304 b'- {author|user}: {desc|firstline}'
305 ),
306 alias=[(b'ui', b'mergemarkertemplate')],
307 )
308 coreconfigitem(
309 b'command-templates',
310 b'pre-merge-tool-output',
311 default=None,
312 alias=[(b'ui', b'pre-merge-tool-output-template')],
313 )
314 coreconfigitem(
315 b'command-templates',
316 b'oneline-summary',
317 default=None,
318 )
319 coreconfigitem(
320 b'command-templates',
321 b'oneline-summary.*',
322 default=dynamicdefault,
323 generic=True,
324 )
325 _registerdiffopts(section=b'commands', configprefix=b'commit.interactive.')
326 coreconfigitem(
327 b'commands',
328 b'commit.post-status',
329 default=False,
330 )
331 coreconfigitem(
332 b'commands',
333 b'grep.all-files',
334 default=False,
335 experimental=True,
336 )
337 coreconfigitem(
338 b'commands',
339 b'merge.require-rev',
340 default=False,
341 )
342 coreconfigitem(
343 b'commands',
344 b'push.require-revs',
345 default=False,
346 )
347 coreconfigitem(
348 b'commands',
349 b'resolve.confirm',
350 default=False,
351 )
352 coreconfigitem(
353 b'commands',
354 b'resolve.explicit-re-merge',
355 default=False,
356 )
357 coreconfigitem(
358 b'commands',
359 b'resolve.mark-check',
360 default=b'none',
361 )
362 _registerdiffopts(section=b'commands', configprefix=b'revert.interactive.')
363 coreconfigitem(
364 b'commands',
365 b'show.aliasprefix',
366 default=list,
367 )
368 coreconfigitem(
369 b'commands',
370 b'status.relative',
371 default=False,
372 )
373 coreconfigitem(
374 b'commands',
375 b'status.skipstates',
376 default=[],
377 experimental=True,
378 )
379 coreconfigitem(
380 b'commands',
381 b'status.terse',
382 default=b'',
383 )
384 coreconfigitem(
385 b'commands',
386 b'status.verbose',
387 default=False,
388 )
389 coreconfigitem(
390 b'commands',
391 b'update.check',
392 default=None,
393 )
394 coreconfigitem(
395 b'commands',
396 b'update.requiredest',
397 default=False,
398 )
399 coreconfigitem(
400 b'committemplate',
401 b'.*',
402 default=None,
403 generic=True,
404 )
405 coreconfigitem(
406 b'convert',
407 b'bzr.saverev',
408 default=True,
409 )
410 coreconfigitem(
411 b'convert',
412 b'cvsps.cache',
413 default=True,
414 )
415 coreconfigitem(
416 b'convert',
417 b'cvsps.fuzz',
418 default=60,
419 )
420 coreconfigitem(
421 b'convert',
422 b'cvsps.logencoding',
423 default=None,
424 )
425 coreconfigitem(
426 b'convert',
427 b'cvsps.mergefrom',
428 default=None,
429 )
430 coreconfigitem(
431 b'convert',
432 b'cvsps.mergeto',
433 default=None,
434 )
435 coreconfigitem(
436 b'convert',
437 b'git.committeractions',
438 default=lambda: [b'messagedifferent'],
439 )
440 coreconfigitem(
441 b'convert',
442 b'git.extrakeys',
443 default=list,
444 )
445 coreconfigitem(
446 b'convert',
447 b'git.findcopiesharder',
448 default=False,
449 )
450 coreconfigitem(
451 b'convert',
452 b'git.remoteprefix',
453 default=b'remote',
454 )
455 coreconfigitem(
456 b'convert',
457 b'git.renamelimit',
458 default=400,
459 )
460 coreconfigitem(
461 b'convert',
462 b'git.saverev',
463 default=True,
464 )
465 coreconfigitem(
466 b'convert',
467 b'git.similarity',
468 default=50,
469 )
470 coreconfigitem(
471 b'convert',
472 b'git.skipsubmodules',
473 default=False,
474 )
475 coreconfigitem(
476 b'convert',
477 b'hg.clonebranches',
478 default=False,
479 )
480 coreconfigitem(
481 b'convert',
482 b'hg.ignoreerrors',
483 default=False,
484 )
485 coreconfigitem(
486 b'convert',
487 b'hg.preserve-hash',
488 default=False,
489 )
490 coreconfigitem(
491 b'convert',
492 b'hg.revs',
493 default=None,
494 )
495 coreconfigitem(
496 b'convert',
497 b'hg.saverev',
498 default=False,
499 )
500 coreconfigitem(
501 b'convert',
502 b'hg.sourcename',
503 default=None,
504 )
505 coreconfigitem(
506 b'convert',
507 b'hg.startrev',
508 default=None,
509 )
510 coreconfigitem(
511 b'convert',
512 b'hg.tagsbranch',
513 default=b'default',
514 )
515 coreconfigitem(
516 b'convert',
517 b'hg.usebranchnames',
518 default=True,
519 )
520 coreconfigitem(
521 b'convert',
522 b'ignoreancestorcheck',
523 default=False,
524 experimental=True,
525 )
526 coreconfigitem(
527 b'convert',
528 b'localtimezone',
529 default=False,
530 )
531 coreconfigitem(
532 b'convert',
533 b'p4.encoding',
534 default=dynamicdefault,
535 )
536 coreconfigitem(
537 b'convert',
538 b'p4.startrev',
539 default=0,
540 )
541 coreconfigitem(
542 b'convert',
543 b'skiptags',
544 default=False,
545 )
546 coreconfigitem(
547 b'convert',
548 b'svn.debugsvnlog',
549 default=True,
550 )
551 coreconfigitem(
552 b'convert',
553 b'svn.trunk',
554 default=None,
555 )
556 coreconfigitem(
557 b'convert',
558 b'svn.tags',
559 default=None,
560 )
561 coreconfigitem(
562 b'convert',
563 b'svn.branches',
564 default=None,
565 )
566 coreconfigitem(
567 b'convert',
568 b'svn.startrev',
569 default=0,
570 )
571 coreconfigitem(
572 b'convert',
573 b'svn.dangerous-set-commit-dates',
574 default=False,
575 )
576 coreconfigitem(
577 b'debug',
578 b'dirstate.delaywrite',
579 default=0,
580 )
581 coreconfigitem(
582 b'debug',
583 b'revlog.verifyposition.changelog',
584 default=b'',
585 )
586 coreconfigitem(
587 b'debug',
588 b'revlog.debug-delta',
589 default=False,
590 )
591 # display extra information about the bundling process
592 coreconfigitem(
593 b'debug',
594 b'bundling-stats',
595 default=False,
596 )
597 # display extra information about the unbundling process
598 coreconfigitem(
599 b'debug',
600 b'unbundling-stats',
601 default=False,
602 )
603 coreconfigitem(
604 b'defaults',
605 b'.*',
606 default=None,
607 generic=True,
608 )
609 coreconfigitem(
610 b'devel',
611 b'all-warnings',
612 default=False,
613 )
614 coreconfigitem(
615 b'devel',
616 b'bundle2.debug',
617 default=False,
618 )
619 # which kind of delta to put in the bundled changegroup. Possible value
620 # - '': use default behavior
621 # - p1: force to always use delta against p1
622 # - full: force to always use full content
623 coreconfigitem(
624 b'devel',
625 b'bundle.delta',
626 default=b'',
627 )
628 coreconfigitem(
629 b'devel',
630 b'cache-vfs',
631 default=None,
632 )
633 coreconfigitem(
634 b'devel',
635 b'check-locks',
636 default=False,
637 )
638 coreconfigitem(
639 b'devel',
640 b'check-relroot',
641 default=False,
642 )
643 # Track copy information for all file, not just "added" one (very slow)
644 coreconfigitem(
645 b'devel',
646 b'copy-tracing.trace-all-files',
647 default=False,
648 )
649 coreconfigitem(
650 b'devel',
651 b'default-date',
652 default=None,
653 )
654 coreconfigitem(
655 b'devel',
656 b'deprec-warn',
657 default=False,
658 )
659 # possible values:
660 # - auto (the default)
661 # - force-append
662 # - force-new
663 coreconfigitem(
664 b'devel',
665 b'dirstate.v2.data_update_mode',
666 default="auto",
667 )
668 coreconfigitem(
669 b'devel',
670 b'disableloaddefaultcerts',
671 default=False,
672 )
673 coreconfigitem(
674 b'devel',
675 b'warn-empty-changegroup',
676 default=False,
677 )
678 coreconfigitem(
679 b'devel',
680 b'legacy.exchange',
681 default=list,
682 )
683 # When True, revlogs use a special reference version of the nodemap, that is not
684 # performant but is "known" to behave properly.
685 coreconfigitem(
686 b'devel',
687 b'persistent-nodemap',
688 default=False,
689 )
690 coreconfigitem(
691 b'devel',
692 b'servercafile',
693 default=b'',
694 )
695 # This config option is intended for use in tests only. It is a giant
696 # footgun to kill security. Don't define it.
697 coreconfigitem(
698 b'devel',
699 b'server-insecure-exact-protocol',
700 default=b'',
701 )
702 coreconfigitem(
703 b'devel',
704 b'serverrequirecert',
705 default=False,
706 )
707 # Makes the status algorithm wait for the existence of this file
708 # (or until a timeout of `devel.sync.status.pre-dirstate-write-file-timeout`
709 # seconds) before taking the lock and writing the dirstate.
710 # Status signals that it's ready to wait by creating a file
711 # with the same name + `.waiting`.
712 # Useful when testing race conditions.
713 coreconfigitem(
714 b'devel',
715 b'sync.status.pre-dirstate-write-file',
716 default=None,
717 )
718 coreconfigitem(
719 b'devel',
720 b'sync.status.pre-dirstate-write-file-timeout',
721 default=2,
722 )
723 coreconfigitem(
724 b'devel',
725 b'sync.dirstate.post-docket-read-file',
726 default=None,
727 )
728 coreconfigitem(
729 b'devel',
730 b'sync.dirstate.post-docket-read-file-timeout',
731 default=2,
732 )
733 coreconfigitem(
734 b'devel',
735 b'sync.dirstate.pre-read-file',
736 default=None,
737 )
738 coreconfigitem(
739 b'devel',
740 b'sync.dirstate.pre-read-file-timeout',
741 default=2,
742 )
743 coreconfigitem(
744 b'devel',
745 b'strip-obsmarkers',
746 default=True,
747 )
748 coreconfigitem(
749 b'devel',
750 b'warn-config',
751 default=None,
752 )
753 coreconfigitem(
754 b'devel',
755 b'warn-config-default',
756 default=None,
757 )
758 coreconfigitem(
759 b'devel',
760 b'user.obsmarker',
761 default=None,
762 )
763 coreconfigitem(
764 b'devel',
765 b'warn-config-unknown',
766 default=None,
767 )
768 coreconfigitem(
769 b'devel',
770 b'debug.copies',
771 default=False,
772 )
773 coreconfigitem(
774 b'devel',
775 b'copy-tracing.multi-thread',
776 default=True,
777 )
778 coreconfigitem(
779 b'devel',
780 b'debug.extensions',
781 default=False,
782 )
783 coreconfigitem(
784 b'devel',
785 b'debug.repo-filters',
786 default=False,
787 )
788 coreconfigitem(
789 b'devel',
790 b'debug.peer-request',
791 default=False,
792 )
793 # If discovery.exchange-heads is False, the discovery will not start with
794 # remote head fetching and local head querying.
795 coreconfigitem(
796 b'devel',
797 b'discovery.exchange-heads',
798 default=True,
799 )
800 # If devel.debug.abort-update is True, then any merge with the working copy,
801 # e.g. [hg update], will be aborted after figuring out what needs to be done,
802 # but before spawning the parallel worker
803 coreconfigitem(
804 b'devel',
805 b'debug.abort-update',
806 default=False,
807 )
808 # If discovery.grow-sample is False, the sample size used in set discovery will
809 # not be increased through the process
810 coreconfigitem(
811 b'devel',
812 b'discovery.grow-sample',
813 default=True,
814 )
815 # When discovery.grow-sample.dynamic is True, the default, the sample size is
816 # adapted to the shape of the undecided set (it is set to the max of:
817 # <target-size>, len(roots(undecided)), len(heads(undecided)
818 coreconfigitem(
819 b'devel',
820 b'discovery.grow-sample.dynamic',
821 default=True,
822 )
823 # discovery.grow-sample.rate control the rate at which the sample grow
824 coreconfigitem(
825 b'devel',
826 b'discovery.grow-sample.rate',
827 default=1.05,
828 )
829 # If discovery.randomize is False, random sampling during discovery are
830 # deterministic. It is meant for integration tests.
831 coreconfigitem(
832 b'devel',
833 b'discovery.randomize',
834 default=True,
835 )
836 # Control the initial size of the discovery sample
837 coreconfigitem(
838 b'devel',
839 b'discovery.sample-size',
840 default=200,
841 )
842 # Control the initial size of the discovery for initial change
843 coreconfigitem(
844 b'devel',
845 b'discovery.sample-size.initial',
846 default=100,
847 )
848 _registerdiffopts(section=b'diff')
849 coreconfigitem(
850 b'diff',
851 b'merge',
852 default=False,
853 experimental=True,
854 )
855 coreconfigitem(
856 b'email',
857 b'bcc',
858 default=None,
859 )
860 coreconfigitem(
861 b'email',
862 b'cc',
863 default=None,
864 )
865 coreconfigitem(
866 b'email',
867 b'charsets',
868 default=list,
869 )
870 coreconfigitem(
871 b'email',
872 b'from',
873 default=None,
874 )
875 coreconfigitem(
876 b'email',
877 b'method',
878 default=b'smtp',
879 )
880 coreconfigitem(
881 b'email',
882 b'reply-to',
883 default=None,
884 )
885 coreconfigitem(
886 b'email',
887 b'to',
888 default=None,
889 )
890 coreconfigitem(
891 b'experimental',
892 b'archivemetatemplate',
893 default=dynamicdefault,
894 )
895 coreconfigitem(
896 b'experimental',
897 b'auto-publish',
898 default=b'publish',
899 )
900 coreconfigitem(
901 b'experimental',
902 b'bundle-phases',
903 default=False,
904 )
905 coreconfigitem(
906 b'experimental',
907 b'bundle2-advertise',
908 default=True,
909 )
910 coreconfigitem(
911 b'experimental',
912 b'bundle2-output-capture',
913 default=False,
914 )
915 coreconfigitem(
916 b'experimental',
917 b'bundle2.pushback',
918 default=False,
919 )
920 coreconfigitem(
921 b'experimental',
922 b'bundle2lazylocking',
923 default=False,
924 )
925 coreconfigitem(
926 b'experimental',
927 b'bundlecomplevel',
928 default=None,
929 )
930 coreconfigitem(
931 b'experimental',
932 b'bundlecomplevel.bzip2',
933 default=None,
934 )
935 coreconfigitem(
936 b'experimental',
937 b'bundlecomplevel.gzip',
938 default=None,
939 )
940 coreconfigitem(
941 b'experimental',
942 b'bundlecomplevel.none',
943 default=None,
944 )
945 coreconfigitem(
946 b'experimental',
947 b'bundlecomplevel.zstd',
948 default=None,
949 )
950 coreconfigitem(
951 b'experimental',
952 b'bundlecompthreads',
953 default=None,
954 )
955 coreconfigitem(
956 b'experimental',
957 b'bundlecompthreads.bzip2',
958 default=None,
959 )
960 coreconfigitem(
961 b'experimental',
962 b'bundlecompthreads.gzip',
963 default=None,
964 )
965 coreconfigitem(
966 b'experimental',
967 b'bundlecompthreads.none',
968 default=None,
969 )
970 coreconfigitem(
971 b'experimental',
972 b'bundlecompthreads.zstd',
973 default=None,
974 )
975 coreconfigitem(
976 b'experimental',
977 b'changegroup3',
978 default=True,
979 )
980 coreconfigitem(
981 b'experimental',
982 b'changegroup4',
983 default=False,
984 )
985
986 # might remove rank configuration once the computation has no impact
987 coreconfigitem(
988 b'experimental',
989 b'changelog-v2.compute-rank',
990 default=True,
991 )
992 coreconfigitem(
993 b'experimental',
994 b'cleanup-as-archived',
995 default=False,
996 )
997 coreconfigitem(
998 b'experimental',
999 b'clientcompressionengines',
1000 default=list,
1001 )
1002 coreconfigitem(
1003 b'experimental',
1004 b'copytrace',
1005 default=b'on',
1006 )
1007 coreconfigitem(
1008 b'experimental',
1009 b'copytrace.movecandidateslimit',
1010 default=100,
1011 )
1012 coreconfigitem(
1013 b'experimental',
1014 b'copytrace.sourcecommitlimit',
1015 default=100,
1016 )
1017 coreconfigitem(
1018 b'experimental',
1019 b'copies.read-from',
1020 default=b"filelog-only",
1021 )
1022 coreconfigitem(
1023 b'experimental',
1024 b'copies.write-to',
1025 default=b'filelog-only',
1026 )
1027 coreconfigitem(
1028 b'experimental',
1029 b'crecordtest',
1030 default=None,
1031 )
1032 coreconfigitem(
1033 b'experimental',
1034 b'directaccess',
1035 default=False,
1036 )
1037 coreconfigitem(
1038 b'experimental',
1039 b'directaccess.revnums',
1040 default=False,
1041 )
1042 coreconfigitem(
1043 b'experimental',
1044 b'editortmpinhg',
1045 default=False,
1046 )
1047 coreconfigitem(
1048 b'experimental',
1049 b'evolution',
1050 default=list,
1051 )
1052 coreconfigitem(
1053 b'experimental',
1054 b'evolution.allowdivergence',
1055 default=False,
1056 alias=[(b'experimental', b'allowdivergence')],
1057 )
1058 coreconfigitem(
1059 b'experimental',
1060 b'evolution.allowunstable',
1061 default=None,
1062 )
1063 coreconfigitem(
1064 b'experimental',
1065 b'evolution.createmarkers',
1066 default=None,
1067 )
1068 coreconfigitem(
1069 b'experimental',
1070 b'evolution.effect-flags',
1071 default=True,
1072 alias=[(b'experimental', b'effect-flags')],
1073 )
1074 coreconfigitem(
1075 b'experimental',
1076 b'evolution.exchange',
1077 default=None,
1078 )
1079 coreconfigitem(
1080 b'experimental',
1081 b'evolution.bundle-obsmarker',
1082 default=False,
1083 )
1084 coreconfigitem(
1085 b'experimental',
1086 b'evolution.bundle-obsmarker:mandatory',
1087 default=True,
1088 )
1089 coreconfigitem(
1090 b'experimental',
1091 b'log.topo',
1092 default=False,
1093 )
1094 coreconfigitem(
1095 b'experimental',
1096 b'evolution.report-instabilities',
1097 default=True,
1098 )
1099 coreconfigitem(
1100 b'experimental',
1101 b'evolution.track-operation',
1102 default=True,
1103 )
1104 # repo-level config to exclude a revset visibility
1105 #
1106 # The target use case is to use `share` to expose different subset of the same
1107 # repository, especially server side. See also `server.view`.
1108 coreconfigitem(
1109 b'experimental',
1110 b'extra-filter-revs',
1111 default=None,
1112 )
1113 coreconfigitem(
1114 b'experimental',
1115 b'maxdeltachainspan',
1116 default=-1,
1117 )
1118 # tracks files which were undeleted (merge might delete them but we explicitly
1119 # kept/undeleted them) and creates new filenodes for them
1120 coreconfigitem(
1121 b'experimental',
1122 b'merge-track-salvaged',
1123 default=False,
1124 )
1125 coreconfigitem(
1126 b'experimental',
1127 b'mmapindexthreshold',
1128 default=None,
1129 )
1130 coreconfigitem(
1131 b'experimental',
1132 b'narrow',
1133 default=False,
1134 )
1135 coreconfigitem(
1136 b'experimental',
1137 b'nonnormalparanoidcheck',
1138 default=False,
1139 )
1140 coreconfigitem(
1141 b'experimental',
1142 b'exportableenviron',
1143 default=list,
1144 )
1145 coreconfigitem(
1146 b'experimental',
1147 b'extendedheader.index',
1148 default=None,
1149 )
1150 coreconfigitem(
1151 b'experimental',
1152 b'extendedheader.similarity',
1153 default=False,
1154 )
1155 coreconfigitem(
1156 b'experimental',
1157 b'graphshorten',
1158 default=False,
1159 )
1160 coreconfigitem(
1161 b'experimental',
1162 b'graphstyle.parent',
1163 default=dynamicdefault,
1164 )
1165 coreconfigitem(
1166 b'experimental',
1167 b'graphstyle.missing',
1168 default=dynamicdefault,
1169 )
1170 coreconfigitem(
1171 b'experimental',
1172 b'graphstyle.grandparent',
1173 default=dynamicdefault,
1174 )
1175 coreconfigitem(
1176 b'experimental',
1177 b'hook-track-tags',
1178 default=False,
1179 )
1180 coreconfigitem(
1181 b'experimental',
1182 b'httppostargs',
1183 default=False,
1184 )
1185 coreconfigitem(b'experimental', b'nointerrupt', default=False)
1186 coreconfigitem(b'experimental', b'nointerrupt-interactiveonly', default=True)
1187
1188 coreconfigitem(
1189 b'experimental',
1190 b'obsmarkers-exchange-debug',
1191 default=False,
1192 )
1193 coreconfigitem(
1194 b'experimental',
1195 b'remotenames',
1196 default=False,
1197 )
1198 coreconfigitem(
1199 b'experimental',
1200 b'removeemptydirs',
1201 default=True,
1202 )
1203 coreconfigitem(
1204 b'experimental',
1205 b'revert.interactive.select-to-keep',
1206 default=False,
1207 )
1208 coreconfigitem(
1209 b'experimental',
1210 b'revisions.prefixhexnode',
1211 default=False,
1212 )
1213 # "out of experimental" todo list.
1214 #
1215 # * include management of a persistent nodemap in the main docket
1216 # * enforce a "no-truncate" policy for mmap safety
1217 # - for censoring operation
1218 # - for stripping operation
1219 # - for rollback operation
1220 # * proper streaming (race free) of the docket file
1221 # * track garbage data to evemtually allow rewriting -existing- sidedata.
1222 # * Exchange-wise, we will also need to do something more efficient than
1223 # keeping references to the affected revlogs, especially memory-wise when
1224 # rewriting sidedata.
1225 # * introduce a proper solution to reduce the number of filelog related files.
1226 # * use caching for reading sidedata (similar to what we do for data).
1227 # * no longer set offset=0 if sidedata_size=0 (simplify cutoff computation).
1228 # * Improvement to consider
1229 # - avoid compression header in chunk using the default compression?
1230 # - forbid "inline" compression mode entirely?
1231 # - split the data offset and flag field (the 2 bytes save are mostly trouble)
1232 # - keep track of uncompressed -chunk- size (to preallocate memory better)
1233 # - keep track of chain base or size (probably not that useful anymore)
1234 coreconfigitem(
1235 b'experimental',
1236 b'revlogv2',
1237 default=None,
1238 )
1239 coreconfigitem(
1240 b'experimental',
1241 b'revisions.disambiguatewithin',
1242 default=None,
1243 )
1244 coreconfigitem(
1245 b'experimental',
1246 b'rust.index',
1247 default=False,
1248 )
1249 coreconfigitem(
1250 b'experimental',
1251 b'server.allow-hidden-access',
1252 default=list,
1253 )
1254 coreconfigitem(
1255 b'experimental',
1256 b'server.filesdata.recommended-batch-size',
1257 default=50000,
1258 )
1259 coreconfigitem(
1260 b'experimental',
1261 b'server.manifestdata.recommended-batch-size',
1262 default=100000,
1263 )
1264 coreconfigitem(
1265 b'experimental',
1266 b'server.stream-narrow-clones',
1267 default=False,
1268 )
1269 coreconfigitem(
1270 b'experimental',
1271 b'single-head-per-branch',
1272 default=False,
1273 )
1274 coreconfigitem(
1275 b'experimental',
1276 b'single-head-per-branch:account-closed-heads',
1277 default=False,
1278 )
1279 coreconfigitem(
1280 b'experimental',
1281 b'single-head-per-branch:public-changes-only',
1282 default=False,
1283 )
1284 coreconfigitem(
1285 b'experimental',
1286 b'sparse-read',
1287 default=False,
1288 )
1289 coreconfigitem(
1290 b'experimental',
1291 b'sparse-read.density-threshold',
1292 default=0.50,
1293 )
1294 coreconfigitem(
1295 b'experimental',
1296 b'sparse-read.min-gap-size',
1297 default=b'65K',
1298 )
1299 coreconfigitem(
1300 b'experimental',
1301 b'stream-v3',
1302 default=False,
1303 )
1304 coreconfigitem(
1305 b'experimental',
1306 b'treemanifest',
1307 default=False,
1308 )
1309 coreconfigitem(
1310 b'experimental',
1311 b'update.atomic-file',
1312 default=False,
1313 )
1314 coreconfigitem(
1315 b'experimental',
1316 b'web.full-garbage-collection-rate',
1317 default=1, # still forcing a full collection on each request
1318 )
1319 coreconfigitem(
1320 b'experimental',
1321 b'worker.wdir-get-thread-safe',
1322 default=False,
1323 )
1324 coreconfigitem(
1325 b'experimental',
1326 b'worker.repository-upgrade',
1327 default=False,
1328 )
1329 coreconfigitem(
1330 b'experimental',
1331 b'xdiff',
1332 default=False,
1333 )
1334 coreconfigitem(
1335 b'extensions',
1336 b'[^:]*',
1337 default=None,
1338 generic=True,
1339 )
1340 coreconfigitem(
1341 b'extensions',
1342 b'[^:]*:required',
1343 default=False,
1344 generic=True,
1345 )
1346 coreconfigitem(
1347 b'extdata',
1348 b'.*',
1349 default=None,
1350 generic=True,
1351 )
1352 coreconfigitem(
1353 b'format',
1354 b'bookmarks-in-store',
1355 default=False,
1356 )
1357 coreconfigitem(
1358 b'format',
1359 b'chunkcachesize',
1360 default=None,
1361 experimental=True,
1362 )
1363 coreconfigitem(
1364 # Enable this dirstate format *when creating a new repository*.
1365 # Which format to use for existing repos is controlled by .hg/requires
1366 b'format',
1367 b'use-dirstate-v2',
1368 default=False,
1369 experimental=True,
1370 alias=[(b'format', b'exp-rc-dirstate-v2')],
1371 )
1372 coreconfigitem(
1373 b'format',
1374 b'use-dirstate-v2.automatic-upgrade-of-mismatching-repositories',
1375 default=False,
1376 experimental=True,
1377 )
1378 coreconfigitem(
1379 b'format',
1380 b'use-dirstate-v2.automatic-upgrade-of-mismatching-repositories:quiet',
1381 default=False,
1382 experimental=True,
1383 )
1384 coreconfigitem(
1385 b'format',
1386 b'use-dirstate-tracked-hint',
1387 default=False,
1388 experimental=True,
1389 )
1390 coreconfigitem(
1391 b'format',
1392 b'use-dirstate-tracked-hint.version',
1393 default=1,
1394 experimental=True,
1395 )
1396 coreconfigitem(
1397 b'format',
1398 b'use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories',
1399 default=False,
1400 experimental=True,
1401 )
1402 coreconfigitem(
1403 b'format',
1404 b'use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories:quiet',
1405 default=False,
1406 experimental=True,
1407 )
1408 coreconfigitem(
1409 b'format',
1410 b'dotencode',
1411 default=True,
1412 )
1413 coreconfigitem(
1414 b'format',
1415 b'generaldelta',
1416 default=False,
1417 experimental=True,
1418 )
1419 coreconfigitem(
1420 b'format',
1421 b'manifestcachesize',
1422 default=None,
1423 experimental=True,
1424 )
1425 coreconfigitem(
1426 b'format',
1427 b'maxchainlen',
1428 default=dynamicdefault,
1429 experimental=True,
1430 )
1431 coreconfigitem(
1432 b'format',
1433 b'obsstore-version',
1434 default=None,
1435 )
1436 coreconfigitem(
1437 b'format',
1438 b'sparse-revlog',
1439 default=True,
1440 )
1441 coreconfigitem(
1442 b'format',
1443 b'revlog-compression',
1444 default=lambda: [b'zstd', b'zlib'],
1445 alias=[(b'experimental', b'format.compression')],
1446 )
1447 # Experimental TODOs:
1448 #
1449 # * Same as for revlogv2 (but for the reduction of the number of files)
1450 # * Actually computing the rank of changesets
1451 # * Improvement to investigate
1452 # - storing .hgtags fnode
1453 # - storing branch related identifier
1454
1455 coreconfigitem(
1456 b'format',
1457 b'exp-use-changelog-v2',
1458 default=None,
1459 experimental=True,
1460 )
1461 coreconfigitem(
1462 b'format',
1463 b'usefncache',
1464 default=True,
1465 )
1466 coreconfigitem(
1467 b'format',
1468 b'usegeneraldelta',
1469 default=True,
1470 )
1471 coreconfigitem(
1472 b'format',
1473 b'usestore',
1474 default=True,
1475 )
1476
1477
1478 def _persistent_nodemap_default():
1479 """compute `use-persistent-nodemap` default value
1480
1481 The feature is disabled unless a fast implementation is available.
1482 """
1483 from . import policy
1484
1485 return policy.importrust('revlog') is not None
1486
1487
1488 coreconfigitem(
1489 b'format',
1490 b'use-persistent-nodemap',
1491 default=_persistent_nodemap_default,
1492 )
1493 coreconfigitem(
1494 b'format',
1495 b'exp-use-copies-side-data-changeset',
1496 default=False,
1497 experimental=True,
1498 )
1499 coreconfigitem(
1500 b'format',
1501 b'use-share-safe',
1502 default=True,
1503 )
1504 coreconfigitem(
1505 b'format',
1506 b'use-share-safe.automatic-upgrade-of-mismatching-repositories',
1507 default=False,
1508 experimental=True,
1509 )
1510 coreconfigitem(
1511 b'format',
1512 b'use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet',
1513 default=False,
1514 experimental=True,
1515 )
1516
1517 # Moving this on by default means we are confident about the scaling of phases.
1518 # This is not garanteed to be the case at the time this message is written.
1519 coreconfigitem(
1520 b'format',
1521 b'use-internal-phase',
1522 default=False,
1523 experimental=True,
1524 )
1525 # The interaction between the archived phase and obsolescence markers needs to
1526 # be sorted out before wider usage of this are to be considered.
1527 #
1528 # At the time this message is written, behavior when archiving obsolete
1529 # changeset differ significantly from stripping. As part of stripping, we also
1530 # remove the obsolescence marker associated to the stripped changesets,
1531 # revealing the precedecessors changesets when applicable. When archiving, we
1532 # don't touch the obsolescence markers, keeping everything hidden. This can
1533 # result in quite confusing situation for people combining exchanging draft
1534 # with the archived phases. As some markers needed by others may be skipped
1535 # during exchange.
1536 coreconfigitem(
1537 b'format',
1538 b'exp-archived-phase',
1539 default=False,
1540 experimental=True,
1541 )
1542 coreconfigitem(
1543 b'shelve',
1544 b'store',
1545 default=b'internal',
1546 experimental=True,
1547 )
1548 coreconfigitem(
1549 b'fsmonitor',
1550 b'warn_when_unused',
1551 default=True,
1552 )
1553 coreconfigitem(
1554 b'fsmonitor',
1555 b'warn_update_file_count',
1556 default=50000,
1557 )
1558 coreconfigitem(
1559 b'fsmonitor',
1560 b'warn_update_file_count_rust',
1561 default=400000,
1562 )
1563 coreconfigitem(
1564 b'help',
1565 br'hidden-command\..*',
1566 default=False,
1567 generic=True,
1568 )
1569 coreconfigitem(
1570 b'help',
1571 br'hidden-topic\..*',
1572 default=False,
1573 generic=True,
1574 )
1575 coreconfigitem(
1576 b'hooks',
1577 b'[^:]*',
1578 default=dynamicdefault,
1579 generic=True,
1580 )
1581 coreconfigitem(
1582 b'hooks',
1583 b'.*:run-with-plain',
1584 default=True,
1585 generic=True,
1586 )
1587 coreconfigitem(
1588 b'hgweb-paths',
1589 b'.*',
1590 default=list,
1591 generic=True,
1592 )
1593 coreconfigitem(
1594 b'hostfingerprints',
1595 b'.*',
1596 default=list,
1597 generic=True,
1598 )
1599 coreconfigitem(
1600 b'hostsecurity',
1601 b'ciphers',
1602 default=None,
1603 )
1604 coreconfigitem(
1605 b'hostsecurity',
1606 b'minimumprotocol',
1607 default=dynamicdefault,
1608 )
1609 coreconfigitem(
1610 b'hostsecurity',
1611 b'.*:minimumprotocol$',
1612 default=dynamicdefault,
1613 generic=True,
1614 )
1615 coreconfigitem(
1616 b'hostsecurity',
1617 b'.*:ciphers$',
1618 default=dynamicdefault,
1619 generic=True,
1620 )
1621 coreconfigitem(
1622 b'hostsecurity',
1623 b'.*:fingerprints$',
1624 default=list,
1625 generic=True,
1626 )
1627 coreconfigitem(
1628 b'hostsecurity',
1629 b'.*:verifycertsfile$',
1630 default=None,
1631 generic=True,
1632 )
1633
1634 coreconfigitem(
1635 b'http_proxy',
1636 b'always',
1637 default=False,
1638 )
1639 coreconfigitem(
1640 b'http_proxy',
1641 b'host',
1642 default=None,
1643 )
1644 coreconfigitem(
1645 b'http_proxy',
1646 b'no',
1647 default=list,
1648 )
1649 coreconfigitem(
1650 b'http_proxy',
1651 b'passwd',
1652 default=None,
1653 )
1654 coreconfigitem(
1655 b'http_proxy',
1656 b'user',
1657 default=None,
1658 )
1659
1660 coreconfigitem(
1661 b'http',
1662 b'timeout',
1663 default=None,
1664 )
1665
1666 coreconfigitem(
1667 b'logtoprocess',
1668 b'commandexception',
1669 default=None,
1670 )
1671 coreconfigitem(
1672 b'logtoprocess',
1673 b'commandfinish',
1674 default=None,
1675 )
1676 coreconfigitem(
1677 b'logtoprocess',
1678 b'command',
1679 default=None,
1680 )
1681 coreconfigitem(
1682 b'logtoprocess',
1683 b'develwarn',
1684 default=None,
1685 )
1686 coreconfigitem(
1687 b'logtoprocess',
1688 b'uiblocked',
1689 default=None,
1690 )
1691 coreconfigitem(
1692 b'merge',
1693 b'checkunknown',
1694 default=b'abort',
1695 )
1696 coreconfigitem(
1697 b'merge',
1698 b'checkignored',
1699 default=b'abort',
1700 )
1701 coreconfigitem(
1702 b'experimental',
1703 b'merge.checkpathconflicts',
1704 default=False,
1705 )
1706 coreconfigitem(
1707 b'merge',
1708 b'followcopies',
1709 default=True,
1710 )
1711 coreconfigitem(
1712 b'merge',
1713 b'on-failure',
1714 default=b'continue',
1715 )
1716 coreconfigitem(
1717 b'merge',
1718 b'preferancestor',
1719 default=lambda: [b'*'],
1720 experimental=True,
1721 )
1722 coreconfigitem(
1723 b'merge',
1724 b'strict-capability-check',
1725 default=False,
1726 )
1727 coreconfigitem(
1728 b'merge',
1729 b'disable-partial-tools',
1730 default=False,
1731 experimental=True,
1732 )
1733 coreconfigitem(
1734 b'partial-merge-tools',
1735 b'.*',
1736 default=None,
1737 generic=True,
1738 experimental=True,
1739 )
1740 coreconfigitem(
1741 b'partial-merge-tools',
1742 br'.*\.patterns',
1743 default=dynamicdefault,
1744 generic=True,
1745 priority=-1,
1746 experimental=True,
1747 )
1748 coreconfigitem(
1749 b'partial-merge-tools',
1750 br'.*\.executable$',
1751 default=dynamicdefault,
1752 generic=True,
1753 priority=-1,
1754 experimental=True,
1755 )
1756 coreconfigitem(
1757 b'partial-merge-tools',
1758 br'.*\.order',
1759 default=0,
1760 generic=True,
1761 priority=-1,
1762 experimental=True,
1763 )
1764 coreconfigitem(
1765 b'partial-merge-tools',
1766 br'.*\.args',
1767 default=b"$local $base $other",
1768 generic=True,
1769 priority=-1,
1770 experimental=True,
1771 )
1772 coreconfigitem(
1773 b'partial-merge-tools',
1774 br'.*\.disable',
1775 default=False,
1776 generic=True,
1777 priority=-1,
1778 experimental=True,
1779 )
1780 coreconfigitem(
1781 b'merge-tools',
1782 b'.*',
1783 default=None,
1784 generic=True,
1785 )
1786 coreconfigitem(
1787 b'merge-tools',
1788 br'.*\.args$',
1789 default=b"$local $base $other",
1790 generic=True,
1791 priority=-1,
1792 )
1793 coreconfigitem(
1794 b'merge-tools',
1795 br'.*\.binary$',
1796 default=False,
1797 generic=True,
1798 priority=-1,
1799 )
1800 coreconfigitem(
1801 b'merge-tools',
1802 br'.*\.check$',
1803 default=list,
1804 generic=True,
1805 priority=-1,
1806 )
1807 coreconfigitem(
1808 b'merge-tools',
1809 br'.*\.checkchanged$',
1810 default=False,
1811 generic=True,
1812 priority=-1,
1813 )
1814 coreconfigitem(
1815 b'merge-tools',
1816 br'.*\.executable$',
1817 default=dynamicdefault,
1818 generic=True,
1819 priority=-1,
1820 )
1821 coreconfigitem(
1822 b'merge-tools',
1823 br'.*\.fixeol$',
1824 default=False,
1825 generic=True,
1826 priority=-1,
1827 )
1828 coreconfigitem(
1829 b'merge-tools',
1830 br'.*\.gui$',
1831 default=False,
1832 generic=True,
1833 priority=-1,
1834 )
1835 coreconfigitem(
1836 b'merge-tools',
1837 br'.*\.mergemarkers$',
1838 default=b'basic',
1839 generic=True,
1840 priority=-1,
1841 )
1842 coreconfigitem(
1843 b'merge-tools',
1844 br'.*\.mergemarkertemplate$',
1845 default=dynamicdefault, # take from command-templates.mergemarker
1846 generic=True,
1847 priority=-1,
1848 )
1849 coreconfigitem(
1850 b'merge-tools',
1851 br'.*\.priority$',
1852 default=0,
1853 generic=True,
1854 priority=-1,
1855 )
1856 coreconfigitem(
1857 b'merge-tools',
1858 br'.*\.premerge$',
1859 default=dynamicdefault,
1860 generic=True,
1861 priority=-1,
1862 )
1863 coreconfigitem(
1864 b'merge-tools',
1865 br'.*\.regappend$',
1866 default=b"",
1867 generic=True,
1868 priority=-1,
1869 )
1870 coreconfigitem(
1871 b'merge-tools',
1872 br'.*\.symlink$',
1873 default=False,
1874 generic=True,
1875 priority=-1,
1876 )
1877 coreconfigitem(
1878 b'pager',
1879 b'attend-.*',
1880 default=dynamicdefault,
1881 generic=True,
1882 )
1883 coreconfigitem(
1884 b'pager',
1885 b'ignore',
1886 default=list,
1887 )
1888 coreconfigitem(
1889 b'pager',
1890 b'pager',
1891 default=dynamicdefault,
1892 )
1893 coreconfigitem(
1894 b'patch',
1895 b'eol',
1896 default=b'strict',
1897 )
1898 coreconfigitem(
1899 b'patch',
1900 b'fuzz',
1901 default=2,
1902 )
1903 coreconfigitem(
1904 b'paths',
1905 b'default',
1906 default=None,
1907 )
1908 coreconfigitem(
1909 b'paths',
1910 b'default-push',
1911 default=None,
1912 )
1913 coreconfigitem(
1914 b'paths',
1915 b'[^:]*',
1916 default=None,
1917 generic=True,
1918 )
1919 coreconfigitem(
1920 b'paths',
1921 b'.*:bookmarks.mode',
1922 default='default',
1923 generic=True,
1924 )
1925 coreconfigitem(
1926 b'paths',
1927 b'.*:multi-urls',
1928 default=False,
1929 generic=True,
1930 )
1931 coreconfigitem(
1932 b'paths',
1933 b'.*:pushrev',
1934 default=None,
1935 generic=True,
1936 )
1937 coreconfigitem(
1938 b'paths',
1939 b'.*:pushurl',
1940 default=None,
1941 generic=True,
1942 )
1943 coreconfigitem(
1944 b'paths',
1945 b'.*:pulled-delta-reuse-policy',
1946 default=None,
1947 generic=True,
1948 )
1949 coreconfigitem(
1950 b'phases',
1951 b'checksubrepos',
1952 default=b'follow',
1953 )
1954 coreconfigitem(
1955 b'phases',
1956 b'new-commit',
1957 default=b'draft',
1958 )
1959 coreconfigitem(
1960 b'phases',
1961 b'publish',
1962 default=True,
1963 )
1964 coreconfigitem(
1965 b'profiling',
1966 b'enabled',
1967 default=False,
1968 )
1969 coreconfigitem(
1970 b'profiling',
1971 b'format',
1972 default=b'text',
1973 )
1974 coreconfigitem(
1975 b'profiling',
1976 b'freq',
1977 default=1000,
1978 )
1979 coreconfigitem(
1980 b'profiling',
1981 b'limit',
1982 default=30,
1983 )
1984 coreconfigitem(
1985 b'profiling',
1986 b'nested',
1987 default=0,
1988 )
1989 coreconfigitem(
1990 b'profiling',
1991 b'output',
1992 default=None,
1993 )
1994 coreconfigitem(
1995 b'profiling',
1996 b'showmax',
1997 default=0.999,
1998 )
1999 coreconfigitem(
2000 b'profiling',
2001 b'showmin',
2002 default=dynamicdefault,
2003 )
2004 coreconfigitem(
2005 b'profiling',
2006 b'showtime',
2007 default=True,
2008 )
2009 coreconfigitem(
2010 b'profiling',
2011 b'sort',
2012 default=b'inlinetime',
2013 )
2014 coreconfigitem(
2015 b'profiling',
2016 b'statformat',
2017 default=b'hotpath',
2018 )
2019 coreconfigitem(
2020 b'profiling',
2021 b'time-track',
2022 default=dynamicdefault,
2023 )
2024 coreconfigitem(
2025 b'profiling',
2026 b'type',
2027 default=b'stat',
2028 )
2029 coreconfigitem(
2030 b'progress',
2031 b'assume-tty',
2032 default=False,
2033 )
2034 coreconfigitem(
2035 b'progress',
2036 b'changedelay',
2037 default=1,
2038 )
2039 coreconfigitem(
2040 b'progress',
2041 b'clear-complete',
2042 default=True,
2043 )
2044 coreconfigitem(
2045 b'progress',
2046 b'debug',
2047 default=False,
2048 )
2049 coreconfigitem(
2050 b'progress',
2051 b'delay',
2052 default=3,
2053 )
2054 coreconfigitem(
2055 b'progress',
2056 b'disable',
2057 default=False,
2058 )
2059 coreconfigitem(
2060 b'progress',
2061 b'estimateinterval',
2062 default=60.0,
2063 )
2064 coreconfigitem(
2065 b'progress',
2066 b'format',
2067 default=lambda: [b'topic', b'bar', b'number', b'estimate'],
2068 )
2069 coreconfigitem(
2070 b'progress',
2071 b'refresh',
2072 default=0.1,
2073 )
2074 coreconfigitem(
2075 b'progress',
2076 b'width',
2077 default=dynamicdefault,
2078 )
2079 coreconfigitem(
2080 b'pull',
2081 b'confirm',
2082 default=False,
2083 )
2084 coreconfigitem(
2085 b'push',
2086 b'pushvars.server',
2087 default=False,
2088 )
2089 coreconfigitem(
2090 b'rewrite',
2091 b'backup-bundle',
2092 default=True,
2093 alias=[(b'ui', b'history-editing-backup')],
2094 )
2095 coreconfigitem(
2096 b'rewrite',
2097 b'update-timestamp',
2098 default=False,
2099 )
2100 coreconfigitem(
2101 b'rewrite',
2102 b'empty-successor',
2103 default=b'skip',
2104 experimental=True,
2105 )
2106 # experimental as long as format.use-dirstate-v2 is.
2107 coreconfigitem(
2108 b'storage',
2109 b'dirstate-v2.slow-path',
2110 default=b"abort",
2111 experimental=True,
2112 )
2113 coreconfigitem(
2114 b'storage',
2115 b'new-repo-backend',
2116 default=b'revlogv1',
2117 experimental=True,
2118 )
2119 coreconfigitem(
2120 b'storage',
2121 b'revlog.optimize-delta-parent-choice',
2122 default=True,
2123 alias=[(b'format', b'aggressivemergedeltas')],
2124 )
2125 coreconfigitem(
2126 b'storage',
2127 b'revlog.delta-parent-search.candidate-group-chunk-size',
2128 default=20,
2129 )
2130 coreconfigitem(
2131 b'storage',
2132 b'revlog.issue6528.fix-incoming',
2133 default=True,
2134 )
2135 # experimental as long as rust is experimental (or a C version is implemented)
2136 coreconfigitem(
2137 b'storage',
2138 b'revlog.persistent-nodemap.mmap',
2139 default=True,
2140 )
2141 # experimental as long as format.use-persistent-nodemap is.
2142 coreconfigitem(
2143 b'storage',
2144 b'revlog.persistent-nodemap.slow-path',
2145 default=b"abort",
2146 )
2147
2148 coreconfigitem(
2149 b'storage',
2150 b'revlog.reuse-external-delta',
2151 default=True,
2152 )
2153 # This option is True unless `format.generaldelta` is set.
2154 coreconfigitem(
2155 b'storage',
2156 b'revlog.reuse-external-delta-parent',
2157 default=None,
2158 )
2159 coreconfigitem(
2160 b'storage',
2161 b'revlog.zlib.level',
2162 default=None,
2163 )
2164 coreconfigitem(
2165 b'storage',
2166 b'revlog.zstd.level',
2167 default=None,
2168 )
2169 coreconfigitem(
2170 b'server',
2171 b'bookmarks-pushkey-compat',
2172 default=True,
2173 )
2174 coreconfigitem(
2175 b'server',
2176 b'bundle1',
2177 default=True,
2178 )
2179 coreconfigitem(
2180 b'server',
2181 b'bundle1gd',
2182 default=None,
2183 )
2184 coreconfigitem(
2185 b'server',
2186 b'bundle1.pull',
2187 default=None,
2188 )
2189 coreconfigitem(
2190 b'server',
2191 b'bundle1gd.pull',
2192 default=None,
2193 )
2194 coreconfigitem(
2195 b'server',
2196 b'bundle1.push',
2197 default=None,
2198 )
2199 coreconfigitem(
2200 b'server',
2201 b'bundle1gd.push',
2202 default=None,
2203 )
2204 coreconfigitem(
2205 b'server',
2206 b'bundle2.stream',
2207 default=True,
2208 alias=[(b'experimental', b'bundle2.stream')],
2209 )
2210 coreconfigitem(
2211 b'server',
2212 b'compressionengines',
2213 default=list,
2214 )
2215 coreconfigitem(
2216 b'server',
2217 b'concurrent-push-mode',
2218 default=b'check-related',
2219 )
2220 coreconfigitem(
2221 b'server',
2222 b'disablefullbundle',
2223 default=False,
2224 )
2225 coreconfigitem(
2226 b'server',
2227 b'maxhttpheaderlen',
2228 default=1024,
2229 )
2230 coreconfigitem(
2231 b'server',
2232 b'pullbundle',
2233 default=True,
2234 )
2235 coreconfigitem(
2236 b'server',
2237 b'preferuncompressed',
2238 default=False,
2239 )
2240 coreconfigitem(
2241 b'server',
2242 b'streamunbundle',
2243 default=False,
2244 )
2245 coreconfigitem(
2246 b'server',
2247 b'uncompressed',
2248 default=True,
2249 )
2250 coreconfigitem(
2251 b'server',
2252 b'uncompressedallowsecret',
2253 default=False,
2254 )
2255 coreconfigitem(
2256 b'server',
2257 b'view',
2258 default=b'served',
2259 )
2260 coreconfigitem(
2261 b'server',
2262 b'validate',
2263 default=False,
2264 )
2265 coreconfigitem(
2266 b'server',
2267 b'zliblevel',
2268 default=-1,
2269 )
2270 coreconfigitem(
2271 b'server',
2272 b'zstdlevel',
2273 default=3,
2274 )
2275 coreconfigitem(
2276 b'share',
2277 b'pool',
2278 default=None,
2279 )
2280 coreconfigitem(
2281 b'share',
2282 b'poolnaming',
2283 default=b'identity',
2284 )
2285 coreconfigitem(
2286 b'share',
2287 b'safe-mismatch.source-not-safe',
2288 default=b'abort',
2289 )
2290 coreconfigitem(
2291 b'share',
2292 b'safe-mismatch.source-safe',
2293 default=b'abort',
2294 )
2295 coreconfigitem(
2296 b'share',
2297 b'safe-mismatch.source-not-safe.warn',
2298 default=True,
2299 )
2300 coreconfigitem(
2301 b'share',
2302 b'safe-mismatch.source-safe.warn',
2303 default=True,
2304 )
2305 coreconfigitem(
2306 b'share',
2307 b'safe-mismatch.source-not-safe:verbose-upgrade',
2308 default=True,
2309 )
2310 coreconfigitem(
2311 b'share',
2312 b'safe-mismatch.source-safe:verbose-upgrade',
2313 default=True,
2314 )
2315 coreconfigitem(
2316 b'shelve',
2317 b'maxbackups',
2318 default=10,
2319 )
2320 coreconfigitem(
2321 b'smtp',
2322 b'host',
2323 default=None,
2324 )
2325 coreconfigitem(
2326 b'smtp',
2327 b'local_hostname',
2328 default=None,
2329 )
2330 coreconfigitem(
2331 b'smtp',
2332 b'password',
2333 default=None,
2334 )
2335 coreconfigitem(
2336 b'smtp',
2337 b'port',
2338 default=dynamicdefault,
2339 )
2340 coreconfigitem(
2341 b'smtp',
2342 b'tls',
2343 default=b'none',
2344 )
2345 coreconfigitem(
2346 b'smtp',
2347 b'username',
2348 default=None,
2349 )
2350 coreconfigitem(
2351 b'sparse',
2352 b'missingwarning',
2353 default=True,
2354 experimental=True,
2355 )
2356 coreconfigitem(
2357 b'subrepos',
2358 b'allowed',
2359 default=dynamicdefault, # to make backporting simpler
2360 )
2361 coreconfigitem(
2362 b'subrepos',
2363 b'hg:allowed',
2364 default=dynamicdefault,
2365 )
2366 coreconfigitem(
2367 b'subrepos',
2368 b'git:allowed',
2369 default=dynamicdefault,
2370 )
2371 coreconfigitem(
2372 b'subrepos',
2373 b'svn:allowed',
2374 default=dynamicdefault,
2375 )
2376 coreconfigitem(
2377 b'templates',
2378 b'.*',
2379 default=None,
2380 generic=True,
2381 )
2382 coreconfigitem(
2383 b'templateconfig',
2384 b'.*',
2385 default=dynamicdefault,
2386 generic=True,
2387 )
2388 coreconfigitem(
2389 b'trusted',
2390 b'groups',
2391 default=list,
2392 )
2393 coreconfigitem(
2394 b'trusted',
2395 b'users',
2396 default=list,
2397 )
2398 coreconfigitem(
2399 b'ui',
2400 b'_usedassubrepo',
2401 default=False,
2402 )
2403 coreconfigitem(
2404 b'ui',
2405 b'allowemptycommit',
2406 default=False,
2407 )
2408 coreconfigitem(
2409 b'ui',
2410 b'archivemeta',
2411 default=True,
2412 )
2413 coreconfigitem(
2414 b'ui',
2415 b'askusername',
2416 default=False,
2417 )
2418 coreconfigitem(
2419 b'ui',
2420 b'available-memory',
2421 default=None,
2422 )
2423
2424 coreconfigitem(
2425 b'ui',
2426 b'clonebundlefallback',
2427 default=False,
2428 )
2429 coreconfigitem(
2430 b'ui',
2431 b'clonebundleprefers',
2432 default=list,
2433 )
2434 coreconfigitem(
2435 b'ui',
2436 b'clonebundles',
2437 default=True,
2438 )
2439 coreconfigitem(
2440 b'ui',
2441 b'color',
2442 default=b'auto',
2443 )
2444 coreconfigitem(
2445 b'ui',
2446 b'commitsubrepos',
2447 default=False,
2448 )
2449 coreconfigitem(
2450 b'ui',
2451 b'debug',
2452 default=False,
2453 )
2454 coreconfigitem(
2455 b'ui',
2456 b'debugger',
2457 default=None,
2458 )
2459 coreconfigitem(
2460 b'ui',
2461 b'editor',
2462 default=dynamicdefault,
2463 )
2464 coreconfigitem(
2465 b'ui',
2466 b'detailed-exit-code',
2467 default=False,
2468 experimental=True,
2469 )
2470 coreconfigitem(
2471 b'ui',
2472 b'fallbackencoding',
2473 default=None,
2474 )
2475 coreconfigitem(
2476 b'ui',
2477 b'forcecwd',
2478 default=None,
2479 )
2480 coreconfigitem(
2481 b'ui',
2482 b'forcemerge',
2483 default=None,
2484 )
2485 coreconfigitem(
2486 b'ui',
2487 b'formatdebug',
2488 default=False,
2489 )
2490 coreconfigitem(
2491 b'ui',
2492 b'formatjson',
2493 default=False,
2494 )
2495 coreconfigitem(
2496 b'ui',
2497 b'formatted',
2498 default=None,
2499 )
2500 coreconfigitem(
2501 b'ui',
2502 b'interactive',
2503 default=None,
2504 )
2505 coreconfigitem(
2506 b'ui',
2507 b'interface',
2508 default=None,
2509 )
2510 coreconfigitem(
2511 b'ui',
2512 b'interface.chunkselector',
2513 default=None,
2514 )
2515 coreconfigitem(
2516 b'ui',
2517 b'large-file-limit',
2518 default=10 * (2 ** 20),
2519 )
2520 coreconfigitem(
2521 b'ui',
2522 b'logblockedtimes',
2523 default=False,
2524 )
2525 coreconfigitem(
2526 b'ui',
2527 b'merge',
2528 default=None,
2529 )
2530 coreconfigitem(
2531 b'ui',
2532 b'mergemarkers',
2533 default=b'basic',
2534 )
2535 coreconfigitem(
2536 b'ui',
2537 b'message-output',
2538 default=b'stdio',
2539 )
2540 coreconfigitem(
2541 b'ui',
2542 b'nontty',
2543 default=False,
2544 )
2545 coreconfigitem(
2546 b'ui',
2547 b'origbackuppath',
2548 default=None,
2549 )
2550 coreconfigitem(
2551 b'ui',
2552 b'paginate',
2553 default=True,
2554 )
2555 coreconfigitem(
2556 b'ui',
2557 b'patch',
2558 default=None,
2559 )
2560 coreconfigitem(
2561 b'ui',
2562 b'portablefilenames',
2563 default=b'warn',
2564 )
2565 coreconfigitem(
2566 b'ui',
2567 b'promptecho',
2568 default=False,
2569 )
2570 coreconfigitem(
2571 b'ui',
2572 b'quiet',
2573 default=False,
2574 )
2575 coreconfigitem(
2576 b'ui',
2577 b'quietbookmarkmove',
2578 default=False,
2579 )
2580 coreconfigitem(
2581 b'ui',
2582 b'relative-paths',
2583 default=b'legacy',
2584 )
2585 coreconfigitem(
2586 b'ui',
2587 b'remotecmd',
2588 default=b'hg',
2589 )
2590 coreconfigitem(
2591 b'ui',
2592 b'report_untrusted',
2593 default=True,
2594 )
2595 coreconfigitem(
2596 b'ui',
2597 b'rollback',
2598 default=True,
2599 )
2600 coreconfigitem(
2601 b'ui',
2602 b'signal-safe-lock',
2603 default=True,
2604 )
2605 coreconfigitem(
2606 b'ui',
2607 b'slash',
2608 default=False,
2609 )
2610 coreconfigitem(
2611 b'ui',
2612 b'ssh',
2613 default=b'ssh',
2614 )
2615 coreconfigitem(
2616 b'ui',
2617 b'ssherrorhint',
2618 default=None,
2619 )
2620 coreconfigitem(
2621 b'ui',
2622 b'statuscopies',
2623 default=False,
2624 )
2625 coreconfigitem(
2626 b'ui',
2627 b'strict',
2628 default=False,
2629 )
2630 coreconfigitem(
2631 b'ui',
2632 b'style',
2633 default=b'',
2634 )
2635 coreconfigitem(
2636 b'ui',
2637 b'supportcontact',
2638 default=None,
2639 )
2640 coreconfigitem(
2641 b'ui',
2642 b'textwidth',
2643 default=78,
2644 )
2645 coreconfigitem(
2646 b'ui',
2647 b'timeout',
2648 default=b'600',
2649 )
2650 coreconfigitem(
2651 b'ui',
2652 b'timeout.warn',
2653 default=0,
2654 )
2655 coreconfigitem(
2656 b'ui',
2657 b'timestamp-output',
2658 default=False,
2659 )
2660 coreconfigitem(
2661 b'ui',
2662 b'traceback',
2663 default=False,
2664 )
2665 coreconfigitem(
2666 b'ui',
2667 b'tweakdefaults',
2668 default=False,
2669 )
2670 coreconfigitem(b'ui', b'username', alias=[(b'ui', b'user')])
2671 coreconfigitem(
2672 b'ui',
2673 b'verbose',
2674 default=False,
2675 )
2676 coreconfigitem(
2677 b'verify',
2678 b'skipflags',
2679 default=0,
2680 )
2681 coreconfigitem(
2682 b'web',
2683 b'allowbz2',
2684 default=False,
2685 )
2686 coreconfigitem(
2687 b'web',
2688 b'allowgz',
2689 default=False,
2690 )
2691 coreconfigitem(
2692 b'web',
2693 b'allow-pull',
2694 alias=[(b'web', b'allowpull')],
2695 default=True,
2696 )
2697 coreconfigitem(
2698 b'web',
2699 b'allow-push',
2700 alias=[(b'web', b'allow_push')],
2701 default=list,
2702 )
2703 coreconfigitem(
2704 b'web',
2705 b'allowzip',
2706 default=False,
2707 )
2708 coreconfigitem(
2709 b'web',
2710 b'archivesubrepos',
2711 default=False,
2712 )
2713 coreconfigitem(
2714 b'web',
2715 b'cache',
2716 default=True,
2717 )
2718 coreconfigitem(
2719 b'web',
2720 b'comparisoncontext',
2721 default=5,
2722 )
2723 coreconfigitem(
2724 b'web',
2725 b'contact',
2726 default=None,
2727 )
2728 coreconfigitem(
2729 b'web',
2730 b'deny_push',
2731 default=list,
2732 )
2733 coreconfigitem(
2734 b'web',
2735 b'guessmime',
2736 default=False,
2737 )
2738 coreconfigitem(
2739 b'web',
2740 b'hidden',
2741 default=False,
2742 )
2743 coreconfigitem(
2744 b'web',
2745 b'labels',
2746 default=list,
2747 )
2748 coreconfigitem(
2749 b'web',
2750 b'logoimg',
2751 default=b'hglogo.png',
2752 )
2753 coreconfigitem(
2754 b'web',
2755 b'logourl',
2756 default=b'https://mercurial-scm.org/',
2757 )
2758 coreconfigitem(
2759 b'web',
2760 b'accesslog',
2761 default=b'-',
2762 )
2763 coreconfigitem(
2764 b'web',
2765 b'address',
2766 default=b'',
2767 )
2768 coreconfigitem(
2769 b'web',
2770 b'allow-archive',
2771 alias=[(b'web', b'allow_archive')],
2772 default=list,
2773 )
2774 coreconfigitem(
2775 b'web',
2776 b'allow_read',
2777 default=list,
2778 )
2779 coreconfigitem(
2780 b'web',
2781 b'baseurl',
2782 default=None,
2783 )
2784 coreconfigitem(
2785 b'web',
2786 b'cacerts',
2787 default=None,
2788 )
2789 coreconfigitem(
2790 b'web',
2791 b'certificate',
2792 default=None,
2793 )
2794 coreconfigitem(
2795 b'web',
2796 b'collapse',
2797 default=False,
2798 )
2799 coreconfigitem(
2800 b'web',
2801 b'csp',
2802 default=None,
2803 )
2804 coreconfigitem(
2805 b'web',
2806 b'deny_read',
2807 default=list,
2808 )
2809 coreconfigitem(
2810 b'web',
2811 b'descend',
2812 default=True,
2813 )
2814 coreconfigitem(
2815 b'web',
2816 b'description',
2817 default=b"",
2818 )
2819 coreconfigitem(
2820 b'web',
2821 b'encoding',
2822 default=lambda: encoding.encoding,
2823 )
2824 coreconfigitem(
2825 b'web',
2826 b'errorlog',
2827 default=b'-',
2828 )
2829 coreconfigitem(
2830 b'web',
2831 b'ipv6',
2832 default=False,
2833 )
2834 coreconfigitem(
2835 b'web',
2836 b'maxchanges',
2837 default=10,
2838 )
2839 coreconfigitem(
2840 b'web',
2841 b'maxfiles',
2842 default=10,
2843 )
2844 coreconfigitem(
2845 b'web',
2846 b'maxshortchanges',
2847 default=60,
2848 )
2849 coreconfigitem(
2850 b'web',
2851 b'motd',
2852 default=b'',
2853 )
2854 coreconfigitem(
2855 b'web',
2856 b'name',
2857 default=dynamicdefault,
2858 )
2859 coreconfigitem(
2860 b'web',
2861 b'port',
2862 default=8000,
2863 )
2864 coreconfigitem(
2865 b'web',
2866 b'prefix',
2867 default=b'',
2868 )
2869 coreconfigitem(
2870 b'web',
2871 b'push_ssl',
2872 default=True,
2873 )
2874 coreconfigitem(
2875 b'web',
2876 b'refreshinterval',
2877 default=20,
2878 )
2879 coreconfigitem(
2880 b'web',
2881 b'server-header',
2882 default=None,
2883 )
2884 coreconfigitem(
2885 b'web',
2886 b'static',
2887 default=None,
2888 )
2889 coreconfigitem(
2890 b'web',
2891 b'staticurl',
2892 default=None,
2893 )
2894 coreconfigitem(
2895 b'web',
2896 b'stripes',
2897 default=1,
2898 )
2899 coreconfigitem(
2900 b'web',
2901 b'style',
2902 default=b'paper',
2903 )
2904 coreconfigitem(
2905 b'web',
2906 b'templates',
2907 default=None,
2908 )
2909 coreconfigitem(
2910 b'web',
2911 b'view',
2912 default=b'served',
2913 experimental=True,
2914 )
2915 coreconfigitem(
2916 b'worker',
2917 b'backgroundclose',
2918 default=dynamicdefault,
2919 )
2920 # Windows defaults to a limit of 512 open files. A buffer of 128
2921 # should give us enough headway.
2922 coreconfigitem(
2923 b'worker',
2924 b'backgroundclosemaxqueue',
2925 default=384,
2926 )
2927 coreconfigitem(
2928 b'worker',
2929 b'backgroundcloseminfilecount',
2930 default=2048,
2931 )
2932 coreconfigitem(
2933 b'worker',
2934 b'backgroundclosethreadcount',
2935 default=4,
2936 )
2937 coreconfigitem(
2938 b'worker',
2939 b'enabled',
2940 default=True,
2941 )
2942 coreconfigitem(
2943 b'worker',
2944 b'numcpus',
2945 default=None,
2946 )
2947
2948 # Rebase related configuration moved to core because other extension are doing
2949 # strange things. For example, shelve import the extensions to reuse some bit
2950 # without formally loading it.
2951 coreconfigitem(
2952 b'commands',
2953 b'rebase.requiredest',
2954 default=False,
2955 )
2956 coreconfigitem(
2957 b'experimental',
2958 b'rebaseskipobsolete',
2959 default=True,
2960 )
2961 coreconfigitem(
2962 b'rebase',
2963 b'singletransaction',
2964 default=False,
2965 )
2966 coreconfigitem(
2967 b'rebase',
2968 b'experimental.inmemory',
2969 default=False,
2970 )
2971
2972 # This setting controls creation of a rebase_source extra field
2973 # during rebase. When False, no such field is created. This is
2974 # useful eg for incrementally converting changesets and then
2975 # rebasing them onto an existing repo.
2976 # WARNING: this is an advanced setting reserved for people who know
2977 # exactly what they are doing. Misuse of this setting can easily
2978 # result in obsmarker cycles and a vivid headache.
2979 coreconfigitem(
2980 b'rebase',
2981 b'store-source',
2982 default=True,
2983 experimental=True,
2984 )
214 import_configitems_from_file()
This diff has been collapsed as it changes many lines, (5763 lines changed) Show them Hide them
@@ -1,1215 +1,1034 b''
1 # configitems.py - centralized declaration of configuration option
1 # configitems.toml - centralized declaration of configuration options
2 #
3 # This file contains declarations of the core Mercurial configuration options.
4 #
5 # # Structure
6 #
7 # items: array of config items
8 # templates: mapping of template name to template declaration
9 # template-applications: array of template applications
10 #
11 # # Elements
12 #
13 # ## Item
2 14 #
3 # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net>
15 # Declares a core Mercurial option.
16 #
17 # - section: string (required)
18 # - name: string (required)
19 # - default-type: boolean, changes how `default` is read
20 # - default: any
21 # - generic: boolean
22 # - priority: integer, only if `generic` is true
23 # - alias: list of 2-tuples of strings
24 # - experimental: boolean
25 # - documentation: string
26 # - in_core_extension: string
27 #
28 # ## Template
4 29 #
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
7
8
9 import functools
10 import re
11
12 from . import (
13 encoding,
14 error,
15 )
16
17
18 def loadconfigtable(ui, extname, configtable):
19 """update config item known to the ui with the extension ones"""
20 for section, items in sorted(configtable.items()):
21 knownitems = ui._knownconfig.setdefault(section, itemregister())
22 knownkeys = set(knownitems)
23 newkeys = set(items)
24 for key in sorted(knownkeys & newkeys):
25 msg = b"extension '%s' overwrite config item '%s.%s'"
26 msg %= (extname, section, key)
27 ui.develwarn(msg, config=b'warn-config')
28
29 knownitems.update(items)
30
31
32 class configitem:
33 """represent a known config item
34
35 :section: the official config section where to find this item,
36 :name: the official name within the section,
37 :default: default value for this item,
38 :alias: optional list of tuples as alternatives,
39 :generic: this is a generic definition, match name using regular expression.
40 """
41
42 def __init__(
43 self,
44 section,
45 name,
46 default=None,
47 alias=(),
48 generic=False,
49 priority=0,
50 experimental=False,
51 ):
52 self.section = section
53 self.name = name
54 self.default = default
55 self.alias = list(alias)
56 self.generic = generic
57 self.priority = priority
58 self.experimental = experimental
59 self._re = None
60 if generic:
61 self._re = re.compile(self.name)
62
63
64 class itemregister(dict):
65 """A specialized dictionary that can handle wild-card selection"""
66
67 def __init__(self):
68 super(itemregister, self).__init__()
69 self._generics = set()
70
71 def update(self, other):
72 super(itemregister, self).update(other)
73 self._generics.update(other._generics)
74
75 def __setitem__(self, key, item):
76 super(itemregister, self).__setitem__(key, item)
77 if item.generic:
78 self._generics.add(item)
79
80 def get(self, key):
81 baseitem = super(itemregister, self).get(key)
82 if baseitem is not None and not baseitem.generic:
83 return baseitem
84
85 # search for a matching generic item
86 generics = sorted(self._generics, key=(lambda x: (x.priority, x.name)))
87 for item in generics:
88 # we use 'match' instead of 'search' to make the matching simpler
89 # for people unfamiliar with regular expression. Having the match
90 # rooted to the start of the string will produce less surprising
91 # result for user writing simple regex for sub-attribute.
92 #
93 # For example using "color\..*" match produces an unsurprising
94 # result, while using search could suddenly match apparently
95 # unrelated configuration that happens to contains "color."
96 # anywhere. This is a tradeoff where we favor requiring ".*" on
97 # some match to avoid the need to prefix most pattern with "^".
98 # The "^" seems more error prone.
99 if item._re.match(key):
100 return item
101
102 return None
103
104
105 coreitems = {}
106
107
108 def _register(configtable, *args, **kwargs):
109 item = configitem(*args, **kwargs)
110 section = configtable.setdefault(item.section, itemregister())
111 if item.name in section:
112 msg = b"duplicated config item registration for '%s.%s'"
113 raise error.ProgrammingError(msg % (item.section, item.name))
114 section[item.name] = item
115
116
117 # special value for case where the default is derived from other values
118 dynamicdefault = object()
119
120 # Registering actual config items
121
122
123 def getitemregister(configtable):
124 f = functools.partial(_register, configtable)
125 # export pseudo enum as configitem.*
126 f.dynamicdefault = dynamicdefault
127 return f
128
129
130 coreconfigitem = getitemregister(coreitems)
131
132
133 def _registerdiffopts(section, configprefix=b''):
134 coreconfigitem(
135 section,
136 configprefix + b'nodates',
137 default=False,
138 )
139 coreconfigitem(
140 section,
141 configprefix + b'showfunc',
142 default=False,
143 )
144 coreconfigitem(
145 section,
146 configprefix + b'unified',
147 default=None,
148 )
149 coreconfigitem(
150 section,
151 configprefix + b'git',
152 default=False,
153 )
154 coreconfigitem(
155 section,
156 configprefix + b'ignorews',
157 default=False,
158 )
159 coreconfigitem(
160 section,
161 configprefix + b'ignorewsamount',
162 default=False,
163 )
164 coreconfigitem(
165 section,
166 configprefix + b'ignoreblanklines',
167 default=False,
168 )
169 coreconfigitem(
170 section,
171 configprefix + b'ignorewseol',
172 default=False,
173 )
174 coreconfigitem(
175 section,
176 configprefix + b'nobinary',
177 default=False,
178 )
179 coreconfigitem(
180 section,
181 configprefix + b'noprefix',
182 default=False,
183 )
184 coreconfigitem(
185 section,
186 configprefix + b'word-diff',
187 default=False,
188 )
189
190
191 coreconfigitem(
192 b'alias',
193 b'.*',
194 default=dynamicdefault,
195 generic=True,
196 )
197 coreconfigitem(
198 b'auth',
199 b'cookiefile',
200 default=None,
201 )
202 _registerdiffopts(section=b'annotate')
30 # Declares a group of options to be re-used for multiple sections.
31 #
32 # - all the same fields as `Item`, except `section` and `name`
33 # - `suffix` (string, required)
34 #
35 # ## Template applications
36 #
37 # Uses a `Template` to instanciate its options in a given section.
38 #
39 # - template: string (required, must match a `Template` name)
40 # - section: string (required)
41
42 [[items]]
43 section = "alias"
44 name = ".*"
45 default-type = "dynamic"
46 generic = true
47
48 [[items]]
49 section = "auth"
50 name = "cookiefile"
51
203 52 # bookmarks.pushing: internal hack for discovery
204 coreconfigitem(
205 b'bookmarks',
206 b'pushing',
207 default=list,
208 )
53 [[items]]
54 section = "bookmarks"
55 name = "pushing"
56 default-type = "list_type"
57
209 58 # bundle.mainreporoot: internal hack for bundlerepo
210 coreconfigitem(
211 b'bundle',
212 b'mainreporoot',
213 default=b'',
214 )
215 coreconfigitem(
216 b'censor',
217 b'policy',
218 default=b'abort',
219 experimental=True,
220 )
221 coreconfigitem(
222 b'chgserver',
223 b'idletimeout',
224 default=3600,
225 )
226 coreconfigitem(
227 b'chgserver',
228 b'skiphash',
229 default=False,
230 )
231 coreconfigitem(
232 b'cmdserver',
233 b'log',
234 default=None,
235 )
236 coreconfigitem(
237 b'cmdserver',
238 b'max-log-files',
239 default=7,
240 )
241 coreconfigitem(
242 b'cmdserver',
243 b'max-log-size',
244 default=b'1 MB',
245 )
246 coreconfigitem(
247 b'cmdserver',
248 b'max-repo-cache',
249 default=0,
250 experimental=True,
251 )
252 coreconfigitem(
253 b'cmdserver',
254 b'message-encodings',
255 default=list,
256 )
257 coreconfigitem(
258 b'cmdserver',
259 b'track-log',
260 default=lambda: [b'chgserver', b'cmdserver', b'repocache'],
261 )
262 coreconfigitem(
263 b'cmdserver',
264 b'shutdown-on-interrupt',
265 default=True,
266 )
267 coreconfigitem(
268 b'color',
269 b'.*',
270 default=None,
271 generic=True,
272 )
273 coreconfigitem(
274 b'color',
275 b'mode',
276 default=b'auto',
277 )
278 coreconfigitem(
279 b'color',
280 b'pagermode',
281 default=dynamicdefault,
282 )
283 coreconfigitem(
284 b'command-templates',
285 b'graphnode',
286 default=None,
287 alias=[(b'ui', b'graphnodetemplate')],
288 )
289 coreconfigitem(
290 b'command-templates',
291 b'log',
292 default=None,
293 alias=[(b'ui', b'logtemplate')],
294 )
295 coreconfigitem(
296 b'command-templates',
297 b'mergemarker',
298 default=(
299 b'{node|short} '
300 b'{ifeq(tags, "tip", "", '
301 b'ifeq(tags, "", "", "{tags} "))}'
302 b'{if(bookmarks, "{bookmarks} ")}'
303 b'{ifeq(branch, "default", "", "{branch} ")}'
304 b'- {author|user}: {desc|firstline}'
305 ),
306 alias=[(b'ui', b'mergemarkertemplate')],
307 )
308 coreconfigitem(
309 b'command-templates',
310 b'pre-merge-tool-output',
311 default=None,
312 alias=[(b'ui', b'pre-merge-tool-output-template')],
313 )
314 coreconfigitem(
315 b'command-templates',
316 b'oneline-summary',
317 default=None,
318 )
319 coreconfigitem(
320 b'command-templates',
321 b'oneline-summary.*',
322 default=dynamicdefault,
323 generic=True,
324 )
325 _registerdiffopts(section=b'commands', configprefix=b'commit.interactive.')
326 coreconfigitem(
327 b'commands',
328 b'commit.post-status',
329 default=False,
330 )
331 coreconfigitem(
332 b'commands',
333 b'grep.all-files',
334 default=False,
335 experimental=True,
336 )
337 coreconfigitem(
338 b'commands',
339 b'merge.require-rev',
340 default=False,
341 )
342 coreconfigitem(
343 b'commands',
344 b'push.require-revs',
345 default=False,
346 )
347 coreconfigitem(
348 b'commands',
349 b'resolve.confirm',
350 default=False,
351 )
352 coreconfigitem(
353 b'commands',
354 b'resolve.explicit-re-merge',
355 default=False,
356 )
357 coreconfigitem(
358 b'commands',
359 b'resolve.mark-check',
360 default=b'none',
361 )
362 _registerdiffopts(section=b'commands', configprefix=b'revert.interactive.')
363 coreconfigitem(
364 b'commands',
365 b'show.aliasprefix',
366 default=list,
367 )
368 coreconfigitem(
369 b'commands',
370 b'status.relative',
371 default=False,
372 )
373 coreconfigitem(
374 b'commands',
375 b'status.skipstates',
376 default=[],
377 experimental=True,
378 )
379 coreconfigitem(
380 b'commands',
381 b'status.terse',
382 default=b'',
383 )
384 coreconfigitem(
385 b'commands',
386 b'status.verbose',
387 default=False,
388 )
389 coreconfigitem(
390 b'commands',
391 b'update.check',
392 default=None,
393 )
394 coreconfigitem(
395 b'commands',
396 b'update.requiredest',
397 default=False,
398 )
399 coreconfigitem(
400 b'committemplate',
401 b'.*',
402 default=None,
403 generic=True,
404 )
405 coreconfigitem(
406 b'convert',
407 b'bzr.saverev',
408 default=True,
409 )
410 coreconfigitem(
411 b'convert',
412 b'cvsps.cache',
413 default=True,
414 )
415 coreconfigitem(
416 b'convert',
417 b'cvsps.fuzz',
418 default=60,
419 )
420 coreconfigitem(
421 b'convert',
422 b'cvsps.logencoding',
423 default=None,
424 )
425 coreconfigitem(
426 b'convert',
427 b'cvsps.mergefrom',
428 default=None,
429 )
430 coreconfigitem(
431 b'convert',
432 b'cvsps.mergeto',
433 default=None,
434 )
435 coreconfigitem(
436 b'convert',
437 b'git.committeractions',
438 default=lambda: [b'messagedifferent'],
439 )
440 coreconfigitem(
441 b'convert',
442 b'git.extrakeys',
443 default=list,
444 )
445 coreconfigitem(
446 b'convert',
447 b'git.findcopiesharder',
448 default=False,
449 )
450 coreconfigitem(
451 b'convert',
452 b'git.remoteprefix',
453 default=b'remote',
454 )
455 coreconfigitem(
456 b'convert',
457 b'git.renamelimit',
458 default=400,
459 )
460 coreconfigitem(
461 b'convert',
462 b'git.saverev',
463 default=True,
464 )
465 coreconfigitem(
466 b'convert',
467 b'git.similarity',
468 default=50,
469 )
470 coreconfigitem(
471 b'convert',
472 b'git.skipsubmodules',
473 default=False,
474 )
475 coreconfigitem(
476 b'convert',
477 b'hg.clonebranches',
478 default=False,
479 )
480 coreconfigitem(
481 b'convert',
482 b'hg.ignoreerrors',
483 default=False,
484 )
485 coreconfigitem(
486 b'convert',
487 b'hg.preserve-hash',
488 default=False,
489 )
490 coreconfigitem(
491 b'convert',
492 b'hg.revs',
493 default=None,
494 )
495 coreconfigitem(
496 b'convert',
497 b'hg.saverev',
498 default=False,
499 )
500 coreconfigitem(
501 b'convert',
502 b'hg.sourcename',
503 default=None,
504 )
505 coreconfigitem(
506 b'convert',
507 b'hg.startrev',
508 default=None,
509 )
510 coreconfigitem(
511 b'convert',
512 b'hg.tagsbranch',
513 default=b'default',
514 )
515 coreconfigitem(
516 b'convert',
517 b'hg.usebranchnames',
518 default=True,
519 )
520 coreconfigitem(
521 b'convert',
522 b'ignoreancestorcheck',
523 default=False,
524 experimental=True,
525 )
526 coreconfigitem(
527 b'convert',
528 b'localtimezone',
529 default=False,
530 )
531 coreconfigitem(
532 b'convert',
533 b'p4.encoding',
534 default=dynamicdefault,
535 )
536 coreconfigitem(
537 b'convert',
538 b'p4.startrev',
539 default=0,
540 )
541 coreconfigitem(
542 b'convert',
543 b'skiptags',
544 default=False,
545 )
546 coreconfigitem(
547 b'convert',
548 b'svn.debugsvnlog',
549 default=True,
550 )
551 coreconfigitem(
552 b'convert',
553 b'svn.trunk',
554 default=None,
555 )
556 coreconfigitem(
557 b'convert',
558 b'svn.tags',
559 default=None,
560 )
561 coreconfigitem(
562 b'convert',
563 b'svn.branches',
564 default=None,
565 )
566 coreconfigitem(
567 b'convert',
568 b'svn.startrev',
569 default=0,
570 )
571 coreconfigitem(
572 b'convert',
573 b'svn.dangerous-set-commit-dates',
574 default=False,
575 )
576 coreconfigitem(
577 b'debug',
578 b'dirstate.delaywrite',
579 default=0,
580 )
581 coreconfigitem(
582 b'debug',
583 b'revlog.verifyposition.changelog',
584 default=b'',
585 )
586 coreconfigitem(
587 b'debug',
588 b'revlog.debug-delta',
589 default=False,
590 )
591 # display extra information about the bundling process
592 coreconfigitem(
593 b'debug',
594 b'bundling-stats',
595 default=False,
596 )
597 # display extra information about the unbundling process
598 coreconfigitem(
599 b'debug',
600 b'unbundling-stats',
601 default=False,
602 )
603 coreconfigitem(
604 b'defaults',
605 b'.*',
606 default=None,
607 generic=True,
608 )
609 coreconfigitem(
610 b'devel',
611 b'all-warnings',
612 default=False,
613 )
614 coreconfigitem(
615 b'devel',
616 b'bundle2.debug',
617 default=False,
618 )
619 # which kind of delta to put in the bundled changegroup. Possible value
620 # - '': use default behavior
621 # - p1: force to always use delta against p1
622 # - full: force to always use full content
623 coreconfigitem(
624 b'devel',
625 b'bundle.delta',
626 default=b'',
627 )
628 coreconfigitem(
629 b'devel',
630 b'cache-vfs',
631 default=None,
632 )
633 coreconfigitem(
634 b'devel',
635 b'check-locks',
636 default=False,
637 )
638 coreconfigitem(
639 b'devel',
640 b'check-relroot',
641 default=False,
642 )
643 # Track copy information for all file, not just "added" one (very slow)
644 coreconfigitem(
645 b'devel',
646 b'copy-tracing.trace-all-files',
647 default=False,
648 )
649 coreconfigitem(
650 b'devel',
651 b'default-date',
652 default=None,
653 )
654 coreconfigitem(
655 b'devel',
656 b'deprec-warn',
657 default=False,
658 )
59 [[items]]
60 section = "bundle"
61 name = "mainreporoot"
62 default = ""
63
64 [[items]]
65 section = "censor"
66 name = "policy"
67 default = "abort"
68 experimental = true
69
70 [[items]]
71 section = "chgserver"
72 name = "idletimeout"
73 default = 3600
74
75 [[items]]
76 section = "chgserver"
77 name = "skiphash"
78 default = false
79
80 [[items]]
81 section = "cmdserver"
82 name = "log"
83
84 [[items]]
85 section = "cmdserver"
86 name = "max-log-files"
87 default = 7
88
89 [[items]]
90 section = "cmdserver"
91 name = "max-log-size"
92 default = "1 MB"
93
94 [[items]]
95 section = "cmdserver"
96 name = "max-repo-cache"
97 default = 0
98 experimental = true
99
100 [[items]]
101 section = "cmdserver"
102 name = "message-encodings"
103 default-type = "list_type"
104
105 [[items]]
106 section = "cmdserver"
107 name = "shutdown-on-interrupt"
108 default = true
109
110 [[items]]
111 section = "cmdserver"
112 name = "track-log"
113 default-type = "lambda"
114 default = [ "chgserver", "cmdserver", "repocache",]
115
116 [[items]]
117 section = "color"
118 name = ".*"
119 generic = true
120
121 [[items]]
122 section = "color"
123 name = "mode"
124 default = "auto"
125
126 [[items]]
127 section = "color"
128 name = "pagermode"
129 default-type = "dynamic"
130
131 [[items]]
132 section = "command-templates"
133 name = "graphnode"
134 alias = [["ui", "graphnodetemplate"]]
135
136 [[items]]
137 section = "command-templates"
138 name = "log"
139 alias = [["ui", "logtemplate"]]
140
141 [[items]]
142 section = "command-templates"
143 name = "mergemarker"
144 default = '{node|short} {ifeq(tags, "tip", "", ifeq(tags, "", "", "{tags} "))}{if(bookmarks, "{bookmarks} ")}{ifeq(branch, "default", "", "{branch} ")}- {author|user}: {desc|firstline}'
145 alias = [["ui", "mergemarkertemplate"]]
146
147 [[items]]
148 section = "command-templates"
149 name = "oneline-summary"
150
151 [[items]]
152 section = "command-templates"
153 name = "oneline-summary.*"
154 default-type = "dynamic"
155 generic = true
156
157 [[items]]
158 section = "command-templates"
159 name = "pre-merge-tool-output"
160 alias = [["ui", "pre-merge-tool-output-template"]]
161
162 [[items]]
163 section = "commands"
164 name = "commit.post-status"
165 default = false
166
167 [[items]]
168 section = "commands"
169 name = "grep.all-files"
170 default = false
171 experimental = true
172
173 [[items]]
174 section = "commands"
175 name = "merge.require-rev"
176 default = false
177
178 [[items]]
179 section = "commands"
180 name = "push.require-revs"
181 default = false
182
183 # Rebase related configuration moved to core because other extension are doing
184 # strange things. For example, shelve import the extensions to reuse some bit
185 # without formally loading it.
186 [[items]]
187 section = "commands"
188 name = "rebase.requiredest"
189 default = false
190
191 [[items]]
192 section = "commands"
193 name = "resolve.confirm"
194 default = false
195
196 [[items]]
197 section = "commands"
198 name = "resolve.explicit-re-merge"
199 default = false
200
201 [[items]]
202 section = "commands"
203 name = "resolve.mark-check"
204 default = "none"
205
206 [[items]]
207 section = "commands"
208 name = "show.aliasprefix"
209 default-type = "list_type"
210
211 [[items]]
212 section = "commands"
213 name = "status.relative"
214 default = false
215
216 [[items]]
217 section = "commands"
218 name = "status.skipstates"
219 default = []
220 experimental = true
221
222 [[items]]
223 section = "commands"
224 name = "status.terse"
225 default = ""
226
227 [[items]]
228 section = "commands"
229 name = "status.verbose"
230 default = false
231
232 [[items]]
233 section = "commands"
234 name = "update.check"
235
236 [[items]]
237 section = "commands"
238 name = "update.requiredest"
239 default = false
240
241 [[items]]
242 section = "committemplate"
243 name = ".*"
244 generic = true
245
246 [[items]]
247 section = "convert"
248 name = "bzr.saverev"
249 default = true
250
251 [[items]]
252 section = "convert"
253 name = "cvsps.cache"
254 default = true
255
256 [[items]]
257 section = "convert"
258 name = "cvsps.fuzz"
259 default = 60
260
261 [[items]]
262 section = "convert"
263 name = "cvsps.logencoding"
264
265 [[items]]
266 section = "convert"
267 name = "cvsps.mergefrom"
268
269 [[items]]
270 section = "convert"
271 name = "cvsps.mergeto"
272
273 [[items]]
274 section = "convert"
275 name = "git.committeractions"
276 default-type = "lambda"
277 default = [ "messagedifferent",]
278
279 [[items]]
280 section = "convert"
281 name = "git.extrakeys"
282 default-type = "list_type"
283
284 [[items]]
285 section = "convert"
286 name = "git.findcopiesharder"
287 default = false
288
289 [[items]]
290 section = "convert"
291 name = "git.remoteprefix"
292 default = "remote"
293
294 [[items]]
295 section = "convert"
296 name = "git.renamelimit"
297 default = 400
298
299 [[items]]
300 section = "convert"
301 name = "git.saverev"
302 default = true
303
304 [[items]]
305 section = "convert"
306 name = "git.similarity"
307 default = 50
308
309 [[items]]
310 section = "convert"
311 name = "git.skipsubmodules"
312 default = false
313
314 [[items]]
315 section = "convert"
316 name = "hg.clonebranches"
317 default = false
318
319 [[items]]
320 section = "convert"
321 name = "hg.ignoreerrors"
322 default = false
323
324 [[items]]
325 section = "convert"
326 name = "hg.preserve-hash"
327 default = false
328
329 [[items]]
330 section = "convert"
331 name = "hg.revs"
332
333 [[items]]
334 section = "convert"
335 name = "hg.saverev"
336 default = false
337
338 [[items]]
339 section = "convert"
340 name = "hg.sourcename"
341
342 [[items]]
343 section = "convert"
344 name = "hg.startrev"
345
346 [[items]]
347 section = "convert"
348 name = "hg.tagsbranch"
349 default = "default"
350
351 [[items]]
352 section = "convert"
353 name = "hg.usebranchnames"
354 default = true
355
356 [[items]]
357 section = "convert"
358 name = "ignoreancestorcheck"
359 default = false
360 experimental = true
361
362 [[items]]
363 section = "convert"
364 name = "localtimezone"
365 default = false
366
367 [[items]]
368 section = "convert"
369 name = "p4.encoding"
370 default-type = "dynamic"
371
372 [[items]]
373 section = "convert"
374 name = "p4.startrev"
375 default = 0
376
377 [[items]]
378 section = "convert"
379 name = "skiptags"
380 default = false
381
382 [[items]]
383 section = "convert"
384 name = "svn.branches"
385
386 [[items]]
387 section = "convert"
388 name = "svn.dangerous-set-commit-dates"
389 default = false
390
391 [[items]]
392 section = "convert"
393 name = "svn.debugsvnlog"
394 default = true
395
396 [[items]]
397 section = "convert"
398 name = "svn.startrev"
399 default = 0
400
401 [[items]]
402 section = "convert"
403 name = "svn.tags"
404
405 [[items]]
406 section = "convert"
407 name = "svn.trunk"
408
409 [[items]]
410 section = "debug"
411 name = "bundling-stats"
412 default = false
413 documentation = "Display extra information about the bundling process."
414
415 [[items]]
416 section = "debug"
417 name = "dirstate.delaywrite"
418 default = 0
419
420 [[items]]
421 section = "debug"
422 name = "revlog.debug-delta"
423 default = false
424
425 [[items]]
426 section = "debug"
427 name = "revlog.verifyposition.changelog"
428 default = ""
429
430 [[items]]
431 section = "debug"
432 name = "unbundling-stats"
433 default = false
434 documentation = "Display extra information about the unbundling process."
435
436 [[items]]
437 section = "defaults"
438 name = ".*"
439 generic = true
440
441 [[items]]
442 section = "devel"
443 name = "all-warnings"
444 default = false
445
446 [[items]]
447 section = "devel"
448 name = "bundle.delta"
449 default = ""
450
451 [[items]]
452 section = "devel"
453 name = "bundle2.debug"
454 default = false
455
456 [[items]]
457 section = "devel"
458 name = "cache-vfs"
459
460 [[items]]
461 section = "devel"
462 name = "check-locks"
463 default = false
464
465 [[items]]
466 section = "devel"
467 name = "check-relroot"
468 default = false
469
470 [[items]]
471 section = "devel"
472 name = "copy-tracing.multi-thread"
473 default = true
474
475 # Track copy information for all files, not just "added" ones (very slow)
476 [[items]]
477 section = "devel"
478 name = "copy-tracing.trace-all-files"
479 default = false
480
481 [[items]]
482 section = "devel"
483 name = "debug.abort-update"
484 default = false
485 documentation = """If true, then any merge with the working copy, \
486 e.g. [hg update], will be aborted after figuring out what needs to be done, \
487 but before spawning the parallel worker."""
488
489 [[items]]
490 section = "devel"
491 name = "debug.copies"
492 default = false
493
494 [[items]]
495 section = "devel"
496 name = "debug.extensions"
497 default = false
498
499 [[items]]
500 section = "devel"
501 name = "debug.peer-request"
502 default = false
503
504 [[items]]
505 section = "devel"
506 name = "debug.repo-filters"
507 default = false
508
509 [[items]]
510 section = "devel"
511 name = "default-date"
512
513 [[items]]
514 section = "devel"
515 name = "deprec-warn"
516 default = false
517
659 518 # possible values:
660 519 # - auto (the default)
661 520 # - force-append
662 521 # - force-new
663 coreconfigitem(
664 b'devel',
665 b'dirstate.v2.data_update_mode',
666 default="auto",
667 )
668 coreconfigitem(
669 b'devel',
670 b'disableloaddefaultcerts',
671 default=False,
672 )
673 coreconfigitem(
674 b'devel',
675 b'warn-empty-changegroup',
676 default=False,
677 )
678 coreconfigitem(
679 b'devel',
680 b'legacy.exchange',
681 default=list,
682 )
683 # When True, revlogs use a special reference version of the nodemap, that is not
684 # performant but is "known" to behave properly.
685 coreconfigitem(
686 b'devel',
687 b'persistent-nodemap',
688 default=False,
689 )
690 coreconfigitem(
691 b'devel',
692 b'servercafile',
693 default=b'',
694 )
695 # This config option is intended for use in tests only. It is a giant
696 # footgun to kill security. Don't define it.
697 coreconfigitem(
698 b'devel',
699 b'server-insecure-exact-protocol',
700 default=b'',
701 )
702 coreconfigitem(
703 b'devel',
704 b'serverrequirecert',
705 default=False,
706 )
707 # Makes the status algorithm wait for the existence of this file
708 # (or until a timeout of `devel.sync.status.pre-dirstate-write-file-timeout`
709 # seconds) before taking the lock and writing the dirstate.
710 # Status signals that it's ready to wait by creating a file
711 # with the same name + `.waiting`.
712 # Useful when testing race conditions.
713 coreconfigitem(
714 b'devel',
715 b'sync.status.pre-dirstate-write-file',
716 default=None,
717 )
718 coreconfigitem(
719 b'devel',
720 b'sync.status.pre-dirstate-write-file-timeout',
721 default=2,
722 )
723 coreconfigitem(
724 b'devel',
725 b'sync.dirstate.post-docket-read-file',
726 default=None,
727 )
728 coreconfigitem(
729 b'devel',
730 b'sync.dirstate.post-docket-read-file-timeout',
731 default=2,
732 )
733 coreconfigitem(
734 b'devel',
735 b'sync.dirstate.pre-read-file',
736 default=None,
737 )
738 coreconfigitem(
739 b'devel',
740 b'sync.dirstate.pre-read-file-timeout',
741 default=2,
742 )
743 coreconfigitem(
744 b'devel',
745 b'strip-obsmarkers',
746 default=True,
747 )
748 coreconfigitem(
749 b'devel',
750 b'warn-config',
751 default=None,
752 )
753 coreconfigitem(
754 b'devel',
755 b'warn-config-default',
756 default=None,
757 )
758 coreconfigitem(
759 b'devel',
760 b'user.obsmarker',
761 default=None,
762 )
763 coreconfigitem(
764 b'devel',
765 b'warn-config-unknown',
766 default=None,
767 )
768 coreconfigitem(
769 b'devel',
770 b'debug.copies',
771 default=False,
772 )
773 coreconfigitem(
774 b'devel',
775 b'copy-tracing.multi-thread',
776 default=True,
777 )
778 coreconfigitem(
779 b'devel',
780 b'debug.extensions',
781 default=False,
782 )
783 coreconfigitem(
784 b'devel',
785 b'debug.repo-filters',
786 default=False,
787 )
788 coreconfigitem(
789 b'devel',
790 b'debug.peer-request',
791 default=False,
792 )
793 # If discovery.exchange-heads is False, the discovery will not start with
794 # remote head fetching and local head querying.
795 coreconfigitem(
796 b'devel',
797 b'discovery.exchange-heads',
798 default=True,
799 )
800 # If devel.debug.abort-update is True, then any merge with the working copy,
801 # e.g. [hg update], will be aborted after figuring out what needs to be done,
802 # but before spawning the parallel worker
803 coreconfigitem(
804 b'devel',
805 b'debug.abort-update',
806 default=False,
807 )
808 # If discovery.grow-sample is False, the sample size used in set discovery will
809 # not be increased through the process
810 coreconfigitem(
811 b'devel',
812 b'discovery.grow-sample',
813 default=True,
814 )
815 # When discovery.grow-sample.dynamic is True, the default, the sample size is
816 # adapted to the shape of the undecided set (it is set to the max of:
817 # <target-size>, len(roots(undecided)), len(heads(undecided)
818 coreconfigitem(
819 b'devel',
820 b'discovery.grow-sample.dynamic',
821 default=True,
822 )
823 # discovery.grow-sample.rate control the rate at which the sample grow
824 coreconfigitem(
825 b'devel',
826 b'discovery.grow-sample.rate',
827 default=1.05,
828 )
829 # If discovery.randomize is False, random sampling during discovery are
830 # deterministic. It is meant for integration tests.
831 coreconfigitem(
832 b'devel',
833 b'discovery.randomize',
834 default=True,
835 )
836 # Control the initial size of the discovery sample
837 coreconfigitem(
838 b'devel',
839 b'discovery.sample-size',
840 default=200,
841 )
842 # Control the initial size of the discovery for initial change
843 coreconfigitem(
844 b'devel',
845 b'discovery.sample-size.initial',
846 default=100,
847 )
848 _registerdiffopts(section=b'diff')
849 coreconfigitem(
850 b'diff',
851 b'merge',
852 default=False,
853 experimental=True,
854 )
855 coreconfigitem(
856 b'email',
857 b'bcc',
858 default=None,
859 )
860 coreconfigitem(
861 b'email',
862 b'cc',
863 default=None,
864 )
865 coreconfigitem(
866 b'email',
867 b'charsets',
868 default=list,
869 )
870 coreconfigitem(
871 b'email',
872 b'from',
873 default=None,
874 )
875 coreconfigitem(
876 b'email',
877 b'method',
878 default=b'smtp',
879 )
880 coreconfigitem(
881 b'email',
882 b'reply-to',
883 default=None,
884 )
885 coreconfigitem(
886 b'email',
887 b'to',
888 default=None,
889 )
890 coreconfigitem(
891 b'experimental',
892 b'archivemetatemplate',
893 default=dynamicdefault,
894 )
895 coreconfigitem(
896 b'experimental',
897 b'auto-publish',
898 default=b'publish',
899 )
900 coreconfigitem(
901 b'experimental',
902 b'bundle-phases',
903 default=False,
904 )
905 coreconfigitem(
906 b'experimental',
907 b'bundle2-advertise',
908 default=True,
909 )
910 coreconfigitem(
911 b'experimental',
912 b'bundle2-output-capture',
913 default=False,
914 )
915 coreconfigitem(
916 b'experimental',
917 b'bundle2.pushback',
918 default=False,
919 )
920 coreconfigitem(
921 b'experimental',
922 b'bundle2lazylocking',
923 default=False,
924 )
925 coreconfigitem(
926 b'experimental',
927 b'bundlecomplevel',
928 default=None,
929 )
930 coreconfigitem(
931 b'experimental',
932 b'bundlecomplevel.bzip2',
933 default=None,
934 )
935 coreconfigitem(
936 b'experimental',
937 b'bundlecomplevel.gzip',
938 default=None,
939 )
940 coreconfigitem(
941 b'experimental',
942 b'bundlecomplevel.none',
943 default=None,
944 )
945 coreconfigitem(
946 b'experimental',
947 b'bundlecomplevel.zstd',
948 default=None,
949 )
950 coreconfigitem(
951 b'experimental',
952 b'bundlecompthreads',
953 default=None,
954 )
955 coreconfigitem(
956 b'experimental',
957 b'bundlecompthreads.bzip2',
958 default=None,
959 )
960 coreconfigitem(
961 b'experimental',
962 b'bundlecompthreads.gzip',
963 default=None,
964 )
965 coreconfigitem(
966 b'experimental',
967 b'bundlecompthreads.none',
968 default=None,
969 )
970 coreconfigitem(
971 b'experimental',
972 b'bundlecompthreads.zstd',
973 default=None,
974 )
975 coreconfigitem(
976 b'experimental',
977 b'changegroup3',
978 default=True,
979 )
980 coreconfigitem(
981 b'experimental',
982 b'changegroup4',
983 default=False,
984 )
522 [[items]]
523 section = "devel"
524 name = "dirstate.v2.data_update_mode"
525 default = "auto"
526
527 [[items]]
528 section = "devel"
529 name = "disableloaddefaultcerts"
530 default = false
531
532 [[items]]
533 section = "devel"
534 name = "discovery.exchange-heads"
535 default = true
536 documentation = """If false, the discovery will not start with remote \
537 head fetching and local head querying."""
538
539 [[items]]
540 section = "devel"
541 name = "discovery.grow-sample"
542 default = true
543 documentation = """If false, the sample size used in set discovery \
544 will not be increased through the process."""
545
546 [[items]]
547 section = "devel"
548 name = "discovery.grow-sample.dynamic"
549 default = true
550 documentation = """If true, the default, the sample size is adapted to the shape \
551 of the undecided set. It is set to the max of:
552 `<target-size>, len(roots(undecided)), len(heads(undecided))`"""
553
554 [[items]]
555 section = "devel"
556 name = "discovery.grow-sample.rate"
557 default = 1.05
558 documentation = "Controls the rate at which the sample grows."
559
560 [[items]]
561 section = "devel"
562 name = "discovery.randomize"
563 default = true
564 documentation = """If false, random samplings during discovery are deterministic. \
565 It is meant for integration tests."""
566
567 [[items]]
568 section = "devel"
569 name = "discovery.sample-size"
570 default = 200
571 documentation = "Controls the initial size of the discovery sample."
572
573 [[items]]
574 section = "devel"
575 name = "discovery.sample-size.initial"
576 default = 100
577 documentation = "Controls the initial size of the discovery for initial change."
578
579 [[items]]
580 section = "devel"
581 name = "legacy.exchange"
582 default-type = "list_type"
583
584 [[items]]
585 section = "devel"
586 name = "persistent-nodemap"
587 default = false
588 documentation = """When true, revlogs use a special reference version of the \
589 nodemap, that is not performant but is "known" to behave properly."""
590
591 [[items]]
592 section = "devel"
593 name = "server-insecure-exact-protocol"
594 default = ""
595
596 [[items]]
597 section = "devel"
598 name = "servercafile"
599 default = ""
600
601 [[items]]
602 section = "devel"
603 name = "serverexactprotocol"
604 default = ""
605
606 [[items]]
607 section = "devel"
608 name = "serverrequirecert"
609 default = false
610
611 [[items]]
612 section = "devel"
613 name = "strip-obsmarkers"
614 default = true
615
616 [[items]]
617 section = 'devel'
618 name = 'sync.status.pre-dirstate-write-file'
619 documentation = """
620 Makes the status algorithm wait for the existence of this file \
621 (or until a timeout of `devel.sync.status.pre-dirstate-write-file-timeout` \
622 seconds) before taking the lock and writing the dirstate. \
623 Status signals that it's ready to wait by creating a file \
624 with the same name + `.waiting`. \
625 Useful when testing race conditions."""
626
627 [[items]]
628 section = 'devel'
629 name = 'sync.status.pre-dirstate-write-file-timeout'
630 default=2
631
632 [[items]]
633 section = 'devel'
634 name = 'sync.dirstate.post-docket-read-file'
635
636 [[items]]
637 section = 'devel'
638 name = 'sync.dirstate.post-docket-read-file-timeout'
639 default=2
640
641 [[items]]
642 section = 'devel'
643 name = 'sync.dirstate.pre-read-file'
644
645 [[items]]
646 section = 'devel'
647 name = 'sync.dirstate.pre-read-file-timeout'
648 default=2
649
650 [[items]]
651 section = "devel"
652 name = "user.obsmarker"
653
654 [[items]]
655 section = "devel"
656 name = "warn-config"
657
658 [[items]]
659 section = "devel"
660 name = "warn-config-default"
661
662 [[items]]
663 section = "devel"
664 name = "warn-config-unknown"
665
666 [[items]]
667 section = "devel"
668 name = "warn-empty-changegroup"
669 default = false
670
671 [[items]]
672 section = "diff"
673 name = "merge"
674 default = false
675 experimental = true
676
677 [[items]]
678 section = "email"
679 name = "bcc"
680
681 [[items]]
682 section = "email"
683 name = "cc"
684
685 [[items]]
686 section = "email"
687 name = "charsets"
688 default-type = "list_type"
689
690 [[items]]
691 section = "email"
692 name = "from"
693
694 [[items]]
695 section = "email"
696 name = "method"
697 default = "smtp"
698
699 [[items]]
700 section = "email"
701 name = "reply-to"
702
703 [[items]]
704 section = "email"
705 name = "to"
706
707 [[items]]
708 section = "experimental"
709 name = "archivemetatemplate"
710 default-type = "dynamic"
711
712 [[items]]
713 section = "experimental"
714 name = "auto-publish"
715 default = "publish"
716
717 [[items]]
718 section = "experimental"
719 name = "bundle-phases"
720 default = false
721
722 [[items]]
723 section = "experimental"
724 name = "bundle2-advertise"
725 default = true
726
727 [[items]]
728 section = "experimental"
729 name = "bundle2-output-capture"
730 default = false
731
732 [[items]]
733 section = "experimental"
734 name = "bundle2.pushback"
735 default = false
736
737 [[items]]
738 section = "experimental"
739 name = "bundle2lazylocking"
740 default = false
741
742 [[items]]
743 section = "experimental"
744 name = "bundlecomplevel"
745
746 [[items]]
747 section = "experimental"
748 name = "bundlecomplevel.bzip2"
749
750 [[items]]
751 section = "experimental"
752 name = "bundlecomplevel.gzip"
753
754 [[items]]
755 section = "experimental"
756 name = "bundlecomplevel.none"
757
758 [[items]]
759 section = "experimental"
760 name = "bundlecomplevel.zstd"
761
762 [[items]]
763 section = "experimental"
764 name = "bundlecompthreads"
765
766 [[items]]
767 section = "experimental"
768 name = "bundlecompthreads.bzip2"
769
770 [[items]]
771 section = "experimental"
772 name = "bundlecompthreads.gzip"
773
774 [[items]]
775 section = "experimental"
776 name = "bundlecompthreads.none"
777
778 [[items]]
779 section = "experimental"
780 name = "bundlecompthreads.zstd"
781
782 [[items]]
783 section = "experimental"
784 name = "changegroup3"
785 default = true
786
787 [[items]]
788 section = "experimental"
789 name = "changegroup4"
790 default = false
985 791
986 792 # might remove rank configuration once the computation has no impact
987 coreconfigitem(
988 b'experimental',
989 b'changelog-v2.compute-rank',
990 default=True,
991 )
992 coreconfigitem(
993 b'experimental',
994 b'cleanup-as-archived',
995 default=False,
996 )
997 coreconfigitem(
998 b'experimental',
999 b'clientcompressionengines',
1000 default=list,
1001 )
1002 coreconfigitem(
1003 b'experimental',
1004 b'copytrace',
1005 default=b'on',
1006 )
1007 coreconfigitem(
1008 b'experimental',
1009 b'copytrace.movecandidateslimit',
1010 default=100,
1011 )
1012 coreconfigitem(
1013 b'experimental',
1014 b'copytrace.sourcecommitlimit',
1015 default=100,
1016 )
1017 coreconfigitem(
1018 b'experimental',
1019 b'copies.read-from',
1020 default=b"filelog-only",
1021 )
1022 coreconfigitem(
1023 b'experimental',
1024 b'copies.write-to',
1025 default=b'filelog-only',
1026 )
1027 coreconfigitem(
1028 b'experimental',
1029 b'crecordtest',
1030 default=None,
1031 )
1032 coreconfigitem(
1033 b'experimental',
1034 b'directaccess',
1035 default=False,
1036 )
1037 coreconfigitem(
1038 b'experimental',
1039 b'directaccess.revnums',
1040 default=False,
1041 )
1042 coreconfigitem(
1043 b'experimental',
1044 b'editortmpinhg',
1045 default=False,
1046 )
1047 coreconfigitem(
1048 b'experimental',
1049 b'evolution',
1050 default=list,
1051 )
1052 coreconfigitem(
1053 b'experimental',
1054 b'evolution.allowdivergence',
1055 default=False,
1056 alias=[(b'experimental', b'allowdivergence')],
1057 )
1058 coreconfigitem(
1059 b'experimental',
1060 b'evolution.allowunstable',
1061 default=None,
1062 )
1063 coreconfigitem(
1064 b'experimental',
1065 b'evolution.createmarkers',
1066 default=None,
1067 )
1068 coreconfigitem(
1069 b'experimental',
1070 b'evolution.effect-flags',
1071 default=True,
1072 alias=[(b'experimental', b'effect-flags')],
1073 )
1074 coreconfigitem(
1075 b'experimental',
1076 b'evolution.exchange',
1077 default=None,
1078 )
1079 coreconfigitem(
1080 b'experimental',
1081 b'evolution.bundle-obsmarker',
1082 default=False,
1083 )
1084 coreconfigitem(
1085 b'experimental',
1086 b'evolution.bundle-obsmarker:mandatory',
1087 default=True,
1088 )
1089 coreconfigitem(
1090 b'experimental',
1091 b'log.topo',
1092 default=False,
1093 )
1094 coreconfigitem(
1095 b'experimental',
1096 b'evolution.report-instabilities',
1097 default=True,
1098 )
1099 coreconfigitem(
1100 b'experimental',
1101 b'evolution.track-operation',
1102 default=True,
1103 )
1104 # repo-level config to exclude a revset visibility
1105 #
1106 # The target use case is to use `share` to expose different subset of the same
1107 # repository, especially server side. See also `server.view`.
1108 coreconfigitem(
1109 b'experimental',
1110 b'extra-filter-revs',
1111 default=None,
1112 )
1113 coreconfigitem(
1114 b'experimental',
1115 b'maxdeltachainspan',
1116 default=-1,
1117 )
1118 # tracks files which were undeleted (merge might delete them but we explicitly
1119 # kept/undeleted them) and creates new filenodes for them
1120 coreconfigitem(
1121 b'experimental',
1122 b'merge-track-salvaged',
1123 default=False,
1124 )
1125 coreconfigitem(
1126 b'experimental',
1127 b'mmapindexthreshold',
1128 default=None,
1129 )
1130 coreconfigitem(
1131 b'experimental',
1132 b'narrow',
1133 default=False,
1134 )
1135 coreconfigitem(
1136 b'experimental',
1137 b'nonnormalparanoidcheck',
1138 default=False,
1139 )
1140 coreconfigitem(
1141 b'experimental',
1142 b'exportableenviron',
1143 default=list,
1144 )
1145 coreconfigitem(
1146 b'experimental',
1147 b'extendedheader.index',
1148 default=None,
1149 )
1150 coreconfigitem(
1151 b'experimental',
1152 b'extendedheader.similarity',
1153 default=False,
1154 )
1155 coreconfigitem(
1156 b'experimental',
1157 b'graphshorten',
1158 default=False,
1159 )
1160 coreconfigitem(
1161 b'experimental',
1162 b'graphstyle.parent',
1163 default=dynamicdefault,
1164 )
1165 coreconfigitem(
1166 b'experimental',
1167 b'graphstyle.missing',
1168 default=dynamicdefault,
1169 )
1170 coreconfigitem(
1171 b'experimental',
1172 b'graphstyle.grandparent',
1173 default=dynamicdefault,
1174 )
1175 coreconfigitem(
1176 b'experimental',
1177 b'hook-track-tags',
1178 default=False,
1179 )
1180 coreconfigitem(
1181 b'experimental',
1182 b'httppostargs',
1183 default=False,
1184 )
1185 coreconfigitem(b'experimental', b'nointerrupt', default=False)
1186 coreconfigitem(b'experimental', b'nointerrupt-interactiveonly', default=True)
1187
1188 coreconfigitem(
1189 b'experimental',
1190 b'obsmarkers-exchange-debug',
1191 default=False,
1192 )
1193 coreconfigitem(
1194 b'experimental',
1195 b'remotenames',
1196 default=False,
1197 )
1198 coreconfigitem(
1199 b'experimental',
1200 b'removeemptydirs',
1201 default=True,
1202 )
1203 coreconfigitem(
1204 b'experimental',
1205 b'revert.interactive.select-to-keep',
1206 default=False,
1207 )
1208 coreconfigitem(
1209 b'experimental',
1210 b'revisions.prefixhexnode',
1211 default=False,
1212 )
793 [[items]]
794 section = "experimental"
795 name = "changelog-v2.compute-rank"
796 default = true
797
798 [[items]]
799 section = "experimental"
800 name = "cleanup-as-archived"
801 default = false
802
803 [[items]]
804 section = "experimental"
805 name = "clientcompressionengines"
806 default-type = "list_type"
807
808 [[items]]
809 section = "experimental"
810 name = "copies.read-from"
811 default = "filelog-only"
812
813 [[items]]
814 section = "experimental"
815 name = "copies.write-to"
816 default = "filelog-only"
817
818 [[items]]
819 section = "experimental"
820 name = "copytrace"
821 default = "on"
822
823 [[items]]
824 section = "experimental"
825 name = "copytrace.movecandidateslimit"
826 default = 100
827
828 [[items]]
829 section = "experimental"
830 name = "copytrace.sourcecommitlimit"
831 default = 100
832
833 [[items]]
834 section = "experimental"
835 name = "crecordtest"
836
837 [[items]]
838 section = "experimental"
839 name = "directaccess"
840 default = false
841
842 [[items]]
843 section = "experimental"
844 name = "directaccess.revnums"
845 default = false
846
847 [[items]]
848 section = "experimental"
849 name = "editortmpinhg"
850 default = false
851
852 [[items]]
853 section = "experimental"
854 name = "evolution"
855 default-type = "list_type"
856
857 [[items]]
858 section = "experimental"
859 name = "evolution.allowdivergence"
860 default = false
861 alias = [["experimental", "allowdivergence"]]
862
863 [[items]]
864 section = "experimental"
865 name = "evolution.allowunstable"
866
867 [[items]]
868 section = "experimental"
869 name = "evolution.bundle-obsmarker"
870 default = false
871
872 [[items]]
873 section = "experimental"
874 name = "evolution.bundle-obsmarker:mandatory"
875 default = true
876
877 [[items]]
878 section = "experimental"
879 name = "evolution.createmarkers"
880
881 [[items]]
882 section = "experimental"
883 name = "evolution.effect-flags"
884 default = true
885 alias = [["experimental", "effect-flags"]]
886
887 [[items]]
888 section = "experimental"
889 name = "evolution.exchange"
890
891 [[items]]
892 section = "experimental"
893 name = "evolution.report-instabilities"
894 default = true
895
896 [[items]]
897 section = "experimental"
898 name = "evolution.track-operation"
899 default = true
900
901 [[items]]
902 section = "experimental"
903 name = "exportableenviron"
904 default-type = "list_type"
905
906 [[items]]
907 section = "experimental"
908 name = "extendedheader.index"
909
910 [[items]]
911 section = "experimental"
912 name = "extendedheader.similarity"
913 default = false
914
915 [[items]]
916 section = "experimental"
917 name = "extra-filter-revs"
918 documentation = """Repo-level config to prevent a revset from being visible.
919 The target use case is to use `share` to expose different subsets of the same \
920 repository, especially server side. See also `server.view`."""
921
922 [[items]]
923 section = "experimental"
924 name = "graphshorten"
925 default = false
926
927 [[items]]
928 section = "experimental"
929 name = "graphstyle.grandparent"
930 default-type = "dynamic"
931
932 [[items]]
933 section = "experimental"
934 name = "graphstyle.missing"
935 default-type = "dynamic"
936
937 [[items]]
938 section = "experimental"
939 name = "graphstyle.parent"
940 default-type = "dynamic"
941
942 [[items]]
943 section = "experimental"
944 name = "hook-track-tags"
945 default = false
946
947 [[items]]
948 section = "experimental"
949 name = "httppostargs"
950 default = false
951
952 [[items]]
953 section = "experimental"
954 name = "log.topo"
955 default = false
956
957 [[items]]
958 section = "experimental"
959 name = "maxdeltachainspan"
960 default = -1
961
962 [[items]]
963 section = "experimental"
964 name = "merge-track-salvaged"
965 default = false
966 documentation = """Tracks files which were undeleted (merge might delete them \
967 but we explicitly kept/undeleted them) and creates new filenodes for them."""
968
969 [[items]]
970 section = "experimental"
971 name = "merge.checkpathconflicts"
972 default = false
973
974 [[items]]
975 section = "experimental"
976 name = "mmapindexthreshold"
977
978 [[items]]
979 section = "experimental"
980 name = "narrow"
981 default = false
982
983 [[items]]
984 section = "experimental"
985 name = "nointerrupt"
986 default = false
987
988 [[items]]
989 section = "experimental"
990 name = "nointerrupt-interactiveonly"
991 default = true
992
993 [[items]]
994 section = "experimental"
995 name = "nonnormalparanoidcheck"
996 default = false
997
998 [[items]]
999 section = "experimental"
1000 name = "obsmarkers-exchange-debug"
1001 default = false
1002
1003 [[items]]
1004 section = "experimental"
1005 name = "rebaseskipobsolete"
1006 default = true
1007
1008 [[items]]
1009 section = "experimental"
1010 name = "remotenames"
1011 default = false
1012
1013 [[items]]
1014 section = "experimental"
1015 name = "removeemptydirs"
1016 default = true
1017
1018 [[items]]
1019 section = "experimental"
1020 name = "revert.interactive.select-to-keep"
1021 default = false
1022
1023 [[items]]
1024 section = "experimental"
1025 name = "revisions.disambiguatewithin"
1026
1027 [[items]]
1028 section = "experimental"
1029 name = "revisions.prefixhexnode"
1030 default = false
1031
1213 1032 # "out of experimental" todo list.
1214 1033 #
1215 1034 # * include management of a persistent nodemap in the main docket
@@ -1231,297 +1050,153 b' coreconfigitem('
1231 1050 # - split the data offset and flag field (the 2 bytes save are mostly trouble)
1232 1051 # - keep track of uncompressed -chunk- size (to preallocate memory better)
1233 1052 # - keep track of chain base or size (probably not that useful anymore)
1234 coreconfigitem(
1235 b'experimental',
1236 b'revlogv2',
1237 default=None,
1238 )
1239 coreconfigitem(
1240 b'experimental',
1241 b'revisions.disambiguatewithin',
1242 default=None,
1243 )
1244 coreconfigitem(
1245 b'experimental',
1246 b'rust.index',
1247 default=False,
1248 )
1249 coreconfigitem(
1250 b'experimental',
1251 b'server.allow-hidden-access',
1252 default=list,
1253 )
1254 coreconfigitem(
1255 b'experimental',
1256 b'server.filesdata.recommended-batch-size',
1257 default=50000,
1258 )
1259 coreconfigitem(
1260 b'experimental',
1261 b'server.manifestdata.recommended-batch-size',
1262 default=100000,
1263 )
1264 coreconfigitem(
1265 b'experimental',
1266 b'server.stream-narrow-clones',
1267 default=False,
1268 )
1269 coreconfigitem(
1270 b'experimental',
1271 b'single-head-per-branch',
1272 default=False,
1273 )
1274 coreconfigitem(
1275 b'experimental',
1276 b'single-head-per-branch:account-closed-heads',
1277 default=False,
1278 )
1279 coreconfigitem(
1280 b'experimental',
1281 b'single-head-per-branch:public-changes-only',
1282 default=False,
1283 )
1284 coreconfigitem(
1285 b'experimental',
1286 b'sparse-read',
1287 default=False,
1288 )
1289 coreconfigitem(
1290 b'experimental',
1291 b'sparse-read.density-threshold',
1292 default=0.50,
1293 )
1294 coreconfigitem(
1295 b'experimental',
1296 b'sparse-read.min-gap-size',
1297 default=b'65K',
1298 )
1299 coreconfigitem(
1300 b'experimental',
1301 b'stream-v3',
1302 default=False,
1303 )
1304 coreconfigitem(
1305 b'experimental',
1306 b'treemanifest',
1307 default=False,
1308 )
1309 coreconfigitem(
1310 b'experimental',
1311 b'update.atomic-file',
1312 default=False,
1313 )
1314 coreconfigitem(
1315 b'experimental',
1316 b'web.full-garbage-collection-rate',
1317 default=1, # still forcing a full collection on each request
1318 )
1319 coreconfigitem(
1320 b'experimental',
1321 b'worker.wdir-get-thread-safe',
1322 default=False,
1323 )
1324 coreconfigitem(
1325 b'experimental',
1326 b'worker.repository-upgrade',
1327 default=False,
1328 )
1329 coreconfigitem(
1330 b'experimental',
1331 b'xdiff',
1332 default=False,
1333 )
1334 coreconfigitem(
1335 b'extensions',
1336 b'[^:]*',
1337 default=None,
1338 generic=True,
1339 )
1340 coreconfigitem(
1341 b'extensions',
1342 b'[^:]*:required',
1343 default=False,
1344 generic=True,
1345 )
1346 coreconfigitem(
1347 b'extdata',
1348 b'.*',
1349 default=None,
1350 generic=True,
1351 )
1352 coreconfigitem(
1353 b'format',
1354 b'bookmarks-in-store',
1355 default=False,
1356 )
1357 coreconfigitem(
1358 b'format',
1359 b'chunkcachesize',
1360 default=None,
1361 experimental=True,
1362 )
1363 coreconfigitem(
1364 # Enable this dirstate format *when creating a new repository*.
1365 # Which format to use for existing repos is controlled by .hg/requires
1366 b'format',
1367 b'use-dirstate-v2',
1368 default=False,
1369 experimental=True,
1370 alias=[(b'format', b'exp-rc-dirstate-v2')],
1371 )
1372 coreconfigitem(
1373 b'format',
1374 b'use-dirstate-v2.automatic-upgrade-of-mismatching-repositories',
1375 default=False,
1376 experimental=True,
1377 )
1378 coreconfigitem(
1379 b'format',
1380 b'use-dirstate-v2.automatic-upgrade-of-mismatching-repositories:quiet',
1381 default=False,
1382 experimental=True,
1383 )
1384 coreconfigitem(
1385 b'format',
1386 b'use-dirstate-tracked-hint',
1387 default=False,
1388 experimental=True,
1389 )
1390 coreconfigitem(
1391 b'format',
1392 b'use-dirstate-tracked-hint.version',
1393 default=1,
1394 experimental=True,
1395 )
1396 coreconfigitem(
1397 b'format',
1398 b'use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories',
1399 default=False,
1400 experimental=True,
1401 )
1402 coreconfigitem(
1403 b'format',
1404 b'use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories:quiet',
1405 default=False,
1406 experimental=True,
1407 )
1408 coreconfigitem(
1409 b'format',
1410 b'dotencode',
1411 default=True,
1412 )
1413 coreconfigitem(
1414 b'format',
1415 b'generaldelta',
1416 default=False,
1417 experimental=True,
1418 )
1419 coreconfigitem(
1420 b'format',
1421 b'manifestcachesize',
1422 default=None,
1423 experimental=True,
1424 )
1425 coreconfigitem(
1426 b'format',
1427 b'maxchainlen',
1428 default=dynamicdefault,
1429 experimental=True,
1430 )
1431 coreconfigitem(
1432 b'format',
1433 b'obsstore-version',
1434 default=None,
1435 )
1436 coreconfigitem(
1437 b'format',
1438 b'sparse-revlog',
1439 default=True,
1440 )
1441 coreconfigitem(
1442 b'format',
1443 b'revlog-compression',
1444 default=lambda: [b'zstd', b'zlib'],
1445 alias=[(b'experimental', b'format.compression')],
1446 )
1447 # Experimental TODOs:
1448 #
1449 # * Same as for revlogv2 (but for the reduction of the number of files)
1450 # * Actually computing the rank of changesets
1451 # * Improvement to investigate
1452 # - storing .hgtags fnode
1453 # - storing branch related identifier
1454
1455 coreconfigitem(
1456 b'format',
1457 b'exp-use-changelog-v2',
1458 default=None,
1459 experimental=True,
1460 )
1461 coreconfigitem(
1462 b'format',
1463 b'usefncache',
1464 default=True,
1465 )
1466 coreconfigitem(
1467 b'format',
1468 b'usegeneraldelta',
1469 default=True,
1470 )
1471 coreconfigitem(
1472 b'format',
1473 b'usestore',
1474 default=True,
1475 )
1476
1477
1478 def _persistent_nodemap_default():
1479 """compute `use-persistent-nodemap` default value
1480
1481 The feature is disabled unless a fast implementation is available.
1482 """
1483 from . import policy
1484
1485 return policy.importrust('revlog') is not None
1486
1487
1488 coreconfigitem(
1489 b'format',
1490 b'use-persistent-nodemap',
1491 default=_persistent_nodemap_default,
1492 )
1493 coreconfigitem(
1494 b'format',
1495 b'exp-use-copies-side-data-changeset',
1496 default=False,
1497 experimental=True,
1498 )
1499 coreconfigitem(
1500 b'format',
1501 b'use-share-safe',
1502 default=True,
1503 )
1504 coreconfigitem(
1505 b'format',
1506 b'use-share-safe.automatic-upgrade-of-mismatching-repositories',
1507 default=False,
1508 experimental=True,
1509 )
1510 coreconfigitem(
1511 b'format',
1512 b'use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet',
1513 default=False,
1514 experimental=True,
1515 )
1516
1517 # Moving this on by default means we are confident about the scaling of phases.
1518 # This is not garanteed to be the case at the time this message is written.
1519 coreconfigitem(
1520 b'format',
1521 b'use-internal-phase',
1522 default=False,
1523 experimental=True,
1524 )
1053 [[items]]
1054 section = "experimental"
1055 name = "revlogv2"
1056
1057 [[items]]
1058 section = "experimental"
1059 name = "rust.index"
1060 default = false
1061
1062 [[items]]
1063 section = "experimental"
1064 name = "server.allow-hidden-access"
1065 default-type = "list_type"
1066
1067 [[items]]
1068 section = "experimental"
1069 name = "server.filesdata.recommended-batch-size"
1070 default = 50000
1071
1072 [[items]]
1073 section = "experimental"
1074 name = "server.manifestdata.recommended-batch-size"
1075 default = 100000
1076
1077 [[items]]
1078 section = "experimental"
1079 name = "server.stream-narrow-clones"
1080 default = false
1081
1082 [[items]]
1083 section = "experimental"
1084 name = "single-head-per-branch"
1085 default = false
1086
1087 [[items]]
1088 section = "experimental"
1089 name = "single-head-per-branch:account-closed-heads"
1090 default = false
1091
1092 [[items]]
1093 section = "experimental"
1094 name = "single-head-per-branch:public-changes-only"
1095 default = false
1096
1097 [[items]]
1098 section = "experimental"
1099 name = "sparse-read"
1100 default = false
1101
1102 [[items]]
1103 section = "experimental"
1104 name = "sparse-read.density-threshold"
1105 default = 0.5
1106
1107 [[items]]
1108 section = "experimental"
1109 name = "sparse-read.min-gap-size"
1110 default = "65K"
1111
1112 [[items]]
1113 section = "experimental"
1114 name = "revlog.uncompressed-cache.enabled"
1115 default = true
1116 experimental = true
1117 documentation = """Enable some caching of uncompressed chunk, greatly boosting
1118 performance at the cost of memory usage."""
1119
1120 [[items]]
1121 section = "experimental"
1122 name = "revlog.uncompressed-cache.factor"
1123 default = 4
1124 experimental = true
1125 documentation = """The size of the cache compared to the largest revision seen."""
1126
1127 [[items]]
1128 section = "experimental"
1129 name = "revlog.uncompressed-cache.count"
1130 default = 10000
1131 experimental = true
1132 documentation = """The number of chunk cached."""
1133
1134 [[items]]
1135 section = "experimental"
1136 name = "stream-v3"
1137 default = false
1138
1139 [[items]]
1140 section = "experimental"
1141 name = "treemanifest"
1142 default = false
1143
1144 [[items]]
1145 section = "experimental"
1146 name = "update.atomic-file"
1147 default = false
1148
1149 [[items]]
1150 section = "experimental"
1151 name = "web.full-garbage-collection-rate"
1152 default = 1 # still forcing a full collection on each request
1153
1154 [[items]]
1155 section = "experimental"
1156 name = "worker.repository-upgrade"
1157 default = false
1158
1159 [[items]]
1160 section = "experimental"
1161 name = "worker.wdir-get-thread-safe"
1162 default = false
1163
1164 [[items]]
1165 section = "experimental"
1166 name = "xdiff"
1167 default = false
1168
1169 [[items]]
1170 section = "extdata"
1171 name = ".*"
1172 generic = true
1173
1174 [[items]]
1175 section = "extensions"
1176 name = "[^:]*"
1177 generic = true
1178
1179 [[items]]
1180 section = "extensions"
1181 name = "[^:]*:required"
1182 default = false
1183 generic = true
1184
1185 [[items]]
1186 section = "format"
1187 name = "bookmarks-in-store"
1188 default = false
1189
1190 [[items]]
1191 section = "format"
1192 name = "chunkcachesize"
1193 experimental = true
1194
1195 [[items]]
1196 section = "format"
1197 name = "dotencode"
1198 default = true
1199
1525 1200 # The interaction between the archived phase and obsolescence markers needs to
1526 1201 # be sorted out before wider usage of this are to be considered.
1527 1202 #
@@ -1533,1452 +1208,1660 b' coreconfigitem('
1533 1208 # result in quite confusing situation for people combining exchanging draft
1534 1209 # with the archived phases. As some markers needed by others may be skipped
1535 1210 # during exchange.
1536 coreconfigitem(
1537 b'format',
1538 b'exp-archived-phase',
1539 default=False,
1540 experimental=True,
1541 )
1542 coreconfigitem(
1543 b'shelve',
1544 b'store',
1545 default=b'internal',
1546 experimental=True,
1547 )
1548 coreconfigitem(
1549 b'fsmonitor',
1550 b'warn_when_unused',
1551 default=True,
1552 )
1553 coreconfigitem(
1554 b'fsmonitor',
1555 b'warn_update_file_count',
1556 default=50000,
1557 )
1558 coreconfigitem(
1559 b'fsmonitor',
1560 b'warn_update_file_count_rust',
1561 default=400000,
1562 )
1563 coreconfigitem(
1564 b'help',
1565 br'hidden-command\..*',
1566 default=False,
1567 generic=True,
1568 )
1569 coreconfigitem(
1570 b'help',
1571 br'hidden-topic\..*',
1572 default=False,
1573 generic=True,
1574 )
1575 coreconfigitem(
1576 b'hooks',
1577 b'[^:]*',
1578 default=dynamicdefault,
1579 generic=True,
1580 )
1581 coreconfigitem(
1582 b'hooks',
1583 b'.*:run-with-plain',
1584 default=True,
1585 generic=True,
1586 )
1587 coreconfigitem(
1588 b'hgweb-paths',
1589 b'.*',
1590 default=list,
1591 generic=True,
1592 )
1593 coreconfigitem(
1594 b'hostfingerprints',
1595 b'.*',
1596 default=list,
1597 generic=True,
1598 )
1599 coreconfigitem(
1600 b'hostsecurity',
1601 b'ciphers',
1602 default=None,
1603 )
1604 coreconfigitem(
1605 b'hostsecurity',
1606 b'minimumprotocol',
1607 default=dynamicdefault,
1608 )
1609 coreconfigitem(
1610 b'hostsecurity',
1611 b'.*:minimumprotocol$',
1612 default=dynamicdefault,
1613 generic=True,
1614 )
1615 coreconfigitem(
1616 b'hostsecurity',
1617 b'.*:ciphers$',
1618 default=dynamicdefault,
1619 generic=True,
1620 )
1621 coreconfigitem(
1622 b'hostsecurity',
1623 b'.*:fingerprints$',
1624 default=list,
1625 generic=True,
1626 )
1627 coreconfigitem(
1628 b'hostsecurity',
1629 b'.*:verifycertsfile$',
1630 default=None,
1631 generic=True,
1632 )
1633
1634 coreconfigitem(
1635 b'http_proxy',
1636 b'always',
1637 default=False,
1638 )
1639 coreconfigitem(
1640 b'http_proxy',
1641 b'host',
1642 default=None,
1643 )
1644 coreconfigitem(
1645 b'http_proxy',
1646 b'no',
1647 default=list,
1648 )
1649 coreconfigitem(
1650 b'http_proxy',
1651 b'passwd',
1652 default=None,
1653 )
1654 coreconfigitem(
1655 b'http_proxy',
1656 b'user',
1657 default=None,
1658 )
1659
1660 coreconfigitem(
1661 b'http',
1662 b'timeout',
1663 default=None,
1664 )
1665
1666 coreconfigitem(
1667 b'logtoprocess',
1668 b'commandexception',
1669 default=None,
1670 )
1671 coreconfigitem(
1672 b'logtoprocess',
1673 b'commandfinish',
1674 default=None,
1675 )
1676 coreconfigitem(
1677 b'logtoprocess',
1678 b'command',
1679 default=None,
1680 )
1681 coreconfigitem(
1682 b'logtoprocess',
1683 b'develwarn',
1684 default=None,
1685 )
1686 coreconfigitem(
1687 b'logtoprocess',
1688 b'uiblocked',
1689 default=None,
1690 )
1691 coreconfigitem(
1692 b'merge',
1693 b'checkunknown',
1694 default=b'abort',
1695 )
1696 coreconfigitem(
1697 b'merge',
1698 b'checkignored',
1699 default=b'abort',
1700 )
1701 coreconfigitem(
1702 b'experimental',
1703 b'merge.checkpathconflicts',
1704 default=False,
1705 )
1706 coreconfigitem(
1707 b'merge',
1708 b'followcopies',
1709 default=True,
1710 )
1711 coreconfigitem(
1712 b'merge',
1713 b'on-failure',
1714 default=b'continue',
1715 )
1716 coreconfigitem(
1717 b'merge',
1718 b'preferancestor',
1719 default=lambda: [b'*'],
1720 experimental=True,
1721 )
1722 coreconfigitem(
1723 b'merge',
1724 b'strict-capability-check',
1725 default=False,
1726 )
1727 coreconfigitem(
1728 b'merge',
1729 b'disable-partial-tools',
1730 default=False,
1731 experimental=True,
1732 )
1733 coreconfigitem(
1734 b'partial-merge-tools',
1735 b'.*',
1736 default=None,
1737 generic=True,
1738 experimental=True,
1739 )
1740 coreconfigitem(
1741 b'partial-merge-tools',
1742 br'.*\.patterns',
1743 default=dynamicdefault,
1744 generic=True,
1745 priority=-1,
1746 experimental=True,
1747 )
1748 coreconfigitem(
1749 b'partial-merge-tools',
1750 br'.*\.executable$',
1751 default=dynamicdefault,
1752 generic=True,
1753 priority=-1,
1754 experimental=True,
1755 )
1756 coreconfigitem(
1757 b'partial-merge-tools',
1758 br'.*\.order',
1759 default=0,
1760 generic=True,
1761 priority=-1,
1762 experimental=True,
1763 )
1764 coreconfigitem(
1765 b'partial-merge-tools',
1766 br'.*\.args',
1767 default=b"$local $base $other",
1768 generic=True,
1769 priority=-1,
1770 experimental=True,
1771 )
1772 coreconfigitem(
1773 b'partial-merge-tools',
1774 br'.*\.disable',
1775 default=False,
1776 generic=True,
1777 priority=-1,
1778 experimental=True,
1779 )
1780 coreconfigitem(
1781 b'merge-tools',
1782 b'.*',
1783 default=None,
1784 generic=True,
1785 )
1786 coreconfigitem(
1787 b'merge-tools',
1788 br'.*\.args$',
1789 default=b"$local $base $other",
1790 generic=True,
1791 priority=-1,
1792 )
1793 coreconfigitem(
1794 b'merge-tools',
1795 br'.*\.binary$',
1796 default=False,
1797 generic=True,
1798 priority=-1,
1799 )
1800 coreconfigitem(
1801 b'merge-tools',
1802 br'.*\.check$',
1803 default=list,
1804 generic=True,
1805 priority=-1,
1806 )
1807 coreconfigitem(
1808 b'merge-tools',
1809 br'.*\.checkchanged$',
1810 default=False,
1811 generic=True,
1812 priority=-1,
1813 )
1814 coreconfigitem(
1815 b'merge-tools',
1816 br'.*\.executable$',
1817 default=dynamicdefault,
1818 generic=True,
1819 priority=-1,
1820 )
1821 coreconfigitem(
1822 b'merge-tools',
1823 br'.*\.fixeol$',
1824 default=False,
1825 generic=True,
1826 priority=-1,
1827 )
1828 coreconfigitem(
1829 b'merge-tools',
1830 br'.*\.gui$',
1831 default=False,
1832 generic=True,
1833 priority=-1,
1834 )
1835 coreconfigitem(
1836 b'merge-tools',
1837 br'.*\.mergemarkers$',
1838 default=b'basic',
1839 generic=True,
1840 priority=-1,
1841 )
1842 coreconfigitem(
1843 b'merge-tools',
1844 br'.*\.mergemarkertemplate$',
1845 default=dynamicdefault, # take from command-templates.mergemarker
1846 generic=True,
1847 priority=-1,
1848 )
1849 coreconfigitem(
1850 b'merge-tools',
1851 br'.*\.priority$',
1852 default=0,
1853 generic=True,
1854 priority=-1,
1855 )
1856 coreconfigitem(
1857 b'merge-tools',
1858 br'.*\.premerge$',
1859 default=dynamicdefault,
1860 generic=True,
1861 priority=-1,
1862 )
1863 coreconfigitem(
1864 b'merge-tools',
1865 br'.*\.regappend$',
1866 default=b"",
1867 generic=True,
1868 priority=-1,
1869 )
1870 coreconfigitem(
1871 b'merge-tools',
1872 br'.*\.symlink$',
1873 default=False,
1874 generic=True,
1875 priority=-1,
1876 )
1877 coreconfigitem(
1878 b'pager',
1879 b'attend-.*',
1880 default=dynamicdefault,
1881 generic=True,
1882 )
1883 coreconfigitem(
1884 b'pager',
1885 b'ignore',
1886 default=list,
1887 )
1888 coreconfigitem(
1889 b'pager',
1890 b'pager',
1891 default=dynamicdefault,
1892 )
1893 coreconfigitem(
1894 b'patch',
1895 b'eol',
1896 default=b'strict',
1897 )
1898 coreconfigitem(
1899 b'patch',
1900 b'fuzz',
1901 default=2,
1902 )
1903 coreconfigitem(
1904 b'paths',
1905 b'default',
1906 default=None,
1907 )
1908 coreconfigitem(
1909 b'paths',
1910 b'default-push',
1911 default=None,
1912 )
1913 coreconfigitem(
1914 b'paths',
1915 b'[^:]*',
1916 default=None,
1917 generic=True,
1918 )
1919 coreconfigitem(
1920 b'paths',
1921 b'.*:bookmarks.mode',
1922 default='default',
1923 generic=True,
1924 )
1925 coreconfigitem(
1926 b'paths',
1927 b'.*:multi-urls',
1928 default=False,
1929 generic=True,
1930 )
1931 coreconfigitem(
1932 b'paths',
1933 b'.*:pushrev',
1934 default=None,
1935 generic=True,
1936 )
1937 coreconfigitem(
1938 b'paths',
1939 b'.*:pushurl',
1940 default=None,
1941 generic=True,
1942 )
1943 coreconfigitem(
1944 b'paths',
1945 b'.*:pulled-delta-reuse-policy',
1946 default=None,
1947 generic=True,
1948 )
1949 coreconfigitem(
1950 b'phases',
1951 b'checksubrepos',
1952 default=b'follow',
1953 )
1954 coreconfigitem(
1955 b'phases',
1956 b'new-commit',
1957 default=b'draft',
1958 )
1959 coreconfigitem(
1960 b'phases',
1961 b'publish',
1962 default=True,
1963 )
1964 coreconfigitem(
1965 b'profiling',
1966 b'enabled',
1967 default=False,
1968 )
1969 coreconfigitem(
1970 b'profiling',
1971 b'format',
1972 default=b'text',
1973 )
1974 coreconfigitem(
1975 b'profiling',
1976 b'freq',
1977 default=1000,
1978 )
1979 coreconfigitem(
1980 b'profiling',
1981 b'limit',
1982 default=30,
1983 )
1984 coreconfigitem(
1985 b'profiling',
1986 b'nested',
1987 default=0,
1988 )
1989 coreconfigitem(
1990 b'profiling',
1991 b'output',
1992 default=None,
1993 )
1994 coreconfigitem(
1995 b'profiling',
1996 b'showmax',
1997 default=0.999,
1998 )
1999 coreconfigitem(
2000 b'profiling',
2001 b'showmin',
2002 default=dynamicdefault,
2003 )
2004 coreconfigitem(
2005 b'profiling',
2006 b'showtime',
2007 default=True,
2008 )
2009 coreconfigitem(
2010 b'profiling',
2011 b'sort',
2012 default=b'inlinetime',
2013 )
2014 coreconfigitem(
2015 b'profiling',
2016 b'statformat',
2017 default=b'hotpath',
2018 )
2019 coreconfigitem(
2020 b'profiling',
2021 b'time-track',
2022 default=dynamicdefault,
2023 )
2024 coreconfigitem(
2025 b'profiling',
2026 b'type',
2027 default=b'stat',
2028 )
2029 coreconfigitem(
2030 b'progress',
2031 b'assume-tty',
2032 default=False,
2033 )
2034 coreconfigitem(
2035 b'progress',
2036 b'changedelay',
2037 default=1,
2038 )
2039 coreconfigitem(
2040 b'progress',
2041 b'clear-complete',
2042 default=True,
2043 )
2044 coreconfigitem(
2045 b'progress',
2046 b'debug',
2047 default=False,
2048 )
2049 coreconfigitem(
2050 b'progress',
2051 b'delay',
2052 default=3,
2053 )
2054 coreconfigitem(
2055 b'progress',
2056 b'disable',
2057 default=False,
2058 )
2059 coreconfigitem(
2060 b'progress',
2061 b'estimateinterval',
2062 default=60.0,
2063 )
2064 coreconfigitem(
2065 b'progress',
2066 b'format',
2067 default=lambda: [b'topic', b'bar', b'number', b'estimate'],
2068 )
2069 coreconfigitem(
2070 b'progress',
2071 b'refresh',
2072 default=0.1,
2073 )
2074 coreconfigitem(
2075 b'progress',
2076 b'width',
2077 default=dynamicdefault,
2078 )
2079 coreconfigitem(
2080 b'pull',
2081 b'confirm',
2082 default=False,
2083 )
2084 coreconfigitem(
2085 b'push',
2086 b'pushvars.server',
2087 default=False,
2088 )
2089 coreconfigitem(
2090 b'rewrite',
2091 b'backup-bundle',
2092 default=True,
2093 alias=[(b'ui', b'history-editing-backup')],
2094 )
2095 coreconfigitem(
2096 b'rewrite',
2097 b'update-timestamp',
2098 default=False,
2099 )
2100 coreconfigitem(
2101 b'rewrite',
2102 b'empty-successor',
2103 default=b'skip',
2104 experimental=True,
2105 )
2106 # experimental as long as format.use-dirstate-v2 is.
2107 coreconfigitem(
2108 b'storage',
2109 b'dirstate-v2.slow-path',
2110 default=b"abort",
2111 experimental=True,
2112 )
2113 coreconfigitem(
2114 b'storage',
2115 b'new-repo-backend',
2116 default=b'revlogv1',
2117 experimental=True,
2118 )
2119 coreconfigitem(
2120 b'storage',
2121 b'revlog.optimize-delta-parent-choice',
2122 default=True,
2123 alias=[(b'format', b'aggressivemergedeltas')],
2124 )
2125 coreconfigitem(
2126 b'storage',
2127 b'revlog.delta-parent-search.candidate-group-chunk-size',
2128 default=20,
2129 )
2130 coreconfigitem(
2131 b'storage',
2132 b'revlog.issue6528.fix-incoming',
2133 default=True,
2134 )
2135 # experimental as long as rust is experimental (or a C version is implemented)
2136 coreconfigitem(
2137 b'storage',
2138 b'revlog.persistent-nodemap.mmap',
2139 default=True,
2140 )
2141 # experimental as long as format.use-persistent-nodemap is.
2142 coreconfigitem(
2143 b'storage',
2144 b'revlog.persistent-nodemap.slow-path',
2145 default=b"abort",
2146 )
2147
2148 coreconfigitem(
2149 b'storage',
2150 b'revlog.reuse-external-delta',
2151 default=True,
2152 )
2153 # This option is True unless `format.generaldelta` is set.
2154 coreconfigitem(
2155 b'storage',
2156 b'revlog.reuse-external-delta-parent',
2157 default=None,
2158 )
2159 coreconfigitem(
2160 b'storage',
2161 b'revlog.zlib.level',
2162 default=None,
2163 )
2164 coreconfigitem(
2165 b'storage',
2166 b'revlog.zstd.level',
2167 default=None,
2168 )
2169 coreconfigitem(
2170 b'server',
2171 b'bookmarks-pushkey-compat',
2172 default=True,
2173 )
2174 coreconfigitem(
2175 b'server',
2176 b'bundle1',
2177 default=True,
2178 )
2179 coreconfigitem(
2180 b'server',
2181 b'bundle1gd',
2182 default=None,
2183 )
2184 coreconfigitem(
2185 b'server',
2186 b'bundle1.pull',
2187 default=None,
2188 )
2189 coreconfigitem(
2190 b'server',
2191 b'bundle1gd.pull',
2192 default=None,
2193 )
2194 coreconfigitem(
2195 b'server',
2196 b'bundle1.push',
2197 default=None,
2198 )
2199 coreconfigitem(
2200 b'server',
2201 b'bundle1gd.push',
2202 default=None,
2203 )
2204 coreconfigitem(
2205 b'server',
2206 b'bundle2.stream',
2207 default=True,
2208 alias=[(b'experimental', b'bundle2.stream')],
2209 )
2210 coreconfigitem(
2211 b'server',
2212 b'compressionengines',
2213 default=list,
2214 )
2215 coreconfigitem(
2216 b'server',
2217 b'concurrent-push-mode',
2218 default=b'check-related',
2219 )
2220 coreconfigitem(
2221 b'server',
2222 b'disablefullbundle',
2223 default=False,
2224 )
2225 coreconfigitem(
2226 b'server',
2227 b'maxhttpheaderlen',
2228 default=1024,
2229 )
2230 coreconfigitem(
2231 b'server',
2232 b'pullbundle',
2233 default=True,
2234 )
2235 coreconfigitem(
2236 b'server',
2237 b'preferuncompressed',
2238 default=False,
2239 )
2240 coreconfigitem(
2241 b'server',
2242 b'streamunbundle',
2243 default=False,
2244 )
2245 coreconfigitem(
2246 b'server',
2247 b'uncompressed',
2248 default=True,
2249 )
2250 coreconfigitem(
2251 b'server',
2252 b'uncompressedallowsecret',
2253 default=False,
2254 )
2255 coreconfigitem(
2256 b'server',
2257 b'view',
2258 default=b'served',
2259 )
2260 coreconfigitem(
2261 b'server',
2262 b'validate',
2263 default=False,
2264 )
2265 coreconfigitem(
2266 b'server',
2267 b'zliblevel',
2268 default=-1,
2269 )
2270 coreconfigitem(
2271 b'server',
2272 b'zstdlevel',
2273 default=3,
2274 )
2275 coreconfigitem(
2276 b'share',
2277 b'pool',
2278 default=None,
2279 )
2280 coreconfigitem(
2281 b'share',
2282 b'poolnaming',
2283 default=b'identity',
2284 )
2285 coreconfigitem(
2286 b'share',
2287 b'safe-mismatch.source-not-safe',
2288 default=b'abort',
2289 )
2290 coreconfigitem(
2291 b'share',
2292 b'safe-mismatch.source-safe',
2293 default=b'abort',
2294 )
2295 coreconfigitem(
2296 b'share',
2297 b'safe-mismatch.source-not-safe.warn',
2298 default=True,
2299 )
2300 coreconfigitem(
2301 b'share',
2302 b'safe-mismatch.source-safe.warn',
2303 default=True,
2304 )
2305 coreconfigitem(
2306 b'share',
2307 b'safe-mismatch.source-not-safe:verbose-upgrade',
2308 default=True,
2309 )
2310 coreconfigitem(
2311 b'share',
2312 b'safe-mismatch.source-safe:verbose-upgrade',
2313 default=True,
2314 )
2315 coreconfigitem(
2316 b'shelve',
2317 b'maxbackups',
2318 default=10,
2319 )
2320 coreconfigitem(
2321 b'smtp',
2322 b'host',
2323 default=None,
2324 )
2325 coreconfigitem(
2326 b'smtp',
2327 b'local_hostname',
2328 default=None,
2329 )
2330 coreconfigitem(
2331 b'smtp',
2332 b'password',
2333 default=None,
2334 )
2335 coreconfigitem(
2336 b'smtp',
2337 b'port',
2338 default=dynamicdefault,
2339 )
2340 coreconfigitem(
2341 b'smtp',
2342 b'tls',
2343 default=b'none',
2344 )
2345 coreconfigitem(
2346 b'smtp',
2347 b'username',
2348 default=None,
2349 )
2350 coreconfigitem(
2351 b'sparse',
2352 b'missingwarning',
2353 default=True,
2354 experimental=True,
2355 )
2356 coreconfigitem(
2357 b'subrepos',
2358 b'allowed',
2359 default=dynamicdefault, # to make backporting simpler
2360 )
2361 coreconfigitem(
2362 b'subrepos',
2363 b'hg:allowed',
2364 default=dynamicdefault,
2365 )
2366 coreconfigitem(
2367 b'subrepos',
2368 b'git:allowed',
2369 default=dynamicdefault,
2370 )
2371 coreconfigitem(
2372 b'subrepos',
2373 b'svn:allowed',
2374 default=dynamicdefault,
2375 )
2376 coreconfigitem(
2377 b'templates',
2378 b'.*',
2379 default=None,
2380 generic=True,
2381 )
2382 coreconfigitem(
2383 b'templateconfig',
2384 b'.*',
2385 default=dynamicdefault,
2386 generic=True,
2387 )
2388 coreconfigitem(
2389 b'trusted',
2390 b'groups',
2391 default=list,
2392 )
2393 coreconfigitem(
2394 b'trusted',
2395 b'users',
2396 default=list,
2397 )
2398 coreconfigitem(
2399 b'ui',
2400 b'_usedassubrepo',
2401 default=False,
2402 )
2403 coreconfigitem(
2404 b'ui',
2405 b'allowemptycommit',
2406 default=False,
2407 )
2408 coreconfigitem(
2409 b'ui',
2410 b'archivemeta',
2411 default=True,
2412 )
2413 coreconfigitem(
2414 b'ui',
2415 b'askusername',
2416 default=False,
2417 )
2418 coreconfigitem(
2419 b'ui',
2420 b'available-memory',
2421 default=None,
2422 )
2423
2424 coreconfigitem(
2425 b'ui',
2426 b'clonebundlefallback',
2427 default=False,
2428 )
2429 coreconfigitem(
2430 b'ui',
2431 b'clonebundleprefers',
2432 default=list,
2433 )
2434 coreconfigitem(
2435 b'ui',
2436 b'clonebundles',
2437 default=True,
2438 )
2439 coreconfigitem(
2440 b'ui',
2441 b'color',
2442 default=b'auto',
2443 )
2444 coreconfigitem(
2445 b'ui',
2446 b'commitsubrepos',
2447 default=False,
2448 )
2449 coreconfigitem(
2450 b'ui',
2451 b'debug',
2452 default=False,
2453 )
2454 coreconfigitem(
2455 b'ui',
2456 b'debugger',
2457 default=None,
2458 )
2459 coreconfigitem(
2460 b'ui',
2461 b'editor',
2462 default=dynamicdefault,
2463 )
2464 coreconfigitem(
2465 b'ui',
2466 b'detailed-exit-code',
2467 default=False,
2468 experimental=True,
2469 )
2470 coreconfigitem(
2471 b'ui',
2472 b'fallbackencoding',
2473 default=None,
2474 )
2475 coreconfigitem(
2476 b'ui',
2477 b'forcecwd',
2478 default=None,
2479 )
2480 coreconfigitem(
2481 b'ui',
2482 b'forcemerge',
2483 default=None,
2484 )
2485 coreconfigitem(
2486 b'ui',
2487 b'formatdebug',
2488 default=False,
2489 )
2490 coreconfigitem(
2491 b'ui',
2492 b'formatjson',
2493 default=False,
2494 )
2495 coreconfigitem(
2496 b'ui',
2497 b'formatted',
2498 default=None,
2499 )
2500 coreconfigitem(
2501 b'ui',
2502 b'interactive',
2503 default=None,
2504 )
2505 coreconfigitem(
2506 b'ui',
2507 b'interface',
2508 default=None,
2509 )
2510 coreconfigitem(
2511 b'ui',
2512 b'interface.chunkselector',
2513 default=None,
2514 )
2515 coreconfigitem(
2516 b'ui',
2517 b'large-file-limit',
2518 default=10 * (2 ** 20),
2519 )
2520 coreconfigitem(
2521 b'ui',
2522 b'logblockedtimes',
2523 default=False,
2524 )
2525 coreconfigitem(
2526 b'ui',
2527 b'merge',
2528 default=None,
2529 )
2530 coreconfigitem(
2531 b'ui',
2532 b'mergemarkers',
2533 default=b'basic',
2534 )
2535 coreconfigitem(
2536 b'ui',
2537 b'message-output',
2538 default=b'stdio',
2539 )
2540 coreconfigitem(
2541 b'ui',
2542 b'nontty',
2543 default=False,
2544 )
2545 coreconfigitem(
2546 b'ui',
2547 b'origbackuppath',
2548 default=None,
2549 )
2550 coreconfigitem(
2551 b'ui',
2552 b'paginate',
2553 default=True,
2554 )
2555 coreconfigitem(
2556 b'ui',
2557 b'patch',
2558 default=None,
2559 )
2560 coreconfigitem(
2561 b'ui',
2562 b'portablefilenames',
2563 default=b'warn',
2564 )
2565 coreconfigitem(
2566 b'ui',
2567 b'promptecho',
2568 default=False,
2569 )
2570 coreconfigitem(
2571 b'ui',
2572 b'quiet',
2573 default=False,
2574 )
2575 coreconfigitem(
2576 b'ui',
2577 b'quietbookmarkmove',
2578 default=False,
2579 )
2580 coreconfigitem(
2581 b'ui',
2582 b'relative-paths',
2583 default=b'legacy',
2584 )
2585 coreconfigitem(
2586 b'ui',
2587 b'remotecmd',
2588 default=b'hg',
2589 )
2590 coreconfigitem(
2591 b'ui',
2592 b'report_untrusted',
2593 default=True,
2594 )
2595 coreconfigitem(
2596 b'ui',
2597 b'rollback',
2598 default=True,
2599 )
2600 coreconfigitem(
2601 b'ui',
2602 b'signal-safe-lock',
2603 default=True,
2604 )
2605 coreconfigitem(
2606 b'ui',
2607 b'slash',
2608 default=False,
2609 )
2610 coreconfigitem(
2611 b'ui',
2612 b'ssh',
2613 default=b'ssh',
2614 )
2615 coreconfigitem(
2616 b'ui',
2617 b'ssherrorhint',
2618 default=None,
2619 )
2620 coreconfigitem(
2621 b'ui',
2622 b'statuscopies',
2623 default=False,
2624 )
2625 coreconfigitem(
2626 b'ui',
2627 b'strict',
2628 default=False,
2629 )
2630 coreconfigitem(
2631 b'ui',
2632 b'style',
2633 default=b'',
2634 )
2635 coreconfigitem(
2636 b'ui',
2637 b'supportcontact',
2638 default=None,
2639 )
2640 coreconfigitem(
2641 b'ui',
2642 b'textwidth',
2643 default=78,
2644 )
2645 coreconfigitem(
2646 b'ui',
2647 b'timeout',
2648 default=b'600',
2649 )
2650 coreconfigitem(
2651 b'ui',
2652 b'timeout.warn',
2653 default=0,
2654 )
2655 coreconfigitem(
2656 b'ui',
2657 b'timestamp-output',
2658 default=False,
2659 )
2660 coreconfigitem(
2661 b'ui',
2662 b'traceback',
2663 default=False,
2664 )
2665 coreconfigitem(
2666 b'ui',
2667 b'tweakdefaults',
2668 default=False,
2669 )
2670 coreconfigitem(b'ui', b'username', alias=[(b'ui', b'user')])
2671 coreconfigitem(
2672 b'ui',
2673 b'verbose',
2674 default=False,
2675 )
2676 coreconfigitem(
2677 b'verify',
2678 b'skipflags',
2679 default=0,
2680 )
2681 coreconfigitem(
2682 b'web',
2683 b'allowbz2',
2684 default=False,
2685 )
2686 coreconfigitem(
2687 b'web',
2688 b'allowgz',
2689 default=False,
2690 )
2691 coreconfigitem(
2692 b'web',
2693 b'allow-pull',
2694 alias=[(b'web', b'allowpull')],
2695 default=True,
2696 )
2697 coreconfigitem(
2698 b'web',
2699 b'allow-push',
2700 alias=[(b'web', b'allow_push')],
2701 default=list,
2702 )
2703 coreconfigitem(
2704 b'web',
2705 b'allowzip',
2706 default=False,
2707 )
2708 coreconfigitem(
2709 b'web',
2710 b'archivesubrepos',
2711 default=False,
2712 )
2713 coreconfigitem(
2714 b'web',
2715 b'cache',
2716 default=True,
2717 )
2718 coreconfigitem(
2719 b'web',
2720 b'comparisoncontext',
2721 default=5,
2722 )
2723 coreconfigitem(
2724 b'web',
2725 b'contact',
2726 default=None,
2727 )
2728 coreconfigitem(
2729 b'web',
2730 b'deny_push',
2731 default=list,
2732 )
2733 coreconfigitem(
2734 b'web',
2735 b'guessmime',
2736 default=False,
2737 )
2738 coreconfigitem(
2739 b'web',
2740 b'hidden',
2741 default=False,
2742 )
2743 coreconfigitem(
2744 b'web',
2745 b'labels',
2746 default=list,
2747 )
2748 coreconfigitem(
2749 b'web',
2750 b'logoimg',
2751 default=b'hglogo.png',
2752 )
2753 coreconfigitem(
2754 b'web',
2755 b'logourl',
2756 default=b'https://mercurial-scm.org/',
2757 )
2758 coreconfigitem(
2759 b'web',
2760 b'accesslog',
2761 default=b'-',
2762 )
2763 coreconfigitem(
2764 b'web',
2765 b'address',
2766 default=b'',
2767 )
2768 coreconfigitem(
2769 b'web',
2770 b'allow-archive',
2771 alias=[(b'web', b'allow_archive')],
2772 default=list,
2773 )
2774 coreconfigitem(
2775 b'web',
2776 b'allow_read',
2777 default=list,
2778 )
2779 coreconfigitem(
2780 b'web',
2781 b'baseurl',
2782 default=None,
2783 )
2784 coreconfigitem(
2785 b'web',
2786 b'cacerts',
2787 default=None,
2788 )
2789 coreconfigitem(
2790 b'web',
2791 b'certificate',
2792 default=None,
2793 )
2794 coreconfigitem(
2795 b'web',
2796 b'collapse',
2797 default=False,
2798 )
2799 coreconfigitem(
2800 b'web',
2801 b'csp',
2802 default=None,
2803 )
2804 coreconfigitem(
2805 b'web',
2806 b'deny_read',
2807 default=list,
2808 )
2809 coreconfigitem(
2810 b'web',
2811 b'descend',
2812 default=True,
2813 )
2814 coreconfigitem(
2815 b'web',
2816 b'description',
2817 default=b"",
2818 )
2819 coreconfigitem(
2820 b'web',
2821 b'encoding',
2822 default=lambda: encoding.encoding,
2823 )
2824 coreconfigitem(
2825 b'web',
2826 b'errorlog',
2827 default=b'-',
2828 )
2829 coreconfigitem(
2830 b'web',
2831 b'ipv6',
2832 default=False,
2833 )
2834 coreconfigitem(
2835 b'web',
2836 b'maxchanges',
2837 default=10,
2838 )
2839 coreconfigitem(
2840 b'web',
2841 b'maxfiles',
2842 default=10,
2843 )
2844 coreconfigitem(
2845 b'web',
2846 b'maxshortchanges',
2847 default=60,
2848 )
2849 coreconfigitem(
2850 b'web',
2851 b'motd',
2852 default=b'',
2853 )
2854 coreconfigitem(
2855 b'web',
2856 b'name',
2857 default=dynamicdefault,
2858 )
2859 coreconfigitem(
2860 b'web',
2861 b'port',
2862 default=8000,
2863 )
2864 coreconfigitem(
2865 b'web',
2866 b'prefix',
2867 default=b'',
2868 )
2869 coreconfigitem(
2870 b'web',
2871 b'push_ssl',
2872 default=True,
2873 )
2874 coreconfigitem(
2875 b'web',
2876 b'refreshinterval',
2877 default=20,
2878 )
2879 coreconfigitem(
2880 b'web',
2881 b'server-header',
2882 default=None,
2883 )
2884 coreconfigitem(
2885 b'web',
2886 b'static',
2887 default=None,
2888 )
2889 coreconfigitem(
2890 b'web',
2891 b'staticurl',
2892 default=None,
2893 )
2894 coreconfigitem(
2895 b'web',
2896 b'stripes',
2897 default=1,
2898 )
2899 coreconfigitem(
2900 b'web',
2901 b'style',
2902 default=b'paper',
2903 )
2904 coreconfigitem(
2905 b'web',
2906 b'templates',
2907 default=None,
2908 )
2909 coreconfigitem(
2910 b'web',
2911 b'view',
2912 default=b'served',
2913 experimental=True,
2914 )
2915 coreconfigitem(
2916 b'worker',
2917 b'backgroundclose',
2918 default=dynamicdefault,
2919 )
1211 [[items]]
1212 section = "format"
1213 name = "exp-archived-phase"
1214 default = false
1215 experimental = true
1216
1217 # Experimental TODOs:
1218 #
1219 # * Same as for revlogv2 (but for the reduction of the number of files)
1220 # * Actually computing the rank of changesets
1221 # * Improvement to investigate
1222 # - storing .hgtags fnode
1223 # - storing branch related identifier
1224 [[items]]
1225 section = "format"
1226 name = "exp-use-changelog-v2"
1227 experimental = true
1228
1229 [[items]]
1230 section = "format"
1231 name = "exp-use-copies-side-data-changeset"
1232 default = false
1233 experimental = true
1234
1235 [[items]]
1236 section = "format"
1237 name = "generaldelta"
1238 default = false
1239 experimental = true
1240
1241 [[items]]
1242 section = "format"
1243 name = "manifestcachesize"
1244 experimental = true
1245
1246 [[items]]
1247 section = "format"
1248 name = "maxchainlen"
1249 default-type = "dynamic"
1250 experimental = true
1251
1252 [[items]]
1253 section = "format"
1254 name = "obsstore-version"
1255
1256 [[items]]
1257 section = "format"
1258 name = "revlog-compression"
1259 default-type = "lambda"
1260 alias = [["experimental", "format.compression"]]
1261 default = [ "zstd", "zlib",]
1262
1263 [[items]]
1264 section = "format"
1265 name = "sparse-revlog"
1266 default = true
1267
1268 [[items]]
1269 section = "format"
1270 name = "use-dirstate-tracked-hint"
1271 default = false
1272 experimental = true
1273
1274 [[items]]
1275 section = "format"
1276 name = "use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories"
1277 default = false
1278 experimental = true
1279
1280 [[items]]
1281 section = "format"
1282 name = "use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories:quiet"
1283 default = false
1284 experimental = true
1285
1286 [[items]]
1287 section = "format"
1288 name = "use-dirstate-tracked-hint.version"
1289 default = 1
1290 experimental = true
1291
1292 [[items]]
1293 section = "format"
1294 name = "use-dirstate-v2"
1295 default = false
1296 alias = [["format", "exp-rc-dirstate-v2"]]
1297 experimental = true
1298 documentation = """Enables dirstate-v2 format *when creating a new repository*.
1299 Which format to use for existing repos is controlled by `.hg/requires`."""
1300
1301 [[items]]
1302 section = "format"
1303 name = "use-dirstate-v2.automatic-upgrade-of-mismatching-repositories"
1304 default = false
1305 experimental = true
1306
1307 [[items]]
1308 section = "format"
1309 name = "use-dirstate-v2.automatic-upgrade-of-mismatching-repositories:quiet"
1310 default = false
1311 experimental = true
1312
1313 # Having this on by default means we are confident about the scaling of phases.
1314 # This is not garanteed to be the case at the time this message is written.
1315 [[items]]
1316 section = "format"
1317 name = "use-internal-phase"
1318 default = false
1319 experimental = true
1320
1321 [[items]]
1322 section = "format"
1323 name = "use-persistent-nodemap"
1324 default-type = "dynamic"
1325
1326 [[items]]
1327 section = "format"
1328 name = "use-share-safe"
1329 default = true
1330
1331 [[items]]
1332 section = "format"
1333 name = "use-share-safe.automatic-upgrade-of-mismatching-repositories"
1334 default = false
1335 experimental = true
1336
1337 [[items]]
1338 section = "format"
1339 name = "use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet"
1340 default = false
1341 experimental = true
1342
1343 [[items]]
1344 section = "format"
1345 name = "usefncache"
1346 default = true
1347
1348 [[items]]
1349 section = "format"
1350 name = "usegeneraldelta"
1351 default = true
1352
1353 [[items]]
1354 section = "format"
1355 name = "usestore"
1356 default = true
1357
1358 [[items]]
1359 section = "fsmonitor"
1360 name = "warn_update_file_count"
1361 default = 50000
1362
1363 [[items]]
1364 section = "fsmonitor"
1365 name = "warn_update_file_count_rust"
1366 default = 400000
1367
1368 [[items]]
1369 section = "fsmonitor"
1370 name = "warn_when_unused"
1371 default = true
1372
1373 [[items]]
1374 section = "help"
1375 name = 'hidden-command\..*'
1376 default = false
1377 generic = true
1378
1379 [[items]]
1380 section = "help"
1381 name = 'hidden-topic\..*'
1382 default = false
1383 generic = true
1384
1385 [[items]]
1386 section = "hgweb-paths"
1387 name = ".*"
1388 default-type = "list_type"
1389 generic = true
1390
1391 [[items]]
1392 section = "hooks"
1393 name = ".*:run-with-plain"
1394 default = true
1395 generic = true
1396
1397 [[items]]
1398 section = "hooks"
1399 name = "[^:]*"
1400 default-type = "dynamic"
1401 generic = true
1402
1403 [[items]]
1404 section = "hostfingerprints"
1405 name = ".*"
1406 default-type = "list_type"
1407 generic = true
1408
1409 [[items]]
1410 section = "hostsecurity"
1411 name = ".*:ciphers$"
1412 default-type = "dynamic"
1413 generic = true
1414
1415 [[items]]
1416 section = "hostsecurity"
1417 name = ".*:fingerprints$"
1418 default-type = "list_type"
1419 generic = true
1420
1421 [[items]]
1422 section = "hostsecurity"
1423 name = ".*:minimumprotocol$"
1424 default-type = "dynamic"
1425 generic = true
1426
1427 [[items]]
1428 section = "hostsecurity"
1429 name = ".*:verifycertsfile$"
1430 generic = true
1431
1432 [[items]]
1433 section = "hostsecurity"
1434 name = "ciphers"
1435
1436 [[items]]
1437 section = "hostsecurity"
1438 name = "minimumprotocol"
1439 default-type = "dynamic"
1440
1441 [[items]]
1442 section = "http"
1443 name = "timeout"
1444
1445 [[items]]
1446 section = "http_proxy"
1447 name = "always"
1448 default = false
1449
1450 [[items]]
1451 section = "http_proxy"
1452 name = "host"
1453
1454 [[items]]
1455 section = "http_proxy"
1456 name = "no"
1457 default-type = "list_type"
1458
1459 [[items]]
1460 section = "http_proxy"
1461 name = "passwd"
1462
1463 [[items]]
1464 section = "http_proxy"
1465 name = "user"
1466
1467 [[items]]
1468 section = "logtoprocess"
1469 name = "command"
1470
1471 [[items]]
1472 section = "logtoprocess"
1473 name = "commandexception"
1474
1475 [[items]]
1476 section = "logtoprocess"
1477 name = "commandfinish"
1478
1479 [[items]]
1480 section = "logtoprocess"
1481 name = "develwarn"
1482
1483 [[items]]
1484 section = "logtoprocess"
1485 name = "uiblocked"
1486
1487 [[items]]
1488 section = "merge"
1489 name = "checkignored"
1490 default = "abort"
1491
1492 [[items]]
1493 section = "merge"
1494 name = "checkunknown"
1495 default = "abort"
1496
1497 [[items]]
1498 section = "merge"
1499 name = "disable-partial-tools"
1500 default = false
1501 experimental = true
1502
1503 [[items]]
1504 section = "merge"
1505 name = "followcopies"
1506 default = true
1507
1508 [[items]]
1509 section = "merge"
1510 name = "on-failure"
1511 default = "continue"
1512
1513 [[items]]
1514 section = "merge"
1515 name = "preferancestor"
1516 default-type = "lambda"
1517 default = ["*"]
1518 experimental = true
1519
1520 [[items]]
1521 section = "merge"
1522 name = "strict-capability-check"
1523 default = false
1524
1525 [[items]]
1526 section = "merge-tools"
1527 name = ".*"
1528 generic = true
1529
1530 [[items]]
1531 section = "merge-tools"
1532 name = '.*\.args$'
1533 default = "$local $base $other"
1534 generic = true
1535 priority = -1
1536
1537 [[items]]
1538 section = "merge-tools"
1539 name = '.*\.binary$'
1540 default = false
1541 generic = true
1542 priority = -1
1543
1544 [[items]]
1545 section = "merge-tools"
1546 name = '.*\.check$'
1547 default-type = "list_type"
1548 generic = true
1549 priority = -1
1550
1551 [[items]]
1552 section = "merge-tools"
1553 name = '.*\.checkchanged$'
1554 default = false
1555 generic = true
1556 priority = -1
1557
1558 [[items]]
1559 section = "merge-tools"
1560 name = '.*\.executable$'
1561 default-type = "dynamic"
1562 generic = true
1563 priority = -1
1564
1565 [[items]]
1566 section = "merge-tools"
1567 name = '.*\.fixeol$'
1568 default = false
1569 generic = true
1570 priority = -1
1571
1572 [[items]]
1573 section = "merge-tools"
1574 name = '.*\.gui$'
1575 default = false
1576 generic = true
1577 priority = -1
1578
1579 [[items]]
1580 section = "merge-tools"
1581 name = '.*\.mergemarkers$'
1582 default = "basic"
1583 generic = true
1584 priority = -1
1585
1586 [[items]]
1587 section = "merge-tools"
1588 name = '.*\.mergemarkertemplate$' # take from command-templates.mergemarker
1589 default-type = "dynamic"
1590 generic = true
1591 priority = -1
1592
1593 [[items]]
1594 section = "merge-tools"
1595 name = '.*\.premerge$'
1596 default-type = "dynamic"
1597 generic = true
1598 priority = -1
1599
1600 [[items]]
1601 section = "merge-tools"
1602 name = '.*\.priority$'
1603 default = 0
1604 generic = true
1605 priority = -1
1606
1607 [[items]]
1608 section = "merge-tools"
1609 name = '.*\.regappend$'
1610 default = ""
1611 generic = true
1612 priority = -1
1613
1614 [[items]]
1615 section = "merge-tools"
1616 name = '.*\.symlink$'
1617 default = false
1618 generic = true
1619 priority = -1
1620
1621 [[items]]
1622 section = "pager"
1623 name = "attend-.*"
1624 default-type = "dynamic"
1625 generic = true
1626
1627 [[items]]
1628 section = "pager"
1629 name = "ignore"
1630 default-type = "list_type"
1631
1632 [[items]]
1633 section = "pager"
1634 name = "pager"
1635 default-type = "dynamic"
1636
1637 [[items]]
1638 section = "partial-merge-tools"
1639 name = ".*"
1640 generic = true
1641 experimental = true
1642
1643 [[items]]
1644 section = "partial-merge-tools"
1645 name = '.*\.args'
1646 default = "$local $base $other"
1647 generic = true
1648 priority = -1
1649 experimental = true
1650
1651 [[items]]
1652 section = "partial-merge-tools"
1653 name = '.*\.disable'
1654 default = false
1655 generic = true
1656 priority = -1
1657 experimental = true
1658
1659 [[items]]
1660 section = "partial-merge-tools"
1661 name = '.*\.executable$'
1662 default-type = "dynamic"
1663 generic = true
1664 priority = -1
1665 experimental = true
1666
1667 [[items]]
1668 section = "partial-merge-tools"
1669 name = '.*\.order'
1670 default = 0
1671 generic = true
1672 priority = -1
1673 experimental = true
1674
1675 [[items]]
1676 section = "partial-merge-tools"
1677 name = '.*\.patterns'
1678 default-type = "dynamic"
1679 generic = true
1680 priority = -1
1681 experimental = true
1682
1683 [[items]]
1684 section = "patch"
1685 name = "eol"
1686 default = "strict"
1687
1688 [[items]]
1689 section = "patch"
1690 name = "fuzz"
1691 default = 2
1692
1693 [[items]]
1694 section = "paths"
1695 name = "[^:]*"
1696 generic = true
1697
1698 [[items]]
1699 section = "paths"
1700 name = ".*:bookmarks.mode"
1701 default = "default"
1702 generic = true
1703
1704 [[items]]
1705 section = "paths"
1706 name = ".*:multi-urls"
1707 default = false
1708 generic = true
1709
1710 [[items]]
1711 section = "paths"
1712 name = ".*:pulled-delta-reuse-policy"
1713 generic = true
1714
1715 [[items]]
1716 section = "paths"
1717 name = ".*:pushrev"
1718 generic = true
1719
1720 [[items]]
1721 section = "paths"
1722 name = ".*:pushurl"
1723 generic = true
1724
1725 [[items]]
1726 section = "paths"
1727 name = "default"
1728
1729 [[items]]
1730 section = "paths"
1731 name = "default-push"
1732
1733 [[items]]
1734 section = "phases"
1735 name = "checksubrepos"
1736 default = "follow"
1737
1738 [[items]]
1739 section = "phases"
1740 name = "new-commit"
1741 default = "draft"
1742
1743 [[items]]
1744 section = "phases"
1745 name = "publish"
1746 default = true
1747
1748 [[items]]
1749 section = "profiling"
1750 name = "enabled"
1751 default = false
1752
1753 [[items]]
1754 section = "profiling"
1755 name = "format"
1756 default = "text"
1757
1758 [[items]]
1759 section = "profiling"
1760 name = "freq"
1761 default = 1000
1762
1763 [[items]]
1764 section = "profiling"
1765 name = "limit"
1766 default = 30
1767
1768 [[items]]
1769 section = "profiling"
1770 name = "nested"
1771 default = 0
1772
1773 [[items]]
1774 section = "profiling"
1775 name = "output"
1776
1777 [[items]]
1778 section = "profiling"
1779 name = "showmax"
1780 default = 0.999
1781
1782 [[items]]
1783 section = "profiling"
1784 name = "showmin"
1785 default-type = "dynamic"
1786
1787 [[items]]
1788 section = "profiling"
1789 name = "showtime"
1790 default = true
1791
1792 [[items]]
1793 section = "profiling"
1794 name = "sort"
1795 default = "inlinetime"
1796
1797 [[items]]
1798 section = "profiling"
1799 name = "statformat"
1800 default = "hotpath"
1801
1802 [[items]]
1803 section = "profiling"
1804 name = "time-track"
1805 default-type = "dynamic"
1806
1807 [[items]]
1808 section = "profiling"
1809 name = "type"
1810 default = "stat"
1811
1812 [[items]]
1813 section = "progress"
1814 name = "assume-tty"
1815 default = false
1816
1817 [[items]]
1818 section = "progress"
1819 name = "changedelay"
1820 default = 1
1821
1822 [[items]]
1823 section = "progress"
1824 name = "clear-complete"
1825 default = true
1826
1827 [[items]]
1828 section = "progress"
1829 name = "debug"
1830 default = false
1831
1832 [[items]]
1833 section = "progress"
1834 name = "delay"
1835 default = 3
1836
1837 [[items]]
1838 section = "progress"
1839 name = "disable"
1840 default = false
1841
1842 [[items]]
1843 section = "progress"
1844 name = "estimateinterval"
1845 default = 60.0
1846
1847 [[items]]
1848 section = "progress"
1849 name = "format"
1850 default-type = "lambda"
1851 default = [ "topic", "bar", "number", "estimate",]
1852
1853 [[items]]
1854 section = "progress"
1855 name = "refresh"
1856 default = 0.1
1857
1858 [[items]]
1859 section = "progress"
1860 name = "width"
1861 default-type = "dynamic"
1862
1863 [[items]]
1864 section = "pull"
1865 name = "confirm"
1866 default = false
1867
1868 [[items]]
1869 section = "push"
1870 name = "pushvars.server"
1871 default = false
1872
1873 [[items]]
1874 section = "rebase"
1875 name = "experimental.inmemory"
1876 default = false
1877
1878 [[items]]
1879 section = "rebase"
1880 name = "singletransaction"
1881 default = false
1882
1883 [[items]]
1884 section = "rebase"
1885 name = "store-source"
1886 default = true
1887 experimental = true
1888 documentation = """Controls creation of a `rebase_source` extra field during rebase.
1889 When false, no such field is created. This is useful e.g. for incrementally \
1890 converting changesets and then rebasing them onto an existing repo.
1891 WARNING: this is an advanced setting reserved for people who know \
1892 exactly what they are doing. Misuse of this setting can easily \
1893 result in obsmarker cycles and a vivid headache."""
1894
1895 [[items]]
1896 section = "rewrite"
1897 name = "backup-bundle"
1898 default = true
1899 alias = [["ui", "history-editing-backup"]]
1900
1901 [[items]]
1902 section = "rewrite"
1903 name = "empty-successor"
1904 default = "skip"
1905 experimental = true
1906
1907 [[items]]
1908 section = "rewrite"
1909 name = "update-timestamp"
1910 default = false
1911
1912 [[items]]
1913 section = "rhg"
1914 name = "cat"
1915 default = true
1916 experimental = true
1917 documentation = """rhg cat has some quirks that need to be ironed out. \
1918 In particular, the `-r` argument accepts a partial hash, but does not \
1919 correctly resolve `abcdef` as a potential bookmark, tag or branch name."""
1920
1921 [[items]]
1922 section = "rhg"
1923 name = "fallback-exectutable"
1924 experimental = true
1925
1926 [[items]]
1927 section = "rhg"
1928 name = "fallback-immediately"
1929 default = false
1930 experimental = true
1931
1932 [[items]]
1933 section = "rhg"
1934 name = "ignored-extensions"
1935 default-type = "list_type"
1936 experimental = true
1937
1938 [[items]]
1939 section = "rhg"
1940 name = "on-unsupported"
1941 default = "abort"
1942 experimental = true
1943
1944 [[items]]
1945 section = "server"
1946 name = "bookmarks-pushkey-compat"
1947 default = true
1948
1949 [[items]]
1950 section = "server"
1951 name = "bundle1"
1952 default = true
1953
1954 [[items]]
1955 section = "server"
1956 name = "bundle1.pull"
1957
1958 [[items]]
1959 section = "server"
1960 name = "bundle1.push"
1961
1962 [[items]]
1963 section = "server"
1964 name = "bundle1gd"
1965
1966 [[items]]
1967 section = "server"
1968 name = "bundle1gd.pull"
1969
1970 [[items]]
1971 section = "server"
1972 name = "bundle1gd.push"
1973
1974 [[items]]
1975 section = "server"
1976 name = "bundle2.stream"
1977 default = true
1978 alias = [["experimental", "bundle2.stream"]]
1979
1980 [[items]]
1981 section = "server"
1982 name = "compressionengines"
1983 default-type = "list_type"
1984
1985 [[items]]
1986 section = "server"
1987 name = "concurrent-push-mode"
1988 default = "check-related"
1989
1990 [[items]]
1991 section = "server"
1992 name = "disablefullbundle"
1993 default = false
1994
1995 [[items]]
1996 section = "server"
1997 name = "maxhttpheaderlen"
1998 default = 1024
1999
2000 [[items]]
2001 section = "server"
2002 name = "preferuncompressed"
2003 default = false
2004
2005 [[items]]
2006 section = "server"
2007 name = "pullbundle"
2008 default = true
2009
2010 [[items]]
2011 section = "server"
2012 name = "streamunbundle"
2013 default = false
2014
2015 [[items]]
2016 section = "server"
2017 name = "uncompressed"
2018 default = true
2019
2020 [[items]]
2021 section = "server"
2022 name = "uncompressedallowsecret"
2023 default = false
2024
2025 [[items]]
2026 section = "server"
2027 name = "validate"
2028 default = false
2029
2030 [[items]]
2031 section = "server"
2032 name = "view"
2033 default = "served"
2034
2035 [[items]]
2036 section = "server"
2037 name = "zliblevel"
2038 default = -1
2039
2040 [[items]]
2041 section = "server"
2042 name = "zstdlevel"
2043 default = 3
2044
2045 [[items]]
2046 section = "share"
2047 name = "pool"
2048
2049 [[items]]
2050 section = "share"
2051 name = "poolnaming"
2052 default = "identity"
2053
2054 [[items]]
2055 section = "share"
2056 name = "safe-mismatch.source-not-safe"
2057 default = "abort"
2058
2059 [[items]]
2060 section = "share"
2061 name = "safe-mismatch.source-not-safe.warn"
2062 default = true
2063
2064 [[items]]
2065 section = "share"
2066 name = "safe-mismatch.source-not-safe:verbose-upgrade"
2067 default = true
2068
2069 [[items]]
2070 section = "share"
2071 name = "safe-mismatch.source-safe"
2072 default = "abort"
2073
2074 [[items]]
2075 section = "share"
2076 name = "safe-mismatch.source-safe.warn"
2077 default = true
2078
2079 [[items]]
2080 section = "share"
2081 name = "safe-mismatch.source-safe:verbose-upgrade"
2082 default = true
2083
2084 [[items]]
2085 section = "shelve"
2086 name = "maxbackups"
2087 default = 10
2088
2089 [[items]]
2090 section = "shelve"
2091 name = "store"
2092 default = "internal"
2093 experimental = true
2094
2095 [[items]]
2096 section = "smtp"
2097 name = "host"
2098
2099 [[items]]
2100 section = "smtp"
2101 name = "local_hostname"
2102
2103 [[items]]
2104 section = "smtp"
2105 name = "password"
2106
2107 [[items]]
2108 section = "smtp"
2109 name = "port"
2110 default-type = "dynamic"
2111
2112 [[items]]
2113 section = "smtp"
2114 name = "tls"
2115 default = "none"
2116
2117 [[items]]
2118 section = "smtp"
2119 name = "username"
2120
2121 [[items]]
2122 section = "sparse"
2123 name = "missingwarning"
2124 default = true
2125 experimental = true
2126
2127 [[items]]
2128 section = "storage"
2129 name = "dirstate-v2.slow-path"
2130 default = "abort"
2131 experimental = true # experimental as long as format.use-dirstate-v2 is.
2132
2133 [[items]]
2134 section = "storage"
2135 name = "new-repo-backend"
2136 default = "revlogv1"
2137 experimental = true
2138
2139 [[items]]
2140 section = "storage"
2141 name = "revlog.delta-parent-search.candidate-group-chunk-size"
2142 default = 20
2143
2144 [[items]]
2145 section = "storage"
2146 name = "revlog.issue6528.fix-incoming"
2147 default = true
2148
2149 [[items]]
2150 section = "storage"
2151 name = "revlog.optimize-delta-parent-choice"
2152 default = true
2153 alias = [["format", "aggressivemergedeltas"]]
2154
2155 [[items]]
2156 section = "storage"
2157 name = "revlog.persistent-nodemap.mmap"
2158 default = true
2159
2160 [[items]]
2161 section = "storage"
2162 name = "revlog.persistent-nodemap.slow-path"
2163 default = "abort"
2164
2165 [[items]]
2166 section = "storage"
2167 name = "revlog.reuse-external-delta"
2168 default = true
2169
2170 [[items]]
2171 section = "storage"
2172 name = "revlog.reuse-external-delta-parent"
2173 documentation = """This option is true unless `format.generaldelta` is set."""
2174
2175 [[items]]
2176 section = "storage"
2177 name = "revlog.zlib.level"
2178
2179 [[items]]
2180 section = "storage"
2181 name = "revlog.zstd.level"
2182
2183 [[items]]
2184 section = "subrepos"
2185 name = "allowed"
2186 default-type = "dynamic" # to make backporting simpler
2187
2188 [[items]]
2189 section = "subrepos"
2190 name = "git:allowed"
2191 default-type = "dynamic"
2192
2193 [[items]]
2194 section = "subrepos"
2195 name = "hg:allowed"
2196 default-type = "dynamic"
2197
2198 [[items]]
2199 section = "subrepos"
2200 name = "svn:allowed"
2201 default-type = "dynamic"
2202
2203 [[items]]
2204 section = "templateconfig"
2205 name = ".*"
2206 default-type = "dynamic"
2207 generic = true
2208
2209 [[items]]
2210 section = "templates"
2211 name = ".*"
2212 generic = true
2213
2214 [[items]]
2215 section = "trusted"
2216 name = "groups"
2217 default-type = "list_type"
2218
2219 [[items]]
2220 section = "trusted"
2221 name = "users"
2222 default-type = "list_type"
2223
2224 [[items]]
2225 section = "ui"
2226 name = "_usedassubrepo"
2227 default = false
2228
2229 [[items]]
2230 section = "ui"
2231 name = "allowemptycommit"
2232 default = false
2233
2234 [[items]]
2235 section = "ui"
2236 name = "archivemeta"
2237 default = true
2238
2239 [[items]]
2240 section = "ui"
2241 name = "askusername"
2242 default = false
2243
2244 [[items]]
2245 section = "ui"
2246 name = "available-memory"
2247
2248 [[items]]
2249 section = "ui"
2250 name = "clonebundlefallback"
2251 default = false
2252
2253 [[items]]
2254 section = "ui"
2255 name = "clonebundleprefers"
2256 default-type = "list_type"
2257
2258 [[items]]
2259 section = "ui"
2260 name = "clonebundles"
2261 default = true
2262
2263 [[items]]
2264 section = "ui"
2265 name = "color"
2266 default = "auto"
2267
2268 [[items]]
2269 section = "ui"
2270 name = "commitsubrepos"
2271 default = false
2272
2273 [[items]]
2274 section = "ui"
2275 name = "debug"
2276 default = false
2277
2278 [[items]]
2279 section = "ui"
2280 name = "debugger"
2281
2282 [[items]]
2283 section = "ui"
2284 name = "detailed-exit-code"
2285 default = false
2286 experimental = true
2287
2288 [[items]]
2289 section = "ui"
2290 name = "editor"
2291 default-type = "dynamic"
2292
2293 [[items]]
2294 section = "ui"
2295 name = "fallbackencoding"
2296
2297 [[items]]
2298 section = "ui"
2299 name = "forcecwd"
2300
2301 [[items]]
2302 section = "ui"
2303 name = "forcemerge"
2304
2305 [[items]]
2306 section = "ui"
2307 name = "formatdebug"
2308 default = false
2309
2310 [[items]]
2311 section = "ui"
2312 name = "formatjson"
2313 default = false
2314
2315 [[items]]
2316 section = "ui"
2317 name = "formatted"
2318
2319 [[items]]
2320 section = "ui"
2321 name = "interactive"
2322
2323 [[items]]
2324 section = "ui"
2325 name = "interface"
2326
2327 [[items]]
2328 section = "ui"
2329 name = "interface.chunkselector"
2330
2331 [[items]]
2332 section = "ui"
2333 name = "large-file-limit"
2334 default = 10485760
2335
2336 [[items]]
2337 section = "ui"
2338 name = "logblockedtimes"
2339 default = false
2340
2341 [[items]]
2342 section = "ui"
2343 name = "merge"
2344
2345 [[items]]
2346 section = "ui"
2347 name = "mergemarkers"
2348 default = "basic"
2349
2350 [[items]]
2351 section = "ui"
2352 name = "message-output"
2353 default = "stdio"
2354
2355 [[items]]
2356 section = "ui"
2357 name = "nontty"
2358 default = false
2359
2360 [[items]]
2361 section = "ui"
2362 name = "origbackuppath"
2363
2364 [[items]]
2365 section = "ui"
2366 name = "paginate"
2367 default = true
2368
2369 [[items]]
2370 section = "ui"
2371 name = "patch"
2372
2373 [[items]]
2374 section = "ui"
2375 name = "portablefilenames"
2376 default = "warn"
2377
2378 [[items]]
2379 section = "ui"
2380 name = "promptecho"
2381 default = false
2382
2383 [[items]]
2384 section = "ui"
2385 name = "quiet"
2386 default = false
2387
2388 [[items]]
2389 section = "ui"
2390 name = "quietbookmarkmove"
2391 default = false
2392
2393 [[items]]
2394 section = "ui"
2395 name = "relative-paths"
2396 default = "legacy"
2397
2398 [[items]]
2399 section = "ui"
2400 name = "remotecmd"
2401 default = "hg"
2402
2403 [[items]]
2404 section = "ui"
2405 name = "report_untrusted"
2406 default = true
2407
2408 [[items]]
2409 section = "ui"
2410 name = "rollback"
2411 default = true
2412
2413 [[items]]
2414 section = "ui"
2415 name = "signal-safe-lock"
2416 default = true
2417
2418 [[items]]
2419 section = "ui"
2420 name = "slash"
2421 default = false
2422
2423 [[items]]
2424 section = "ui"
2425 name = "ssh"
2426 default = "ssh"
2427
2428 [[items]]
2429 section = "ui"
2430 name = "ssherrorhint"
2431
2432 [[items]]
2433 section = "ui"
2434 name = "statuscopies"
2435 default = false
2436
2437 [[items]]
2438 section = "ui"
2439 name = "strict"
2440 default = false
2441
2442 [[items]]
2443 section = "ui"
2444 name = "style"
2445 default = ""
2446
2447 [[items]]
2448 section = "ui"
2449 name = "supportcontact"
2450
2451 [[items]]
2452 section = "ui"
2453 name = "textwidth"
2454 default = 78
2455
2456 [[items]]
2457 section = "ui"
2458 name = "timeout"
2459 default = "600"
2460
2461 [[items]]
2462 section = "ui"
2463 name = "timeout.warn"
2464 default = 0
2465
2466 [[items]]
2467 section = "ui"
2468 name = "timestamp-output"
2469 default = false
2470
2471 [[items]]
2472 section = "ui"
2473 name = "traceback"
2474 default = false
2475
2476 [[items]]
2477 section = "ui"
2478 name = "tweakdefaults"
2479 default = false
2480
2481 [[items]]
2482 section = "ui"
2483 name = "username"
2484 alias = [["ui", "user"]]
2485
2486 [[items]]
2487 section = "ui"
2488 name = "verbose"
2489 default = false
2490
2491 [[items]]
2492 section = "verify"
2493 name = "skipflags"
2494 default = 0
2495
2496 [[items]]
2497 section = "web"
2498 name = "accesslog"
2499 default = "-"
2500
2501 [[items]]
2502 section = "web"
2503 name = "address"
2504 default = ""
2505
2506 [[items]]
2507 section = "web"
2508 name = "allow-archive"
2509 default-type = "list_type"
2510 alias = [["web", "allow_archive"]]
2511
2512 [[items]]
2513 section = "web"
2514 name = "allow-pull"
2515 default = true
2516 alias = [["web", "allowpull"]]
2517
2518 [[items]]
2519 section = "web"
2520 name = "allow-push"
2521 default-type = "list_type"
2522 alias = [["web", "allow_push"]]
2523
2524 [[items]]
2525 section = "web"
2526 name = "allow_read"
2527 default-type = "list_type"
2528
2529 [[items]]
2530 section = "web"
2531 name = "allowbz2"
2532 default = false
2533
2534 [[items]]
2535 section = "web"
2536 name = "allowgz"
2537 default = false
2538
2539 [[items]]
2540 section = "web"
2541 name = "allowzip"
2542 default = false
2543
2544 [[items]]
2545 section = "web"
2546 name = "archivesubrepos"
2547 default = false
2548
2549 [[items]]
2550 section = "web"
2551 name = "baseurl"
2552
2553 [[items]]
2554 section = "web"
2555 name = "cacerts"
2556
2557 [[items]]
2558 section = "web"
2559 name = "cache"
2560 default = true
2561
2562 [[items]]
2563 section = "web"
2564 name = "certificate"
2565
2566 [[items]]
2567 section = "web"
2568 name = "collapse"
2569 default = false
2570
2571 [[items]]
2572 section = "web"
2573 name = "comparisoncontext"
2574 default = 5
2575
2576 [[items]]
2577 section = "web"
2578 name = "contact"
2579
2580 [[items]]
2581 section = "web"
2582 name = "csp"
2583
2584 [[items]]
2585 section = "web"
2586 name = "deny_push"
2587 default-type = "list_type"
2588
2589 [[items]]
2590 section = "web"
2591 name = "deny_read"
2592 default-type = "list_type"
2593
2594 [[items]]
2595 section = "web"
2596 name = "descend"
2597 default = true
2598
2599 [[items]]
2600 section = "web"
2601 name = "description"
2602 default = ""
2603
2604 [[items]]
2605 section = "web"
2606 name = "encoding"
2607 default-type = "lazy_module"
2608 default = "encoding.encoding"
2609
2610 [[items]]
2611 section = "web"
2612 name = "errorlog"
2613 default = "-"
2614
2615 [[items]]
2616 section = "web"
2617 name = "guessmime"
2618 default = false
2619
2620 [[items]]
2621 section = "web"
2622 name = "hidden"
2623 default = false
2624
2625 [[items]]
2626 section = "web"
2627 name = "ipv6"
2628 default = false
2629
2630 [[items]]
2631 section = "web"
2632 name = "labels"
2633 default-type = "list_type"
2634
2635 [[items]]
2636 section = "web"
2637 name = "logoimg"
2638 default = "hglogo.png"
2639
2640 [[items]]
2641 section = "web"
2642 name = "logourl"
2643 default = "https://mercurial-scm.org/"
2644
2645 [[items]]
2646 section = "web"
2647 name = "maxchanges"
2648 default = 10
2649
2650 [[items]]
2651 section = "web"
2652 name = "maxfiles"
2653 default = 10
2654
2655 [[items]]
2656 section = "web"
2657 name = "maxshortchanges"
2658 default = 60
2659
2660 [[items]]
2661 section = "web"
2662 name = "motd"
2663 default = ""
2664
2665 [[items]]
2666 section = "web"
2667 name = "name"
2668 default-type = "dynamic"
2669
2670 [[items]]
2671 section = "web"
2672 name = "port"
2673 default = 8000
2674
2675 [[items]]
2676 section = "web"
2677 name = "prefix"
2678 default = ""
2679
2680 [[items]]
2681 section = "web"
2682 name = "push_ssl"
2683 default = true
2684
2685 [[items]]
2686 section = "web"
2687 name = "refreshinterval"
2688 default = 20
2689
2690 [[items]]
2691 section = "web"
2692 name = "server-header"
2693
2694 [[items]]
2695 section = "web"
2696 name = "static"
2697
2698 [[items]]
2699 section = "web"
2700 name = "staticurl"
2701
2702 [[items]]
2703 section = "web"
2704 name = "stripes"
2705 default = 1
2706
2707 [[items]]
2708 section = "web"
2709 name = "style"
2710 default = "paper"
2711
2712 [[items]]
2713 section = "web"
2714 name = "templates"
2715
2716 [[items]]
2717 section = "web"
2718 name = "view"
2719 default = "served"
2720 experimental = true
2721
2722 [[items]]
2723 section = "worker"
2724 name = "backgroundclose"
2725 default-type = "dynamic"
2726
2727 [[items]]
2728 section = "worker"
2729 name = "backgroundclosemaxqueue"
2920 2730 # Windows defaults to a limit of 512 open files. A buffer of 128
2921 2731 # should give us enough headway.
2922 coreconfigitem(
2923 b'worker',
2924 b'backgroundclosemaxqueue',
2925 default=384,
2926 )
2927 coreconfigitem(
2928 b'worker',
2929 b'backgroundcloseminfilecount',
2930 default=2048,
2931 )
2932 coreconfigitem(
2933 b'worker',
2934 b'backgroundclosethreadcount',
2935 default=4,
2936 )
2937 coreconfigitem(
2938 b'worker',
2939 b'enabled',
2940 default=True,
2941 )
2942 coreconfigitem(
2943 b'worker',
2944 b'numcpus',
2945 default=None,
2946 )
2947
2948 # Rebase related configuration moved to core because other extension are doing
2949 # strange things. For example, shelve import the extensions to reuse some bit
2950 # without formally loading it.
2951 coreconfigitem(
2952 b'commands',
2953 b'rebase.requiredest',
2954 default=False,
2955 )
2956 coreconfigitem(
2957 b'experimental',
2958 b'rebaseskipobsolete',
2959 default=True,
2960 )
2961 coreconfigitem(
2962 b'rebase',
2963 b'singletransaction',
2964 default=False,
2965 )
2966 coreconfigitem(
2967 b'rebase',
2968 b'experimental.inmemory',
2969 default=False,
2970 )
2971
2972 # This setting controls creation of a rebase_source extra field
2973 # during rebase. When False, no such field is created. This is
2974 # useful eg for incrementally converting changesets and then
2975 # rebasing them onto an existing repo.
2976 # WARNING: this is an advanced setting reserved for people who know
2977 # exactly what they are doing. Misuse of this setting can easily
2978 # result in obsmarker cycles and a vivid headache.
2979 coreconfigitem(
2980 b'rebase',
2981 b'store-source',
2982 default=True,
2983 experimental=True,
2984 )
2732 default = 384
2733
2734 [[items]]
2735 section = "worker"
2736 name = "backgroundcloseminfilecount"
2737 default = 2048
2738
2739 [[items]]
2740 section = "worker"
2741 name = "backgroundclosethreadcount"
2742 default = 4
2743
2744 [[items]]
2745 section = "worker"
2746 name = "enabled"
2747 default = true
2748
2749 [[items]]
2750 section = "worker"
2751 name = "numcpus"
2752
2753 # Templates and template applications
2754
2755 [[template-applications]]
2756 template = "diff-options"
2757 section = "annotate"
2758
2759 [[template-applications]]
2760 template = "diff-options"
2761 section = "commands"
2762 prefix = "commit.interactive"
2763
2764 [[template-applications]]
2765 template = "diff-options"
2766 section = "commands"
2767 prefix = "revert.interactive"
2768
2769 [[template-applications]]
2770 template = "diff-options"
2771 section = "diff"
2772
2773 [templates]
2774 [[templates.diff-options]]
2775 suffix = "nodates"
2776 default = false
2777
2778 [[templates.diff-options]]
2779 suffix = "showfunc"
2780 default = false
2781
2782 [[templates.diff-options]]
2783 suffix = "unified"
2784
2785 [[templates.diff-options]]
2786 suffix = "git"
2787 default = false
2788
2789 [[templates.diff-options]]
2790 suffix = "ignorews"
2791 default = false
2792
2793 [[templates.diff-options]]
2794 suffix = "ignorewsamount"
2795 default = false
2796
2797 [[templates.diff-options]]
2798 suffix = "ignoreblanklines"
2799 default = false
2800
2801 [[templates.diff-options]]
2802 suffix = "ignorewseol"
2803 default = false
2804
2805 [[templates.diff-options]]
2806 suffix = "nobinary"
2807 default = false
2808
2809 [[templates.diff-options]]
2810 suffix = "noprefix"
2811 default = false
2812
2813 [[templates.diff-options]]
2814 suffix = "word-diff"
2815 default = false
2816
2817 # In-core extensions
2818
2819 [[items]]
2820 section = "blackbox"
2821 name = "debug.to-stderr"
2822 default = false
2823 in_core_extension = "blackbox"
2824
2825 [[items]]
2826 section = "blackbox"
2827 name = "dirty"
2828 default = false
2829 in_core_extension = "blackbox"
2830
2831 [[items]]
2832 section = "blackbox"
2833 name = "maxsize"
2834 default = "1 MB"
2835 in_core_extension = "blackbox"
2836
2837 [[items]]
2838 section = "blackbox"
2839 name = "logsource"
2840 default = false
2841 in_core_extension = "blackbox"
2842
2843 [[items]]
2844 section = "blackbox"
2845 name = "maxfiles"
2846 default = 7
2847 in_core_extension = "blackbox"
2848
2849 [[items]]
2850 section = "blackbox"
2851 name = "track"
2852 default-type = "lambda"
2853 default = ["*"]
2854 in_core_extension = "blackbox"
2855
2856 [[items]]
2857 section = "blackbox"
2858 name = "ignore"
2859 default-type = "lambda"
2860 default = ["chgserver", "cmdserver", "extension"]
2861 in_core_extension = "blackbox"
2862
2863 [[items]]
2864 section = "blackbox"
2865 name = "date-format"
2866 default = ""
2867 in_core_extension = "blackbox"
@@ -16,9 +16,6 b' from .node import ('
16 16 nullrev,
17 17 short,
18 18 )
19 from .pycompat import (
20 getattr,
21 )
22 19 from . import (
23 20 dagop,
24 21 encoding,
@@ -15,7 +15,6 b' import signal'
15 15
16 16 from .i18n import _
17 17 from .pycompat import (
18 getattr,
19 18 open,
20 19 )
21 20 from . import (
@@ -573,7 +572,7 b' def chunkselector(ui, headerlist, operat'
573 572 ui.write(_(b'starting interactive selection\n'))
574 573 chunkselector = curseschunkselector(headerlist, ui, operation)
575 574 origsigtstp = sentinel = object()
576 if util.safehasattr(signal, 'SIGTSTP'):
575 if hasattr(signal, 'SIGTSTP'):
577 576 origsigtstp = signal.getsignal(signal.SIGTSTP)
578 577 try:
579 578 with util.with_lc_ctype():
@@ -1944,7 +1943,7 b' are you sure you want to review/edit and'
1944 1943 """
1945 1944
1946 1945 origsigwinch = sentinel = object()
1947 if util.safehasattr(signal, 'SIGWINCH'):
1946 if hasattr(signal, 'SIGWINCH'):
1948 1947 origsigwinch = signal.signal(signal.SIGWINCH, self.sigwinchhandler)
1949 1948 try:
1950 1949 return self._main(stdscr)
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (1413 lines changed) Show them Hide them
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now