##// END OF EJS Templates
hooks: introduce a `:run-with-plain` option for hooks...
marmoute -
r47221:f22f6637 default draft
parent child Browse files
Show More
@@ -1,2605 +1,2611 b''
1 # configitems.py - centralized declaration of configuration option
1 # configitems.py - centralized declaration of configuration option
2 #
2 #
3 # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net>
3 # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
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.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import functools
10 import functools
11 import re
11 import re
12
12
13 from . import (
13 from . import (
14 encoding,
14 encoding,
15 error,
15 error,
16 )
16 )
17
17
18
18
19 def loadconfigtable(ui, extname, configtable):
19 def loadconfigtable(ui, extname, configtable):
20 """update config item known to the ui with the extension ones"""
20 """update config item known to the ui with the extension ones"""
21 for section, items in sorted(configtable.items()):
21 for section, items in sorted(configtable.items()):
22 knownitems = ui._knownconfig.setdefault(section, itemregister())
22 knownitems = ui._knownconfig.setdefault(section, itemregister())
23 knownkeys = set(knownitems)
23 knownkeys = set(knownitems)
24 newkeys = set(items)
24 newkeys = set(items)
25 for key in sorted(knownkeys & newkeys):
25 for key in sorted(knownkeys & newkeys):
26 msg = b"extension '%s' overwrite config item '%s.%s'"
26 msg = b"extension '%s' overwrite config item '%s.%s'"
27 msg %= (extname, section, key)
27 msg %= (extname, section, key)
28 ui.develwarn(msg, config=b'warn-config')
28 ui.develwarn(msg, config=b'warn-config')
29
29
30 knownitems.update(items)
30 knownitems.update(items)
31
31
32
32
33 class configitem(object):
33 class configitem(object):
34 """represent a known config item
34 """represent a known config item
35
35
36 :section: the official config section where to find this item,
36 :section: the official config section where to find this item,
37 :name: the official name within the section,
37 :name: the official name within the section,
38 :default: default value for this item,
38 :default: default value for this item,
39 :alias: optional list of tuples as alternatives,
39 :alias: optional list of tuples as alternatives,
40 :generic: this is a generic definition, match name using regular expression.
40 :generic: this is a generic definition, match name using regular expression.
41 """
41 """
42
42
43 def __init__(
43 def __init__(
44 self,
44 self,
45 section,
45 section,
46 name,
46 name,
47 default=None,
47 default=None,
48 alias=(),
48 alias=(),
49 generic=False,
49 generic=False,
50 priority=0,
50 priority=0,
51 experimental=False,
51 experimental=False,
52 ):
52 ):
53 self.section = section
53 self.section = section
54 self.name = name
54 self.name = name
55 self.default = default
55 self.default = default
56 self.alias = list(alias)
56 self.alias = list(alias)
57 self.generic = generic
57 self.generic = generic
58 self.priority = priority
58 self.priority = priority
59 self.experimental = experimental
59 self.experimental = experimental
60 self._re = None
60 self._re = None
61 if generic:
61 if generic:
62 self._re = re.compile(self.name)
62 self._re = re.compile(self.name)
63
63
64
64
65 class itemregister(dict):
65 class itemregister(dict):
66 """A specialized dictionary that can handle wild-card selection"""
66 """A specialized dictionary that can handle wild-card selection"""
67
67
68 def __init__(self):
68 def __init__(self):
69 super(itemregister, self).__init__()
69 super(itemregister, self).__init__()
70 self._generics = set()
70 self._generics = set()
71
71
72 def update(self, other):
72 def update(self, other):
73 super(itemregister, self).update(other)
73 super(itemregister, self).update(other)
74 self._generics.update(other._generics)
74 self._generics.update(other._generics)
75
75
76 def __setitem__(self, key, item):
76 def __setitem__(self, key, item):
77 super(itemregister, self).__setitem__(key, item)
77 super(itemregister, self).__setitem__(key, item)
78 if item.generic:
78 if item.generic:
79 self._generics.add(item)
79 self._generics.add(item)
80
80
81 def get(self, key):
81 def get(self, key):
82 baseitem = super(itemregister, self).get(key)
82 baseitem = super(itemregister, self).get(key)
83 if baseitem is not None and not baseitem.generic:
83 if baseitem is not None and not baseitem.generic:
84 return baseitem
84 return baseitem
85
85
86 # search for a matching generic item
86 # search for a matching generic item
87 generics = sorted(self._generics, key=(lambda x: (x.priority, x.name)))
87 generics = sorted(self._generics, key=(lambda x: (x.priority, x.name)))
88 for item in generics:
88 for item in generics:
89 # we use 'match' instead of 'search' to make the matching simpler
89 # we use 'match' instead of 'search' to make the matching simpler
90 # for people unfamiliar with regular expression. Having the match
90 # for people unfamiliar with regular expression. Having the match
91 # rooted to the start of the string will produce less surprising
91 # rooted to the start of the string will produce less surprising
92 # result for user writing simple regex for sub-attribute.
92 # result for user writing simple regex for sub-attribute.
93 #
93 #
94 # For example using "color\..*" match produces an unsurprising
94 # For example using "color\..*" match produces an unsurprising
95 # result, while using search could suddenly match apparently
95 # result, while using search could suddenly match apparently
96 # unrelated configuration that happens to contains "color."
96 # unrelated configuration that happens to contains "color."
97 # anywhere. This is a tradeoff where we favor requiring ".*" on
97 # anywhere. This is a tradeoff where we favor requiring ".*" on
98 # some match to avoid the need to prefix most pattern with "^".
98 # some match to avoid the need to prefix most pattern with "^".
99 # The "^" seems more error prone.
99 # The "^" seems more error prone.
100 if item._re.match(key):
100 if item._re.match(key):
101 return item
101 return item
102
102
103 return None
103 return None
104
104
105
105
106 coreitems = {}
106 coreitems = {}
107
107
108
108
109 def _register(configtable, *args, **kwargs):
109 def _register(configtable, *args, **kwargs):
110 item = configitem(*args, **kwargs)
110 item = configitem(*args, **kwargs)
111 section = configtable.setdefault(item.section, itemregister())
111 section = configtable.setdefault(item.section, itemregister())
112 if item.name in section:
112 if item.name in section:
113 msg = b"duplicated config item registration for '%s.%s'"
113 msg = b"duplicated config item registration for '%s.%s'"
114 raise error.ProgrammingError(msg % (item.section, item.name))
114 raise error.ProgrammingError(msg % (item.section, item.name))
115 section[item.name] = item
115 section[item.name] = item
116
116
117
117
118 # special value for case where the default is derived from other values
118 # special value for case where the default is derived from other values
119 dynamicdefault = object()
119 dynamicdefault = object()
120
120
121 # Registering actual config items
121 # Registering actual config items
122
122
123
123
124 def getitemregister(configtable):
124 def getitemregister(configtable):
125 f = functools.partial(_register, configtable)
125 f = functools.partial(_register, configtable)
126 # export pseudo enum as configitem.*
126 # export pseudo enum as configitem.*
127 f.dynamicdefault = dynamicdefault
127 f.dynamicdefault = dynamicdefault
128 return f
128 return f
129
129
130
130
131 coreconfigitem = getitemregister(coreitems)
131 coreconfigitem = getitemregister(coreitems)
132
132
133
133
134 def _registerdiffopts(section, configprefix=b''):
134 def _registerdiffopts(section, configprefix=b''):
135 coreconfigitem(
135 coreconfigitem(
136 section,
136 section,
137 configprefix + b'nodates',
137 configprefix + b'nodates',
138 default=False,
138 default=False,
139 )
139 )
140 coreconfigitem(
140 coreconfigitem(
141 section,
141 section,
142 configprefix + b'showfunc',
142 configprefix + b'showfunc',
143 default=False,
143 default=False,
144 )
144 )
145 coreconfigitem(
145 coreconfigitem(
146 section,
146 section,
147 configprefix + b'unified',
147 configprefix + b'unified',
148 default=None,
148 default=None,
149 )
149 )
150 coreconfigitem(
150 coreconfigitem(
151 section,
151 section,
152 configprefix + b'git',
152 configprefix + b'git',
153 default=False,
153 default=False,
154 )
154 )
155 coreconfigitem(
155 coreconfigitem(
156 section,
156 section,
157 configprefix + b'ignorews',
157 configprefix + b'ignorews',
158 default=False,
158 default=False,
159 )
159 )
160 coreconfigitem(
160 coreconfigitem(
161 section,
161 section,
162 configprefix + b'ignorewsamount',
162 configprefix + b'ignorewsamount',
163 default=False,
163 default=False,
164 )
164 )
165 coreconfigitem(
165 coreconfigitem(
166 section,
166 section,
167 configprefix + b'ignoreblanklines',
167 configprefix + b'ignoreblanklines',
168 default=False,
168 default=False,
169 )
169 )
170 coreconfigitem(
170 coreconfigitem(
171 section,
171 section,
172 configprefix + b'ignorewseol',
172 configprefix + b'ignorewseol',
173 default=False,
173 default=False,
174 )
174 )
175 coreconfigitem(
175 coreconfigitem(
176 section,
176 section,
177 configprefix + b'nobinary',
177 configprefix + b'nobinary',
178 default=False,
178 default=False,
179 )
179 )
180 coreconfigitem(
180 coreconfigitem(
181 section,
181 section,
182 configprefix + b'noprefix',
182 configprefix + b'noprefix',
183 default=False,
183 default=False,
184 )
184 )
185 coreconfigitem(
185 coreconfigitem(
186 section,
186 section,
187 configprefix + b'word-diff',
187 configprefix + b'word-diff',
188 default=False,
188 default=False,
189 )
189 )
190
190
191
191
192 coreconfigitem(
192 coreconfigitem(
193 b'alias',
193 b'alias',
194 b'.*',
194 b'.*',
195 default=dynamicdefault,
195 default=dynamicdefault,
196 generic=True,
196 generic=True,
197 )
197 )
198 coreconfigitem(
198 coreconfigitem(
199 b'auth',
199 b'auth',
200 b'cookiefile',
200 b'cookiefile',
201 default=None,
201 default=None,
202 )
202 )
203 _registerdiffopts(section=b'annotate')
203 _registerdiffopts(section=b'annotate')
204 # bookmarks.pushing: internal hack for discovery
204 # bookmarks.pushing: internal hack for discovery
205 coreconfigitem(
205 coreconfigitem(
206 b'bookmarks',
206 b'bookmarks',
207 b'pushing',
207 b'pushing',
208 default=list,
208 default=list,
209 )
209 )
210 # bundle.mainreporoot: internal hack for bundlerepo
210 # bundle.mainreporoot: internal hack for bundlerepo
211 coreconfigitem(
211 coreconfigitem(
212 b'bundle',
212 b'bundle',
213 b'mainreporoot',
213 b'mainreporoot',
214 default=b'',
214 default=b'',
215 )
215 )
216 coreconfigitem(
216 coreconfigitem(
217 b'censor',
217 b'censor',
218 b'policy',
218 b'policy',
219 default=b'abort',
219 default=b'abort',
220 experimental=True,
220 experimental=True,
221 )
221 )
222 coreconfigitem(
222 coreconfigitem(
223 b'chgserver',
223 b'chgserver',
224 b'idletimeout',
224 b'idletimeout',
225 default=3600,
225 default=3600,
226 )
226 )
227 coreconfigitem(
227 coreconfigitem(
228 b'chgserver',
228 b'chgserver',
229 b'skiphash',
229 b'skiphash',
230 default=False,
230 default=False,
231 )
231 )
232 coreconfigitem(
232 coreconfigitem(
233 b'cmdserver',
233 b'cmdserver',
234 b'log',
234 b'log',
235 default=None,
235 default=None,
236 )
236 )
237 coreconfigitem(
237 coreconfigitem(
238 b'cmdserver',
238 b'cmdserver',
239 b'max-log-files',
239 b'max-log-files',
240 default=7,
240 default=7,
241 )
241 )
242 coreconfigitem(
242 coreconfigitem(
243 b'cmdserver',
243 b'cmdserver',
244 b'max-log-size',
244 b'max-log-size',
245 default=b'1 MB',
245 default=b'1 MB',
246 )
246 )
247 coreconfigitem(
247 coreconfigitem(
248 b'cmdserver',
248 b'cmdserver',
249 b'max-repo-cache',
249 b'max-repo-cache',
250 default=0,
250 default=0,
251 experimental=True,
251 experimental=True,
252 )
252 )
253 coreconfigitem(
253 coreconfigitem(
254 b'cmdserver',
254 b'cmdserver',
255 b'message-encodings',
255 b'message-encodings',
256 default=list,
256 default=list,
257 )
257 )
258 coreconfigitem(
258 coreconfigitem(
259 b'cmdserver',
259 b'cmdserver',
260 b'track-log',
260 b'track-log',
261 default=lambda: [b'chgserver', b'cmdserver', b'repocache'],
261 default=lambda: [b'chgserver', b'cmdserver', b'repocache'],
262 )
262 )
263 coreconfigitem(
263 coreconfigitem(
264 b'cmdserver',
264 b'cmdserver',
265 b'shutdown-on-interrupt',
265 b'shutdown-on-interrupt',
266 default=True,
266 default=True,
267 )
267 )
268 coreconfigitem(
268 coreconfigitem(
269 b'color',
269 b'color',
270 b'.*',
270 b'.*',
271 default=None,
271 default=None,
272 generic=True,
272 generic=True,
273 )
273 )
274 coreconfigitem(
274 coreconfigitem(
275 b'color',
275 b'color',
276 b'mode',
276 b'mode',
277 default=b'auto',
277 default=b'auto',
278 )
278 )
279 coreconfigitem(
279 coreconfigitem(
280 b'color',
280 b'color',
281 b'pagermode',
281 b'pagermode',
282 default=dynamicdefault,
282 default=dynamicdefault,
283 )
283 )
284 coreconfigitem(
284 coreconfigitem(
285 b'command-templates',
285 b'command-templates',
286 b'graphnode',
286 b'graphnode',
287 default=None,
287 default=None,
288 alias=[(b'ui', b'graphnodetemplate')],
288 alias=[(b'ui', b'graphnodetemplate')],
289 )
289 )
290 coreconfigitem(
290 coreconfigitem(
291 b'command-templates',
291 b'command-templates',
292 b'log',
292 b'log',
293 default=None,
293 default=None,
294 alias=[(b'ui', b'logtemplate')],
294 alias=[(b'ui', b'logtemplate')],
295 )
295 )
296 coreconfigitem(
296 coreconfigitem(
297 b'command-templates',
297 b'command-templates',
298 b'mergemarker',
298 b'mergemarker',
299 default=(
299 default=(
300 b'{node|short} '
300 b'{node|short} '
301 b'{ifeq(tags, "tip", "", '
301 b'{ifeq(tags, "tip", "", '
302 b'ifeq(tags, "", "", "{tags} "))}'
302 b'ifeq(tags, "", "", "{tags} "))}'
303 b'{if(bookmarks, "{bookmarks} ")}'
303 b'{if(bookmarks, "{bookmarks} ")}'
304 b'{ifeq(branch, "default", "", "{branch} ")}'
304 b'{ifeq(branch, "default", "", "{branch} ")}'
305 b'- {author|user}: {desc|firstline}'
305 b'- {author|user}: {desc|firstline}'
306 ),
306 ),
307 alias=[(b'ui', b'mergemarkertemplate')],
307 alias=[(b'ui', b'mergemarkertemplate')],
308 )
308 )
309 coreconfigitem(
309 coreconfigitem(
310 b'command-templates',
310 b'command-templates',
311 b'pre-merge-tool-output',
311 b'pre-merge-tool-output',
312 default=None,
312 default=None,
313 alias=[(b'ui', b'pre-merge-tool-output-template')],
313 alias=[(b'ui', b'pre-merge-tool-output-template')],
314 )
314 )
315 coreconfigitem(
315 coreconfigitem(
316 b'command-templates',
316 b'command-templates',
317 b'oneline-summary',
317 b'oneline-summary',
318 default=None,
318 default=None,
319 )
319 )
320 coreconfigitem(
320 coreconfigitem(
321 b'command-templates',
321 b'command-templates',
322 b'oneline-summary.*',
322 b'oneline-summary.*',
323 default=dynamicdefault,
323 default=dynamicdefault,
324 generic=True,
324 generic=True,
325 )
325 )
326 _registerdiffopts(section=b'commands', configprefix=b'commit.interactive.')
326 _registerdiffopts(section=b'commands', configprefix=b'commit.interactive.')
327 coreconfigitem(
327 coreconfigitem(
328 b'commands',
328 b'commands',
329 b'commit.post-status',
329 b'commit.post-status',
330 default=False,
330 default=False,
331 )
331 )
332 coreconfigitem(
332 coreconfigitem(
333 b'commands',
333 b'commands',
334 b'grep.all-files',
334 b'grep.all-files',
335 default=False,
335 default=False,
336 experimental=True,
336 experimental=True,
337 )
337 )
338 coreconfigitem(
338 coreconfigitem(
339 b'commands',
339 b'commands',
340 b'merge.require-rev',
340 b'merge.require-rev',
341 default=False,
341 default=False,
342 )
342 )
343 coreconfigitem(
343 coreconfigitem(
344 b'commands',
344 b'commands',
345 b'push.require-revs',
345 b'push.require-revs',
346 default=False,
346 default=False,
347 )
347 )
348 coreconfigitem(
348 coreconfigitem(
349 b'commands',
349 b'commands',
350 b'resolve.confirm',
350 b'resolve.confirm',
351 default=False,
351 default=False,
352 )
352 )
353 coreconfigitem(
353 coreconfigitem(
354 b'commands',
354 b'commands',
355 b'resolve.explicit-re-merge',
355 b'resolve.explicit-re-merge',
356 default=False,
356 default=False,
357 )
357 )
358 coreconfigitem(
358 coreconfigitem(
359 b'commands',
359 b'commands',
360 b'resolve.mark-check',
360 b'resolve.mark-check',
361 default=b'none',
361 default=b'none',
362 )
362 )
363 _registerdiffopts(section=b'commands', configprefix=b'revert.interactive.')
363 _registerdiffopts(section=b'commands', configprefix=b'revert.interactive.')
364 coreconfigitem(
364 coreconfigitem(
365 b'commands',
365 b'commands',
366 b'show.aliasprefix',
366 b'show.aliasprefix',
367 default=list,
367 default=list,
368 )
368 )
369 coreconfigitem(
369 coreconfigitem(
370 b'commands',
370 b'commands',
371 b'status.relative',
371 b'status.relative',
372 default=False,
372 default=False,
373 )
373 )
374 coreconfigitem(
374 coreconfigitem(
375 b'commands',
375 b'commands',
376 b'status.skipstates',
376 b'status.skipstates',
377 default=[],
377 default=[],
378 experimental=True,
378 experimental=True,
379 )
379 )
380 coreconfigitem(
380 coreconfigitem(
381 b'commands',
381 b'commands',
382 b'status.terse',
382 b'status.terse',
383 default=b'',
383 default=b'',
384 )
384 )
385 coreconfigitem(
385 coreconfigitem(
386 b'commands',
386 b'commands',
387 b'status.verbose',
387 b'status.verbose',
388 default=False,
388 default=False,
389 )
389 )
390 coreconfigitem(
390 coreconfigitem(
391 b'commands',
391 b'commands',
392 b'update.check',
392 b'update.check',
393 default=None,
393 default=None,
394 )
394 )
395 coreconfigitem(
395 coreconfigitem(
396 b'commands',
396 b'commands',
397 b'update.requiredest',
397 b'update.requiredest',
398 default=False,
398 default=False,
399 )
399 )
400 coreconfigitem(
400 coreconfigitem(
401 b'committemplate',
401 b'committemplate',
402 b'.*',
402 b'.*',
403 default=None,
403 default=None,
404 generic=True,
404 generic=True,
405 )
405 )
406 coreconfigitem(
406 coreconfigitem(
407 b'convert',
407 b'convert',
408 b'bzr.saverev',
408 b'bzr.saverev',
409 default=True,
409 default=True,
410 )
410 )
411 coreconfigitem(
411 coreconfigitem(
412 b'convert',
412 b'convert',
413 b'cvsps.cache',
413 b'cvsps.cache',
414 default=True,
414 default=True,
415 )
415 )
416 coreconfigitem(
416 coreconfigitem(
417 b'convert',
417 b'convert',
418 b'cvsps.fuzz',
418 b'cvsps.fuzz',
419 default=60,
419 default=60,
420 )
420 )
421 coreconfigitem(
421 coreconfigitem(
422 b'convert',
422 b'convert',
423 b'cvsps.logencoding',
423 b'cvsps.logencoding',
424 default=None,
424 default=None,
425 )
425 )
426 coreconfigitem(
426 coreconfigitem(
427 b'convert',
427 b'convert',
428 b'cvsps.mergefrom',
428 b'cvsps.mergefrom',
429 default=None,
429 default=None,
430 )
430 )
431 coreconfigitem(
431 coreconfigitem(
432 b'convert',
432 b'convert',
433 b'cvsps.mergeto',
433 b'cvsps.mergeto',
434 default=None,
434 default=None,
435 )
435 )
436 coreconfigitem(
436 coreconfigitem(
437 b'convert',
437 b'convert',
438 b'git.committeractions',
438 b'git.committeractions',
439 default=lambda: [b'messagedifferent'],
439 default=lambda: [b'messagedifferent'],
440 )
440 )
441 coreconfigitem(
441 coreconfigitem(
442 b'convert',
442 b'convert',
443 b'git.extrakeys',
443 b'git.extrakeys',
444 default=list,
444 default=list,
445 )
445 )
446 coreconfigitem(
446 coreconfigitem(
447 b'convert',
447 b'convert',
448 b'git.findcopiesharder',
448 b'git.findcopiesharder',
449 default=False,
449 default=False,
450 )
450 )
451 coreconfigitem(
451 coreconfigitem(
452 b'convert',
452 b'convert',
453 b'git.remoteprefix',
453 b'git.remoteprefix',
454 default=b'remote',
454 default=b'remote',
455 )
455 )
456 coreconfigitem(
456 coreconfigitem(
457 b'convert',
457 b'convert',
458 b'git.renamelimit',
458 b'git.renamelimit',
459 default=400,
459 default=400,
460 )
460 )
461 coreconfigitem(
461 coreconfigitem(
462 b'convert',
462 b'convert',
463 b'git.saverev',
463 b'git.saverev',
464 default=True,
464 default=True,
465 )
465 )
466 coreconfigitem(
466 coreconfigitem(
467 b'convert',
467 b'convert',
468 b'git.similarity',
468 b'git.similarity',
469 default=50,
469 default=50,
470 )
470 )
471 coreconfigitem(
471 coreconfigitem(
472 b'convert',
472 b'convert',
473 b'git.skipsubmodules',
473 b'git.skipsubmodules',
474 default=False,
474 default=False,
475 )
475 )
476 coreconfigitem(
476 coreconfigitem(
477 b'convert',
477 b'convert',
478 b'hg.clonebranches',
478 b'hg.clonebranches',
479 default=False,
479 default=False,
480 )
480 )
481 coreconfigitem(
481 coreconfigitem(
482 b'convert',
482 b'convert',
483 b'hg.ignoreerrors',
483 b'hg.ignoreerrors',
484 default=False,
484 default=False,
485 )
485 )
486 coreconfigitem(
486 coreconfigitem(
487 b'convert',
487 b'convert',
488 b'hg.preserve-hash',
488 b'hg.preserve-hash',
489 default=False,
489 default=False,
490 )
490 )
491 coreconfigitem(
491 coreconfigitem(
492 b'convert',
492 b'convert',
493 b'hg.revs',
493 b'hg.revs',
494 default=None,
494 default=None,
495 )
495 )
496 coreconfigitem(
496 coreconfigitem(
497 b'convert',
497 b'convert',
498 b'hg.saverev',
498 b'hg.saverev',
499 default=False,
499 default=False,
500 )
500 )
501 coreconfigitem(
501 coreconfigitem(
502 b'convert',
502 b'convert',
503 b'hg.sourcename',
503 b'hg.sourcename',
504 default=None,
504 default=None,
505 )
505 )
506 coreconfigitem(
506 coreconfigitem(
507 b'convert',
507 b'convert',
508 b'hg.startrev',
508 b'hg.startrev',
509 default=None,
509 default=None,
510 )
510 )
511 coreconfigitem(
511 coreconfigitem(
512 b'convert',
512 b'convert',
513 b'hg.tagsbranch',
513 b'hg.tagsbranch',
514 default=b'default',
514 default=b'default',
515 )
515 )
516 coreconfigitem(
516 coreconfigitem(
517 b'convert',
517 b'convert',
518 b'hg.usebranchnames',
518 b'hg.usebranchnames',
519 default=True,
519 default=True,
520 )
520 )
521 coreconfigitem(
521 coreconfigitem(
522 b'convert',
522 b'convert',
523 b'ignoreancestorcheck',
523 b'ignoreancestorcheck',
524 default=False,
524 default=False,
525 experimental=True,
525 experimental=True,
526 )
526 )
527 coreconfigitem(
527 coreconfigitem(
528 b'convert',
528 b'convert',
529 b'localtimezone',
529 b'localtimezone',
530 default=False,
530 default=False,
531 )
531 )
532 coreconfigitem(
532 coreconfigitem(
533 b'convert',
533 b'convert',
534 b'p4.encoding',
534 b'p4.encoding',
535 default=dynamicdefault,
535 default=dynamicdefault,
536 )
536 )
537 coreconfigitem(
537 coreconfigitem(
538 b'convert',
538 b'convert',
539 b'p4.startrev',
539 b'p4.startrev',
540 default=0,
540 default=0,
541 )
541 )
542 coreconfigitem(
542 coreconfigitem(
543 b'convert',
543 b'convert',
544 b'skiptags',
544 b'skiptags',
545 default=False,
545 default=False,
546 )
546 )
547 coreconfigitem(
547 coreconfigitem(
548 b'convert',
548 b'convert',
549 b'svn.debugsvnlog',
549 b'svn.debugsvnlog',
550 default=True,
550 default=True,
551 )
551 )
552 coreconfigitem(
552 coreconfigitem(
553 b'convert',
553 b'convert',
554 b'svn.trunk',
554 b'svn.trunk',
555 default=None,
555 default=None,
556 )
556 )
557 coreconfigitem(
557 coreconfigitem(
558 b'convert',
558 b'convert',
559 b'svn.tags',
559 b'svn.tags',
560 default=None,
560 default=None,
561 )
561 )
562 coreconfigitem(
562 coreconfigitem(
563 b'convert',
563 b'convert',
564 b'svn.branches',
564 b'svn.branches',
565 default=None,
565 default=None,
566 )
566 )
567 coreconfigitem(
567 coreconfigitem(
568 b'convert',
568 b'convert',
569 b'svn.startrev',
569 b'svn.startrev',
570 default=0,
570 default=0,
571 )
571 )
572 coreconfigitem(
572 coreconfigitem(
573 b'convert',
573 b'convert',
574 b'svn.dangerous-set-commit-dates',
574 b'svn.dangerous-set-commit-dates',
575 default=False,
575 default=False,
576 )
576 )
577 coreconfigitem(
577 coreconfigitem(
578 b'debug',
578 b'debug',
579 b'dirstate.delaywrite',
579 b'dirstate.delaywrite',
580 default=0,
580 default=0,
581 )
581 )
582 coreconfigitem(
582 coreconfigitem(
583 b'defaults',
583 b'defaults',
584 b'.*',
584 b'.*',
585 default=None,
585 default=None,
586 generic=True,
586 generic=True,
587 )
587 )
588 coreconfigitem(
588 coreconfigitem(
589 b'devel',
589 b'devel',
590 b'all-warnings',
590 b'all-warnings',
591 default=False,
591 default=False,
592 )
592 )
593 coreconfigitem(
593 coreconfigitem(
594 b'devel',
594 b'devel',
595 b'bundle2.debug',
595 b'bundle2.debug',
596 default=False,
596 default=False,
597 )
597 )
598 coreconfigitem(
598 coreconfigitem(
599 b'devel',
599 b'devel',
600 b'bundle.delta',
600 b'bundle.delta',
601 default=b'',
601 default=b'',
602 )
602 )
603 coreconfigitem(
603 coreconfigitem(
604 b'devel',
604 b'devel',
605 b'cache-vfs',
605 b'cache-vfs',
606 default=None,
606 default=None,
607 )
607 )
608 coreconfigitem(
608 coreconfigitem(
609 b'devel',
609 b'devel',
610 b'check-locks',
610 b'check-locks',
611 default=False,
611 default=False,
612 )
612 )
613 coreconfigitem(
613 coreconfigitem(
614 b'devel',
614 b'devel',
615 b'check-relroot',
615 b'check-relroot',
616 default=False,
616 default=False,
617 )
617 )
618 # Track copy information for all file, not just "added" one (very slow)
618 # Track copy information for all file, not just "added" one (very slow)
619 coreconfigitem(
619 coreconfigitem(
620 b'devel',
620 b'devel',
621 b'copy-tracing.trace-all-files',
621 b'copy-tracing.trace-all-files',
622 default=False,
622 default=False,
623 )
623 )
624 coreconfigitem(
624 coreconfigitem(
625 b'devel',
625 b'devel',
626 b'default-date',
626 b'default-date',
627 default=None,
627 default=None,
628 )
628 )
629 coreconfigitem(
629 coreconfigitem(
630 b'devel',
630 b'devel',
631 b'deprec-warn',
631 b'deprec-warn',
632 default=False,
632 default=False,
633 )
633 )
634 coreconfigitem(
634 coreconfigitem(
635 b'devel',
635 b'devel',
636 b'disableloaddefaultcerts',
636 b'disableloaddefaultcerts',
637 default=False,
637 default=False,
638 )
638 )
639 coreconfigitem(
639 coreconfigitem(
640 b'devel',
640 b'devel',
641 b'warn-empty-changegroup',
641 b'warn-empty-changegroup',
642 default=False,
642 default=False,
643 )
643 )
644 coreconfigitem(
644 coreconfigitem(
645 b'devel',
645 b'devel',
646 b'legacy.exchange',
646 b'legacy.exchange',
647 default=list,
647 default=list,
648 )
648 )
649 # When True, revlogs use a special reference version of the nodemap, that is not
649 # When True, revlogs use a special reference version of the nodemap, that is not
650 # performant but is "known" to behave properly.
650 # performant but is "known" to behave properly.
651 coreconfigitem(
651 coreconfigitem(
652 b'devel',
652 b'devel',
653 b'persistent-nodemap',
653 b'persistent-nodemap',
654 default=False,
654 default=False,
655 )
655 )
656 coreconfigitem(
656 coreconfigitem(
657 b'devel',
657 b'devel',
658 b'servercafile',
658 b'servercafile',
659 default=b'',
659 default=b'',
660 )
660 )
661 coreconfigitem(
661 coreconfigitem(
662 b'devel',
662 b'devel',
663 b'serverexactprotocol',
663 b'serverexactprotocol',
664 default=b'',
664 default=b'',
665 )
665 )
666 coreconfigitem(
666 coreconfigitem(
667 b'devel',
667 b'devel',
668 b'serverrequirecert',
668 b'serverrequirecert',
669 default=False,
669 default=False,
670 )
670 )
671 coreconfigitem(
671 coreconfigitem(
672 b'devel',
672 b'devel',
673 b'strip-obsmarkers',
673 b'strip-obsmarkers',
674 default=True,
674 default=True,
675 )
675 )
676 coreconfigitem(
676 coreconfigitem(
677 b'devel',
677 b'devel',
678 b'warn-config',
678 b'warn-config',
679 default=None,
679 default=None,
680 )
680 )
681 coreconfigitem(
681 coreconfigitem(
682 b'devel',
682 b'devel',
683 b'warn-config-default',
683 b'warn-config-default',
684 default=None,
684 default=None,
685 )
685 )
686 coreconfigitem(
686 coreconfigitem(
687 b'devel',
687 b'devel',
688 b'user.obsmarker',
688 b'user.obsmarker',
689 default=None,
689 default=None,
690 )
690 )
691 coreconfigitem(
691 coreconfigitem(
692 b'devel',
692 b'devel',
693 b'warn-config-unknown',
693 b'warn-config-unknown',
694 default=None,
694 default=None,
695 )
695 )
696 coreconfigitem(
696 coreconfigitem(
697 b'devel',
697 b'devel',
698 b'debug.copies',
698 b'debug.copies',
699 default=False,
699 default=False,
700 )
700 )
701 coreconfigitem(
701 coreconfigitem(
702 b'devel',
702 b'devel',
703 b'debug.extensions',
703 b'debug.extensions',
704 default=False,
704 default=False,
705 )
705 )
706 coreconfigitem(
706 coreconfigitem(
707 b'devel',
707 b'devel',
708 b'debug.repo-filters',
708 b'debug.repo-filters',
709 default=False,
709 default=False,
710 )
710 )
711 coreconfigitem(
711 coreconfigitem(
712 b'devel',
712 b'devel',
713 b'debug.peer-request',
713 b'debug.peer-request',
714 default=False,
714 default=False,
715 )
715 )
716 # If discovery.exchange-heads is False, the discovery will not start with
716 # If discovery.exchange-heads is False, the discovery will not start with
717 # remote head fetching and local head querying.
717 # remote head fetching and local head querying.
718 coreconfigitem(
718 coreconfigitem(
719 b'devel',
719 b'devel',
720 b'discovery.exchange-heads',
720 b'discovery.exchange-heads',
721 default=True,
721 default=True,
722 )
722 )
723 # If discovery.grow-sample is False, the sample size used in set discovery will
723 # If discovery.grow-sample is False, the sample size used in set discovery will
724 # not be increased through the process
724 # not be increased through the process
725 coreconfigitem(
725 coreconfigitem(
726 b'devel',
726 b'devel',
727 b'discovery.grow-sample',
727 b'discovery.grow-sample',
728 default=True,
728 default=True,
729 )
729 )
730 # discovery.grow-sample.rate control the rate at which the sample grow
730 # discovery.grow-sample.rate control the rate at which the sample grow
731 coreconfigitem(
731 coreconfigitem(
732 b'devel',
732 b'devel',
733 b'discovery.grow-sample.rate',
733 b'discovery.grow-sample.rate',
734 default=1.05,
734 default=1.05,
735 )
735 )
736 # If discovery.randomize is False, random sampling during discovery are
736 # If discovery.randomize is False, random sampling during discovery are
737 # deterministic. It is meant for integration tests.
737 # deterministic. It is meant for integration tests.
738 coreconfigitem(
738 coreconfigitem(
739 b'devel',
739 b'devel',
740 b'discovery.randomize',
740 b'discovery.randomize',
741 default=True,
741 default=True,
742 )
742 )
743 # Control the initial size of the discovery sample
743 # Control the initial size of the discovery sample
744 coreconfigitem(
744 coreconfigitem(
745 b'devel',
745 b'devel',
746 b'discovery.sample-size',
746 b'discovery.sample-size',
747 default=200,
747 default=200,
748 )
748 )
749 # Control the initial size of the discovery for initial change
749 # Control the initial size of the discovery for initial change
750 coreconfigitem(
750 coreconfigitem(
751 b'devel',
751 b'devel',
752 b'discovery.sample-size.initial',
752 b'discovery.sample-size.initial',
753 default=100,
753 default=100,
754 )
754 )
755 _registerdiffopts(section=b'diff')
755 _registerdiffopts(section=b'diff')
756 coreconfigitem(
756 coreconfigitem(
757 b'email',
757 b'email',
758 b'bcc',
758 b'bcc',
759 default=None,
759 default=None,
760 )
760 )
761 coreconfigitem(
761 coreconfigitem(
762 b'email',
762 b'email',
763 b'cc',
763 b'cc',
764 default=None,
764 default=None,
765 )
765 )
766 coreconfigitem(
766 coreconfigitem(
767 b'email',
767 b'email',
768 b'charsets',
768 b'charsets',
769 default=list,
769 default=list,
770 )
770 )
771 coreconfigitem(
771 coreconfigitem(
772 b'email',
772 b'email',
773 b'from',
773 b'from',
774 default=None,
774 default=None,
775 )
775 )
776 coreconfigitem(
776 coreconfigitem(
777 b'email',
777 b'email',
778 b'method',
778 b'method',
779 default=b'smtp',
779 default=b'smtp',
780 )
780 )
781 coreconfigitem(
781 coreconfigitem(
782 b'email',
782 b'email',
783 b'reply-to',
783 b'reply-to',
784 default=None,
784 default=None,
785 )
785 )
786 coreconfigitem(
786 coreconfigitem(
787 b'email',
787 b'email',
788 b'to',
788 b'to',
789 default=None,
789 default=None,
790 )
790 )
791 coreconfigitem(
791 coreconfigitem(
792 b'experimental',
792 b'experimental',
793 b'archivemetatemplate',
793 b'archivemetatemplate',
794 default=dynamicdefault,
794 default=dynamicdefault,
795 )
795 )
796 coreconfigitem(
796 coreconfigitem(
797 b'experimental',
797 b'experimental',
798 b'auto-publish',
798 b'auto-publish',
799 default=b'publish',
799 default=b'publish',
800 )
800 )
801 coreconfigitem(
801 coreconfigitem(
802 b'experimental',
802 b'experimental',
803 b'bundle-phases',
803 b'bundle-phases',
804 default=False,
804 default=False,
805 )
805 )
806 coreconfigitem(
806 coreconfigitem(
807 b'experimental',
807 b'experimental',
808 b'bundle2-advertise',
808 b'bundle2-advertise',
809 default=True,
809 default=True,
810 )
810 )
811 coreconfigitem(
811 coreconfigitem(
812 b'experimental',
812 b'experimental',
813 b'bundle2-output-capture',
813 b'bundle2-output-capture',
814 default=False,
814 default=False,
815 )
815 )
816 coreconfigitem(
816 coreconfigitem(
817 b'experimental',
817 b'experimental',
818 b'bundle2.pushback',
818 b'bundle2.pushback',
819 default=False,
819 default=False,
820 )
820 )
821 coreconfigitem(
821 coreconfigitem(
822 b'experimental',
822 b'experimental',
823 b'bundle2lazylocking',
823 b'bundle2lazylocking',
824 default=False,
824 default=False,
825 )
825 )
826 coreconfigitem(
826 coreconfigitem(
827 b'experimental',
827 b'experimental',
828 b'bundlecomplevel',
828 b'bundlecomplevel',
829 default=None,
829 default=None,
830 )
830 )
831 coreconfigitem(
831 coreconfigitem(
832 b'experimental',
832 b'experimental',
833 b'bundlecomplevel.bzip2',
833 b'bundlecomplevel.bzip2',
834 default=None,
834 default=None,
835 )
835 )
836 coreconfigitem(
836 coreconfigitem(
837 b'experimental',
837 b'experimental',
838 b'bundlecomplevel.gzip',
838 b'bundlecomplevel.gzip',
839 default=None,
839 default=None,
840 )
840 )
841 coreconfigitem(
841 coreconfigitem(
842 b'experimental',
842 b'experimental',
843 b'bundlecomplevel.none',
843 b'bundlecomplevel.none',
844 default=None,
844 default=None,
845 )
845 )
846 coreconfigitem(
846 coreconfigitem(
847 b'experimental',
847 b'experimental',
848 b'bundlecomplevel.zstd',
848 b'bundlecomplevel.zstd',
849 default=None,
849 default=None,
850 )
850 )
851 coreconfigitem(
851 coreconfigitem(
852 b'experimental',
852 b'experimental',
853 b'changegroup3',
853 b'changegroup3',
854 default=False,
854 default=False,
855 )
855 )
856 coreconfigitem(
856 coreconfigitem(
857 b'experimental',
857 b'experimental',
858 b'cleanup-as-archived',
858 b'cleanup-as-archived',
859 default=False,
859 default=False,
860 )
860 )
861 coreconfigitem(
861 coreconfigitem(
862 b'experimental',
862 b'experimental',
863 b'clientcompressionengines',
863 b'clientcompressionengines',
864 default=list,
864 default=list,
865 )
865 )
866 coreconfigitem(
866 coreconfigitem(
867 b'experimental',
867 b'experimental',
868 b'copytrace',
868 b'copytrace',
869 default=b'on',
869 default=b'on',
870 )
870 )
871 coreconfigitem(
871 coreconfigitem(
872 b'experimental',
872 b'experimental',
873 b'copytrace.movecandidateslimit',
873 b'copytrace.movecandidateslimit',
874 default=100,
874 default=100,
875 )
875 )
876 coreconfigitem(
876 coreconfigitem(
877 b'experimental',
877 b'experimental',
878 b'copytrace.sourcecommitlimit',
878 b'copytrace.sourcecommitlimit',
879 default=100,
879 default=100,
880 )
880 )
881 coreconfigitem(
881 coreconfigitem(
882 b'experimental',
882 b'experimental',
883 b'copies.read-from',
883 b'copies.read-from',
884 default=b"filelog-only",
884 default=b"filelog-only",
885 )
885 )
886 coreconfigitem(
886 coreconfigitem(
887 b'experimental',
887 b'experimental',
888 b'copies.write-to',
888 b'copies.write-to',
889 default=b'filelog-only',
889 default=b'filelog-only',
890 )
890 )
891 coreconfigitem(
891 coreconfigitem(
892 b'experimental',
892 b'experimental',
893 b'crecordtest',
893 b'crecordtest',
894 default=None,
894 default=None,
895 )
895 )
896 coreconfigitem(
896 coreconfigitem(
897 b'experimental',
897 b'experimental',
898 b'directaccess',
898 b'directaccess',
899 default=False,
899 default=False,
900 )
900 )
901 coreconfigitem(
901 coreconfigitem(
902 b'experimental',
902 b'experimental',
903 b'directaccess.revnums',
903 b'directaccess.revnums',
904 default=False,
904 default=False,
905 )
905 )
906 coreconfigitem(
906 coreconfigitem(
907 b'experimental',
907 b'experimental',
908 b'editortmpinhg',
908 b'editortmpinhg',
909 default=False,
909 default=False,
910 )
910 )
911 coreconfigitem(
911 coreconfigitem(
912 b'experimental',
912 b'experimental',
913 b'evolution',
913 b'evolution',
914 default=list,
914 default=list,
915 )
915 )
916 coreconfigitem(
916 coreconfigitem(
917 b'experimental',
917 b'experimental',
918 b'evolution.allowdivergence',
918 b'evolution.allowdivergence',
919 default=False,
919 default=False,
920 alias=[(b'experimental', b'allowdivergence')],
920 alias=[(b'experimental', b'allowdivergence')],
921 )
921 )
922 coreconfigitem(
922 coreconfigitem(
923 b'experimental',
923 b'experimental',
924 b'evolution.allowunstable',
924 b'evolution.allowunstable',
925 default=None,
925 default=None,
926 )
926 )
927 coreconfigitem(
927 coreconfigitem(
928 b'experimental',
928 b'experimental',
929 b'evolution.createmarkers',
929 b'evolution.createmarkers',
930 default=None,
930 default=None,
931 )
931 )
932 coreconfigitem(
932 coreconfigitem(
933 b'experimental',
933 b'experimental',
934 b'evolution.effect-flags',
934 b'evolution.effect-flags',
935 default=True,
935 default=True,
936 alias=[(b'experimental', b'effect-flags')],
936 alias=[(b'experimental', b'effect-flags')],
937 )
937 )
938 coreconfigitem(
938 coreconfigitem(
939 b'experimental',
939 b'experimental',
940 b'evolution.exchange',
940 b'evolution.exchange',
941 default=None,
941 default=None,
942 )
942 )
943 coreconfigitem(
943 coreconfigitem(
944 b'experimental',
944 b'experimental',
945 b'evolution.bundle-obsmarker',
945 b'evolution.bundle-obsmarker',
946 default=False,
946 default=False,
947 )
947 )
948 coreconfigitem(
948 coreconfigitem(
949 b'experimental',
949 b'experimental',
950 b'evolution.bundle-obsmarker:mandatory',
950 b'evolution.bundle-obsmarker:mandatory',
951 default=True,
951 default=True,
952 )
952 )
953 coreconfigitem(
953 coreconfigitem(
954 b'experimental',
954 b'experimental',
955 b'log.topo',
955 b'log.topo',
956 default=False,
956 default=False,
957 )
957 )
958 coreconfigitem(
958 coreconfigitem(
959 b'experimental',
959 b'experimental',
960 b'evolution.report-instabilities',
960 b'evolution.report-instabilities',
961 default=True,
961 default=True,
962 )
962 )
963 coreconfigitem(
963 coreconfigitem(
964 b'experimental',
964 b'experimental',
965 b'evolution.track-operation',
965 b'evolution.track-operation',
966 default=True,
966 default=True,
967 )
967 )
968 # repo-level config to exclude a revset visibility
968 # repo-level config to exclude a revset visibility
969 #
969 #
970 # The target use case is to use `share` to expose different subset of the same
970 # The target use case is to use `share` to expose different subset of the same
971 # repository, especially server side. See also `server.view`.
971 # repository, especially server side. See also `server.view`.
972 coreconfigitem(
972 coreconfigitem(
973 b'experimental',
973 b'experimental',
974 b'extra-filter-revs',
974 b'extra-filter-revs',
975 default=None,
975 default=None,
976 )
976 )
977 coreconfigitem(
977 coreconfigitem(
978 b'experimental',
978 b'experimental',
979 b'maxdeltachainspan',
979 b'maxdeltachainspan',
980 default=-1,
980 default=-1,
981 )
981 )
982 # tracks files which were undeleted (merge might delete them but we explicitly
982 # tracks files which were undeleted (merge might delete them but we explicitly
983 # kept/undeleted them) and creates new filenodes for them
983 # kept/undeleted them) and creates new filenodes for them
984 coreconfigitem(
984 coreconfigitem(
985 b'experimental',
985 b'experimental',
986 b'merge-track-salvaged',
986 b'merge-track-salvaged',
987 default=False,
987 default=False,
988 )
988 )
989 coreconfigitem(
989 coreconfigitem(
990 b'experimental',
990 b'experimental',
991 b'mergetempdirprefix',
991 b'mergetempdirprefix',
992 default=None,
992 default=None,
993 )
993 )
994 coreconfigitem(
994 coreconfigitem(
995 b'experimental',
995 b'experimental',
996 b'mmapindexthreshold',
996 b'mmapindexthreshold',
997 default=None,
997 default=None,
998 )
998 )
999 coreconfigitem(
999 coreconfigitem(
1000 b'experimental',
1000 b'experimental',
1001 b'narrow',
1001 b'narrow',
1002 default=False,
1002 default=False,
1003 )
1003 )
1004 coreconfigitem(
1004 coreconfigitem(
1005 b'experimental',
1005 b'experimental',
1006 b'nonnormalparanoidcheck',
1006 b'nonnormalparanoidcheck',
1007 default=False,
1007 default=False,
1008 )
1008 )
1009 coreconfigitem(
1009 coreconfigitem(
1010 b'experimental',
1010 b'experimental',
1011 b'exportableenviron',
1011 b'exportableenviron',
1012 default=list,
1012 default=list,
1013 )
1013 )
1014 coreconfigitem(
1014 coreconfigitem(
1015 b'experimental',
1015 b'experimental',
1016 b'extendedheader.index',
1016 b'extendedheader.index',
1017 default=None,
1017 default=None,
1018 )
1018 )
1019 coreconfigitem(
1019 coreconfigitem(
1020 b'experimental',
1020 b'experimental',
1021 b'extendedheader.similarity',
1021 b'extendedheader.similarity',
1022 default=False,
1022 default=False,
1023 )
1023 )
1024 coreconfigitem(
1024 coreconfigitem(
1025 b'experimental',
1025 b'experimental',
1026 b'graphshorten',
1026 b'graphshorten',
1027 default=False,
1027 default=False,
1028 )
1028 )
1029 coreconfigitem(
1029 coreconfigitem(
1030 b'experimental',
1030 b'experimental',
1031 b'graphstyle.parent',
1031 b'graphstyle.parent',
1032 default=dynamicdefault,
1032 default=dynamicdefault,
1033 )
1033 )
1034 coreconfigitem(
1034 coreconfigitem(
1035 b'experimental',
1035 b'experimental',
1036 b'graphstyle.missing',
1036 b'graphstyle.missing',
1037 default=dynamicdefault,
1037 default=dynamicdefault,
1038 )
1038 )
1039 coreconfigitem(
1039 coreconfigitem(
1040 b'experimental',
1040 b'experimental',
1041 b'graphstyle.grandparent',
1041 b'graphstyle.grandparent',
1042 default=dynamicdefault,
1042 default=dynamicdefault,
1043 )
1043 )
1044 coreconfigitem(
1044 coreconfigitem(
1045 b'experimental',
1045 b'experimental',
1046 b'hook-track-tags',
1046 b'hook-track-tags',
1047 default=False,
1047 default=False,
1048 )
1048 )
1049 coreconfigitem(
1049 coreconfigitem(
1050 b'experimental',
1050 b'experimental',
1051 b'httppeer.advertise-v2',
1051 b'httppeer.advertise-v2',
1052 default=False,
1052 default=False,
1053 )
1053 )
1054 coreconfigitem(
1054 coreconfigitem(
1055 b'experimental',
1055 b'experimental',
1056 b'httppeer.v2-encoder-order',
1056 b'httppeer.v2-encoder-order',
1057 default=None,
1057 default=None,
1058 )
1058 )
1059 coreconfigitem(
1059 coreconfigitem(
1060 b'experimental',
1060 b'experimental',
1061 b'httppostargs',
1061 b'httppostargs',
1062 default=False,
1062 default=False,
1063 )
1063 )
1064 coreconfigitem(b'experimental', b'nointerrupt', default=False)
1064 coreconfigitem(b'experimental', b'nointerrupt', default=False)
1065 coreconfigitem(b'experimental', b'nointerrupt-interactiveonly', default=True)
1065 coreconfigitem(b'experimental', b'nointerrupt-interactiveonly', default=True)
1066
1066
1067 coreconfigitem(
1067 coreconfigitem(
1068 b'experimental',
1068 b'experimental',
1069 b'obsmarkers-exchange-debug',
1069 b'obsmarkers-exchange-debug',
1070 default=False,
1070 default=False,
1071 )
1071 )
1072 coreconfigitem(
1072 coreconfigitem(
1073 b'experimental',
1073 b'experimental',
1074 b'remotenames',
1074 b'remotenames',
1075 default=False,
1075 default=False,
1076 )
1076 )
1077 coreconfigitem(
1077 coreconfigitem(
1078 b'experimental',
1078 b'experimental',
1079 b'removeemptydirs',
1079 b'removeemptydirs',
1080 default=True,
1080 default=True,
1081 )
1081 )
1082 coreconfigitem(
1082 coreconfigitem(
1083 b'experimental',
1083 b'experimental',
1084 b'revert.interactive.select-to-keep',
1084 b'revert.interactive.select-to-keep',
1085 default=False,
1085 default=False,
1086 )
1086 )
1087 coreconfigitem(
1087 coreconfigitem(
1088 b'experimental',
1088 b'experimental',
1089 b'revisions.prefixhexnode',
1089 b'revisions.prefixhexnode',
1090 default=False,
1090 default=False,
1091 )
1091 )
1092 coreconfigitem(
1092 coreconfigitem(
1093 b'experimental',
1093 b'experimental',
1094 b'revlogv2',
1094 b'revlogv2',
1095 default=None,
1095 default=None,
1096 )
1096 )
1097 coreconfigitem(
1097 coreconfigitem(
1098 b'experimental',
1098 b'experimental',
1099 b'revisions.disambiguatewithin',
1099 b'revisions.disambiguatewithin',
1100 default=None,
1100 default=None,
1101 )
1101 )
1102 coreconfigitem(
1102 coreconfigitem(
1103 b'experimental',
1103 b'experimental',
1104 b'rust.index',
1104 b'rust.index',
1105 default=False,
1105 default=False,
1106 )
1106 )
1107 coreconfigitem(
1107 coreconfigitem(
1108 b'experimental',
1108 b'experimental',
1109 b'server.filesdata.recommended-batch-size',
1109 b'server.filesdata.recommended-batch-size',
1110 default=50000,
1110 default=50000,
1111 )
1111 )
1112 coreconfigitem(
1112 coreconfigitem(
1113 b'experimental',
1113 b'experimental',
1114 b'server.manifestdata.recommended-batch-size',
1114 b'server.manifestdata.recommended-batch-size',
1115 default=100000,
1115 default=100000,
1116 )
1116 )
1117 coreconfigitem(
1117 coreconfigitem(
1118 b'experimental',
1118 b'experimental',
1119 b'server.stream-narrow-clones',
1119 b'server.stream-narrow-clones',
1120 default=False,
1120 default=False,
1121 )
1121 )
1122 coreconfigitem(
1122 coreconfigitem(
1123 b'experimental',
1123 b'experimental',
1124 b'single-head-per-branch',
1124 b'single-head-per-branch',
1125 default=False,
1125 default=False,
1126 )
1126 )
1127 coreconfigitem(
1127 coreconfigitem(
1128 b'experimental',
1128 b'experimental',
1129 b'single-head-per-branch:account-closed-heads',
1129 b'single-head-per-branch:account-closed-heads',
1130 default=False,
1130 default=False,
1131 )
1131 )
1132 coreconfigitem(
1132 coreconfigitem(
1133 b'experimental',
1133 b'experimental',
1134 b'single-head-per-branch:public-changes-only',
1134 b'single-head-per-branch:public-changes-only',
1135 default=False,
1135 default=False,
1136 )
1136 )
1137 coreconfigitem(
1137 coreconfigitem(
1138 b'experimental',
1138 b'experimental',
1139 b'sshserver.support-v2',
1139 b'sshserver.support-v2',
1140 default=False,
1140 default=False,
1141 )
1141 )
1142 coreconfigitem(
1142 coreconfigitem(
1143 b'experimental',
1143 b'experimental',
1144 b'sparse-read',
1144 b'sparse-read',
1145 default=False,
1145 default=False,
1146 )
1146 )
1147 coreconfigitem(
1147 coreconfigitem(
1148 b'experimental',
1148 b'experimental',
1149 b'sparse-read.density-threshold',
1149 b'sparse-read.density-threshold',
1150 default=0.50,
1150 default=0.50,
1151 )
1151 )
1152 coreconfigitem(
1152 coreconfigitem(
1153 b'experimental',
1153 b'experimental',
1154 b'sparse-read.min-gap-size',
1154 b'sparse-read.min-gap-size',
1155 default=b'65K',
1155 default=b'65K',
1156 )
1156 )
1157 coreconfigitem(
1157 coreconfigitem(
1158 b'experimental',
1158 b'experimental',
1159 b'treemanifest',
1159 b'treemanifest',
1160 default=False,
1160 default=False,
1161 )
1161 )
1162 coreconfigitem(
1162 coreconfigitem(
1163 b'experimental',
1163 b'experimental',
1164 b'update.atomic-file',
1164 b'update.atomic-file',
1165 default=False,
1165 default=False,
1166 )
1166 )
1167 coreconfigitem(
1167 coreconfigitem(
1168 b'experimental',
1168 b'experimental',
1169 b'sshpeer.advertise-v2',
1169 b'sshpeer.advertise-v2',
1170 default=False,
1170 default=False,
1171 )
1171 )
1172 coreconfigitem(
1172 coreconfigitem(
1173 b'experimental',
1173 b'experimental',
1174 b'web.apiserver',
1174 b'web.apiserver',
1175 default=False,
1175 default=False,
1176 )
1176 )
1177 coreconfigitem(
1177 coreconfigitem(
1178 b'experimental',
1178 b'experimental',
1179 b'web.api.http-v2',
1179 b'web.api.http-v2',
1180 default=False,
1180 default=False,
1181 )
1181 )
1182 coreconfigitem(
1182 coreconfigitem(
1183 b'experimental',
1183 b'experimental',
1184 b'web.api.debugreflect',
1184 b'web.api.debugreflect',
1185 default=False,
1185 default=False,
1186 )
1186 )
1187 coreconfigitem(
1187 coreconfigitem(
1188 b'experimental',
1188 b'experimental',
1189 b'worker.wdir-get-thread-safe',
1189 b'worker.wdir-get-thread-safe',
1190 default=False,
1190 default=False,
1191 )
1191 )
1192 coreconfigitem(
1192 coreconfigitem(
1193 b'experimental',
1193 b'experimental',
1194 b'worker.repository-upgrade',
1194 b'worker.repository-upgrade',
1195 default=False,
1195 default=False,
1196 )
1196 )
1197 coreconfigitem(
1197 coreconfigitem(
1198 b'experimental',
1198 b'experimental',
1199 b'xdiff',
1199 b'xdiff',
1200 default=False,
1200 default=False,
1201 )
1201 )
1202 coreconfigitem(
1202 coreconfigitem(
1203 b'extensions',
1203 b'extensions',
1204 b'.*',
1204 b'.*',
1205 default=None,
1205 default=None,
1206 generic=True,
1206 generic=True,
1207 )
1207 )
1208 coreconfigitem(
1208 coreconfigitem(
1209 b'extdata',
1209 b'extdata',
1210 b'.*',
1210 b'.*',
1211 default=None,
1211 default=None,
1212 generic=True,
1212 generic=True,
1213 )
1213 )
1214 coreconfigitem(
1214 coreconfigitem(
1215 b'format',
1215 b'format',
1216 b'bookmarks-in-store',
1216 b'bookmarks-in-store',
1217 default=False,
1217 default=False,
1218 )
1218 )
1219 coreconfigitem(
1219 coreconfigitem(
1220 b'format',
1220 b'format',
1221 b'chunkcachesize',
1221 b'chunkcachesize',
1222 default=None,
1222 default=None,
1223 experimental=True,
1223 experimental=True,
1224 )
1224 )
1225 coreconfigitem(
1225 coreconfigitem(
1226 b'format',
1226 b'format',
1227 b'dotencode',
1227 b'dotencode',
1228 default=True,
1228 default=True,
1229 )
1229 )
1230 coreconfigitem(
1230 coreconfigitem(
1231 b'format',
1231 b'format',
1232 b'generaldelta',
1232 b'generaldelta',
1233 default=False,
1233 default=False,
1234 experimental=True,
1234 experimental=True,
1235 )
1235 )
1236 coreconfigitem(
1236 coreconfigitem(
1237 b'format',
1237 b'format',
1238 b'manifestcachesize',
1238 b'manifestcachesize',
1239 default=None,
1239 default=None,
1240 experimental=True,
1240 experimental=True,
1241 )
1241 )
1242 coreconfigitem(
1242 coreconfigitem(
1243 b'format',
1243 b'format',
1244 b'maxchainlen',
1244 b'maxchainlen',
1245 default=dynamicdefault,
1245 default=dynamicdefault,
1246 experimental=True,
1246 experimental=True,
1247 )
1247 )
1248 coreconfigitem(
1248 coreconfigitem(
1249 b'format',
1249 b'format',
1250 b'obsstore-version',
1250 b'obsstore-version',
1251 default=None,
1251 default=None,
1252 )
1252 )
1253 coreconfigitem(
1253 coreconfigitem(
1254 b'format',
1254 b'format',
1255 b'sparse-revlog',
1255 b'sparse-revlog',
1256 default=True,
1256 default=True,
1257 )
1257 )
1258 coreconfigitem(
1258 coreconfigitem(
1259 b'format',
1259 b'format',
1260 b'revlog-compression',
1260 b'revlog-compression',
1261 default=lambda: [b'zlib'],
1261 default=lambda: [b'zlib'],
1262 alias=[(b'experimental', b'format.compression')],
1262 alias=[(b'experimental', b'format.compression')],
1263 )
1263 )
1264 coreconfigitem(
1264 coreconfigitem(
1265 b'format',
1265 b'format',
1266 b'usefncache',
1266 b'usefncache',
1267 default=True,
1267 default=True,
1268 )
1268 )
1269 coreconfigitem(
1269 coreconfigitem(
1270 b'format',
1270 b'format',
1271 b'usegeneraldelta',
1271 b'usegeneraldelta',
1272 default=True,
1272 default=True,
1273 )
1273 )
1274 coreconfigitem(
1274 coreconfigitem(
1275 b'format',
1275 b'format',
1276 b'usestore',
1276 b'usestore',
1277 default=True,
1277 default=True,
1278 )
1278 )
1279 coreconfigitem(
1279 coreconfigitem(
1280 b'format',
1280 b'format',
1281 b'use-persistent-nodemap',
1281 b'use-persistent-nodemap',
1282 default=False,
1282 default=False,
1283 )
1283 )
1284 coreconfigitem(
1284 coreconfigitem(
1285 b'format',
1285 b'format',
1286 b'exp-use-copies-side-data-changeset',
1286 b'exp-use-copies-side-data-changeset',
1287 default=False,
1287 default=False,
1288 experimental=True,
1288 experimental=True,
1289 )
1289 )
1290 coreconfigitem(
1290 coreconfigitem(
1291 b'format',
1291 b'format',
1292 b'exp-use-side-data',
1292 b'exp-use-side-data',
1293 default=False,
1293 default=False,
1294 experimental=True,
1294 experimental=True,
1295 )
1295 )
1296 coreconfigitem(
1296 coreconfigitem(
1297 b'format',
1297 b'format',
1298 b'use-share-safe',
1298 b'use-share-safe',
1299 default=False,
1299 default=False,
1300 )
1300 )
1301 coreconfigitem(
1301 coreconfigitem(
1302 b'format',
1302 b'format',
1303 b'internal-phase',
1303 b'internal-phase',
1304 default=False,
1304 default=False,
1305 experimental=True,
1305 experimental=True,
1306 )
1306 )
1307 coreconfigitem(
1307 coreconfigitem(
1308 b'fsmonitor',
1308 b'fsmonitor',
1309 b'warn_when_unused',
1309 b'warn_when_unused',
1310 default=True,
1310 default=True,
1311 )
1311 )
1312 coreconfigitem(
1312 coreconfigitem(
1313 b'fsmonitor',
1313 b'fsmonitor',
1314 b'warn_update_file_count',
1314 b'warn_update_file_count',
1315 default=50000,
1315 default=50000,
1316 )
1316 )
1317 coreconfigitem(
1317 coreconfigitem(
1318 b'fsmonitor',
1318 b'fsmonitor',
1319 b'warn_update_file_count_rust',
1319 b'warn_update_file_count_rust',
1320 default=400000,
1320 default=400000,
1321 )
1321 )
1322 coreconfigitem(
1322 coreconfigitem(
1323 b'help',
1323 b'help',
1324 br'hidden-command\..*',
1324 br'hidden-command\..*',
1325 default=False,
1325 default=False,
1326 generic=True,
1326 generic=True,
1327 )
1327 )
1328 coreconfigitem(
1328 coreconfigitem(
1329 b'help',
1329 b'help',
1330 br'hidden-topic\..*',
1330 br'hidden-topic\..*',
1331 default=False,
1331 default=False,
1332 generic=True,
1332 generic=True,
1333 )
1333 )
1334 coreconfigitem(
1334 coreconfigitem(
1335 b'hooks',
1335 b'hooks',
1336 b'[^:]*',
1336 b'[^:]*',
1337 default=dynamicdefault,
1337 default=dynamicdefault,
1338 generic=True,
1338 generic=True,
1339 )
1339 )
1340 coreconfigitem(
1340 coreconfigitem(
1341 b'hooks',
1342 b'.*:run-with-plain',
1343 default=True,
1344 generic=True,
1345 )
1346 coreconfigitem(
1341 b'hgweb-paths',
1347 b'hgweb-paths',
1342 b'.*',
1348 b'.*',
1343 default=list,
1349 default=list,
1344 generic=True,
1350 generic=True,
1345 )
1351 )
1346 coreconfigitem(
1352 coreconfigitem(
1347 b'hostfingerprints',
1353 b'hostfingerprints',
1348 b'.*',
1354 b'.*',
1349 default=list,
1355 default=list,
1350 generic=True,
1356 generic=True,
1351 )
1357 )
1352 coreconfigitem(
1358 coreconfigitem(
1353 b'hostsecurity',
1359 b'hostsecurity',
1354 b'ciphers',
1360 b'ciphers',
1355 default=None,
1361 default=None,
1356 )
1362 )
1357 coreconfigitem(
1363 coreconfigitem(
1358 b'hostsecurity',
1364 b'hostsecurity',
1359 b'minimumprotocol',
1365 b'minimumprotocol',
1360 default=dynamicdefault,
1366 default=dynamicdefault,
1361 )
1367 )
1362 coreconfigitem(
1368 coreconfigitem(
1363 b'hostsecurity',
1369 b'hostsecurity',
1364 b'.*:minimumprotocol$',
1370 b'.*:minimumprotocol$',
1365 default=dynamicdefault,
1371 default=dynamicdefault,
1366 generic=True,
1372 generic=True,
1367 )
1373 )
1368 coreconfigitem(
1374 coreconfigitem(
1369 b'hostsecurity',
1375 b'hostsecurity',
1370 b'.*:ciphers$',
1376 b'.*:ciphers$',
1371 default=dynamicdefault,
1377 default=dynamicdefault,
1372 generic=True,
1378 generic=True,
1373 )
1379 )
1374 coreconfigitem(
1380 coreconfigitem(
1375 b'hostsecurity',
1381 b'hostsecurity',
1376 b'.*:fingerprints$',
1382 b'.*:fingerprints$',
1377 default=list,
1383 default=list,
1378 generic=True,
1384 generic=True,
1379 )
1385 )
1380 coreconfigitem(
1386 coreconfigitem(
1381 b'hostsecurity',
1387 b'hostsecurity',
1382 b'.*:verifycertsfile$',
1388 b'.*:verifycertsfile$',
1383 default=None,
1389 default=None,
1384 generic=True,
1390 generic=True,
1385 )
1391 )
1386
1392
1387 coreconfigitem(
1393 coreconfigitem(
1388 b'http_proxy',
1394 b'http_proxy',
1389 b'always',
1395 b'always',
1390 default=False,
1396 default=False,
1391 )
1397 )
1392 coreconfigitem(
1398 coreconfigitem(
1393 b'http_proxy',
1399 b'http_proxy',
1394 b'host',
1400 b'host',
1395 default=None,
1401 default=None,
1396 )
1402 )
1397 coreconfigitem(
1403 coreconfigitem(
1398 b'http_proxy',
1404 b'http_proxy',
1399 b'no',
1405 b'no',
1400 default=list,
1406 default=list,
1401 )
1407 )
1402 coreconfigitem(
1408 coreconfigitem(
1403 b'http_proxy',
1409 b'http_proxy',
1404 b'passwd',
1410 b'passwd',
1405 default=None,
1411 default=None,
1406 )
1412 )
1407 coreconfigitem(
1413 coreconfigitem(
1408 b'http_proxy',
1414 b'http_proxy',
1409 b'user',
1415 b'user',
1410 default=None,
1416 default=None,
1411 )
1417 )
1412
1418
1413 coreconfigitem(
1419 coreconfigitem(
1414 b'http',
1420 b'http',
1415 b'timeout',
1421 b'timeout',
1416 default=None,
1422 default=None,
1417 )
1423 )
1418
1424
1419 coreconfigitem(
1425 coreconfigitem(
1420 b'logtoprocess',
1426 b'logtoprocess',
1421 b'commandexception',
1427 b'commandexception',
1422 default=None,
1428 default=None,
1423 )
1429 )
1424 coreconfigitem(
1430 coreconfigitem(
1425 b'logtoprocess',
1431 b'logtoprocess',
1426 b'commandfinish',
1432 b'commandfinish',
1427 default=None,
1433 default=None,
1428 )
1434 )
1429 coreconfigitem(
1435 coreconfigitem(
1430 b'logtoprocess',
1436 b'logtoprocess',
1431 b'command',
1437 b'command',
1432 default=None,
1438 default=None,
1433 )
1439 )
1434 coreconfigitem(
1440 coreconfigitem(
1435 b'logtoprocess',
1441 b'logtoprocess',
1436 b'develwarn',
1442 b'develwarn',
1437 default=None,
1443 default=None,
1438 )
1444 )
1439 coreconfigitem(
1445 coreconfigitem(
1440 b'logtoprocess',
1446 b'logtoprocess',
1441 b'uiblocked',
1447 b'uiblocked',
1442 default=None,
1448 default=None,
1443 )
1449 )
1444 coreconfigitem(
1450 coreconfigitem(
1445 b'merge',
1451 b'merge',
1446 b'checkunknown',
1452 b'checkunknown',
1447 default=b'abort',
1453 default=b'abort',
1448 )
1454 )
1449 coreconfigitem(
1455 coreconfigitem(
1450 b'merge',
1456 b'merge',
1451 b'checkignored',
1457 b'checkignored',
1452 default=b'abort',
1458 default=b'abort',
1453 )
1459 )
1454 coreconfigitem(
1460 coreconfigitem(
1455 b'experimental',
1461 b'experimental',
1456 b'merge.checkpathconflicts',
1462 b'merge.checkpathconflicts',
1457 default=False,
1463 default=False,
1458 )
1464 )
1459 coreconfigitem(
1465 coreconfigitem(
1460 b'merge',
1466 b'merge',
1461 b'followcopies',
1467 b'followcopies',
1462 default=True,
1468 default=True,
1463 )
1469 )
1464 coreconfigitem(
1470 coreconfigitem(
1465 b'merge',
1471 b'merge',
1466 b'on-failure',
1472 b'on-failure',
1467 default=b'continue',
1473 default=b'continue',
1468 )
1474 )
1469 coreconfigitem(
1475 coreconfigitem(
1470 b'merge',
1476 b'merge',
1471 b'preferancestor',
1477 b'preferancestor',
1472 default=lambda: [b'*'],
1478 default=lambda: [b'*'],
1473 experimental=True,
1479 experimental=True,
1474 )
1480 )
1475 coreconfigitem(
1481 coreconfigitem(
1476 b'merge',
1482 b'merge',
1477 b'strict-capability-check',
1483 b'strict-capability-check',
1478 default=False,
1484 default=False,
1479 )
1485 )
1480 coreconfigitem(
1486 coreconfigitem(
1481 b'merge-tools',
1487 b'merge-tools',
1482 b'.*',
1488 b'.*',
1483 default=None,
1489 default=None,
1484 generic=True,
1490 generic=True,
1485 )
1491 )
1486 coreconfigitem(
1492 coreconfigitem(
1487 b'merge-tools',
1493 b'merge-tools',
1488 br'.*\.args$',
1494 br'.*\.args$',
1489 default=b"$local $base $other",
1495 default=b"$local $base $other",
1490 generic=True,
1496 generic=True,
1491 priority=-1,
1497 priority=-1,
1492 )
1498 )
1493 coreconfigitem(
1499 coreconfigitem(
1494 b'merge-tools',
1500 b'merge-tools',
1495 br'.*\.binary$',
1501 br'.*\.binary$',
1496 default=False,
1502 default=False,
1497 generic=True,
1503 generic=True,
1498 priority=-1,
1504 priority=-1,
1499 )
1505 )
1500 coreconfigitem(
1506 coreconfigitem(
1501 b'merge-tools',
1507 b'merge-tools',
1502 br'.*\.check$',
1508 br'.*\.check$',
1503 default=list,
1509 default=list,
1504 generic=True,
1510 generic=True,
1505 priority=-1,
1511 priority=-1,
1506 )
1512 )
1507 coreconfigitem(
1513 coreconfigitem(
1508 b'merge-tools',
1514 b'merge-tools',
1509 br'.*\.checkchanged$',
1515 br'.*\.checkchanged$',
1510 default=False,
1516 default=False,
1511 generic=True,
1517 generic=True,
1512 priority=-1,
1518 priority=-1,
1513 )
1519 )
1514 coreconfigitem(
1520 coreconfigitem(
1515 b'merge-tools',
1521 b'merge-tools',
1516 br'.*\.executable$',
1522 br'.*\.executable$',
1517 default=dynamicdefault,
1523 default=dynamicdefault,
1518 generic=True,
1524 generic=True,
1519 priority=-1,
1525 priority=-1,
1520 )
1526 )
1521 coreconfigitem(
1527 coreconfigitem(
1522 b'merge-tools',
1528 b'merge-tools',
1523 br'.*\.fixeol$',
1529 br'.*\.fixeol$',
1524 default=False,
1530 default=False,
1525 generic=True,
1531 generic=True,
1526 priority=-1,
1532 priority=-1,
1527 )
1533 )
1528 coreconfigitem(
1534 coreconfigitem(
1529 b'merge-tools',
1535 b'merge-tools',
1530 br'.*\.gui$',
1536 br'.*\.gui$',
1531 default=False,
1537 default=False,
1532 generic=True,
1538 generic=True,
1533 priority=-1,
1539 priority=-1,
1534 )
1540 )
1535 coreconfigitem(
1541 coreconfigitem(
1536 b'merge-tools',
1542 b'merge-tools',
1537 br'.*\.mergemarkers$',
1543 br'.*\.mergemarkers$',
1538 default=b'basic',
1544 default=b'basic',
1539 generic=True,
1545 generic=True,
1540 priority=-1,
1546 priority=-1,
1541 )
1547 )
1542 coreconfigitem(
1548 coreconfigitem(
1543 b'merge-tools',
1549 b'merge-tools',
1544 br'.*\.mergemarkertemplate$',
1550 br'.*\.mergemarkertemplate$',
1545 default=dynamicdefault, # take from command-templates.mergemarker
1551 default=dynamicdefault, # take from command-templates.mergemarker
1546 generic=True,
1552 generic=True,
1547 priority=-1,
1553 priority=-1,
1548 )
1554 )
1549 coreconfigitem(
1555 coreconfigitem(
1550 b'merge-tools',
1556 b'merge-tools',
1551 br'.*\.priority$',
1557 br'.*\.priority$',
1552 default=0,
1558 default=0,
1553 generic=True,
1559 generic=True,
1554 priority=-1,
1560 priority=-1,
1555 )
1561 )
1556 coreconfigitem(
1562 coreconfigitem(
1557 b'merge-tools',
1563 b'merge-tools',
1558 br'.*\.premerge$',
1564 br'.*\.premerge$',
1559 default=dynamicdefault,
1565 default=dynamicdefault,
1560 generic=True,
1566 generic=True,
1561 priority=-1,
1567 priority=-1,
1562 )
1568 )
1563 coreconfigitem(
1569 coreconfigitem(
1564 b'merge-tools',
1570 b'merge-tools',
1565 br'.*\.symlink$',
1571 br'.*\.symlink$',
1566 default=False,
1572 default=False,
1567 generic=True,
1573 generic=True,
1568 priority=-1,
1574 priority=-1,
1569 )
1575 )
1570 coreconfigitem(
1576 coreconfigitem(
1571 b'pager',
1577 b'pager',
1572 b'attend-.*',
1578 b'attend-.*',
1573 default=dynamicdefault,
1579 default=dynamicdefault,
1574 generic=True,
1580 generic=True,
1575 )
1581 )
1576 coreconfigitem(
1582 coreconfigitem(
1577 b'pager',
1583 b'pager',
1578 b'ignore',
1584 b'ignore',
1579 default=list,
1585 default=list,
1580 )
1586 )
1581 coreconfigitem(
1587 coreconfigitem(
1582 b'pager',
1588 b'pager',
1583 b'pager',
1589 b'pager',
1584 default=dynamicdefault,
1590 default=dynamicdefault,
1585 )
1591 )
1586 coreconfigitem(
1592 coreconfigitem(
1587 b'patch',
1593 b'patch',
1588 b'eol',
1594 b'eol',
1589 default=b'strict',
1595 default=b'strict',
1590 )
1596 )
1591 coreconfigitem(
1597 coreconfigitem(
1592 b'patch',
1598 b'patch',
1593 b'fuzz',
1599 b'fuzz',
1594 default=2,
1600 default=2,
1595 )
1601 )
1596 coreconfigitem(
1602 coreconfigitem(
1597 b'paths',
1603 b'paths',
1598 b'default',
1604 b'default',
1599 default=None,
1605 default=None,
1600 )
1606 )
1601 coreconfigitem(
1607 coreconfigitem(
1602 b'paths',
1608 b'paths',
1603 b'default-push',
1609 b'default-push',
1604 default=None,
1610 default=None,
1605 )
1611 )
1606 coreconfigitem(
1612 coreconfigitem(
1607 b'paths',
1613 b'paths',
1608 b'.*',
1614 b'.*',
1609 default=None,
1615 default=None,
1610 generic=True,
1616 generic=True,
1611 )
1617 )
1612 coreconfigitem(
1618 coreconfigitem(
1613 b'phases',
1619 b'phases',
1614 b'checksubrepos',
1620 b'checksubrepos',
1615 default=b'follow',
1621 default=b'follow',
1616 )
1622 )
1617 coreconfigitem(
1623 coreconfigitem(
1618 b'phases',
1624 b'phases',
1619 b'new-commit',
1625 b'new-commit',
1620 default=b'draft',
1626 default=b'draft',
1621 )
1627 )
1622 coreconfigitem(
1628 coreconfigitem(
1623 b'phases',
1629 b'phases',
1624 b'publish',
1630 b'publish',
1625 default=True,
1631 default=True,
1626 )
1632 )
1627 coreconfigitem(
1633 coreconfigitem(
1628 b'profiling',
1634 b'profiling',
1629 b'enabled',
1635 b'enabled',
1630 default=False,
1636 default=False,
1631 )
1637 )
1632 coreconfigitem(
1638 coreconfigitem(
1633 b'profiling',
1639 b'profiling',
1634 b'format',
1640 b'format',
1635 default=b'text',
1641 default=b'text',
1636 )
1642 )
1637 coreconfigitem(
1643 coreconfigitem(
1638 b'profiling',
1644 b'profiling',
1639 b'freq',
1645 b'freq',
1640 default=1000,
1646 default=1000,
1641 )
1647 )
1642 coreconfigitem(
1648 coreconfigitem(
1643 b'profiling',
1649 b'profiling',
1644 b'limit',
1650 b'limit',
1645 default=30,
1651 default=30,
1646 )
1652 )
1647 coreconfigitem(
1653 coreconfigitem(
1648 b'profiling',
1654 b'profiling',
1649 b'nested',
1655 b'nested',
1650 default=0,
1656 default=0,
1651 )
1657 )
1652 coreconfigitem(
1658 coreconfigitem(
1653 b'profiling',
1659 b'profiling',
1654 b'output',
1660 b'output',
1655 default=None,
1661 default=None,
1656 )
1662 )
1657 coreconfigitem(
1663 coreconfigitem(
1658 b'profiling',
1664 b'profiling',
1659 b'showmax',
1665 b'showmax',
1660 default=0.999,
1666 default=0.999,
1661 )
1667 )
1662 coreconfigitem(
1668 coreconfigitem(
1663 b'profiling',
1669 b'profiling',
1664 b'showmin',
1670 b'showmin',
1665 default=dynamicdefault,
1671 default=dynamicdefault,
1666 )
1672 )
1667 coreconfigitem(
1673 coreconfigitem(
1668 b'profiling',
1674 b'profiling',
1669 b'showtime',
1675 b'showtime',
1670 default=True,
1676 default=True,
1671 )
1677 )
1672 coreconfigitem(
1678 coreconfigitem(
1673 b'profiling',
1679 b'profiling',
1674 b'sort',
1680 b'sort',
1675 default=b'inlinetime',
1681 default=b'inlinetime',
1676 )
1682 )
1677 coreconfigitem(
1683 coreconfigitem(
1678 b'profiling',
1684 b'profiling',
1679 b'statformat',
1685 b'statformat',
1680 default=b'hotpath',
1686 default=b'hotpath',
1681 )
1687 )
1682 coreconfigitem(
1688 coreconfigitem(
1683 b'profiling',
1689 b'profiling',
1684 b'time-track',
1690 b'time-track',
1685 default=dynamicdefault,
1691 default=dynamicdefault,
1686 )
1692 )
1687 coreconfigitem(
1693 coreconfigitem(
1688 b'profiling',
1694 b'profiling',
1689 b'type',
1695 b'type',
1690 default=b'stat',
1696 default=b'stat',
1691 )
1697 )
1692 coreconfigitem(
1698 coreconfigitem(
1693 b'progress',
1699 b'progress',
1694 b'assume-tty',
1700 b'assume-tty',
1695 default=False,
1701 default=False,
1696 )
1702 )
1697 coreconfigitem(
1703 coreconfigitem(
1698 b'progress',
1704 b'progress',
1699 b'changedelay',
1705 b'changedelay',
1700 default=1,
1706 default=1,
1701 )
1707 )
1702 coreconfigitem(
1708 coreconfigitem(
1703 b'progress',
1709 b'progress',
1704 b'clear-complete',
1710 b'clear-complete',
1705 default=True,
1711 default=True,
1706 )
1712 )
1707 coreconfigitem(
1713 coreconfigitem(
1708 b'progress',
1714 b'progress',
1709 b'debug',
1715 b'debug',
1710 default=False,
1716 default=False,
1711 )
1717 )
1712 coreconfigitem(
1718 coreconfigitem(
1713 b'progress',
1719 b'progress',
1714 b'delay',
1720 b'delay',
1715 default=3,
1721 default=3,
1716 )
1722 )
1717 coreconfigitem(
1723 coreconfigitem(
1718 b'progress',
1724 b'progress',
1719 b'disable',
1725 b'disable',
1720 default=False,
1726 default=False,
1721 )
1727 )
1722 coreconfigitem(
1728 coreconfigitem(
1723 b'progress',
1729 b'progress',
1724 b'estimateinterval',
1730 b'estimateinterval',
1725 default=60.0,
1731 default=60.0,
1726 )
1732 )
1727 coreconfigitem(
1733 coreconfigitem(
1728 b'progress',
1734 b'progress',
1729 b'format',
1735 b'format',
1730 default=lambda: [b'topic', b'bar', b'number', b'estimate'],
1736 default=lambda: [b'topic', b'bar', b'number', b'estimate'],
1731 )
1737 )
1732 coreconfigitem(
1738 coreconfigitem(
1733 b'progress',
1739 b'progress',
1734 b'refresh',
1740 b'refresh',
1735 default=0.1,
1741 default=0.1,
1736 )
1742 )
1737 coreconfigitem(
1743 coreconfigitem(
1738 b'progress',
1744 b'progress',
1739 b'width',
1745 b'width',
1740 default=dynamicdefault,
1746 default=dynamicdefault,
1741 )
1747 )
1742 coreconfigitem(
1748 coreconfigitem(
1743 b'pull',
1749 b'pull',
1744 b'confirm',
1750 b'confirm',
1745 default=False,
1751 default=False,
1746 )
1752 )
1747 coreconfigitem(
1753 coreconfigitem(
1748 b'push',
1754 b'push',
1749 b'pushvars.server',
1755 b'pushvars.server',
1750 default=False,
1756 default=False,
1751 )
1757 )
1752 coreconfigitem(
1758 coreconfigitem(
1753 b'rewrite',
1759 b'rewrite',
1754 b'backup-bundle',
1760 b'backup-bundle',
1755 default=True,
1761 default=True,
1756 alias=[(b'ui', b'history-editing-backup')],
1762 alias=[(b'ui', b'history-editing-backup')],
1757 )
1763 )
1758 coreconfigitem(
1764 coreconfigitem(
1759 b'rewrite',
1765 b'rewrite',
1760 b'update-timestamp',
1766 b'update-timestamp',
1761 default=False,
1767 default=False,
1762 )
1768 )
1763 coreconfigitem(
1769 coreconfigitem(
1764 b'rewrite',
1770 b'rewrite',
1765 b'empty-successor',
1771 b'empty-successor',
1766 default=b'skip',
1772 default=b'skip',
1767 experimental=True,
1773 experimental=True,
1768 )
1774 )
1769 coreconfigitem(
1775 coreconfigitem(
1770 b'storage',
1776 b'storage',
1771 b'new-repo-backend',
1777 b'new-repo-backend',
1772 default=b'revlogv1',
1778 default=b'revlogv1',
1773 experimental=True,
1779 experimental=True,
1774 )
1780 )
1775 coreconfigitem(
1781 coreconfigitem(
1776 b'storage',
1782 b'storage',
1777 b'revlog.optimize-delta-parent-choice',
1783 b'revlog.optimize-delta-parent-choice',
1778 default=True,
1784 default=True,
1779 alias=[(b'format', b'aggressivemergedeltas')],
1785 alias=[(b'format', b'aggressivemergedeltas')],
1780 )
1786 )
1781 # experimental as long as rust is experimental (or a C version is implemented)
1787 # experimental as long as rust is experimental (or a C version is implemented)
1782 coreconfigitem(
1788 coreconfigitem(
1783 b'storage',
1789 b'storage',
1784 b'revlog.persistent-nodemap.mmap',
1790 b'revlog.persistent-nodemap.mmap',
1785 default=True,
1791 default=True,
1786 )
1792 )
1787 # experimental as long as format.use-persistent-nodemap is.
1793 # experimental as long as format.use-persistent-nodemap is.
1788 coreconfigitem(
1794 coreconfigitem(
1789 b'storage',
1795 b'storage',
1790 b'revlog.persistent-nodemap.slow-path',
1796 b'revlog.persistent-nodemap.slow-path',
1791 default=b"abort",
1797 default=b"abort",
1792 )
1798 )
1793
1799
1794 coreconfigitem(
1800 coreconfigitem(
1795 b'storage',
1801 b'storage',
1796 b'revlog.reuse-external-delta',
1802 b'revlog.reuse-external-delta',
1797 default=True,
1803 default=True,
1798 )
1804 )
1799 coreconfigitem(
1805 coreconfigitem(
1800 b'storage',
1806 b'storage',
1801 b'revlog.reuse-external-delta-parent',
1807 b'revlog.reuse-external-delta-parent',
1802 default=None,
1808 default=None,
1803 )
1809 )
1804 coreconfigitem(
1810 coreconfigitem(
1805 b'storage',
1811 b'storage',
1806 b'revlog.zlib.level',
1812 b'revlog.zlib.level',
1807 default=None,
1813 default=None,
1808 )
1814 )
1809 coreconfigitem(
1815 coreconfigitem(
1810 b'storage',
1816 b'storage',
1811 b'revlog.zstd.level',
1817 b'revlog.zstd.level',
1812 default=None,
1818 default=None,
1813 )
1819 )
1814 coreconfigitem(
1820 coreconfigitem(
1815 b'server',
1821 b'server',
1816 b'bookmarks-pushkey-compat',
1822 b'bookmarks-pushkey-compat',
1817 default=True,
1823 default=True,
1818 )
1824 )
1819 coreconfigitem(
1825 coreconfigitem(
1820 b'server',
1826 b'server',
1821 b'bundle1',
1827 b'bundle1',
1822 default=True,
1828 default=True,
1823 )
1829 )
1824 coreconfigitem(
1830 coreconfigitem(
1825 b'server',
1831 b'server',
1826 b'bundle1gd',
1832 b'bundle1gd',
1827 default=None,
1833 default=None,
1828 )
1834 )
1829 coreconfigitem(
1835 coreconfigitem(
1830 b'server',
1836 b'server',
1831 b'bundle1.pull',
1837 b'bundle1.pull',
1832 default=None,
1838 default=None,
1833 )
1839 )
1834 coreconfigitem(
1840 coreconfigitem(
1835 b'server',
1841 b'server',
1836 b'bundle1gd.pull',
1842 b'bundle1gd.pull',
1837 default=None,
1843 default=None,
1838 )
1844 )
1839 coreconfigitem(
1845 coreconfigitem(
1840 b'server',
1846 b'server',
1841 b'bundle1.push',
1847 b'bundle1.push',
1842 default=None,
1848 default=None,
1843 )
1849 )
1844 coreconfigitem(
1850 coreconfigitem(
1845 b'server',
1851 b'server',
1846 b'bundle1gd.push',
1852 b'bundle1gd.push',
1847 default=None,
1853 default=None,
1848 )
1854 )
1849 coreconfigitem(
1855 coreconfigitem(
1850 b'server',
1856 b'server',
1851 b'bundle2.stream',
1857 b'bundle2.stream',
1852 default=True,
1858 default=True,
1853 alias=[(b'experimental', b'bundle2.stream')],
1859 alias=[(b'experimental', b'bundle2.stream')],
1854 )
1860 )
1855 coreconfigitem(
1861 coreconfigitem(
1856 b'server',
1862 b'server',
1857 b'compressionengines',
1863 b'compressionengines',
1858 default=list,
1864 default=list,
1859 )
1865 )
1860 coreconfigitem(
1866 coreconfigitem(
1861 b'server',
1867 b'server',
1862 b'concurrent-push-mode',
1868 b'concurrent-push-mode',
1863 default=b'check-related',
1869 default=b'check-related',
1864 )
1870 )
1865 coreconfigitem(
1871 coreconfigitem(
1866 b'server',
1872 b'server',
1867 b'disablefullbundle',
1873 b'disablefullbundle',
1868 default=False,
1874 default=False,
1869 )
1875 )
1870 coreconfigitem(
1876 coreconfigitem(
1871 b'server',
1877 b'server',
1872 b'maxhttpheaderlen',
1878 b'maxhttpheaderlen',
1873 default=1024,
1879 default=1024,
1874 )
1880 )
1875 coreconfigitem(
1881 coreconfigitem(
1876 b'server',
1882 b'server',
1877 b'pullbundle',
1883 b'pullbundle',
1878 default=False,
1884 default=False,
1879 )
1885 )
1880 coreconfigitem(
1886 coreconfigitem(
1881 b'server',
1887 b'server',
1882 b'preferuncompressed',
1888 b'preferuncompressed',
1883 default=False,
1889 default=False,
1884 )
1890 )
1885 coreconfigitem(
1891 coreconfigitem(
1886 b'server',
1892 b'server',
1887 b'streamunbundle',
1893 b'streamunbundle',
1888 default=False,
1894 default=False,
1889 )
1895 )
1890 coreconfigitem(
1896 coreconfigitem(
1891 b'server',
1897 b'server',
1892 b'uncompressed',
1898 b'uncompressed',
1893 default=True,
1899 default=True,
1894 )
1900 )
1895 coreconfigitem(
1901 coreconfigitem(
1896 b'server',
1902 b'server',
1897 b'uncompressedallowsecret',
1903 b'uncompressedallowsecret',
1898 default=False,
1904 default=False,
1899 )
1905 )
1900 coreconfigitem(
1906 coreconfigitem(
1901 b'server',
1907 b'server',
1902 b'view',
1908 b'view',
1903 default=b'served',
1909 default=b'served',
1904 )
1910 )
1905 coreconfigitem(
1911 coreconfigitem(
1906 b'server',
1912 b'server',
1907 b'validate',
1913 b'validate',
1908 default=False,
1914 default=False,
1909 )
1915 )
1910 coreconfigitem(
1916 coreconfigitem(
1911 b'server',
1917 b'server',
1912 b'zliblevel',
1918 b'zliblevel',
1913 default=-1,
1919 default=-1,
1914 )
1920 )
1915 coreconfigitem(
1921 coreconfigitem(
1916 b'server',
1922 b'server',
1917 b'zstdlevel',
1923 b'zstdlevel',
1918 default=3,
1924 default=3,
1919 )
1925 )
1920 coreconfigitem(
1926 coreconfigitem(
1921 b'share',
1927 b'share',
1922 b'pool',
1928 b'pool',
1923 default=None,
1929 default=None,
1924 )
1930 )
1925 coreconfigitem(
1931 coreconfigitem(
1926 b'share',
1932 b'share',
1927 b'poolnaming',
1933 b'poolnaming',
1928 default=b'identity',
1934 default=b'identity',
1929 )
1935 )
1930 coreconfigitem(
1936 coreconfigitem(
1931 b'share',
1937 b'share',
1932 b'safe-mismatch.source-not-safe',
1938 b'safe-mismatch.source-not-safe',
1933 default=b'abort',
1939 default=b'abort',
1934 )
1940 )
1935 coreconfigitem(
1941 coreconfigitem(
1936 b'share',
1942 b'share',
1937 b'safe-mismatch.source-safe',
1943 b'safe-mismatch.source-safe',
1938 default=b'abort',
1944 default=b'abort',
1939 )
1945 )
1940 coreconfigitem(
1946 coreconfigitem(
1941 b'share',
1947 b'share',
1942 b'safe-mismatch.source-not-safe.warn',
1948 b'safe-mismatch.source-not-safe.warn',
1943 default=True,
1949 default=True,
1944 )
1950 )
1945 coreconfigitem(
1951 coreconfigitem(
1946 b'share',
1952 b'share',
1947 b'safe-mismatch.source-safe.warn',
1953 b'safe-mismatch.source-safe.warn',
1948 default=True,
1954 default=True,
1949 )
1955 )
1950 coreconfigitem(
1956 coreconfigitem(
1951 b'shelve',
1957 b'shelve',
1952 b'maxbackups',
1958 b'maxbackups',
1953 default=10,
1959 default=10,
1954 )
1960 )
1955 coreconfigitem(
1961 coreconfigitem(
1956 b'smtp',
1962 b'smtp',
1957 b'host',
1963 b'host',
1958 default=None,
1964 default=None,
1959 )
1965 )
1960 coreconfigitem(
1966 coreconfigitem(
1961 b'smtp',
1967 b'smtp',
1962 b'local_hostname',
1968 b'local_hostname',
1963 default=None,
1969 default=None,
1964 )
1970 )
1965 coreconfigitem(
1971 coreconfigitem(
1966 b'smtp',
1972 b'smtp',
1967 b'password',
1973 b'password',
1968 default=None,
1974 default=None,
1969 )
1975 )
1970 coreconfigitem(
1976 coreconfigitem(
1971 b'smtp',
1977 b'smtp',
1972 b'port',
1978 b'port',
1973 default=dynamicdefault,
1979 default=dynamicdefault,
1974 )
1980 )
1975 coreconfigitem(
1981 coreconfigitem(
1976 b'smtp',
1982 b'smtp',
1977 b'tls',
1983 b'tls',
1978 default=b'none',
1984 default=b'none',
1979 )
1985 )
1980 coreconfigitem(
1986 coreconfigitem(
1981 b'smtp',
1987 b'smtp',
1982 b'username',
1988 b'username',
1983 default=None,
1989 default=None,
1984 )
1990 )
1985 coreconfigitem(
1991 coreconfigitem(
1986 b'sparse',
1992 b'sparse',
1987 b'missingwarning',
1993 b'missingwarning',
1988 default=True,
1994 default=True,
1989 experimental=True,
1995 experimental=True,
1990 )
1996 )
1991 coreconfigitem(
1997 coreconfigitem(
1992 b'subrepos',
1998 b'subrepos',
1993 b'allowed',
1999 b'allowed',
1994 default=dynamicdefault, # to make backporting simpler
2000 default=dynamicdefault, # to make backporting simpler
1995 )
2001 )
1996 coreconfigitem(
2002 coreconfigitem(
1997 b'subrepos',
2003 b'subrepos',
1998 b'hg:allowed',
2004 b'hg:allowed',
1999 default=dynamicdefault,
2005 default=dynamicdefault,
2000 )
2006 )
2001 coreconfigitem(
2007 coreconfigitem(
2002 b'subrepos',
2008 b'subrepos',
2003 b'git:allowed',
2009 b'git:allowed',
2004 default=dynamicdefault,
2010 default=dynamicdefault,
2005 )
2011 )
2006 coreconfigitem(
2012 coreconfigitem(
2007 b'subrepos',
2013 b'subrepos',
2008 b'svn:allowed',
2014 b'svn:allowed',
2009 default=dynamicdefault,
2015 default=dynamicdefault,
2010 )
2016 )
2011 coreconfigitem(
2017 coreconfigitem(
2012 b'templates',
2018 b'templates',
2013 b'.*',
2019 b'.*',
2014 default=None,
2020 default=None,
2015 generic=True,
2021 generic=True,
2016 )
2022 )
2017 coreconfigitem(
2023 coreconfigitem(
2018 b'templateconfig',
2024 b'templateconfig',
2019 b'.*',
2025 b'.*',
2020 default=dynamicdefault,
2026 default=dynamicdefault,
2021 generic=True,
2027 generic=True,
2022 )
2028 )
2023 coreconfigitem(
2029 coreconfigitem(
2024 b'trusted',
2030 b'trusted',
2025 b'groups',
2031 b'groups',
2026 default=list,
2032 default=list,
2027 )
2033 )
2028 coreconfigitem(
2034 coreconfigitem(
2029 b'trusted',
2035 b'trusted',
2030 b'users',
2036 b'users',
2031 default=list,
2037 default=list,
2032 )
2038 )
2033 coreconfigitem(
2039 coreconfigitem(
2034 b'ui',
2040 b'ui',
2035 b'_usedassubrepo',
2041 b'_usedassubrepo',
2036 default=False,
2042 default=False,
2037 )
2043 )
2038 coreconfigitem(
2044 coreconfigitem(
2039 b'ui',
2045 b'ui',
2040 b'allowemptycommit',
2046 b'allowemptycommit',
2041 default=False,
2047 default=False,
2042 )
2048 )
2043 coreconfigitem(
2049 coreconfigitem(
2044 b'ui',
2050 b'ui',
2045 b'archivemeta',
2051 b'archivemeta',
2046 default=True,
2052 default=True,
2047 )
2053 )
2048 coreconfigitem(
2054 coreconfigitem(
2049 b'ui',
2055 b'ui',
2050 b'askusername',
2056 b'askusername',
2051 default=False,
2057 default=False,
2052 )
2058 )
2053 coreconfigitem(
2059 coreconfigitem(
2054 b'ui',
2060 b'ui',
2055 b'available-memory',
2061 b'available-memory',
2056 default=None,
2062 default=None,
2057 )
2063 )
2058
2064
2059 coreconfigitem(
2065 coreconfigitem(
2060 b'ui',
2066 b'ui',
2061 b'clonebundlefallback',
2067 b'clonebundlefallback',
2062 default=False,
2068 default=False,
2063 )
2069 )
2064 coreconfigitem(
2070 coreconfigitem(
2065 b'ui',
2071 b'ui',
2066 b'clonebundleprefers',
2072 b'clonebundleprefers',
2067 default=list,
2073 default=list,
2068 )
2074 )
2069 coreconfigitem(
2075 coreconfigitem(
2070 b'ui',
2076 b'ui',
2071 b'clonebundles',
2077 b'clonebundles',
2072 default=True,
2078 default=True,
2073 )
2079 )
2074 coreconfigitem(
2080 coreconfigitem(
2075 b'ui',
2081 b'ui',
2076 b'color',
2082 b'color',
2077 default=b'auto',
2083 default=b'auto',
2078 )
2084 )
2079 coreconfigitem(
2085 coreconfigitem(
2080 b'ui',
2086 b'ui',
2081 b'commitsubrepos',
2087 b'commitsubrepos',
2082 default=False,
2088 default=False,
2083 )
2089 )
2084 coreconfigitem(
2090 coreconfigitem(
2085 b'ui',
2091 b'ui',
2086 b'debug',
2092 b'debug',
2087 default=False,
2093 default=False,
2088 )
2094 )
2089 coreconfigitem(
2095 coreconfigitem(
2090 b'ui',
2096 b'ui',
2091 b'debugger',
2097 b'debugger',
2092 default=None,
2098 default=None,
2093 )
2099 )
2094 coreconfigitem(
2100 coreconfigitem(
2095 b'ui',
2101 b'ui',
2096 b'editor',
2102 b'editor',
2097 default=dynamicdefault,
2103 default=dynamicdefault,
2098 )
2104 )
2099 coreconfigitem(
2105 coreconfigitem(
2100 b'ui',
2106 b'ui',
2101 b'detailed-exit-code',
2107 b'detailed-exit-code',
2102 default=False,
2108 default=False,
2103 experimental=True,
2109 experimental=True,
2104 )
2110 )
2105 coreconfigitem(
2111 coreconfigitem(
2106 b'ui',
2112 b'ui',
2107 b'fallbackencoding',
2113 b'fallbackencoding',
2108 default=None,
2114 default=None,
2109 )
2115 )
2110 coreconfigitem(
2116 coreconfigitem(
2111 b'ui',
2117 b'ui',
2112 b'forcecwd',
2118 b'forcecwd',
2113 default=None,
2119 default=None,
2114 )
2120 )
2115 coreconfigitem(
2121 coreconfigitem(
2116 b'ui',
2122 b'ui',
2117 b'forcemerge',
2123 b'forcemerge',
2118 default=None,
2124 default=None,
2119 )
2125 )
2120 coreconfigitem(
2126 coreconfigitem(
2121 b'ui',
2127 b'ui',
2122 b'formatdebug',
2128 b'formatdebug',
2123 default=False,
2129 default=False,
2124 )
2130 )
2125 coreconfigitem(
2131 coreconfigitem(
2126 b'ui',
2132 b'ui',
2127 b'formatjson',
2133 b'formatjson',
2128 default=False,
2134 default=False,
2129 )
2135 )
2130 coreconfigitem(
2136 coreconfigitem(
2131 b'ui',
2137 b'ui',
2132 b'formatted',
2138 b'formatted',
2133 default=None,
2139 default=None,
2134 )
2140 )
2135 coreconfigitem(
2141 coreconfigitem(
2136 b'ui',
2142 b'ui',
2137 b'interactive',
2143 b'interactive',
2138 default=None,
2144 default=None,
2139 )
2145 )
2140 coreconfigitem(
2146 coreconfigitem(
2141 b'ui',
2147 b'ui',
2142 b'interface',
2148 b'interface',
2143 default=None,
2149 default=None,
2144 )
2150 )
2145 coreconfigitem(
2151 coreconfigitem(
2146 b'ui',
2152 b'ui',
2147 b'interface.chunkselector',
2153 b'interface.chunkselector',
2148 default=None,
2154 default=None,
2149 )
2155 )
2150 coreconfigitem(
2156 coreconfigitem(
2151 b'ui',
2157 b'ui',
2152 b'large-file-limit',
2158 b'large-file-limit',
2153 default=10000000,
2159 default=10000000,
2154 )
2160 )
2155 coreconfigitem(
2161 coreconfigitem(
2156 b'ui',
2162 b'ui',
2157 b'logblockedtimes',
2163 b'logblockedtimes',
2158 default=False,
2164 default=False,
2159 )
2165 )
2160 coreconfigitem(
2166 coreconfigitem(
2161 b'ui',
2167 b'ui',
2162 b'merge',
2168 b'merge',
2163 default=None,
2169 default=None,
2164 )
2170 )
2165 coreconfigitem(
2171 coreconfigitem(
2166 b'ui',
2172 b'ui',
2167 b'mergemarkers',
2173 b'mergemarkers',
2168 default=b'basic',
2174 default=b'basic',
2169 )
2175 )
2170 coreconfigitem(
2176 coreconfigitem(
2171 b'ui',
2177 b'ui',
2172 b'message-output',
2178 b'message-output',
2173 default=b'stdio',
2179 default=b'stdio',
2174 )
2180 )
2175 coreconfigitem(
2181 coreconfigitem(
2176 b'ui',
2182 b'ui',
2177 b'nontty',
2183 b'nontty',
2178 default=False,
2184 default=False,
2179 )
2185 )
2180 coreconfigitem(
2186 coreconfigitem(
2181 b'ui',
2187 b'ui',
2182 b'origbackuppath',
2188 b'origbackuppath',
2183 default=None,
2189 default=None,
2184 )
2190 )
2185 coreconfigitem(
2191 coreconfigitem(
2186 b'ui',
2192 b'ui',
2187 b'paginate',
2193 b'paginate',
2188 default=True,
2194 default=True,
2189 )
2195 )
2190 coreconfigitem(
2196 coreconfigitem(
2191 b'ui',
2197 b'ui',
2192 b'patch',
2198 b'patch',
2193 default=None,
2199 default=None,
2194 )
2200 )
2195 coreconfigitem(
2201 coreconfigitem(
2196 b'ui',
2202 b'ui',
2197 b'portablefilenames',
2203 b'portablefilenames',
2198 default=b'warn',
2204 default=b'warn',
2199 )
2205 )
2200 coreconfigitem(
2206 coreconfigitem(
2201 b'ui',
2207 b'ui',
2202 b'promptecho',
2208 b'promptecho',
2203 default=False,
2209 default=False,
2204 )
2210 )
2205 coreconfigitem(
2211 coreconfigitem(
2206 b'ui',
2212 b'ui',
2207 b'quiet',
2213 b'quiet',
2208 default=False,
2214 default=False,
2209 )
2215 )
2210 coreconfigitem(
2216 coreconfigitem(
2211 b'ui',
2217 b'ui',
2212 b'quietbookmarkmove',
2218 b'quietbookmarkmove',
2213 default=False,
2219 default=False,
2214 )
2220 )
2215 coreconfigitem(
2221 coreconfigitem(
2216 b'ui',
2222 b'ui',
2217 b'relative-paths',
2223 b'relative-paths',
2218 default=b'legacy',
2224 default=b'legacy',
2219 )
2225 )
2220 coreconfigitem(
2226 coreconfigitem(
2221 b'ui',
2227 b'ui',
2222 b'remotecmd',
2228 b'remotecmd',
2223 default=b'hg',
2229 default=b'hg',
2224 )
2230 )
2225 coreconfigitem(
2231 coreconfigitem(
2226 b'ui',
2232 b'ui',
2227 b'report_untrusted',
2233 b'report_untrusted',
2228 default=True,
2234 default=True,
2229 )
2235 )
2230 coreconfigitem(
2236 coreconfigitem(
2231 b'ui',
2237 b'ui',
2232 b'rollback',
2238 b'rollback',
2233 default=True,
2239 default=True,
2234 )
2240 )
2235 coreconfigitem(
2241 coreconfigitem(
2236 b'ui',
2242 b'ui',
2237 b'signal-safe-lock',
2243 b'signal-safe-lock',
2238 default=True,
2244 default=True,
2239 )
2245 )
2240 coreconfigitem(
2246 coreconfigitem(
2241 b'ui',
2247 b'ui',
2242 b'slash',
2248 b'slash',
2243 default=False,
2249 default=False,
2244 )
2250 )
2245 coreconfigitem(
2251 coreconfigitem(
2246 b'ui',
2252 b'ui',
2247 b'ssh',
2253 b'ssh',
2248 default=b'ssh',
2254 default=b'ssh',
2249 )
2255 )
2250 coreconfigitem(
2256 coreconfigitem(
2251 b'ui',
2257 b'ui',
2252 b'ssherrorhint',
2258 b'ssherrorhint',
2253 default=None,
2259 default=None,
2254 )
2260 )
2255 coreconfigitem(
2261 coreconfigitem(
2256 b'ui',
2262 b'ui',
2257 b'statuscopies',
2263 b'statuscopies',
2258 default=False,
2264 default=False,
2259 )
2265 )
2260 coreconfigitem(
2266 coreconfigitem(
2261 b'ui',
2267 b'ui',
2262 b'strict',
2268 b'strict',
2263 default=False,
2269 default=False,
2264 )
2270 )
2265 coreconfigitem(
2271 coreconfigitem(
2266 b'ui',
2272 b'ui',
2267 b'style',
2273 b'style',
2268 default=b'',
2274 default=b'',
2269 )
2275 )
2270 coreconfigitem(
2276 coreconfigitem(
2271 b'ui',
2277 b'ui',
2272 b'supportcontact',
2278 b'supportcontact',
2273 default=None,
2279 default=None,
2274 )
2280 )
2275 coreconfigitem(
2281 coreconfigitem(
2276 b'ui',
2282 b'ui',
2277 b'textwidth',
2283 b'textwidth',
2278 default=78,
2284 default=78,
2279 )
2285 )
2280 coreconfigitem(
2286 coreconfigitem(
2281 b'ui',
2287 b'ui',
2282 b'timeout',
2288 b'timeout',
2283 default=b'600',
2289 default=b'600',
2284 )
2290 )
2285 coreconfigitem(
2291 coreconfigitem(
2286 b'ui',
2292 b'ui',
2287 b'timeout.warn',
2293 b'timeout.warn',
2288 default=0,
2294 default=0,
2289 )
2295 )
2290 coreconfigitem(
2296 coreconfigitem(
2291 b'ui',
2297 b'ui',
2292 b'timestamp-output',
2298 b'timestamp-output',
2293 default=False,
2299 default=False,
2294 )
2300 )
2295 coreconfigitem(
2301 coreconfigitem(
2296 b'ui',
2302 b'ui',
2297 b'traceback',
2303 b'traceback',
2298 default=False,
2304 default=False,
2299 )
2305 )
2300 coreconfigitem(
2306 coreconfigitem(
2301 b'ui',
2307 b'ui',
2302 b'tweakdefaults',
2308 b'tweakdefaults',
2303 default=False,
2309 default=False,
2304 )
2310 )
2305 coreconfigitem(b'ui', b'username', alias=[(b'ui', b'user')])
2311 coreconfigitem(b'ui', b'username', alias=[(b'ui', b'user')])
2306 coreconfigitem(
2312 coreconfigitem(
2307 b'ui',
2313 b'ui',
2308 b'verbose',
2314 b'verbose',
2309 default=False,
2315 default=False,
2310 )
2316 )
2311 coreconfigitem(
2317 coreconfigitem(
2312 b'verify',
2318 b'verify',
2313 b'skipflags',
2319 b'skipflags',
2314 default=None,
2320 default=None,
2315 )
2321 )
2316 coreconfigitem(
2322 coreconfigitem(
2317 b'web',
2323 b'web',
2318 b'allowbz2',
2324 b'allowbz2',
2319 default=False,
2325 default=False,
2320 )
2326 )
2321 coreconfigitem(
2327 coreconfigitem(
2322 b'web',
2328 b'web',
2323 b'allowgz',
2329 b'allowgz',
2324 default=False,
2330 default=False,
2325 )
2331 )
2326 coreconfigitem(
2332 coreconfigitem(
2327 b'web',
2333 b'web',
2328 b'allow-pull',
2334 b'allow-pull',
2329 alias=[(b'web', b'allowpull')],
2335 alias=[(b'web', b'allowpull')],
2330 default=True,
2336 default=True,
2331 )
2337 )
2332 coreconfigitem(
2338 coreconfigitem(
2333 b'web',
2339 b'web',
2334 b'allow-push',
2340 b'allow-push',
2335 alias=[(b'web', b'allow_push')],
2341 alias=[(b'web', b'allow_push')],
2336 default=list,
2342 default=list,
2337 )
2343 )
2338 coreconfigitem(
2344 coreconfigitem(
2339 b'web',
2345 b'web',
2340 b'allowzip',
2346 b'allowzip',
2341 default=False,
2347 default=False,
2342 )
2348 )
2343 coreconfigitem(
2349 coreconfigitem(
2344 b'web',
2350 b'web',
2345 b'archivesubrepos',
2351 b'archivesubrepos',
2346 default=False,
2352 default=False,
2347 )
2353 )
2348 coreconfigitem(
2354 coreconfigitem(
2349 b'web',
2355 b'web',
2350 b'cache',
2356 b'cache',
2351 default=True,
2357 default=True,
2352 )
2358 )
2353 coreconfigitem(
2359 coreconfigitem(
2354 b'web',
2360 b'web',
2355 b'comparisoncontext',
2361 b'comparisoncontext',
2356 default=5,
2362 default=5,
2357 )
2363 )
2358 coreconfigitem(
2364 coreconfigitem(
2359 b'web',
2365 b'web',
2360 b'contact',
2366 b'contact',
2361 default=None,
2367 default=None,
2362 )
2368 )
2363 coreconfigitem(
2369 coreconfigitem(
2364 b'web',
2370 b'web',
2365 b'deny_push',
2371 b'deny_push',
2366 default=list,
2372 default=list,
2367 )
2373 )
2368 coreconfigitem(
2374 coreconfigitem(
2369 b'web',
2375 b'web',
2370 b'guessmime',
2376 b'guessmime',
2371 default=False,
2377 default=False,
2372 )
2378 )
2373 coreconfigitem(
2379 coreconfigitem(
2374 b'web',
2380 b'web',
2375 b'hidden',
2381 b'hidden',
2376 default=False,
2382 default=False,
2377 )
2383 )
2378 coreconfigitem(
2384 coreconfigitem(
2379 b'web',
2385 b'web',
2380 b'labels',
2386 b'labels',
2381 default=list,
2387 default=list,
2382 )
2388 )
2383 coreconfigitem(
2389 coreconfigitem(
2384 b'web',
2390 b'web',
2385 b'logoimg',
2391 b'logoimg',
2386 default=b'hglogo.png',
2392 default=b'hglogo.png',
2387 )
2393 )
2388 coreconfigitem(
2394 coreconfigitem(
2389 b'web',
2395 b'web',
2390 b'logourl',
2396 b'logourl',
2391 default=b'https://mercurial-scm.org/',
2397 default=b'https://mercurial-scm.org/',
2392 )
2398 )
2393 coreconfigitem(
2399 coreconfigitem(
2394 b'web',
2400 b'web',
2395 b'accesslog',
2401 b'accesslog',
2396 default=b'-',
2402 default=b'-',
2397 )
2403 )
2398 coreconfigitem(
2404 coreconfigitem(
2399 b'web',
2405 b'web',
2400 b'address',
2406 b'address',
2401 default=b'',
2407 default=b'',
2402 )
2408 )
2403 coreconfigitem(
2409 coreconfigitem(
2404 b'web',
2410 b'web',
2405 b'allow-archive',
2411 b'allow-archive',
2406 alias=[(b'web', b'allow_archive')],
2412 alias=[(b'web', b'allow_archive')],
2407 default=list,
2413 default=list,
2408 )
2414 )
2409 coreconfigitem(
2415 coreconfigitem(
2410 b'web',
2416 b'web',
2411 b'allow_read',
2417 b'allow_read',
2412 default=list,
2418 default=list,
2413 )
2419 )
2414 coreconfigitem(
2420 coreconfigitem(
2415 b'web',
2421 b'web',
2416 b'baseurl',
2422 b'baseurl',
2417 default=None,
2423 default=None,
2418 )
2424 )
2419 coreconfigitem(
2425 coreconfigitem(
2420 b'web',
2426 b'web',
2421 b'cacerts',
2427 b'cacerts',
2422 default=None,
2428 default=None,
2423 )
2429 )
2424 coreconfigitem(
2430 coreconfigitem(
2425 b'web',
2431 b'web',
2426 b'certificate',
2432 b'certificate',
2427 default=None,
2433 default=None,
2428 )
2434 )
2429 coreconfigitem(
2435 coreconfigitem(
2430 b'web',
2436 b'web',
2431 b'collapse',
2437 b'collapse',
2432 default=False,
2438 default=False,
2433 )
2439 )
2434 coreconfigitem(
2440 coreconfigitem(
2435 b'web',
2441 b'web',
2436 b'csp',
2442 b'csp',
2437 default=None,
2443 default=None,
2438 )
2444 )
2439 coreconfigitem(
2445 coreconfigitem(
2440 b'web',
2446 b'web',
2441 b'deny_read',
2447 b'deny_read',
2442 default=list,
2448 default=list,
2443 )
2449 )
2444 coreconfigitem(
2450 coreconfigitem(
2445 b'web',
2451 b'web',
2446 b'descend',
2452 b'descend',
2447 default=True,
2453 default=True,
2448 )
2454 )
2449 coreconfigitem(
2455 coreconfigitem(
2450 b'web',
2456 b'web',
2451 b'description',
2457 b'description',
2452 default=b"",
2458 default=b"",
2453 )
2459 )
2454 coreconfigitem(
2460 coreconfigitem(
2455 b'web',
2461 b'web',
2456 b'encoding',
2462 b'encoding',
2457 default=lambda: encoding.encoding,
2463 default=lambda: encoding.encoding,
2458 )
2464 )
2459 coreconfigitem(
2465 coreconfigitem(
2460 b'web',
2466 b'web',
2461 b'errorlog',
2467 b'errorlog',
2462 default=b'-',
2468 default=b'-',
2463 )
2469 )
2464 coreconfigitem(
2470 coreconfigitem(
2465 b'web',
2471 b'web',
2466 b'ipv6',
2472 b'ipv6',
2467 default=False,
2473 default=False,
2468 )
2474 )
2469 coreconfigitem(
2475 coreconfigitem(
2470 b'web',
2476 b'web',
2471 b'maxchanges',
2477 b'maxchanges',
2472 default=10,
2478 default=10,
2473 )
2479 )
2474 coreconfigitem(
2480 coreconfigitem(
2475 b'web',
2481 b'web',
2476 b'maxfiles',
2482 b'maxfiles',
2477 default=10,
2483 default=10,
2478 )
2484 )
2479 coreconfigitem(
2485 coreconfigitem(
2480 b'web',
2486 b'web',
2481 b'maxshortchanges',
2487 b'maxshortchanges',
2482 default=60,
2488 default=60,
2483 )
2489 )
2484 coreconfigitem(
2490 coreconfigitem(
2485 b'web',
2491 b'web',
2486 b'motd',
2492 b'motd',
2487 default=b'',
2493 default=b'',
2488 )
2494 )
2489 coreconfigitem(
2495 coreconfigitem(
2490 b'web',
2496 b'web',
2491 b'name',
2497 b'name',
2492 default=dynamicdefault,
2498 default=dynamicdefault,
2493 )
2499 )
2494 coreconfigitem(
2500 coreconfigitem(
2495 b'web',
2501 b'web',
2496 b'port',
2502 b'port',
2497 default=8000,
2503 default=8000,
2498 )
2504 )
2499 coreconfigitem(
2505 coreconfigitem(
2500 b'web',
2506 b'web',
2501 b'prefix',
2507 b'prefix',
2502 default=b'',
2508 default=b'',
2503 )
2509 )
2504 coreconfigitem(
2510 coreconfigitem(
2505 b'web',
2511 b'web',
2506 b'push_ssl',
2512 b'push_ssl',
2507 default=True,
2513 default=True,
2508 )
2514 )
2509 coreconfigitem(
2515 coreconfigitem(
2510 b'web',
2516 b'web',
2511 b'refreshinterval',
2517 b'refreshinterval',
2512 default=20,
2518 default=20,
2513 )
2519 )
2514 coreconfigitem(
2520 coreconfigitem(
2515 b'web',
2521 b'web',
2516 b'server-header',
2522 b'server-header',
2517 default=None,
2523 default=None,
2518 )
2524 )
2519 coreconfigitem(
2525 coreconfigitem(
2520 b'web',
2526 b'web',
2521 b'static',
2527 b'static',
2522 default=None,
2528 default=None,
2523 )
2529 )
2524 coreconfigitem(
2530 coreconfigitem(
2525 b'web',
2531 b'web',
2526 b'staticurl',
2532 b'staticurl',
2527 default=None,
2533 default=None,
2528 )
2534 )
2529 coreconfigitem(
2535 coreconfigitem(
2530 b'web',
2536 b'web',
2531 b'stripes',
2537 b'stripes',
2532 default=1,
2538 default=1,
2533 )
2539 )
2534 coreconfigitem(
2540 coreconfigitem(
2535 b'web',
2541 b'web',
2536 b'style',
2542 b'style',
2537 default=b'paper',
2543 default=b'paper',
2538 )
2544 )
2539 coreconfigitem(
2545 coreconfigitem(
2540 b'web',
2546 b'web',
2541 b'templates',
2547 b'templates',
2542 default=None,
2548 default=None,
2543 )
2549 )
2544 coreconfigitem(
2550 coreconfigitem(
2545 b'web',
2551 b'web',
2546 b'view',
2552 b'view',
2547 default=b'served',
2553 default=b'served',
2548 experimental=True,
2554 experimental=True,
2549 )
2555 )
2550 coreconfigitem(
2556 coreconfigitem(
2551 b'worker',
2557 b'worker',
2552 b'backgroundclose',
2558 b'backgroundclose',
2553 default=dynamicdefault,
2559 default=dynamicdefault,
2554 )
2560 )
2555 # Windows defaults to a limit of 512 open files. A buffer of 128
2561 # Windows defaults to a limit of 512 open files. A buffer of 128
2556 # should give us enough headway.
2562 # should give us enough headway.
2557 coreconfigitem(
2563 coreconfigitem(
2558 b'worker',
2564 b'worker',
2559 b'backgroundclosemaxqueue',
2565 b'backgroundclosemaxqueue',
2560 default=384,
2566 default=384,
2561 )
2567 )
2562 coreconfigitem(
2568 coreconfigitem(
2563 b'worker',
2569 b'worker',
2564 b'backgroundcloseminfilecount',
2570 b'backgroundcloseminfilecount',
2565 default=2048,
2571 default=2048,
2566 )
2572 )
2567 coreconfigitem(
2573 coreconfigitem(
2568 b'worker',
2574 b'worker',
2569 b'backgroundclosethreadcount',
2575 b'backgroundclosethreadcount',
2570 default=4,
2576 default=4,
2571 )
2577 )
2572 coreconfigitem(
2578 coreconfigitem(
2573 b'worker',
2579 b'worker',
2574 b'enabled',
2580 b'enabled',
2575 default=True,
2581 default=True,
2576 )
2582 )
2577 coreconfigitem(
2583 coreconfigitem(
2578 b'worker',
2584 b'worker',
2579 b'numcpus',
2585 b'numcpus',
2580 default=None,
2586 default=None,
2581 )
2587 )
2582
2588
2583 # Rebase related configuration moved to core because other extension are doing
2589 # Rebase related configuration moved to core because other extension are doing
2584 # strange things. For example, shelve import the extensions to reuse some bit
2590 # strange things. For example, shelve import the extensions to reuse some bit
2585 # without formally loading it.
2591 # without formally loading it.
2586 coreconfigitem(
2592 coreconfigitem(
2587 b'commands',
2593 b'commands',
2588 b'rebase.requiredest',
2594 b'rebase.requiredest',
2589 default=False,
2595 default=False,
2590 )
2596 )
2591 coreconfigitem(
2597 coreconfigitem(
2592 b'experimental',
2598 b'experimental',
2593 b'rebaseskipobsolete',
2599 b'rebaseskipobsolete',
2594 default=True,
2600 default=True,
2595 )
2601 )
2596 coreconfigitem(
2602 coreconfigitem(
2597 b'rebase',
2603 b'rebase',
2598 b'singletransaction',
2604 b'singletransaction',
2599 default=False,
2605 default=False,
2600 )
2606 )
2601 coreconfigitem(
2607 coreconfigitem(
2602 b'rebase',
2608 b'rebase',
2603 b'experimental.inmemory',
2609 b'experimental.inmemory',
2604 default=False,
2610 default=False,
2605 )
2611 )
@@ -1,3066 +1,3071 b''
1 The Mercurial system uses a set of configuration files to control
1 The Mercurial system uses a set of configuration files to control
2 aspects of its behavior.
2 aspects of its behavior.
3
3
4 Troubleshooting
4 Troubleshooting
5 ===============
5 ===============
6
6
7 If you're having problems with your configuration,
7 If you're having problems with your configuration,
8 :hg:`config --debug` can help you understand what is introducing
8 :hg:`config --debug` can help you understand what is introducing
9 a setting into your environment.
9 a setting into your environment.
10
10
11 See :hg:`help config.syntax` and :hg:`help config.files`
11 See :hg:`help config.syntax` and :hg:`help config.files`
12 for information about how and where to override things.
12 for information about how and where to override things.
13
13
14 Structure
14 Structure
15 =========
15 =========
16
16
17 The configuration files use a simple ini-file format. A configuration
17 The configuration files use a simple ini-file format. A configuration
18 file consists of sections, led by a ``[section]`` header and followed
18 file consists of sections, led by a ``[section]`` header and followed
19 by ``name = value`` entries::
19 by ``name = value`` entries::
20
20
21 [ui]
21 [ui]
22 username = Firstname Lastname <firstname.lastname@example.net>
22 username = Firstname Lastname <firstname.lastname@example.net>
23 verbose = True
23 verbose = True
24
24
25 The above entries will be referred to as ``ui.username`` and
25 The above entries will be referred to as ``ui.username`` and
26 ``ui.verbose``, respectively. See :hg:`help config.syntax`.
26 ``ui.verbose``, respectively. See :hg:`help config.syntax`.
27
27
28 Files
28 Files
29 =====
29 =====
30
30
31 Mercurial reads configuration data from several files, if they exist.
31 Mercurial reads configuration data from several files, if they exist.
32 These files do not exist by default and you will have to create the
32 These files do not exist by default and you will have to create the
33 appropriate configuration files yourself:
33 appropriate configuration files yourself:
34
34
35 Local configuration is put into the per-repository ``<repo>/.hg/hgrc`` file.
35 Local configuration is put into the per-repository ``<repo>/.hg/hgrc`` file.
36
36
37 Global configuration like the username setting is typically put into:
37 Global configuration like the username setting is typically put into:
38
38
39 .. container:: windows
39 .. container:: windows
40
40
41 - ``%USERPROFILE%\mercurial.ini`` (on Windows)
41 - ``%USERPROFILE%\mercurial.ini`` (on Windows)
42
42
43 .. container:: unix.plan9
43 .. container:: unix.plan9
44
44
45 - ``$HOME/.hgrc`` (on Unix, Plan9)
45 - ``$HOME/.hgrc`` (on Unix, Plan9)
46
46
47 The names of these files depend on the system on which Mercurial is
47 The names of these files depend on the system on which Mercurial is
48 installed. ``*.rc`` files from a single directory are read in
48 installed. ``*.rc`` files from a single directory are read in
49 alphabetical order, later ones overriding earlier ones. Where multiple
49 alphabetical order, later ones overriding earlier ones. Where multiple
50 paths are given below, settings from earlier paths override later
50 paths are given below, settings from earlier paths override later
51 ones.
51 ones.
52
52
53 .. container:: verbose.unix
53 .. container:: verbose.unix
54
54
55 On Unix, the following files are consulted:
55 On Unix, the following files are consulted:
56
56
57 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
57 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
58 - ``<repo>/.hg/hgrc`` (per-repository)
58 - ``<repo>/.hg/hgrc`` (per-repository)
59 - ``$HOME/.hgrc`` (per-user)
59 - ``$HOME/.hgrc`` (per-user)
60 - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (per-user)
60 - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (per-user)
61 - ``<install-root>/etc/mercurial/hgrc`` (per-installation)
61 - ``<install-root>/etc/mercurial/hgrc`` (per-installation)
62 - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)
62 - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)
63 - ``/etc/mercurial/hgrc`` (per-system)
63 - ``/etc/mercurial/hgrc`` (per-system)
64 - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)
64 - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)
65 - ``<internal>/*.rc`` (defaults)
65 - ``<internal>/*.rc`` (defaults)
66
66
67 .. container:: verbose.windows
67 .. container:: verbose.windows
68
68
69 On Windows, the following files are consulted:
69 On Windows, the following files are consulted:
70
70
71 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
71 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
72 - ``<repo>/.hg/hgrc`` (per-repository)
72 - ``<repo>/.hg/hgrc`` (per-repository)
73 - ``%USERPROFILE%\.hgrc`` (per-user)
73 - ``%USERPROFILE%\.hgrc`` (per-user)
74 - ``%USERPROFILE%\Mercurial.ini`` (per-user)
74 - ``%USERPROFILE%\Mercurial.ini`` (per-user)
75 - ``%HOME%\.hgrc`` (per-user)
75 - ``%HOME%\.hgrc`` (per-user)
76 - ``%HOME%\Mercurial.ini`` (per-user)
76 - ``%HOME%\Mercurial.ini`` (per-user)
77 - ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`` (per-system)
77 - ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`` (per-system)
78 - ``<install-dir>\hgrc.d\*.rc`` (per-installation)
78 - ``<install-dir>\hgrc.d\*.rc`` (per-installation)
79 - ``<install-dir>\Mercurial.ini`` (per-installation)
79 - ``<install-dir>\Mercurial.ini`` (per-installation)
80 - ``%PROGRAMDATA%\Mercurial\hgrc`` (per-system)
80 - ``%PROGRAMDATA%\Mercurial\hgrc`` (per-system)
81 - ``%PROGRAMDATA%\Mercurial\Mercurial.ini`` (per-system)
81 - ``%PROGRAMDATA%\Mercurial\Mercurial.ini`` (per-system)
82 - ``%PROGRAMDATA%\Mercurial\hgrc.d\*.rc`` (per-system)
82 - ``%PROGRAMDATA%\Mercurial\hgrc.d\*.rc`` (per-system)
83 - ``<internal>/*.rc`` (defaults)
83 - ``<internal>/*.rc`` (defaults)
84
84
85 .. note::
85 .. note::
86
86
87 The registry key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mercurial``
87 The registry key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mercurial``
88 is used when running 32-bit Python on 64-bit Windows.
88 is used when running 32-bit Python on 64-bit Windows.
89
89
90 .. container:: verbose.plan9
90 .. container:: verbose.plan9
91
91
92 On Plan9, the following files are consulted:
92 On Plan9, the following files are consulted:
93
93
94 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
94 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
95 - ``<repo>/.hg/hgrc`` (per-repository)
95 - ``<repo>/.hg/hgrc`` (per-repository)
96 - ``$home/lib/hgrc`` (per-user)
96 - ``$home/lib/hgrc`` (per-user)
97 - ``<install-root>/lib/mercurial/hgrc`` (per-installation)
97 - ``<install-root>/lib/mercurial/hgrc`` (per-installation)
98 - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)
98 - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)
99 - ``/lib/mercurial/hgrc`` (per-system)
99 - ``/lib/mercurial/hgrc`` (per-system)
100 - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)
100 - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)
101 - ``<internal>/*.rc`` (defaults)
101 - ``<internal>/*.rc`` (defaults)
102
102
103 Per-repository configuration options only apply in a
103 Per-repository configuration options only apply in a
104 particular repository. This file is not version-controlled, and
104 particular repository. This file is not version-controlled, and
105 will not get transferred during a "clone" operation. Options in
105 will not get transferred during a "clone" operation. Options in
106 this file override options in all other configuration files.
106 this file override options in all other configuration files.
107
107
108 .. container:: unix.plan9
108 .. container:: unix.plan9
109
109
110 On Plan 9 and Unix, most of this file will be ignored if it doesn't
110 On Plan 9 and Unix, most of this file will be ignored if it doesn't
111 belong to a trusted user or to a trusted group. See
111 belong to a trusted user or to a trusted group. See
112 :hg:`help config.trusted` for more details.
112 :hg:`help config.trusted` for more details.
113
113
114 Per-user configuration file(s) are for the user running Mercurial. Options
114 Per-user configuration file(s) are for the user running Mercurial. Options
115 in these files apply to all Mercurial commands executed by this user in any
115 in these files apply to all Mercurial commands executed by this user in any
116 directory. Options in these files override per-system and per-installation
116 directory. Options in these files override per-system and per-installation
117 options.
117 options.
118
118
119 Per-installation configuration files are searched for in the
119 Per-installation configuration files are searched for in the
120 directory where Mercurial is installed. ``<install-root>`` is the
120 directory where Mercurial is installed. ``<install-root>`` is the
121 parent directory of the **hg** executable (or symlink) being run.
121 parent directory of the **hg** executable (or symlink) being run.
122
122
123 .. container:: unix.plan9
123 .. container:: unix.plan9
124
124
125 For example, if installed in ``/shared/tools/bin/hg``, Mercurial
125 For example, if installed in ``/shared/tools/bin/hg``, Mercurial
126 will look in ``/shared/tools/etc/mercurial/hgrc``. Options in these
126 will look in ``/shared/tools/etc/mercurial/hgrc``. Options in these
127 files apply to all Mercurial commands executed by any user in any
127 files apply to all Mercurial commands executed by any user in any
128 directory.
128 directory.
129
129
130 Per-installation configuration files are for the system on
130 Per-installation configuration files are for the system on
131 which Mercurial is running. Options in these files apply to all
131 which Mercurial is running. Options in these files apply to all
132 Mercurial commands executed by any user in any directory. Registry
132 Mercurial commands executed by any user in any directory. Registry
133 keys contain PATH-like strings, every part of which must reference
133 keys contain PATH-like strings, every part of which must reference
134 a ``Mercurial.ini`` file or be a directory where ``*.rc`` files will
134 a ``Mercurial.ini`` file or be a directory where ``*.rc`` files will
135 be read. Mercurial checks each of these locations in the specified
135 be read. Mercurial checks each of these locations in the specified
136 order until one or more configuration files are detected.
136 order until one or more configuration files are detected.
137
137
138 Per-system configuration files are for the system on which Mercurial
138 Per-system configuration files are for the system on which Mercurial
139 is running. Options in these files apply to all Mercurial commands
139 is running. Options in these files apply to all Mercurial commands
140 executed by any user in any directory. Options in these files
140 executed by any user in any directory. Options in these files
141 override per-installation options.
141 override per-installation options.
142
142
143 Mercurial comes with some default configuration. The default configuration
143 Mercurial comes with some default configuration. The default configuration
144 files are installed with Mercurial and will be overwritten on upgrades. Default
144 files are installed with Mercurial and will be overwritten on upgrades. Default
145 configuration files should never be edited by users or administrators but can
145 configuration files should never be edited by users or administrators but can
146 be overridden in other configuration files. So far the directory only contains
146 be overridden in other configuration files. So far the directory only contains
147 merge tool configuration but packagers can also put other default configuration
147 merge tool configuration but packagers can also put other default configuration
148 there.
148 there.
149
149
150 On versions 5.7 and later, if share-safe functionality is enabled,
150 On versions 5.7 and later, if share-safe functionality is enabled,
151 shares will read config file of share source too.
151 shares will read config file of share source too.
152 `<share-source/.hg/hgrc>` is read before reading `<repo/.hg/hgrc>`.
152 `<share-source/.hg/hgrc>` is read before reading `<repo/.hg/hgrc>`.
153
153
154 For configs which should not be shared, `<repo/.hg/hgrc-not-shared>`
154 For configs which should not be shared, `<repo/.hg/hgrc-not-shared>`
155 should be used.
155 should be used.
156
156
157 Syntax
157 Syntax
158 ======
158 ======
159
159
160 A configuration file consists of sections, led by a ``[section]`` header
160 A configuration file consists of sections, led by a ``[section]`` header
161 and followed by ``name = value`` entries (sometimes called
161 and followed by ``name = value`` entries (sometimes called
162 ``configuration keys``)::
162 ``configuration keys``)::
163
163
164 [spam]
164 [spam]
165 eggs=ham
165 eggs=ham
166 green=
166 green=
167 eggs
167 eggs
168
168
169 Each line contains one entry. If the lines that follow are indented,
169 Each line contains one entry. If the lines that follow are indented,
170 they are treated as continuations of that entry. Leading whitespace is
170 they are treated as continuations of that entry. Leading whitespace is
171 removed from values. Empty lines are skipped. Lines beginning with
171 removed from values. Empty lines are skipped. Lines beginning with
172 ``#`` or ``;`` are ignored and may be used to provide comments.
172 ``#`` or ``;`` are ignored and may be used to provide comments.
173
173
174 Configuration keys can be set multiple times, in which case Mercurial
174 Configuration keys can be set multiple times, in which case Mercurial
175 will use the value that was configured last. As an example::
175 will use the value that was configured last. As an example::
176
176
177 [spam]
177 [spam]
178 eggs=large
178 eggs=large
179 ham=serrano
179 ham=serrano
180 eggs=small
180 eggs=small
181
181
182 This would set the configuration key named ``eggs`` to ``small``.
182 This would set the configuration key named ``eggs`` to ``small``.
183
183
184 It is also possible to define a section multiple times. A section can
184 It is also possible to define a section multiple times. A section can
185 be redefined on the same and/or on different configuration files. For
185 be redefined on the same and/or on different configuration files. For
186 example::
186 example::
187
187
188 [foo]
188 [foo]
189 eggs=large
189 eggs=large
190 ham=serrano
190 ham=serrano
191 eggs=small
191 eggs=small
192
192
193 [bar]
193 [bar]
194 eggs=ham
194 eggs=ham
195 green=
195 green=
196 eggs
196 eggs
197
197
198 [foo]
198 [foo]
199 ham=prosciutto
199 ham=prosciutto
200 eggs=medium
200 eggs=medium
201 bread=toasted
201 bread=toasted
202
202
203 This would set the ``eggs``, ``ham``, and ``bread`` configuration keys
203 This would set the ``eggs``, ``ham``, and ``bread`` configuration keys
204 of the ``foo`` section to ``medium``, ``prosciutto``, and ``toasted``,
204 of the ``foo`` section to ``medium``, ``prosciutto``, and ``toasted``,
205 respectively. As you can see there only thing that matters is the last
205 respectively. As you can see there only thing that matters is the last
206 value that was set for each of the configuration keys.
206 value that was set for each of the configuration keys.
207
207
208 If a configuration key is set multiple times in different
208 If a configuration key is set multiple times in different
209 configuration files the final value will depend on the order in which
209 configuration files the final value will depend on the order in which
210 the different configuration files are read, with settings from earlier
210 the different configuration files are read, with settings from earlier
211 paths overriding later ones as described on the ``Files`` section
211 paths overriding later ones as described on the ``Files`` section
212 above.
212 above.
213
213
214 A line of the form ``%include file`` will include ``file`` into the
214 A line of the form ``%include file`` will include ``file`` into the
215 current configuration file. The inclusion is recursive, which means
215 current configuration file. The inclusion is recursive, which means
216 that included files can include other files. Filenames are relative to
216 that included files can include other files. Filenames are relative to
217 the configuration file in which the ``%include`` directive is found.
217 the configuration file in which the ``%include`` directive is found.
218 Environment variables and ``~user`` constructs are expanded in
218 Environment variables and ``~user`` constructs are expanded in
219 ``file``. This lets you do something like::
219 ``file``. This lets you do something like::
220
220
221 %include ~/.hgrc.d/$HOST.rc
221 %include ~/.hgrc.d/$HOST.rc
222
222
223 to include a different configuration file on each computer you use.
223 to include a different configuration file on each computer you use.
224
224
225 A line with ``%unset name`` will remove ``name`` from the current
225 A line with ``%unset name`` will remove ``name`` from the current
226 section, if it has been set previously.
226 section, if it has been set previously.
227
227
228 The values are either free-form text strings, lists of text strings,
228 The values are either free-form text strings, lists of text strings,
229 or Boolean values. Boolean values can be set to true using any of "1",
229 or Boolean values. Boolean values can be set to true using any of "1",
230 "yes", "true", or "on" and to false using "0", "no", "false", or "off"
230 "yes", "true", or "on" and to false using "0", "no", "false", or "off"
231 (all case insensitive).
231 (all case insensitive).
232
232
233 List values are separated by whitespace or comma, except when values are
233 List values are separated by whitespace or comma, except when values are
234 placed in double quotation marks::
234 placed in double quotation marks::
235
235
236 allow_read = "John Doe, PhD", brian, betty
236 allow_read = "John Doe, PhD", brian, betty
237
237
238 Quotation marks can be escaped by prefixing them with a backslash. Only
238 Quotation marks can be escaped by prefixing them with a backslash. Only
239 quotation marks at the beginning of a word is counted as a quotation
239 quotation marks at the beginning of a word is counted as a quotation
240 (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
240 (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
241
241
242 Sections
242 Sections
243 ========
243 ========
244
244
245 This section describes the different sections that may appear in a
245 This section describes the different sections that may appear in a
246 Mercurial configuration file, the purpose of each section, its possible
246 Mercurial configuration file, the purpose of each section, its possible
247 keys, and their possible values.
247 keys, and their possible values.
248
248
249 ``alias``
249 ``alias``
250 ---------
250 ---------
251
251
252 Defines command aliases.
252 Defines command aliases.
253
253
254 Aliases allow you to define your own commands in terms of other
254 Aliases allow you to define your own commands in terms of other
255 commands (or aliases), optionally including arguments. Positional
255 commands (or aliases), optionally including arguments. Positional
256 arguments in the form of ``$1``, ``$2``, etc. in the alias definition
256 arguments in the form of ``$1``, ``$2``, etc. in the alias definition
257 are expanded by Mercurial before execution. Positional arguments not
257 are expanded by Mercurial before execution. Positional arguments not
258 already used by ``$N`` in the definition are put at the end of the
258 already used by ``$N`` in the definition are put at the end of the
259 command to be executed.
259 command to be executed.
260
260
261 Alias definitions consist of lines of the form::
261 Alias definitions consist of lines of the form::
262
262
263 <alias> = <command> [<argument>]...
263 <alias> = <command> [<argument>]...
264
264
265 For example, this definition::
265 For example, this definition::
266
266
267 latest = log --limit 5
267 latest = log --limit 5
268
268
269 creates a new command ``latest`` that shows only the five most recent
269 creates a new command ``latest`` that shows only the five most recent
270 changesets. You can define subsequent aliases using earlier ones::
270 changesets. You can define subsequent aliases using earlier ones::
271
271
272 stable5 = latest -b stable
272 stable5 = latest -b stable
273
273
274 .. note::
274 .. note::
275
275
276 It is possible to create aliases with the same names as
276 It is possible to create aliases with the same names as
277 existing commands, which will then override the original
277 existing commands, which will then override the original
278 definitions. This is almost always a bad idea!
278 definitions. This is almost always a bad idea!
279
279
280 An alias can start with an exclamation point (``!``) to make it a
280 An alias can start with an exclamation point (``!``) to make it a
281 shell alias. A shell alias is executed with the shell and will let you
281 shell alias. A shell alias is executed with the shell and will let you
282 run arbitrary commands. As an example, ::
282 run arbitrary commands. As an example, ::
283
283
284 echo = !echo $@
284 echo = !echo $@
285
285
286 will let you do ``hg echo foo`` to have ``foo`` printed in your
286 will let you do ``hg echo foo`` to have ``foo`` printed in your
287 terminal. A better example might be::
287 terminal. A better example might be::
288
288
289 purge = !$HG status --no-status --unknown -0 re: | xargs -0 rm -f
289 purge = !$HG status --no-status --unknown -0 re: | xargs -0 rm -f
290
290
291 which will make ``hg purge`` delete all unknown files in the
291 which will make ``hg purge`` delete all unknown files in the
292 repository in the same manner as the purge extension.
292 repository in the same manner as the purge extension.
293
293
294 Positional arguments like ``$1``, ``$2``, etc. in the alias definition
294 Positional arguments like ``$1``, ``$2``, etc. in the alias definition
295 expand to the command arguments. Unmatched arguments are
295 expand to the command arguments. Unmatched arguments are
296 removed. ``$0`` expands to the alias name and ``$@`` expands to all
296 removed. ``$0`` expands to the alias name and ``$@`` expands to all
297 arguments separated by a space. ``"$@"`` (with quotes) expands to all
297 arguments separated by a space. ``"$@"`` (with quotes) expands to all
298 arguments quoted individually and separated by a space. These expansions
298 arguments quoted individually and separated by a space. These expansions
299 happen before the command is passed to the shell.
299 happen before the command is passed to the shell.
300
300
301 Shell aliases are executed in an environment where ``$HG`` expands to
301 Shell aliases are executed in an environment where ``$HG`` expands to
302 the path of the Mercurial that was used to execute the alias. This is
302 the path of the Mercurial that was used to execute the alias. This is
303 useful when you want to call further Mercurial commands in a shell
303 useful when you want to call further Mercurial commands in a shell
304 alias, as was done above for the purge alias. In addition,
304 alias, as was done above for the purge alias. In addition,
305 ``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg
305 ``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg
306 echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``.
306 echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``.
307
307
308 .. note::
308 .. note::
309
309
310 Some global configuration options such as ``-R`` are
310 Some global configuration options such as ``-R`` are
311 processed before shell aliases and will thus not be passed to
311 processed before shell aliases and will thus not be passed to
312 aliases.
312 aliases.
313
313
314
314
315 ``annotate``
315 ``annotate``
316 ------------
316 ------------
317
317
318 Settings used when displaying file annotations. All values are
318 Settings used when displaying file annotations. All values are
319 Booleans and default to False. See :hg:`help config.diff` for
319 Booleans and default to False. See :hg:`help config.diff` for
320 related options for the diff command.
320 related options for the diff command.
321
321
322 ``ignorews``
322 ``ignorews``
323 Ignore white space when comparing lines.
323 Ignore white space when comparing lines.
324
324
325 ``ignorewseol``
325 ``ignorewseol``
326 Ignore white space at the end of a line when comparing lines.
326 Ignore white space at the end of a line when comparing lines.
327
327
328 ``ignorewsamount``
328 ``ignorewsamount``
329 Ignore changes in the amount of white space.
329 Ignore changes in the amount of white space.
330
330
331 ``ignoreblanklines``
331 ``ignoreblanklines``
332 Ignore changes whose lines are all blank.
332 Ignore changes whose lines are all blank.
333
333
334
334
335 ``auth``
335 ``auth``
336 --------
336 --------
337
337
338 Authentication credentials and other authentication-like configuration
338 Authentication credentials and other authentication-like configuration
339 for HTTP connections. This section allows you to store usernames and
339 for HTTP connections. This section allows you to store usernames and
340 passwords for use when logging *into* HTTP servers. See
340 passwords for use when logging *into* HTTP servers. See
341 :hg:`help config.web` if you want to configure *who* can login to
341 :hg:`help config.web` if you want to configure *who* can login to
342 your HTTP server.
342 your HTTP server.
343
343
344 The following options apply to all hosts.
344 The following options apply to all hosts.
345
345
346 ``cookiefile``
346 ``cookiefile``
347 Path to a file containing HTTP cookie lines. Cookies matching a
347 Path to a file containing HTTP cookie lines. Cookies matching a
348 host will be sent automatically.
348 host will be sent automatically.
349
349
350 The file format uses the Mozilla cookies.txt format, which defines cookies
350 The file format uses the Mozilla cookies.txt format, which defines cookies
351 on their own lines. Each line contains 7 fields delimited by the tab
351 on their own lines. Each line contains 7 fields delimited by the tab
352 character (domain, is_domain_cookie, path, is_secure, expires, name,
352 character (domain, is_domain_cookie, path, is_secure, expires, name,
353 value). For more info, do an Internet search for "Netscape cookies.txt
353 value). For more info, do an Internet search for "Netscape cookies.txt
354 format."
354 format."
355
355
356 Note: the cookies parser does not handle port numbers on domains. You
356 Note: the cookies parser does not handle port numbers on domains. You
357 will need to remove ports from the domain for the cookie to be recognized.
357 will need to remove ports from the domain for the cookie to be recognized.
358 This could result in a cookie being disclosed to an unwanted server.
358 This could result in a cookie being disclosed to an unwanted server.
359
359
360 The cookies file is read-only.
360 The cookies file is read-only.
361
361
362 Other options in this section are grouped by name and have the following
362 Other options in this section are grouped by name and have the following
363 format::
363 format::
364
364
365 <name>.<argument> = <value>
365 <name>.<argument> = <value>
366
366
367 where ``<name>`` is used to group arguments into authentication
367 where ``<name>`` is used to group arguments into authentication
368 entries. Example::
368 entries. Example::
369
369
370 foo.prefix = hg.intevation.de/mercurial
370 foo.prefix = hg.intevation.de/mercurial
371 foo.username = foo
371 foo.username = foo
372 foo.password = bar
372 foo.password = bar
373 foo.schemes = http https
373 foo.schemes = http https
374
374
375 bar.prefix = secure.example.org
375 bar.prefix = secure.example.org
376 bar.key = path/to/file.key
376 bar.key = path/to/file.key
377 bar.cert = path/to/file.cert
377 bar.cert = path/to/file.cert
378 bar.schemes = https
378 bar.schemes = https
379
379
380 Supported arguments:
380 Supported arguments:
381
381
382 ``prefix``
382 ``prefix``
383 Either ``*`` or a URI prefix with or without the scheme part.
383 Either ``*`` or a URI prefix with or without the scheme part.
384 The authentication entry with the longest matching prefix is used
384 The authentication entry with the longest matching prefix is used
385 (where ``*`` matches everything and counts as a match of length
385 (where ``*`` matches everything and counts as a match of length
386 1). If the prefix doesn't include a scheme, the match is performed
386 1). If the prefix doesn't include a scheme, the match is performed
387 against the URI with its scheme stripped as well, and the schemes
387 against the URI with its scheme stripped as well, and the schemes
388 argument, q.v., is then subsequently consulted.
388 argument, q.v., is then subsequently consulted.
389
389
390 ``username``
390 ``username``
391 Optional. Username to authenticate with. If not given, and the
391 Optional. Username to authenticate with. If not given, and the
392 remote site requires basic or digest authentication, the user will
392 remote site requires basic or digest authentication, the user will
393 be prompted for it. Environment variables are expanded in the
393 be prompted for it. Environment variables are expanded in the
394 username letting you do ``foo.username = $USER``. If the URI
394 username letting you do ``foo.username = $USER``. If the URI
395 includes a username, only ``[auth]`` entries with a matching
395 includes a username, only ``[auth]`` entries with a matching
396 username or without a username will be considered.
396 username or without a username will be considered.
397
397
398 ``password``
398 ``password``
399 Optional. Password to authenticate with. If not given, and the
399 Optional. Password to authenticate with. If not given, and the
400 remote site requires basic or digest authentication, the user
400 remote site requires basic or digest authentication, the user
401 will be prompted for it.
401 will be prompted for it.
402
402
403 ``key``
403 ``key``
404 Optional. PEM encoded client certificate key file. Environment
404 Optional. PEM encoded client certificate key file. Environment
405 variables are expanded in the filename.
405 variables are expanded in the filename.
406
406
407 ``cert``
407 ``cert``
408 Optional. PEM encoded client certificate chain file. Environment
408 Optional. PEM encoded client certificate chain file. Environment
409 variables are expanded in the filename.
409 variables are expanded in the filename.
410
410
411 ``schemes``
411 ``schemes``
412 Optional. Space separated list of URI schemes to use this
412 Optional. Space separated list of URI schemes to use this
413 authentication entry with. Only used if the prefix doesn't include
413 authentication entry with. Only used if the prefix doesn't include
414 a scheme. Supported schemes are http and https. They will match
414 a scheme. Supported schemes are http and https. They will match
415 static-http and static-https respectively, as well.
415 static-http and static-https respectively, as well.
416 (default: https)
416 (default: https)
417
417
418 If no suitable authentication entry is found, the user is prompted
418 If no suitable authentication entry is found, the user is prompted
419 for credentials as usual if required by the remote.
419 for credentials as usual if required by the remote.
420
420
421 ``cmdserver``
421 ``cmdserver``
422 -------------
422 -------------
423
423
424 Controls command server settings. (ADVANCED)
424 Controls command server settings. (ADVANCED)
425
425
426 ``message-encodings``
426 ``message-encodings``
427 List of encodings for the ``m`` (message) channel. The first encoding
427 List of encodings for the ``m`` (message) channel. The first encoding
428 supported by the server will be selected and advertised in the hello
428 supported by the server will be selected and advertised in the hello
429 message. This is useful only when ``ui.message-output`` is set to
429 message. This is useful only when ``ui.message-output`` is set to
430 ``channel``. Supported encodings are ``cbor``.
430 ``channel``. Supported encodings are ``cbor``.
431
431
432 ``shutdown-on-interrupt``
432 ``shutdown-on-interrupt``
433 If set to false, the server's main loop will continue running after
433 If set to false, the server's main loop will continue running after
434 SIGINT received. ``runcommand`` requests can still be interrupted by
434 SIGINT received. ``runcommand`` requests can still be interrupted by
435 SIGINT. Close the write end of the pipe to shut down the server
435 SIGINT. Close the write end of the pipe to shut down the server
436 process gracefully.
436 process gracefully.
437 (default: True)
437 (default: True)
438
438
439 ``color``
439 ``color``
440 ---------
440 ---------
441
441
442 Configure the Mercurial color mode. For details about how to define your custom
442 Configure the Mercurial color mode. For details about how to define your custom
443 effect and style see :hg:`help color`.
443 effect and style see :hg:`help color`.
444
444
445 ``mode``
445 ``mode``
446 String: control the method used to output color. One of ``auto``, ``ansi``,
446 String: control the method used to output color. One of ``auto``, ``ansi``,
447 ``win32``, ``terminfo`` or ``debug``. In auto mode, Mercurial will
447 ``win32``, ``terminfo`` or ``debug``. In auto mode, Mercurial will
448 use ANSI mode by default (or win32 mode prior to Windows 10) if it detects a
448 use ANSI mode by default (or win32 mode prior to Windows 10) if it detects a
449 terminal. Any invalid value will disable color.
449 terminal. Any invalid value will disable color.
450
450
451 ``pagermode``
451 ``pagermode``
452 String: optional override of ``color.mode`` used with pager.
452 String: optional override of ``color.mode`` used with pager.
453
453
454 On some systems, terminfo mode may cause problems when using
454 On some systems, terminfo mode may cause problems when using
455 color with ``less -R`` as a pager program. less with the -R option
455 color with ``less -R`` as a pager program. less with the -R option
456 will only display ECMA-48 color codes, and terminfo mode may sometimes
456 will only display ECMA-48 color codes, and terminfo mode may sometimes
457 emit codes that less doesn't understand. You can work around this by
457 emit codes that less doesn't understand. You can work around this by
458 either using ansi mode (or auto mode), or by using less -r (which will
458 either using ansi mode (or auto mode), or by using less -r (which will
459 pass through all terminal control codes, not just color control
459 pass through all terminal control codes, not just color control
460 codes).
460 codes).
461
461
462 On some systems (such as MSYS in Windows), the terminal may support
462 On some systems (such as MSYS in Windows), the terminal may support
463 a different color mode than the pager program.
463 a different color mode than the pager program.
464
464
465 ``commands``
465 ``commands``
466 ------------
466 ------------
467
467
468 ``commit.post-status``
468 ``commit.post-status``
469 Show status of files in the working directory after successful commit.
469 Show status of files in the working directory after successful commit.
470 (default: False)
470 (default: False)
471
471
472 ``merge.require-rev``
472 ``merge.require-rev``
473 Require that the revision to merge the current commit with be specified on
473 Require that the revision to merge the current commit with be specified on
474 the command line. If this is enabled and a revision is not specified, the
474 the command line. If this is enabled and a revision is not specified, the
475 command aborts.
475 command aborts.
476 (default: False)
476 (default: False)
477
477
478 ``push.require-revs``
478 ``push.require-revs``
479 Require revisions to push be specified using one or more mechanisms such as
479 Require revisions to push be specified using one or more mechanisms such as
480 specifying them positionally on the command line, using ``-r``, ``-b``,
480 specifying them positionally on the command line, using ``-r``, ``-b``,
481 and/or ``-B`` on the command line, or using ``paths.<path>:pushrev`` in the
481 and/or ``-B`` on the command line, or using ``paths.<path>:pushrev`` in the
482 configuration. If this is enabled and revisions are not specified, the
482 configuration. If this is enabled and revisions are not specified, the
483 command aborts.
483 command aborts.
484 (default: False)
484 (default: False)
485
485
486 ``resolve.confirm``
486 ``resolve.confirm``
487 Confirm before performing action if no filename is passed.
487 Confirm before performing action if no filename is passed.
488 (default: False)
488 (default: False)
489
489
490 ``resolve.explicit-re-merge``
490 ``resolve.explicit-re-merge``
491 Require uses of ``hg resolve`` to specify which action it should perform,
491 Require uses of ``hg resolve`` to specify which action it should perform,
492 instead of re-merging files by default.
492 instead of re-merging files by default.
493 (default: False)
493 (default: False)
494
494
495 ``resolve.mark-check``
495 ``resolve.mark-check``
496 Determines what level of checking :hg:`resolve --mark` will perform before
496 Determines what level of checking :hg:`resolve --mark` will perform before
497 marking files as resolved. Valid values are ``none`, ``warn``, and
497 marking files as resolved. Valid values are ``none`, ``warn``, and
498 ``abort``. ``warn`` will output a warning listing the file(s) that still
498 ``abort``. ``warn`` will output a warning listing the file(s) that still
499 have conflict markers in them, but will still mark everything resolved.
499 have conflict markers in them, but will still mark everything resolved.
500 ``abort`` will output the same warning but will not mark things as resolved.
500 ``abort`` will output the same warning but will not mark things as resolved.
501 If --all is passed and this is set to ``abort``, only a warning will be
501 If --all is passed and this is set to ``abort``, only a warning will be
502 shown (an error will not be raised).
502 shown (an error will not be raised).
503 (default: ``none``)
503 (default: ``none``)
504
504
505 ``status.relative``
505 ``status.relative``
506 Make paths in :hg:`status` output relative to the current directory.
506 Make paths in :hg:`status` output relative to the current directory.
507 (default: False)
507 (default: False)
508
508
509 ``status.terse``
509 ``status.terse``
510 Default value for the --terse flag, which condenses status output.
510 Default value for the --terse flag, which condenses status output.
511 (default: empty)
511 (default: empty)
512
512
513 ``update.check``
513 ``update.check``
514 Determines what level of checking :hg:`update` will perform before moving
514 Determines what level of checking :hg:`update` will perform before moving
515 to a destination revision. Valid values are ``abort``, ``none``,
515 to a destination revision. Valid values are ``abort``, ``none``,
516 ``linear``, and ``noconflict``. ``abort`` always fails if the working
516 ``linear``, and ``noconflict``. ``abort`` always fails if the working
517 directory has uncommitted changes. ``none`` performs no checking, and may
517 directory has uncommitted changes. ``none`` performs no checking, and may
518 result in a merge with uncommitted changes. ``linear`` allows any update
518 result in a merge with uncommitted changes. ``linear`` allows any update
519 as long as it follows a straight line in the revision history, and may
519 as long as it follows a straight line in the revision history, and may
520 trigger a merge with uncommitted changes. ``noconflict`` will allow any
520 trigger a merge with uncommitted changes. ``noconflict`` will allow any
521 update which would not trigger a merge with uncommitted changes, if any
521 update which would not trigger a merge with uncommitted changes, if any
522 are present.
522 are present.
523 (default: ``linear``)
523 (default: ``linear``)
524
524
525 ``update.requiredest``
525 ``update.requiredest``
526 Require that the user pass a destination when running :hg:`update`.
526 Require that the user pass a destination when running :hg:`update`.
527 For example, :hg:`update .::` will be allowed, but a plain :hg:`update`
527 For example, :hg:`update .::` will be allowed, but a plain :hg:`update`
528 will be disallowed.
528 will be disallowed.
529 (default: False)
529 (default: False)
530
530
531 ``committemplate``
531 ``committemplate``
532 ------------------
532 ------------------
533
533
534 ``changeset``
534 ``changeset``
535 String: configuration in this section is used as the template to
535 String: configuration in this section is used as the template to
536 customize the text shown in the editor when committing.
536 customize the text shown in the editor when committing.
537
537
538 In addition to pre-defined template keywords, commit log specific one
538 In addition to pre-defined template keywords, commit log specific one
539 below can be used for customization:
539 below can be used for customization:
540
540
541 ``extramsg``
541 ``extramsg``
542 String: Extra message (typically 'Leave message empty to abort
542 String: Extra message (typically 'Leave message empty to abort
543 commit.'). This may be changed by some commands or extensions.
543 commit.'). This may be changed by some commands or extensions.
544
544
545 For example, the template configuration below shows as same text as
545 For example, the template configuration below shows as same text as
546 one shown by default::
546 one shown by default::
547
547
548 [committemplate]
548 [committemplate]
549 changeset = {desc}\n\n
549 changeset = {desc}\n\n
550 HG: Enter commit message. Lines beginning with 'HG:' are removed.
550 HG: Enter commit message. Lines beginning with 'HG:' are removed.
551 HG: {extramsg}
551 HG: {extramsg}
552 HG: --
552 HG: --
553 HG: user: {author}\n{ifeq(p2rev, "-1", "",
553 HG: user: {author}\n{ifeq(p2rev, "-1", "",
554 "HG: branch merge\n")
554 "HG: branch merge\n")
555 }HG: branch '{branch}'\n{if(activebookmark,
555 }HG: branch '{branch}'\n{if(activebookmark,
556 "HG: bookmark '{activebookmark}'\n") }{subrepos %
556 "HG: bookmark '{activebookmark}'\n") }{subrepos %
557 "HG: subrepo {subrepo}\n" }{file_adds %
557 "HG: subrepo {subrepo}\n" }{file_adds %
558 "HG: added {file}\n" }{file_mods %
558 "HG: added {file}\n" }{file_mods %
559 "HG: changed {file}\n" }{file_dels %
559 "HG: changed {file}\n" }{file_dels %
560 "HG: removed {file}\n" }{if(files, "",
560 "HG: removed {file}\n" }{if(files, "",
561 "HG: no files changed\n")}
561 "HG: no files changed\n")}
562
562
563 ``diff()``
563 ``diff()``
564 String: show the diff (see :hg:`help templates` for detail)
564 String: show the diff (see :hg:`help templates` for detail)
565
565
566 Sometimes it is helpful to show the diff of the changeset in the editor without
566 Sometimes it is helpful to show the diff of the changeset in the editor without
567 having to prefix 'HG: ' to each line so that highlighting works correctly. For
567 having to prefix 'HG: ' to each line so that highlighting works correctly. For
568 this, Mercurial provides a special string which will ignore everything below
568 this, Mercurial provides a special string which will ignore everything below
569 it::
569 it::
570
570
571 HG: ------------------------ >8 ------------------------
571 HG: ------------------------ >8 ------------------------
572
572
573 For example, the template configuration below will show the diff below the
573 For example, the template configuration below will show the diff below the
574 extra message::
574 extra message::
575
575
576 [committemplate]
576 [committemplate]
577 changeset = {desc}\n\n
577 changeset = {desc}\n\n
578 HG: Enter commit message. Lines beginning with 'HG:' are removed.
578 HG: Enter commit message. Lines beginning with 'HG:' are removed.
579 HG: {extramsg}
579 HG: {extramsg}
580 HG: ------------------------ >8 ------------------------
580 HG: ------------------------ >8 ------------------------
581 HG: Do not touch the line above.
581 HG: Do not touch the line above.
582 HG: Everything below will be removed.
582 HG: Everything below will be removed.
583 {diff()}
583 {diff()}
584
584
585 .. note::
585 .. note::
586
586
587 For some problematic encodings (see :hg:`help win32mbcs` for
587 For some problematic encodings (see :hg:`help win32mbcs` for
588 detail), this customization should be configured carefully, to
588 detail), this customization should be configured carefully, to
589 avoid showing broken characters.
589 avoid showing broken characters.
590
590
591 For example, if a multibyte character ending with backslash (0x5c) is
591 For example, if a multibyte character ending with backslash (0x5c) is
592 followed by the ASCII character 'n' in the customized template,
592 followed by the ASCII character 'n' in the customized template,
593 the sequence of backslash and 'n' is treated as line-feed unexpectedly
593 the sequence of backslash and 'n' is treated as line-feed unexpectedly
594 (and the multibyte character is broken, too).
594 (and the multibyte character is broken, too).
595
595
596 Customized template is used for commands below (``--edit`` may be
596 Customized template is used for commands below (``--edit`` may be
597 required):
597 required):
598
598
599 - :hg:`backout`
599 - :hg:`backout`
600 - :hg:`commit`
600 - :hg:`commit`
601 - :hg:`fetch` (for merge commit only)
601 - :hg:`fetch` (for merge commit only)
602 - :hg:`graft`
602 - :hg:`graft`
603 - :hg:`histedit`
603 - :hg:`histedit`
604 - :hg:`import`
604 - :hg:`import`
605 - :hg:`qfold`, :hg:`qnew` and :hg:`qrefresh`
605 - :hg:`qfold`, :hg:`qnew` and :hg:`qrefresh`
606 - :hg:`rebase`
606 - :hg:`rebase`
607 - :hg:`shelve`
607 - :hg:`shelve`
608 - :hg:`sign`
608 - :hg:`sign`
609 - :hg:`tag`
609 - :hg:`tag`
610 - :hg:`transplant`
610 - :hg:`transplant`
611
611
612 Configuring items below instead of ``changeset`` allows showing
612 Configuring items below instead of ``changeset`` allows showing
613 customized message only for specific actions, or showing different
613 customized message only for specific actions, or showing different
614 messages for each action.
614 messages for each action.
615
615
616 - ``changeset.backout`` for :hg:`backout`
616 - ``changeset.backout`` for :hg:`backout`
617 - ``changeset.commit.amend.merge`` for :hg:`commit --amend` on merges
617 - ``changeset.commit.amend.merge`` for :hg:`commit --amend` on merges
618 - ``changeset.commit.amend.normal`` for :hg:`commit --amend` on other
618 - ``changeset.commit.amend.normal`` for :hg:`commit --amend` on other
619 - ``changeset.commit.normal.merge`` for :hg:`commit` on merges
619 - ``changeset.commit.normal.merge`` for :hg:`commit` on merges
620 - ``changeset.commit.normal.normal`` for :hg:`commit` on other
620 - ``changeset.commit.normal.normal`` for :hg:`commit` on other
621 - ``changeset.fetch`` for :hg:`fetch` (impling merge commit)
621 - ``changeset.fetch`` for :hg:`fetch` (impling merge commit)
622 - ``changeset.gpg.sign`` for :hg:`sign`
622 - ``changeset.gpg.sign`` for :hg:`sign`
623 - ``changeset.graft`` for :hg:`graft`
623 - ``changeset.graft`` for :hg:`graft`
624 - ``changeset.histedit.edit`` for ``edit`` of :hg:`histedit`
624 - ``changeset.histedit.edit`` for ``edit`` of :hg:`histedit`
625 - ``changeset.histedit.fold`` for ``fold`` of :hg:`histedit`
625 - ``changeset.histedit.fold`` for ``fold`` of :hg:`histedit`
626 - ``changeset.histedit.mess`` for ``mess`` of :hg:`histedit`
626 - ``changeset.histedit.mess`` for ``mess`` of :hg:`histedit`
627 - ``changeset.histedit.pick`` for ``pick`` of :hg:`histedit`
627 - ``changeset.histedit.pick`` for ``pick`` of :hg:`histedit`
628 - ``changeset.import.bypass`` for :hg:`import --bypass`
628 - ``changeset.import.bypass`` for :hg:`import --bypass`
629 - ``changeset.import.normal.merge`` for :hg:`import` on merges
629 - ``changeset.import.normal.merge`` for :hg:`import` on merges
630 - ``changeset.import.normal.normal`` for :hg:`import` on other
630 - ``changeset.import.normal.normal`` for :hg:`import` on other
631 - ``changeset.mq.qnew`` for :hg:`qnew`
631 - ``changeset.mq.qnew`` for :hg:`qnew`
632 - ``changeset.mq.qfold`` for :hg:`qfold`
632 - ``changeset.mq.qfold`` for :hg:`qfold`
633 - ``changeset.mq.qrefresh`` for :hg:`qrefresh`
633 - ``changeset.mq.qrefresh`` for :hg:`qrefresh`
634 - ``changeset.rebase.collapse`` for :hg:`rebase --collapse`
634 - ``changeset.rebase.collapse`` for :hg:`rebase --collapse`
635 - ``changeset.rebase.merge`` for :hg:`rebase` on merges
635 - ``changeset.rebase.merge`` for :hg:`rebase` on merges
636 - ``changeset.rebase.normal`` for :hg:`rebase` on other
636 - ``changeset.rebase.normal`` for :hg:`rebase` on other
637 - ``changeset.shelve.shelve`` for :hg:`shelve`
637 - ``changeset.shelve.shelve`` for :hg:`shelve`
638 - ``changeset.tag.add`` for :hg:`tag` without ``--remove``
638 - ``changeset.tag.add`` for :hg:`tag` without ``--remove``
639 - ``changeset.tag.remove`` for :hg:`tag --remove`
639 - ``changeset.tag.remove`` for :hg:`tag --remove`
640 - ``changeset.transplant.merge`` for :hg:`transplant` on merges
640 - ``changeset.transplant.merge`` for :hg:`transplant` on merges
641 - ``changeset.transplant.normal`` for :hg:`transplant` on other
641 - ``changeset.transplant.normal`` for :hg:`transplant` on other
642
642
643 These dot-separated lists of names are treated as hierarchical ones.
643 These dot-separated lists of names are treated as hierarchical ones.
644 For example, ``changeset.tag.remove`` customizes the commit message
644 For example, ``changeset.tag.remove`` customizes the commit message
645 only for :hg:`tag --remove`, but ``changeset.tag`` customizes the
645 only for :hg:`tag --remove`, but ``changeset.tag`` customizes the
646 commit message for :hg:`tag` regardless of ``--remove`` option.
646 commit message for :hg:`tag` regardless of ``--remove`` option.
647
647
648 When the external editor is invoked for a commit, the corresponding
648 When the external editor is invoked for a commit, the corresponding
649 dot-separated list of names without the ``changeset.`` prefix
649 dot-separated list of names without the ``changeset.`` prefix
650 (e.g. ``commit.normal.normal``) is in the ``HGEDITFORM`` environment
650 (e.g. ``commit.normal.normal``) is in the ``HGEDITFORM`` environment
651 variable.
651 variable.
652
652
653 In this section, items other than ``changeset`` can be referred from
653 In this section, items other than ``changeset`` can be referred from
654 others. For example, the configuration to list committed files up
654 others. For example, the configuration to list committed files up
655 below can be referred as ``{listupfiles}``::
655 below can be referred as ``{listupfiles}``::
656
656
657 [committemplate]
657 [committemplate]
658 listupfiles = {file_adds %
658 listupfiles = {file_adds %
659 "HG: added {file}\n" }{file_mods %
659 "HG: added {file}\n" }{file_mods %
660 "HG: changed {file}\n" }{file_dels %
660 "HG: changed {file}\n" }{file_dels %
661 "HG: removed {file}\n" }{if(files, "",
661 "HG: removed {file}\n" }{if(files, "",
662 "HG: no files changed\n")}
662 "HG: no files changed\n")}
663
663
664 ``decode/encode``
664 ``decode/encode``
665 -----------------
665 -----------------
666
666
667 Filters for transforming files on checkout/checkin. This would
667 Filters for transforming files on checkout/checkin. This would
668 typically be used for newline processing or other
668 typically be used for newline processing or other
669 localization/canonicalization of files.
669 localization/canonicalization of files.
670
670
671 Filters consist of a filter pattern followed by a filter command.
671 Filters consist of a filter pattern followed by a filter command.
672 Filter patterns are globs by default, rooted at the repository root.
672 Filter patterns are globs by default, rooted at the repository root.
673 For example, to match any file ending in ``.txt`` in the root
673 For example, to match any file ending in ``.txt`` in the root
674 directory only, use the pattern ``*.txt``. To match any file ending
674 directory only, use the pattern ``*.txt``. To match any file ending
675 in ``.c`` anywhere in the repository, use the pattern ``**.c``.
675 in ``.c`` anywhere in the repository, use the pattern ``**.c``.
676 For each file only the first matching filter applies.
676 For each file only the first matching filter applies.
677
677
678 The filter command can start with a specifier, either ``pipe:`` or
678 The filter command can start with a specifier, either ``pipe:`` or
679 ``tempfile:``. If no specifier is given, ``pipe:`` is used by default.
679 ``tempfile:``. If no specifier is given, ``pipe:`` is used by default.
680
680
681 A ``pipe:`` command must accept data on stdin and return the transformed
681 A ``pipe:`` command must accept data on stdin and return the transformed
682 data on stdout.
682 data on stdout.
683
683
684 Pipe example::
684 Pipe example::
685
685
686 [encode]
686 [encode]
687 # uncompress gzip files on checkin to improve delta compression
687 # uncompress gzip files on checkin to improve delta compression
688 # note: not necessarily a good idea, just an example
688 # note: not necessarily a good idea, just an example
689 *.gz = pipe: gunzip
689 *.gz = pipe: gunzip
690
690
691 [decode]
691 [decode]
692 # recompress gzip files when writing them to the working dir (we
692 # recompress gzip files when writing them to the working dir (we
693 # can safely omit "pipe:", because it's the default)
693 # can safely omit "pipe:", because it's the default)
694 *.gz = gzip
694 *.gz = gzip
695
695
696 A ``tempfile:`` command is a template. The string ``INFILE`` is replaced
696 A ``tempfile:`` command is a template. The string ``INFILE`` is replaced
697 with the name of a temporary file that contains the data to be
697 with the name of a temporary file that contains the data to be
698 filtered by the command. The string ``OUTFILE`` is replaced with the name
698 filtered by the command. The string ``OUTFILE`` is replaced with the name
699 of an empty temporary file, where the filtered data must be written by
699 of an empty temporary file, where the filtered data must be written by
700 the command.
700 the command.
701
701
702 .. container:: windows
702 .. container:: windows
703
703
704 .. note::
704 .. note::
705
705
706 The tempfile mechanism is recommended for Windows systems,
706 The tempfile mechanism is recommended for Windows systems,
707 where the standard shell I/O redirection operators often have
707 where the standard shell I/O redirection operators often have
708 strange effects and may corrupt the contents of your files.
708 strange effects and may corrupt the contents of your files.
709
709
710 This filter mechanism is used internally by the ``eol`` extension to
710 This filter mechanism is used internally by the ``eol`` extension to
711 translate line ending characters between Windows (CRLF) and Unix (LF)
711 translate line ending characters between Windows (CRLF) and Unix (LF)
712 format. We suggest you use the ``eol`` extension for convenience.
712 format. We suggest you use the ``eol`` extension for convenience.
713
713
714
714
715 ``defaults``
715 ``defaults``
716 ------------
716 ------------
717
717
718 (defaults are deprecated. Don't use them. Use aliases instead.)
718 (defaults are deprecated. Don't use them. Use aliases instead.)
719
719
720 Use the ``[defaults]`` section to define command defaults, i.e. the
720 Use the ``[defaults]`` section to define command defaults, i.e. the
721 default options/arguments to pass to the specified commands.
721 default options/arguments to pass to the specified commands.
722
722
723 The following example makes :hg:`log` run in verbose mode, and
723 The following example makes :hg:`log` run in verbose mode, and
724 :hg:`status` show only the modified files, by default::
724 :hg:`status` show only the modified files, by default::
725
725
726 [defaults]
726 [defaults]
727 log = -v
727 log = -v
728 status = -m
728 status = -m
729
729
730 The actual commands, instead of their aliases, must be used when
730 The actual commands, instead of their aliases, must be used when
731 defining command defaults. The command defaults will also be applied
731 defining command defaults. The command defaults will also be applied
732 to the aliases of the commands defined.
732 to the aliases of the commands defined.
733
733
734
734
735 ``diff``
735 ``diff``
736 --------
736 --------
737
737
738 Settings used when displaying diffs. Everything except for ``unified``
738 Settings used when displaying diffs. Everything except for ``unified``
739 is a Boolean and defaults to False. See :hg:`help config.annotate`
739 is a Boolean and defaults to False. See :hg:`help config.annotate`
740 for related options for the annotate command.
740 for related options for the annotate command.
741
741
742 ``git``
742 ``git``
743 Use git extended diff format.
743 Use git extended diff format.
744
744
745 ``nobinary``
745 ``nobinary``
746 Omit git binary patches.
746 Omit git binary patches.
747
747
748 ``nodates``
748 ``nodates``
749 Don't include dates in diff headers.
749 Don't include dates in diff headers.
750
750
751 ``noprefix``
751 ``noprefix``
752 Omit 'a/' and 'b/' prefixes from filenames. Ignored in plain mode.
752 Omit 'a/' and 'b/' prefixes from filenames. Ignored in plain mode.
753
753
754 ``showfunc``
754 ``showfunc``
755 Show which function each change is in.
755 Show which function each change is in.
756
756
757 ``ignorews``
757 ``ignorews``
758 Ignore white space when comparing lines.
758 Ignore white space when comparing lines.
759
759
760 ``ignorewsamount``
760 ``ignorewsamount``
761 Ignore changes in the amount of white space.
761 Ignore changes in the amount of white space.
762
762
763 ``ignoreblanklines``
763 ``ignoreblanklines``
764 Ignore changes whose lines are all blank.
764 Ignore changes whose lines are all blank.
765
765
766 ``unified``
766 ``unified``
767 Number of lines of context to show.
767 Number of lines of context to show.
768
768
769 ``word-diff``
769 ``word-diff``
770 Highlight changed words.
770 Highlight changed words.
771
771
772 ``email``
772 ``email``
773 ---------
773 ---------
774
774
775 Settings for extensions that send email messages.
775 Settings for extensions that send email messages.
776
776
777 ``from``
777 ``from``
778 Optional. Email address to use in "From" header and SMTP envelope
778 Optional. Email address to use in "From" header and SMTP envelope
779 of outgoing messages.
779 of outgoing messages.
780
780
781 ``to``
781 ``to``
782 Optional. Comma-separated list of recipients' email addresses.
782 Optional. Comma-separated list of recipients' email addresses.
783
783
784 ``cc``
784 ``cc``
785 Optional. Comma-separated list of carbon copy recipients'
785 Optional. Comma-separated list of carbon copy recipients'
786 email addresses.
786 email addresses.
787
787
788 ``bcc``
788 ``bcc``
789 Optional. Comma-separated list of blind carbon copy recipients'
789 Optional. Comma-separated list of blind carbon copy recipients'
790 email addresses.
790 email addresses.
791
791
792 ``method``
792 ``method``
793 Optional. Method to use to send email messages. If value is ``smtp``
793 Optional. Method to use to send email messages. If value is ``smtp``
794 (default), use SMTP (see the ``[smtp]`` section for configuration).
794 (default), use SMTP (see the ``[smtp]`` section for configuration).
795 Otherwise, use as name of program to run that acts like sendmail
795 Otherwise, use as name of program to run that acts like sendmail
796 (takes ``-f`` option for sender, list of recipients on command line,
796 (takes ``-f`` option for sender, list of recipients on command line,
797 message on stdin). Normally, setting this to ``sendmail`` or
797 message on stdin). Normally, setting this to ``sendmail`` or
798 ``/usr/sbin/sendmail`` is enough to use sendmail to send messages.
798 ``/usr/sbin/sendmail`` is enough to use sendmail to send messages.
799
799
800 ``charsets``
800 ``charsets``
801 Optional. Comma-separated list of character sets considered
801 Optional. Comma-separated list of character sets considered
802 convenient for recipients. Addresses, headers, and parts not
802 convenient for recipients. Addresses, headers, and parts not
803 containing patches of outgoing messages will be encoded in the
803 containing patches of outgoing messages will be encoded in the
804 first character set to which conversion from local encoding
804 first character set to which conversion from local encoding
805 (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
805 (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
806 conversion fails, the text in question is sent as is.
806 conversion fails, the text in question is sent as is.
807 (default: '')
807 (default: '')
808
808
809 Order of outgoing email character sets:
809 Order of outgoing email character sets:
810
810
811 1. ``us-ascii``: always first, regardless of settings
811 1. ``us-ascii``: always first, regardless of settings
812 2. ``email.charsets``: in order given by user
812 2. ``email.charsets``: in order given by user
813 3. ``ui.fallbackencoding``: if not in email.charsets
813 3. ``ui.fallbackencoding``: if not in email.charsets
814 4. ``$HGENCODING``: if not in email.charsets
814 4. ``$HGENCODING``: if not in email.charsets
815 5. ``utf-8``: always last, regardless of settings
815 5. ``utf-8``: always last, regardless of settings
816
816
817 Email example::
817 Email example::
818
818
819 [email]
819 [email]
820 from = Joseph User <joe.user@example.com>
820 from = Joseph User <joe.user@example.com>
821 method = /usr/sbin/sendmail
821 method = /usr/sbin/sendmail
822 # charsets for western Europeans
822 # charsets for western Europeans
823 # us-ascii, utf-8 omitted, as they are tried first and last
823 # us-ascii, utf-8 omitted, as they are tried first and last
824 charsets = iso-8859-1, iso-8859-15, windows-1252
824 charsets = iso-8859-1, iso-8859-15, windows-1252
825
825
826
826
827 ``extensions``
827 ``extensions``
828 --------------
828 --------------
829
829
830 Mercurial has an extension mechanism for adding new features. To
830 Mercurial has an extension mechanism for adding new features. To
831 enable an extension, create an entry for it in this section.
831 enable an extension, create an entry for it in this section.
832
832
833 If you know that the extension is already in Python's search path,
833 If you know that the extension is already in Python's search path,
834 you can give the name of the module, followed by ``=``, with nothing
834 you can give the name of the module, followed by ``=``, with nothing
835 after the ``=``.
835 after the ``=``.
836
836
837 Otherwise, give a name that you choose, followed by ``=``, followed by
837 Otherwise, give a name that you choose, followed by ``=``, followed by
838 the path to the ``.py`` file (including the file name extension) that
838 the path to the ``.py`` file (including the file name extension) that
839 defines the extension.
839 defines the extension.
840
840
841 To explicitly disable an extension that is enabled in an hgrc of
841 To explicitly disable an extension that is enabled in an hgrc of
842 broader scope, prepend its path with ``!``, as in ``foo = !/ext/path``
842 broader scope, prepend its path with ``!``, as in ``foo = !/ext/path``
843 or ``foo = !`` when path is not supplied.
843 or ``foo = !`` when path is not supplied.
844
844
845 Example for ``~/.hgrc``::
845 Example for ``~/.hgrc``::
846
846
847 [extensions]
847 [extensions]
848 # (the churn extension will get loaded from Mercurial's path)
848 # (the churn extension will get loaded from Mercurial's path)
849 churn =
849 churn =
850 # (this extension will get loaded from the file specified)
850 # (this extension will get loaded from the file specified)
851 myfeature = ~/.hgext/myfeature.py
851 myfeature = ~/.hgext/myfeature.py
852
852
853
853
854 ``format``
854 ``format``
855 ----------
855 ----------
856
856
857 Configuration that controls the repository format. Newer format options are more
857 Configuration that controls the repository format. Newer format options are more
858 powerful, but incompatible with some older versions of Mercurial. Format options
858 powerful, but incompatible with some older versions of Mercurial. Format options
859 are considered at repository initialization only. You need to make a new clone
859 are considered at repository initialization only. You need to make a new clone
860 for config changes to be taken into account.
860 for config changes to be taken into account.
861
861
862 For more details about repository format and version compatibility, see
862 For more details about repository format and version compatibility, see
863 https://www.mercurial-scm.org/wiki/MissingRequirement
863 https://www.mercurial-scm.org/wiki/MissingRequirement
864
864
865 ``usegeneraldelta``
865 ``usegeneraldelta``
866 Enable or disable the "generaldelta" repository format which improves
866 Enable or disable the "generaldelta" repository format which improves
867 repository compression by allowing "revlog" to store deltas against
867 repository compression by allowing "revlog" to store deltas against
868 arbitrary revisions instead of the previously stored one. This provides
868 arbitrary revisions instead of the previously stored one. This provides
869 significant improvement for repositories with branches.
869 significant improvement for repositories with branches.
870
870
871 Repositories with this on-disk format require Mercurial version 1.9.
871 Repositories with this on-disk format require Mercurial version 1.9.
872
872
873 Enabled by default.
873 Enabled by default.
874
874
875 ``dotencode``
875 ``dotencode``
876 Enable or disable the "dotencode" repository format which enhances
876 Enable or disable the "dotencode" repository format which enhances
877 the "fncache" repository format (which has to be enabled to use
877 the "fncache" repository format (which has to be enabled to use
878 dotencode) to avoid issues with filenames starting with "._" on
878 dotencode) to avoid issues with filenames starting with "._" on
879 Mac OS X and spaces on Windows.
879 Mac OS X and spaces on Windows.
880
880
881 Repositories with this on-disk format require Mercurial version 1.7.
881 Repositories with this on-disk format require Mercurial version 1.7.
882
882
883 Enabled by default.
883 Enabled by default.
884
884
885 ``usefncache``
885 ``usefncache``
886 Enable or disable the "fncache" repository format which enhances
886 Enable or disable the "fncache" repository format which enhances
887 the "store" repository format (which has to be enabled to use
887 the "store" repository format (which has to be enabled to use
888 fncache) to allow longer filenames and avoids using Windows
888 fncache) to allow longer filenames and avoids using Windows
889 reserved names, e.g. "nul".
889 reserved names, e.g. "nul".
890
890
891 Repositories with this on-disk format require Mercurial version 1.1.
891 Repositories with this on-disk format require Mercurial version 1.1.
892
892
893 Enabled by default.
893 Enabled by default.
894
894
895 ``use-persistent-nodemap``
895 ``use-persistent-nodemap``
896 Enable or disable the "persistent-nodemap" feature which improves
896 Enable or disable the "persistent-nodemap" feature which improves
897 performance if the rust extensions are available.
897 performance if the rust extensions are available.
898
898
899 The "persistence-nodemap" persist the "node -> rev" on disk removing the
899 The "persistence-nodemap" persist the "node -> rev" on disk removing the
900 need to dynamically build that mapping for each Mercurial invocation. This
900 need to dynamically build that mapping for each Mercurial invocation. This
901 significantly reduce the startup cost of various local and server-side
901 significantly reduce the startup cost of various local and server-side
902 operation for larger repository.
902 operation for larger repository.
903
903
904 The performance improving version of this feature is currently only
904 The performance improving version of this feature is currently only
905 implemented in Rust, so people not using a version of Mercurial compiled
905 implemented in Rust, so people not using a version of Mercurial compiled
906 with the Rust part might actually suffer some slowdown. For this reason,
906 with the Rust part might actually suffer some slowdown. For this reason,
907 Such version will by default refuse to access such repositories. That
907 Such version will by default refuse to access such repositories. That
908 behavior can be controlled by configuration. Check
908 behavior can be controlled by configuration. Check
909 :hg:`help config.storage.revlog.persistent-nodemap.slowpath` for details.
909 :hg:`help config.storage.revlog.persistent-nodemap.slowpath` for details.
910
910
911 Repository with this on-disk format require Mercurial version 5.4 or above.
911 Repository with this on-disk format require Mercurial version 5.4 or above.
912
912
913 Disabled by default.
913 Disabled by default.
914
914
915 ``use-share-safe``
915 ``use-share-safe``
916 Enforce "safe" behaviors for all "shares" that access this repository.
916 Enforce "safe" behaviors for all "shares" that access this repository.
917
917
918 With this feature, "shares" using this repository as a source will:
918 With this feature, "shares" using this repository as a source will:
919
919
920 * read the source repository's configuration (`<source>/.hg/hgrc`).
920 * read the source repository's configuration (`<source>/.hg/hgrc`).
921 * read and use the source repository's "requirements"
921 * read and use the source repository's "requirements"
922 (except the working copy specific one).
922 (except the working copy specific one).
923
923
924 Without this feature, "shares" using this repository as a source will:
924 Without this feature, "shares" using this repository as a source will:
925
925
926 * keep tracking the repository "requirements" in the share only, ignoring
926 * keep tracking the repository "requirements" in the share only, ignoring
927 the source "requirements", possibly diverging from them.
927 the source "requirements", possibly diverging from them.
928 * ignore source repository config. This can create problems, like silently
928 * ignore source repository config. This can create problems, like silently
929 ignoring important hooks.
929 ignoring important hooks.
930
930
931 Beware that existing shares will not be upgraded/downgraded, and by
931 Beware that existing shares will not be upgraded/downgraded, and by
932 default, Mercurial will refuse to interact with them until the mismatch
932 default, Mercurial will refuse to interact with them until the mismatch
933 is resolved. See :hg:`help config share.safe-mismatch.source-safe` and
933 is resolved. See :hg:`help config share.safe-mismatch.source-safe` and
934 :hg:`help config share.safe-mismatch.source-not-safe` for details.
934 :hg:`help config share.safe-mismatch.source-not-safe` for details.
935
935
936 Introduced in Mercurial 5.7.
936 Introduced in Mercurial 5.7.
937
937
938 Disabled by default.
938 Disabled by default.
939
939
940 ``usestore``
940 ``usestore``
941 Enable or disable the "store" repository format which improves
941 Enable or disable the "store" repository format which improves
942 compatibility with systems that fold case or otherwise mangle
942 compatibility with systems that fold case or otherwise mangle
943 filenames. Disabling this option will allow you to store longer filenames
943 filenames. Disabling this option will allow you to store longer filenames
944 in some situations at the expense of compatibility.
944 in some situations at the expense of compatibility.
945
945
946 Repositories with this on-disk format require Mercurial version 0.9.4.
946 Repositories with this on-disk format require Mercurial version 0.9.4.
947
947
948 Enabled by default.
948 Enabled by default.
949
949
950 ``sparse-revlog``
950 ``sparse-revlog``
951 Enable or disable the ``sparse-revlog`` delta strategy. This format improves
951 Enable or disable the ``sparse-revlog`` delta strategy. This format improves
952 delta re-use inside revlog. For very branchy repositories, it results in a
952 delta re-use inside revlog. For very branchy repositories, it results in a
953 smaller store. For repositories with many revisions, it also helps
953 smaller store. For repositories with many revisions, it also helps
954 performance (by using shortened delta chains.)
954 performance (by using shortened delta chains.)
955
955
956 Repositories with this on-disk format require Mercurial version 4.7
956 Repositories with this on-disk format require Mercurial version 4.7
957
957
958 Enabled by default.
958 Enabled by default.
959
959
960 ``revlog-compression``
960 ``revlog-compression``
961 Compression algorithm used by revlog. Supported values are `zlib` and
961 Compression algorithm used by revlog. Supported values are `zlib` and
962 `zstd`. The `zlib` engine is the historical default of Mercurial. `zstd` is
962 `zstd`. The `zlib` engine is the historical default of Mercurial. `zstd` is
963 a newer format that is usually a net win over `zlib`, operating faster at
963 a newer format that is usually a net win over `zlib`, operating faster at
964 better compression rates. Use `zstd` to reduce CPU usage. Multiple values
964 better compression rates. Use `zstd` to reduce CPU usage. Multiple values
965 can be specified, the first available one will be used.
965 can be specified, the first available one will be used.
966
966
967 On some systems, the Mercurial installation may lack `zstd` support.
967 On some systems, the Mercurial installation may lack `zstd` support.
968
968
969 Default is `zlib`.
969 Default is `zlib`.
970
970
971 ``bookmarks-in-store``
971 ``bookmarks-in-store``
972 Store bookmarks in .hg/store/. This means that bookmarks are shared when
972 Store bookmarks in .hg/store/. This means that bookmarks are shared when
973 using `hg share` regardless of the `-B` option.
973 using `hg share` regardless of the `-B` option.
974
974
975 Repositories with this on-disk format require Mercurial version 5.1.
975 Repositories with this on-disk format require Mercurial version 5.1.
976
976
977 Disabled by default.
977 Disabled by default.
978
978
979
979
980 ``graph``
980 ``graph``
981 ---------
981 ---------
982
982
983 Web graph view configuration. This section let you change graph
983 Web graph view configuration. This section let you change graph
984 elements display properties by branches, for instance to make the
984 elements display properties by branches, for instance to make the
985 ``default`` branch stand out.
985 ``default`` branch stand out.
986
986
987 Each line has the following format::
987 Each line has the following format::
988
988
989 <branch>.<argument> = <value>
989 <branch>.<argument> = <value>
990
990
991 where ``<branch>`` is the name of the branch being
991 where ``<branch>`` is the name of the branch being
992 customized. Example::
992 customized. Example::
993
993
994 [graph]
994 [graph]
995 # 2px width
995 # 2px width
996 default.width = 2
996 default.width = 2
997 # red color
997 # red color
998 default.color = FF0000
998 default.color = FF0000
999
999
1000 Supported arguments:
1000 Supported arguments:
1001
1001
1002 ``width``
1002 ``width``
1003 Set branch edges width in pixels.
1003 Set branch edges width in pixels.
1004
1004
1005 ``color``
1005 ``color``
1006 Set branch edges color in hexadecimal RGB notation.
1006 Set branch edges color in hexadecimal RGB notation.
1007
1007
1008 ``hooks``
1008 ``hooks``
1009 ---------
1009 ---------
1010
1010
1011 Commands or Python functions that get automatically executed by
1011 Commands or Python functions that get automatically executed by
1012 various actions such as starting or finishing a commit. Multiple
1012 various actions such as starting or finishing a commit. Multiple
1013 hooks can be run for the same action by appending a suffix to the
1013 hooks can be run for the same action by appending a suffix to the
1014 action. Overriding a site-wide hook can be done by changing its
1014 action. Overriding a site-wide hook can be done by changing its
1015 value or setting it to an empty string. Hooks can be prioritized
1015 value or setting it to an empty string. Hooks can be prioritized
1016 by adding a prefix of ``priority.`` to the hook name on a new line
1016 by adding a prefix of ``priority.`` to the hook name on a new line
1017 and setting the priority. The default priority is 0.
1017 and setting the priority. The default priority is 0.
1018
1018
1019 Example ``.hg/hgrc``::
1019 Example ``.hg/hgrc``::
1020
1020
1021 [hooks]
1021 [hooks]
1022 # update working directory after adding changesets
1022 # update working directory after adding changesets
1023 changegroup.update = hg update
1023 changegroup.update = hg update
1024 # do not use the site-wide hook
1024 # do not use the site-wide hook
1025 incoming =
1025 incoming =
1026 incoming.email = /my/email/hook
1026 incoming.email = /my/email/hook
1027 incoming.autobuild = /my/build/hook
1027 incoming.autobuild = /my/build/hook
1028 # force autobuild hook to run before other incoming hooks
1028 # force autobuild hook to run before other incoming hooks
1029 priority.incoming.autobuild = 1
1029 priority.incoming.autobuild = 1
1030 ### control HGPLAIN setting when running autobuild hook
1031 # HGPLAIN always set (default from Mercurial 5.7)
1032 incoming.autobuild:run-with-plain = yes
1033 # HGPLAIN never set
1034 incoming.autobuild:run-with-plain = no
1030
1035
1031 Most hooks are run with environment variables set that give useful
1036 Most hooks are run with environment variables set that give useful
1032 additional information. For each hook below, the environment variables
1037 additional information. For each hook below, the environment variables
1033 it is passed are listed with names in the form ``$HG_foo``. The
1038 it is passed are listed with names in the form ``$HG_foo``. The
1034 ``$HG_HOOKTYPE`` and ``$HG_HOOKNAME`` variables are set for all hooks.
1039 ``$HG_HOOKTYPE`` and ``$HG_HOOKNAME`` variables are set for all hooks.
1035 They contain the type of hook which triggered the run and the full name
1040 They contain the type of hook which triggered the run and the full name
1036 of the hook in the config, respectively. In the example above, this will
1041 of the hook in the config, respectively. In the example above, this will
1037 be ``$HG_HOOKTYPE=incoming`` and ``$HG_HOOKNAME=incoming.email``.
1042 be ``$HG_HOOKTYPE=incoming`` and ``$HG_HOOKNAME=incoming.email``.
1038
1043
1039 .. container:: windows
1044 .. container:: windows
1040
1045
1041 Some basic Unix syntax can be enabled for portability, including ``$VAR``
1046 Some basic Unix syntax can be enabled for portability, including ``$VAR``
1042 and ``${VAR}`` style variables. A ``~`` followed by ``\`` or ``/`` will
1047 and ``${VAR}`` style variables. A ``~`` followed by ``\`` or ``/`` will
1043 be expanded to ``%USERPROFILE%`` to simulate a subset of tilde expansion
1048 be expanded to ``%USERPROFILE%`` to simulate a subset of tilde expansion
1044 on Unix. To use a literal ``$`` or ``~``, it must be escaped with a back
1049 on Unix. To use a literal ``$`` or ``~``, it must be escaped with a back
1045 slash or inside of a strong quote. Strong quotes will be replaced by
1050 slash or inside of a strong quote. Strong quotes will be replaced by
1046 double quotes after processing.
1051 double quotes after processing.
1047
1052
1048 This feature is enabled by adding a prefix of ``tonative.`` to the hook
1053 This feature is enabled by adding a prefix of ``tonative.`` to the hook
1049 name on a new line, and setting it to ``True``. For example::
1054 name on a new line, and setting it to ``True``. For example::
1050
1055
1051 [hooks]
1056 [hooks]
1052 incoming.autobuild = /my/build/hook
1057 incoming.autobuild = /my/build/hook
1053 # enable translation to cmd.exe syntax for autobuild hook
1058 # enable translation to cmd.exe syntax for autobuild hook
1054 tonative.incoming.autobuild = True
1059 tonative.incoming.autobuild = True
1055
1060
1056 ``changegroup``
1061 ``changegroup``
1057 Run after a changegroup has been added via push, pull or unbundle. The ID of
1062 Run after a changegroup has been added via push, pull or unbundle. The ID of
1058 the first new changeset is in ``$HG_NODE`` and last is in ``$HG_NODE_LAST``.
1063 the first new changeset is in ``$HG_NODE`` and last is in ``$HG_NODE_LAST``.
1059 The URL from which changes came is in ``$HG_URL``.
1064 The URL from which changes came is in ``$HG_URL``.
1060
1065
1061 ``commit``
1066 ``commit``
1062 Run after a changeset has been created in the local repository. The ID
1067 Run after a changeset has been created in the local repository. The ID
1063 of the newly created changeset is in ``$HG_NODE``. Parent changeset
1068 of the newly created changeset is in ``$HG_NODE``. Parent changeset
1064 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1069 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1065
1070
1066 ``incoming``
1071 ``incoming``
1067 Run after a changeset has been pulled, pushed, or unbundled into
1072 Run after a changeset has been pulled, pushed, or unbundled into
1068 the local repository. The ID of the newly arrived changeset is in
1073 the local repository. The ID of the newly arrived changeset is in
1069 ``$HG_NODE``. The URL that was source of the changes is in ``$HG_URL``.
1074 ``$HG_NODE``. The URL that was source of the changes is in ``$HG_URL``.
1070
1075
1071 ``outgoing``
1076 ``outgoing``
1072 Run after sending changes from the local repository to another. The ID of
1077 Run after sending changes from the local repository to another. The ID of
1073 first changeset sent is in ``$HG_NODE``. The source of operation is in
1078 first changeset sent is in ``$HG_NODE``. The source of operation is in
1074 ``$HG_SOURCE``. Also see :hg:`help config.hooks.preoutgoing`.
1079 ``$HG_SOURCE``. Also see :hg:`help config.hooks.preoutgoing`.
1075
1080
1076 ``post-<command>``
1081 ``post-<command>``
1077 Run after successful invocations of the associated command. The
1082 Run after successful invocations of the associated command. The
1078 contents of the command line are passed as ``$HG_ARGS`` and the result
1083 contents of the command line are passed as ``$HG_ARGS`` and the result
1079 code in ``$HG_RESULT``. Parsed command line arguments are passed as
1084 code in ``$HG_RESULT``. Parsed command line arguments are passed as
1080 ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
1085 ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
1081 the python data internally passed to <command>. ``$HG_OPTS`` is a
1086 the python data internally passed to <command>. ``$HG_OPTS`` is a
1082 dictionary of options (with unspecified options set to their defaults).
1087 dictionary of options (with unspecified options set to their defaults).
1083 ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
1088 ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
1084
1089
1085 ``fail-<command>``
1090 ``fail-<command>``
1086 Run after a failed invocation of an associated command. The contents
1091 Run after a failed invocation of an associated command. The contents
1087 of the command line are passed as ``$HG_ARGS``. Parsed command line
1092 of the command line are passed as ``$HG_ARGS``. Parsed command line
1088 arguments are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain
1093 arguments are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain
1089 string representations of the python data internally passed to
1094 string representations of the python data internally passed to
1090 <command>. ``$HG_OPTS`` is a dictionary of options (with unspecified
1095 <command>. ``$HG_OPTS`` is a dictionary of options (with unspecified
1091 options set to their defaults). ``$HG_PATS`` is a list of arguments.
1096 options set to their defaults). ``$HG_PATS`` is a list of arguments.
1092 Hook failure is ignored.
1097 Hook failure is ignored.
1093
1098
1094 ``pre-<command>``
1099 ``pre-<command>``
1095 Run before executing the associated command. The contents of the
1100 Run before executing the associated command. The contents of the
1096 command line are passed as ``$HG_ARGS``. Parsed command line arguments
1101 command line are passed as ``$HG_ARGS``. Parsed command line arguments
1097 are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
1102 are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
1098 representations of the data internally passed to <command>. ``$HG_OPTS``
1103 representations of the data internally passed to <command>. ``$HG_OPTS``
1099 is a dictionary of options (with unspecified options set to their
1104 is a dictionary of options (with unspecified options set to their
1100 defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
1105 defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
1101 failure, the command doesn't execute and Mercurial returns the failure
1106 failure, the command doesn't execute and Mercurial returns the failure
1102 code.
1107 code.
1103
1108
1104 ``prechangegroup``
1109 ``prechangegroup``
1105 Run before a changegroup is added via push, pull or unbundle. Exit
1110 Run before a changegroup is added via push, pull or unbundle. Exit
1106 status 0 allows the changegroup to proceed. A non-zero status will
1111 status 0 allows the changegroup to proceed. A non-zero status will
1107 cause the push, pull or unbundle to fail. The URL from which changes
1112 cause the push, pull or unbundle to fail. The URL from which changes
1108 will come is in ``$HG_URL``.
1113 will come is in ``$HG_URL``.
1109
1114
1110 ``precommit``
1115 ``precommit``
1111 Run before starting a local commit. Exit status 0 allows the
1116 Run before starting a local commit. Exit status 0 allows the
1112 commit to proceed. A non-zero status will cause the commit to fail.
1117 commit to proceed. A non-zero status will cause the commit to fail.
1113 Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1118 Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1114
1119
1115 ``prelistkeys``
1120 ``prelistkeys``
1116 Run before listing pushkeys (like bookmarks) in the
1121 Run before listing pushkeys (like bookmarks) in the
1117 repository. A non-zero status will cause failure. The key namespace is
1122 repository. A non-zero status will cause failure. The key namespace is
1118 in ``$HG_NAMESPACE``.
1123 in ``$HG_NAMESPACE``.
1119
1124
1120 ``preoutgoing``
1125 ``preoutgoing``
1121 Run before collecting changes to send from the local repository to
1126 Run before collecting changes to send from the local repository to
1122 another. A non-zero status will cause failure. This lets you prevent
1127 another. A non-zero status will cause failure. This lets you prevent
1123 pull over HTTP or SSH. It can also prevent propagating commits (via
1128 pull over HTTP or SSH. It can also prevent propagating commits (via
1124 local pull, push (outbound) or bundle commands), but not completely,
1129 local pull, push (outbound) or bundle commands), but not completely,
1125 since you can just copy files instead. The source of operation is in
1130 since you can just copy files instead. The source of operation is in
1126 ``$HG_SOURCE``. If "serve", the operation is happening on behalf of a remote
1131 ``$HG_SOURCE``. If "serve", the operation is happening on behalf of a remote
1127 SSH or HTTP repository. If "push", "pull" or "bundle", the operation
1132 SSH or HTTP repository. If "push", "pull" or "bundle", the operation
1128 is happening on behalf of a repository on same system.
1133 is happening on behalf of a repository on same system.
1129
1134
1130 ``prepushkey``
1135 ``prepushkey``
1131 Run before a pushkey (like a bookmark) is added to the
1136 Run before a pushkey (like a bookmark) is added to the
1132 repository. A non-zero status will cause the key to be rejected. The
1137 repository. A non-zero status will cause the key to be rejected. The
1133 key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,
1138 key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,
1134 the old value (if any) is in ``$HG_OLD``, and the new value is in
1139 the old value (if any) is in ``$HG_OLD``, and the new value is in
1135 ``$HG_NEW``.
1140 ``$HG_NEW``.
1136
1141
1137 ``pretag``
1142 ``pretag``
1138 Run before creating a tag. Exit status 0 allows the tag to be
1143 Run before creating a tag. Exit status 0 allows the tag to be
1139 created. A non-zero status will cause the tag to fail. The ID of the
1144 created. A non-zero status will cause the tag to fail. The ID of the
1140 changeset to tag is in ``$HG_NODE``. The name of tag is in ``$HG_TAG``. The
1145 changeset to tag is in ``$HG_NODE``. The name of tag is in ``$HG_TAG``. The
1141 tag is local if ``$HG_LOCAL=1``, or in the repository if ``$HG_LOCAL=0``.
1146 tag is local if ``$HG_LOCAL=1``, or in the repository if ``$HG_LOCAL=0``.
1142
1147
1143 ``pretxnopen``
1148 ``pretxnopen``
1144 Run before any new repository transaction is open. The reason for the
1149 Run before any new repository transaction is open. The reason for the
1145 transaction will be in ``$HG_TXNNAME``, and a unique identifier for the
1150 transaction will be in ``$HG_TXNNAME``, and a unique identifier for the
1146 transaction will be in ``HG_TXNID``. A non-zero status will prevent the
1151 transaction will be in ``HG_TXNID``. A non-zero status will prevent the
1147 transaction from being opened.
1152 transaction from being opened.
1148
1153
1149 ``pretxnclose``
1154 ``pretxnclose``
1150 Run right before the transaction is actually finalized. Any repository change
1155 Run right before the transaction is actually finalized. Any repository change
1151 will be visible to the hook program. This lets you validate the transaction
1156 will be visible to the hook program. This lets you validate the transaction
1152 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1157 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1153 status will cause the transaction to be rolled back. The reason for the
1158 status will cause the transaction to be rolled back. The reason for the
1154 transaction opening will be in ``$HG_TXNNAME``, and a unique identifier for
1159 transaction opening will be in ``$HG_TXNNAME``, and a unique identifier for
1155 the transaction will be in ``HG_TXNID``. The rest of the available data will
1160 the transaction will be in ``HG_TXNID``. The rest of the available data will
1156 vary according the transaction type. New changesets will add ``$HG_NODE``
1161 vary according the transaction type. New changesets will add ``$HG_NODE``
1157 (the ID of the first added changeset), ``$HG_NODE_LAST`` (the ID of the last
1162 (the ID of the first added changeset), ``$HG_NODE_LAST`` (the ID of the last
1158 added changeset), ``$HG_URL`` and ``$HG_SOURCE`` variables. Bookmark and
1163 added changeset), ``$HG_URL`` and ``$HG_SOURCE`` variables. Bookmark and
1159 phase changes will set ``HG_BOOKMARK_MOVED`` and ``HG_PHASES_MOVED`` to ``1``
1164 phase changes will set ``HG_BOOKMARK_MOVED`` and ``HG_PHASES_MOVED`` to ``1``
1160 respectively, etc.
1165 respectively, etc.
1161
1166
1162 ``pretxnclose-bookmark``
1167 ``pretxnclose-bookmark``
1163 Run right before a bookmark change is actually finalized. Any repository
1168 Run right before a bookmark change is actually finalized. Any repository
1164 change will be visible to the hook program. This lets you validate the
1169 change will be visible to the hook program. This lets you validate the
1165 transaction content or change it. Exit status 0 allows the commit to
1170 transaction content or change it. Exit status 0 allows the commit to
1166 proceed. A non-zero status will cause the transaction to be rolled back.
1171 proceed. A non-zero status will cause the transaction to be rolled back.
1167 The name of the bookmark will be available in ``$HG_BOOKMARK``, the new
1172 The name of the bookmark will be available in ``$HG_BOOKMARK``, the new
1168 bookmark location will be available in ``$HG_NODE`` while the previous
1173 bookmark location will be available in ``$HG_NODE`` while the previous
1169 location will be available in ``$HG_OLDNODE``. In case of a bookmark
1174 location will be available in ``$HG_OLDNODE``. In case of a bookmark
1170 creation ``$HG_OLDNODE`` will be empty. In case of deletion ``$HG_NODE``
1175 creation ``$HG_OLDNODE`` will be empty. In case of deletion ``$HG_NODE``
1171 will be empty.
1176 will be empty.
1172 In addition, the reason for the transaction opening will be in
1177 In addition, the reason for the transaction opening will be in
1173 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1178 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1174 ``HG_TXNID``.
1179 ``HG_TXNID``.
1175
1180
1176 ``pretxnclose-phase``
1181 ``pretxnclose-phase``
1177 Run right before a phase change is actually finalized. Any repository change
1182 Run right before a phase change is actually finalized. Any repository change
1178 will be visible to the hook program. This lets you validate the transaction
1183 will be visible to the hook program. This lets you validate the transaction
1179 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1184 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1180 status will cause the transaction to be rolled back. The hook is called
1185 status will cause the transaction to be rolled back. The hook is called
1181 multiple times, once for each revision affected by a phase change.
1186 multiple times, once for each revision affected by a phase change.
1182 The affected node is available in ``$HG_NODE``, the phase in ``$HG_PHASE``
1187 The affected node is available in ``$HG_NODE``, the phase in ``$HG_PHASE``
1183 while the previous ``$HG_OLDPHASE``. In case of new node, ``$HG_OLDPHASE``
1188 while the previous ``$HG_OLDPHASE``. In case of new node, ``$HG_OLDPHASE``
1184 will be empty. In addition, the reason for the transaction opening will be in
1189 will be empty. In addition, the reason for the transaction opening will be in
1185 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1190 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1186 ``HG_TXNID``. The hook is also run for newly added revisions. In this case
1191 ``HG_TXNID``. The hook is also run for newly added revisions. In this case
1187 the ``$HG_OLDPHASE`` entry will be empty.
1192 the ``$HG_OLDPHASE`` entry will be empty.
1188
1193
1189 ``txnclose``
1194 ``txnclose``
1190 Run after any repository transaction has been committed. At this
1195 Run after any repository transaction has been committed. At this
1191 point, the transaction can no longer be rolled back. The hook will run
1196 point, the transaction can no longer be rolled back. The hook will run
1192 after the lock is released. See :hg:`help config.hooks.pretxnclose` for
1197 after the lock is released. See :hg:`help config.hooks.pretxnclose` for
1193 details about available variables.
1198 details about available variables.
1194
1199
1195 ``txnclose-bookmark``
1200 ``txnclose-bookmark``
1196 Run after any bookmark change has been committed. At this point, the
1201 Run after any bookmark change has been committed. At this point, the
1197 transaction can no longer be rolled back. The hook will run after the lock
1202 transaction can no longer be rolled back. The hook will run after the lock
1198 is released. See :hg:`help config.hooks.pretxnclose-bookmark` for details
1203 is released. See :hg:`help config.hooks.pretxnclose-bookmark` for details
1199 about available variables.
1204 about available variables.
1200
1205
1201 ``txnclose-phase``
1206 ``txnclose-phase``
1202 Run after any phase change has been committed. At this point, the
1207 Run after any phase change has been committed. At this point, the
1203 transaction can no longer be rolled back. The hook will run after the lock
1208 transaction can no longer be rolled back. The hook will run after the lock
1204 is released. See :hg:`help config.hooks.pretxnclose-phase` for details about
1209 is released. See :hg:`help config.hooks.pretxnclose-phase` for details about
1205 available variables.
1210 available variables.
1206
1211
1207 ``txnabort``
1212 ``txnabort``
1208 Run when a transaction is aborted. See :hg:`help config.hooks.pretxnclose`
1213 Run when a transaction is aborted. See :hg:`help config.hooks.pretxnclose`
1209 for details about available variables.
1214 for details about available variables.
1210
1215
1211 ``pretxnchangegroup``
1216 ``pretxnchangegroup``
1212 Run after a changegroup has been added via push, pull or unbundle, but before
1217 Run after a changegroup has been added via push, pull or unbundle, but before
1213 the transaction has been committed. The changegroup is visible to the hook
1218 the transaction has been committed. The changegroup is visible to the hook
1214 program. This allows validation of incoming changes before accepting them.
1219 program. This allows validation of incoming changes before accepting them.
1215 The ID of the first new changeset is in ``$HG_NODE`` and last is in
1220 The ID of the first new changeset is in ``$HG_NODE`` and last is in
1216 ``$HG_NODE_LAST``. Exit status 0 allows the transaction to commit. A non-zero
1221 ``$HG_NODE_LAST``. Exit status 0 allows the transaction to commit. A non-zero
1217 status will cause the transaction to be rolled back, and the push, pull or
1222 status will cause the transaction to be rolled back, and the push, pull or
1218 unbundle will fail. The URL that was the source of changes is in ``$HG_URL``.
1223 unbundle will fail. The URL that was the source of changes is in ``$HG_URL``.
1219
1224
1220 ``pretxncommit``
1225 ``pretxncommit``
1221 Run after a changeset has been created, but before the transaction is
1226 Run after a changeset has been created, but before the transaction is
1222 committed. The changeset is visible to the hook program. This allows
1227 committed. The changeset is visible to the hook program. This allows
1223 validation of the commit message and changes. Exit status 0 allows the
1228 validation of the commit message and changes. Exit status 0 allows the
1224 commit to proceed. A non-zero status will cause the transaction to
1229 commit to proceed. A non-zero status will cause the transaction to
1225 be rolled back. The ID of the new changeset is in ``$HG_NODE``. The parent
1230 be rolled back. The ID of the new changeset is in ``$HG_NODE``. The parent
1226 changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1231 changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1227
1232
1228 ``preupdate``
1233 ``preupdate``
1229 Run before updating the working directory. Exit status 0 allows
1234 Run before updating the working directory. Exit status 0 allows
1230 the update to proceed. A non-zero status will prevent the update.
1235 the update to proceed. A non-zero status will prevent the update.
1231 The changeset ID of first new parent is in ``$HG_PARENT1``. If updating to a
1236 The changeset ID of first new parent is in ``$HG_PARENT1``. If updating to a
1232 merge, the ID of second new parent is in ``$HG_PARENT2``.
1237 merge, the ID of second new parent is in ``$HG_PARENT2``.
1233
1238
1234 ``listkeys``
1239 ``listkeys``
1235 Run after listing pushkeys (like bookmarks) in the repository. The
1240 Run after listing pushkeys (like bookmarks) in the repository. The
1236 key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a
1241 key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a
1237 dictionary containing the keys and values.
1242 dictionary containing the keys and values.
1238
1243
1239 ``pushkey``
1244 ``pushkey``
1240 Run after a pushkey (like a bookmark) is added to the
1245 Run after a pushkey (like a bookmark) is added to the
1241 repository. The key namespace is in ``$HG_NAMESPACE``, the key is in
1246 repository. The key namespace is in ``$HG_NAMESPACE``, the key is in
1242 ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new
1247 ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new
1243 value is in ``$HG_NEW``.
1248 value is in ``$HG_NEW``.
1244
1249
1245 ``tag``
1250 ``tag``
1246 Run after a tag is created. The ID of the tagged changeset is in ``$HG_NODE``.
1251 Run after a tag is created. The ID of the tagged changeset is in ``$HG_NODE``.
1247 The name of tag is in ``$HG_TAG``. The tag is local if ``$HG_LOCAL=1``, or in
1252 The name of tag is in ``$HG_TAG``. The tag is local if ``$HG_LOCAL=1``, or in
1248 the repository if ``$HG_LOCAL=0``.
1253 the repository if ``$HG_LOCAL=0``.
1249
1254
1250 ``update``
1255 ``update``
1251 Run after updating the working directory. The changeset ID of first
1256 Run after updating the working directory. The changeset ID of first
1252 new parent is in ``$HG_PARENT1``. If updating to a merge, the ID of second new
1257 new parent is in ``$HG_PARENT1``. If updating to a merge, the ID of second new
1253 parent is in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
1258 parent is in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
1254 update failed (e.g. because conflicts were not resolved), ``$HG_ERROR=1``.
1259 update failed (e.g. because conflicts were not resolved), ``$HG_ERROR=1``.
1255
1260
1256 .. note::
1261 .. note::
1257
1262
1258 It is generally better to use standard hooks rather than the
1263 It is generally better to use standard hooks rather than the
1259 generic pre- and post- command hooks, as they are guaranteed to be
1264 generic pre- and post- command hooks, as they are guaranteed to be
1260 called in the appropriate contexts for influencing transactions.
1265 called in the appropriate contexts for influencing transactions.
1261 Also, hooks like "commit" will be called in all contexts that
1266 Also, hooks like "commit" will be called in all contexts that
1262 generate a commit (e.g. tag) and not just the commit command.
1267 generate a commit (e.g. tag) and not just the commit command.
1263
1268
1264 .. note::
1269 .. note::
1265
1270
1266 Environment variables with empty values may not be passed to
1271 Environment variables with empty values may not be passed to
1267 hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
1272 hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
1268 will have an empty value under Unix-like platforms for non-merge
1273 will have an empty value under Unix-like platforms for non-merge
1269 changesets, while it will not be available at all under Windows.
1274 changesets, while it will not be available at all under Windows.
1270
1275
1271 The syntax for Python hooks is as follows::
1276 The syntax for Python hooks is as follows::
1272
1277
1273 hookname = python:modulename.submodule.callable
1278 hookname = python:modulename.submodule.callable
1274 hookname = python:/path/to/python/module.py:callable
1279 hookname = python:/path/to/python/module.py:callable
1275
1280
1276 Python hooks are run within the Mercurial process. Each hook is
1281 Python hooks are run within the Mercurial process. Each hook is
1277 called with at least three keyword arguments: a ui object (keyword
1282 called with at least three keyword arguments: a ui object (keyword
1278 ``ui``), a repository object (keyword ``repo``), and a ``hooktype``
1283 ``ui``), a repository object (keyword ``repo``), and a ``hooktype``
1279 keyword that tells what kind of hook is used. Arguments listed as
1284 keyword that tells what kind of hook is used. Arguments listed as
1280 environment variables above are passed as keyword arguments, with no
1285 environment variables above are passed as keyword arguments, with no
1281 ``HG_`` prefix, and names in lower case.
1286 ``HG_`` prefix, and names in lower case.
1282
1287
1283 If a Python hook returns a "true" value or raises an exception, this
1288 If a Python hook returns a "true" value or raises an exception, this
1284 is treated as a failure.
1289 is treated as a failure.
1285
1290
1286
1291
1287 ``hostfingerprints``
1292 ``hostfingerprints``
1288 --------------------
1293 --------------------
1289
1294
1290 (Deprecated. Use ``[hostsecurity]``'s ``fingerprints`` options instead.)
1295 (Deprecated. Use ``[hostsecurity]``'s ``fingerprints`` options instead.)
1291
1296
1292 Fingerprints of the certificates of known HTTPS servers.
1297 Fingerprints of the certificates of known HTTPS servers.
1293
1298
1294 A HTTPS connection to a server with a fingerprint configured here will
1299 A HTTPS connection to a server with a fingerprint configured here will
1295 only succeed if the servers certificate matches the fingerprint.
1300 only succeed if the servers certificate matches the fingerprint.
1296 This is very similar to how ssh known hosts works.
1301 This is very similar to how ssh known hosts works.
1297
1302
1298 The fingerprint is the SHA-1 hash value of the DER encoded certificate.
1303 The fingerprint is the SHA-1 hash value of the DER encoded certificate.
1299 Multiple values can be specified (separated by spaces or commas). This can
1304 Multiple values can be specified (separated by spaces or commas). This can
1300 be used to define both old and new fingerprints while a host transitions
1305 be used to define both old and new fingerprints while a host transitions
1301 to a new certificate.
1306 to a new certificate.
1302
1307
1303 The CA chain and web.cacerts is not used for servers with a fingerprint.
1308 The CA chain and web.cacerts is not used for servers with a fingerprint.
1304
1309
1305 For example::
1310 For example::
1306
1311
1307 [hostfingerprints]
1312 [hostfingerprints]
1308 hg.intevation.de = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1313 hg.intevation.de = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1309 hg.intevation.org = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1314 hg.intevation.org = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1310
1315
1311 ``hostsecurity``
1316 ``hostsecurity``
1312 ----------------
1317 ----------------
1313
1318
1314 Used to specify global and per-host security settings for connecting to
1319 Used to specify global and per-host security settings for connecting to
1315 other machines.
1320 other machines.
1316
1321
1317 The following options control default behavior for all hosts.
1322 The following options control default behavior for all hosts.
1318
1323
1319 ``ciphers``
1324 ``ciphers``
1320 Defines the cryptographic ciphers to use for connections.
1325 Defines the cryptographic ciphers to use for connections.
1321
1326
1322 Value must be a valid OpenSSL Cipher List Format as documented at
1327 Value must be a valid OpenSSL Cipher List Format as documented at
1323 https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-LIST-FORMAT.
1328 https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-LIST-FORMAT.
1324
1329
1325 This setting is for advanced users only. Setting to incorrect values
1330 This setting is for advanced users only. Setting to incorrect values
1326 can significantly lower connection security or decrease performance.
1331 can significantly lower connection security or decrease performance.
1327 You have been warned.
1332 You have been warned.
1328
1333
1329 This option requires Python 2.7.
1334 This option requires Python 2.7.
1330
1335
1331 ``minimumprotocol``
1336 ``minimumprotocol``
1332 Defines the minimum channel encryption protocol to use.
1337 Defines the minimum channel encryption protocol to use.
1333
1338
1334 By default, the highest version of TLS supported by both client and server
1339 By default, the highest version of TLS supported by both client and server
1335 is used.
1340 is used.
1336
1341
1337 Allowed values are: ``tls1.0``, ``tls1.1``, ``tls1.2``.
1342 Allowed values are: ``tls1.0``, ``tls1.1``, ``tls1.2``.
1338
1343
1339 When running on an old Python version, only ``tls1.0`` is allowed since
1344 When running on an old Python version, only ``tls1.0`` is allowed since
1340 old versions of Python only support up to TLS 1.0.
1345 old versions of Python only support up to TLS 1.0.
1341
1346
1342 When running a Python that supports modern TLS versions, the default is
1347 When running a Python that supports modern TLS versions, the default is
1343 ``tls1.1``. ``tls1.0`` can still be used to allow TLS 1.0. However, this
1348 ``tls1.1``. ``tls1.0`` can still be used to allow TLS 1.0. However, this
1344 weakens security and should only be used as a feature of last resort if
1349 weakens security and should only be used as a feature of last resort if
1345 a server does not support TLS 1.1+.
1350 a server does not support TLS 1.1+.
1346
1351
1347 Options in the ``[hostsecurity]`` section can have the form
1352 Options in the ``[hostsecurity]`` section can have the form
1348 ``hostname``:``setting``. This allows multiple settings to be defined on a
1353 ``hostname``:``setting``. This allows multiple settings to be defined on a
1349 per-host basis.
1354 per-host basis.
1350
1355
1351 The following per-host settings can be defined.
1356 The following per-host settings can be defined.
1352
1357
1353 ``ciphers``
1358 ``ciphers``
1354 This behaves like ``ciphers`` as described above except it only applies
1359 This behaves like ``ciphers`` as described above except it only applies
1355 to the host on which it is defined.
1360 to the host on which it is defined.
1356
1361
1357 ``fingerprints``
1362 ``fingerprints``
1358 A list of hashes of the DER encoded peer/remote certificate. Values have
1363 A list of hashes of the DER encoded peer/remote certificate. Values have
1359 the form ``algorithm``:``fingerprint``. e.g.
1364 the form ``algorithm``:``fingerprint``. e.g.
1360 ``sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2``.
1365 ``sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2``.
1361 In addition, colons (``:``) can appear in the fingerprint part.
1366 In addition, colons (``:``) can appear in the fingerprint part.
1362
1367
1363 The following algorithms/prefixes are supported: ``sha1``, ``sha256``,
1368 The following algorithms/prefixes are supported: ``sha1``, ``sha256``,
1364 ``sha512``.
1369 ``sha512``.
1365
1370
1366 Use of ``sha256`` or ``sha512`` is preferred.
1371 Use of ``sha256`` or ``sha512`` is preferred.
1367
1372
1368 If a fingerprint is specified, the CA chain is not validated for this
1373 If a fingerprint is specified, the CA chain is not validated for this
1369 host and Mercurial will require the remote certificate to match one
1374 host and Mercurial will require the remote certificate to match one
1370 of the fingerprints specified. This means if the server updates its
1375 of the fingerprints specified. This means if the server updates its
1371 certificate, Mercurial will abort until a new fingerprint is defined.
1376 certificate, Mercurial will abort until a new fingerprint is defined.
1372 This can provide stronger security than traditional CA-based validation
1377 This can provide stronger security than traditional CA-based validation
1373 at the expense of convenience.
1378 at the expense of convenience.
1374
1379
1375 This option takes precedence over ``verifycertsfile``.
1380 This option takes precedence over ``verifycertsfile``.
1376
1381
1377 ``minimumprotocol``
1382 ``minimumprotocol``
1378 This behaves like ``minimumprotocol`` as described above except it
1383 This behaves like ``minimumprotocol`` as described above except it
1379 only applies to the host on which it is defined.
1384 only applies to the host on which it is defined.
1380
1385
1381 ``verifycertsfile``
1386 ``verifycertsfile``
1382 Path to file a containing a list of PEM encoded certificates used to
1387 Path to file a containing a list of PEM encoded certificates used to
1383 verify the server certificate. Environment variables and ``~user``
1388 verify the server certificate. Environment variables and ``~user``
1384 constructs are expanded in the filename.
1389 constructs are expanded in the filename.
1385
1390
1386 The server certificate or the certificate's certificate authority (CA)
1391 The server certificate or the certificate's certificate authority (CA)
1387 must match a certificate from this file or certificate verification
1392 must match a certificate from this file or certificate verification
1388 will fail and connections to the server will be refused.
1393 will fail and connections to the server will be refused.
1389
1394
1390 If defined, only certificates provided by this file will be used:
1395 If defined, only certificates provided by this file will be used:
1391 ``web.cacerts`` and any system/default certificates will not be
1396 ``web.cacerts`` and any system/default certificates will not be
1392 used.
1397 used.
1393
1398
1394 This option has no effect if the per-host ``fingerprints`` option
1399 This option has no effect if the per-host ``fingerprints`` option
1395 is set.
1400 is set.
1396
1401
1397 The format of the file is as follows::
1402 The format of the file is as follows::
1398
1403
1399 -----BEGIN CERTIFICATE-----
1404 -----BEGIN CERTIFICATE-----
1400 ... (certificate in base64 PEM encoding) ...
1405 ... (certificate in base64 PEM encoding) ...
1401 -----END CERTIFICATE-----
1406 -----END CERTIFICATE-----
1402 -----BEGIN CERTIFICATE-----
1407 -----BEGIN CERTIFICATE-----
1403 ... (certificate in base64 PEM encoding) ...
1408 ... (certificate in base64 PEM encoding) ...
1404 -----END CERTIFICATE-----
1409 -----END CERTIFICATE-----
1405
1410
1406 For example::
1411 For example::
1407
1412
1408 [hostsecurity]
1413 [hostsecurity]
1409 hg.example.com:fingerprints = sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2
1414 hg.example.com:fingerprints = sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2
1410 hg2.example.com:fingerprints = sha1:914f1aff87249c09b6859b88b1906d30756491ca, sha1:fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1415 hg2.example.com:fingerprints = sha1:914f1aff87249c09b6859b88b1906d30756491ca, sha1:fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1411 hg3.example.com:fingerprints = sha256:9a:b0:dc:e2:75:ad:8a:b7:84:58:e5:1f:07:32:f1:87:e6:bd:24:22:af:b7:ce:8e:9c:b4:10:cf:b9:f4:0e:d2
1416 hg3.example.com:fingerprints = sha256:9a:b0:dc:e2:75:ad:8a:b7:84:58:e5:1f:07:32:f1:87:e6:bd:24:22:af:b7:ce:8e:9c:b4:10:cf:b9:f4:0e:d2
1412 foo.example.com:verifycertsfile = /etc/ssl/trusted-ca-certs.pem
1417 foo.example.com:verifycertsfile = /etc/ssl/trusted-ca-certs.pem
1413
1418
1414 To change the default minimum protocol version to TLS 1.2 but to allow TLS 1.1
1419 To change the default minimum protocol version to TLS 1.2 but to allow TLS 1.1
1415 when connecting to ``hg.example.com``::
1420 when connecting to ``hg.example.com``::
1416
1421
1417 [hostsecurity]
1422 [hostsecurity]
1418 minimumprotocol = tls1.2
1423 minimumprotocol = tls1.2
1419 hg.example.com:minimumprotocol = tls1.1
1424 hg.example.com:minimumprotocol = tls1.1
1420
1425
1421 ``http_proxy``
1426 ``http_proxy``
1422 --------------
1427 --------------
1423
1428
1424 Used to access web-based Mercurial repositories through a HTTP
1429 Used to access web-based Mercurial repositories through a HTTP
1425 proxy.
1430 proxy.
1426
1431
1427 ``host``
1432 ``host``
1428 Host name and (optional) port of the proxy server, for example
1433 Host name and (optional) port of the proxy server, for example
1429 "myproxy:8000".
1434 "myproxy:8000".
1430
1435
1431 ``no``
1436 ``no``
1432 Optional. Comma-separated list of host names that should bypass
1437 Optional. Comma-separated list of host names that should bypass
1433 the proxy.
1438 the proxy.
1434
1439
1435 ``passwd``
1440 ``passwd``
1436 Optional. Password to authenticate with at the proxy server.
1441 Optional. Password to authenticate with at the proxy server.
1437
1442
1438 ``user``
1443 ``user``
1439 Optional. User name to authenticate with at the proxy server.
1444 Optional. User name to authenticate with at the proxy server.
1440
1445
1441 ``always``
1446 ``always``
1442 Optional. Always use the proxy, even for localhost and any entries
1447 Optional. Always use the proxy, even for localhost and any entries
1443 in ``http_proxy.no``. (default: False)
1448 in ``http_proxy.no``. (default: False)
1444
1449
1445 ``http``
1450 ``http``
1446 ----------
1451 ----------
1447
1452
1448 Used to configure access to Mercurial repositories via HTTP.
1453 Used to configure access to Mercurial repositories via HTTP.
1449
1454
1450 ``timeout``
1455 ``timeout``
1451 If set, blocking operations will timeout after that many seconds.
1456 If set, blocking operations will timeout after that many seconds.
1452 (default: None)
1457 (default: None)
1453
1458
1454 ``merge``
1459 ``merge``
1455 ---------
1460 ---------
1456
1461
1457 This section specifies behavior during merges and updates.
1462 This section specifies behavior during merges and updates.
1458
1463
1459 ``checkignored``
1464 ``checkignored``
1460 Controls behavior when an ignored file on disk has the same name as a tracked
1465 Controls behavior when an ignored file on disk has the same name as a tracked
1461 file in the changeset being merged or updated to, and has different
1466 file in the changeset being merged or updated to, and has different
1462 contents. Options are ``abort``, ``warn`` and ``ignore``. With ``abort``,
1467 contents. Options are ``abort``, ``warn`` and ``ignore``. With ``abort``,
1463 abort on such files. With ``warn``, warn on such files and back them up as
1468 abort on such files. With ``warn``, warn on such files and back them up as
1464 ``.orig``. With ``ignore``, don't print a warning and back them up as
1469 ``.orig``. With ``ignore``, don't print a warning and back them up as
1465 ``.orig``. (default: ``abort``)
1470 ``.orig``. (default: ``abort``)
1466
1471
1467 ``checkunknown``
1472 ``checkunknown``
1468 Controls behavior when an unknown file that isn't ignored has the same name
1473 Controls behavior when an unknown file that isn't ignored has the same name
1469 as a tracked file in the changeset being merged or updated to, and has
1474 as a tracked file in the changeset being merged or updated to, and has
1470 different contents. Similar to ``merge.checkignored``, except for files that
1475 different contents. Similar to ``merge.checkignored``, except for files that
1471 are not ignored. (default: ``abort``)
1476 are not ignored. (default: ``abort``)
1472
1477
1473 ``on-failure``
1478 ``on-failure``
1474 When set to ``continue`` (the default), the merge process attempts to
1479 When set to ``continue`` (the default), the merge process attempts to
1475 merge all unresolved files using the merge chosen tool, regardless of
1480 merge all unresolved files using the merge chosen tool, regardless of
1476 whether previous file merge attempts during the process succeeded or not.
1481 whether previous file merge attempts during the process succeeded or not.
1477 Setting this to ``prompt`` will prompt after any merge failure continue
1482 Setting this to ``prompt`` will prompt after any merge failure continue
1478 or halt the merge process. Setting this to ``halt`` will automatically
1483 or halt the merge process. Setting this to ``halt`` will automatically
1479 halt the merge process on any merge tool failure. The merge process
1484 halt the merge process on any merge tool failure. The merge process
1480 can be restarted by using the ``resolve`` command. When a merge is
1485 can be restarted by using the ``resolve`` command. When a merge is
1481 halted, the repository is left in a normal ``unresolved`` merge state.
1486 halted, the repository is left in a normal ``unresolved`` merge state.
1482 (default: ``continue``)
1487 (default: ``continue``)
1483
1488
1484 ``strict-capability-check``
1489 ``strict-capability-check``
1485 Whether capabilities of internal merge tools are checked strictly
1490 Whether capabilities of internal merge tools are checked strictly
1486 or not, while examining rules to decide merge tool to be used.
1491 or not, while examining rules to decide merge tool to be used.
1487 (default: False)
1492 (default: False)
1488
1493
1489 ``merge-patterns``
1494 ``merge-patterns``
1490 ------------------
1495 ------------------
1491
1496
1492 This section specifies merge tools to associate with particular file
1497 This section specifies merge tools to associate with particular file
1493 patterns. Tools matched here will take precedence over the default
1498 patterns. Tools matched here will take precedence over the default
1494 merge tool. Patterns are globs by default, rooted at the repository
1499 merge tool. Patterns are globs by default, rooted at the repository
1495 root.
1500 root.
1496
1501
1497 Example::
1502 Example::
1498
1503
1499 [merge-patterns]
1504 [merge-patterns]
1500 **.c = kdiff3
1505 **.c = kdiff3
1501 **.jpg = myimgmerge
1506 **.jpg = myimgmerge
1502
1507
1503 ``merge-tools``
1508 ``merge-tools``
1504 ---------------
1509 ---------------
1505
1510
1506 This section configures external merge tools to use for file-level
1511 This section configures external merge tools to use for file-level
1507 merges. This section has likely been preconfigured at install time.
1512 merges. This section has likely been preconfigured at install time.
1508 Use :hg:`config merge-tools` to check the existing configuration.
1513 Use :hg:`config merge-tools` to check the existing configuration.
1509 Also see :hg:`help merge-tools` for more details.
1514 Also see :hg:`help merge-tools` for more details.
1510
1515
1511 Example ``~/.hgrc``::
1516 Example ``~/.hgrc``::
1512
1517
1513 [merge-tools]
1518 [merge-tools]
1514 # Override stock tool location
1519 # Override stock tool location
1515 kdiff3.executable = ~/bin/kdiff3
1520 kdiff3.executable = ~/bin/kdiff3
1516 # Specify command line
1521 # Specify command line
1517 kdiff3.args = $base $local $other -o $output
1522 kdiff3.args = $base $local $other -o $output
1518 # Give higher priority
1523 # Give higher priority
1519 kdiff3.priority = 1
1524 kdiff3.priority = 1
1520
1525
1521 # Changing the priority of preconfigured tool
1526 # Changing the priority of preconfigured tool
1522 meld.priority = 0
1527 meld.priority = 0
1523
1528
1524 # Disable a preconfigured tool
1529 # Disable a preconfigured tool
1525 vimdiff.disabled = yes
1530 vimdiff.disabled = yes
1526
1531
1527 # Define new tool
1532 # Define new tool
1528 myHtmlTool.args = -m $local $other $base $output
1533 myHtmlTool.args = -m $local $other $base $output
1529 myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
1534 myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
1530 myHtmlTool.priority = 1
1535 myHtmlTool.priority = 1
1531
1536
1532 Supported arguments:
1537 Supported arguments:
1533
1538
1534 ``priority``
1539 ``priority``
1535 The priority in which to evaluate this tool.
1540 The priority in which to evaluate this tool.
1536 (default: 0)
1541 (default: 0)
1537
1542
1538 ``executable``
1543 ``executable``
1539 Either just the name of the executable or its pathname.
1544 Either just the name of the executable or its pathname.
1540
1545
1541 .. container:: windows
1546 .. container:: windows
1542
1547
1543 On Windows, the path can use environment variables with ${ProgramFiles}
1548 On Windows, the path can use environment variables with ${ProgramFiles}
1544 syntax.
1549 syntax.
1545
1550
1546 (default: the tool name)
1551 (default: the tool name)
1547
1552
1548 ``args``
1553 ``args``
1549 The arguments to pass to the tool executable. You can refer to the
1554 The arguments to pass to the tool executable. You can refer to the
1550 files being merged as well as the output file through these
1555 files being merged as well as the output file through these
1551 variables: ``$base``, ``$local``, ``$other``, ``$output``.
1556 variables: ``$base``, ``$local``, ``$other``, ``$output``.
1552
1557
1553 The meaning of ``$local`` and ``$other`` can vary depending on which action is
1558 The meaning of ``$local`` and ``$other`` can vary depending on which action is
1554 being performed. During an update or merge, ``$local`` represents the original
1559 being performed. During an update or merge, ``$local`` represents the original
1555 state of the file, while ``$other`` represents the commit you are updating to or
1560 state of the file, while ``$other`` represents the commit you are updating to or
1556 the commit you are merging with. During a rebase, ``$local`` represents the
1561 the commit you are merging with. During a rebase, ``$local`` represents the
1557 destination of the rebase, and ``$other`` represents the commit being rebased.
1562 destination of the rebase, and ``$other`` represents the commit being rebased.
1558
1563
1559 Some operations define custom labels to assist with identifying the revisions,
1564 Some operations define custom labels to assist with identifying the revisions,
1560 accessible via ``$labellocal``, ``$labelother``, and ``$labelbase``. If custom
1565 accessible via ``$labellocal``, ``$labelother``, and ``$labelbase``. If custom
1561 labels are not available, these will be ``local``, ``other``, and ``base``,
1566 labels are not available, these will be ``local``, ``other``, and ``base``,
1562 respectively.
1567 respectively.
1563 (default: ``$local $base $other``)
1568 (default: ``$local $base $other``)
1564
1569
1565 ``premerge``
1570 ``premerge``
1566 Attempt to run internal non-interactive 3-way merge tool before
1571 Attempt to run internal non-interactive 3-way merge tool before
1567 launching external tool. Options are ``true``, ``false``, ``keep``,
1572 launching external tool. Options are ``true``, ``false``, ``keep``,
1568 ``keep-merge3``, or ``keep-mergediff`` (experimental). The ``keep`` option
1573 ``keep-merge3``, or ``keep-mergediff`` (experimental). The ``keep`` option
1569 will leave markers in the file if the premerge fails. The ``keep-merge3``
1574 will leave markers in the file if the premerge fails. The ``keep-merge3``
1570 will do the same but include information about the base of the merge in the
1575 will do the same but include information about the base of the merge in the
1571 marker (see internal :merge3 in :hg:`help merge-tools`). The
1576 marker (see internal :merge3 in :hg:`help merge-tools`). The
1572 ``keep-mergediff`` option is similar but uses a different marker style
1577 ``keep-mergediff`` option is similar but uses a different marker style
1573 (see internal :merge3 in :hg:`help merge-tools`). (default: True)
1578 (see internal :merge3 in :hg:`help merge-tools`). (default: True)
1574
1579
1575 ``binary``
1580 ``binary``
1576 This tool can merge binary files. (default: False, unless tool
1581 This tool can merge binary files. (default: False, unless tool
1577 was selected by file pattern match)
1582 was selected by file pattern match)
1578
1583
1579 ``symlink``
1584 ``symlink``
1580 This tool can merge symlinks. (default: False)
1585 This tool can merge symlinks. (default: False)
1581
1586
1582 ``check``
1587 ``check``
1583 A list of merge success-checking options:
1588 A list of merge success-checking options:
1584
1589
1585 ``changed``
1590 ``changed``
1586 Ask whether merge was successful when the merged file shows no changes.
1591 Ask whether merge was successful when the merged file shows no changes.
1587 ``conflicts``
1592 ``conflicts``
1588 Check whether there are conflicts even though the tool reported success.
1593 Check whether there are conflicts even though the tool reported success.
1589 ``prompt``
1594 ``prompt``
1590 Always prompt for merge success, regardless of success reported by tool.
1595 Always prompt for merge success, regardless of success reported by tool.
1591
1596
1592 ``fixeol``
1597 ``fixeol``
1593 Attempt to fix up EOL changes caused by the merge tool.
1598 Attempt to fix up EOL changes caused by the merge tool.
1594 (default: False)
1599 (default: False)
1595
1600
1596 ``gui``
1601 ``gui``
1597 This tool requires a graphical interface to run. (default: False)
1602 This tool requires a graphical interface to run. (default: False)
1598
1603
1599 ``mergemarkers``
1604 ``mergemarkers``
1600 Controls whether the labels passed via ``$labellocal``, ``$labelother``, and
1605 Controls whether the labels passed via ``$labellocal``, ``$labelother``, and
1601 ``$labelbase`` are ``detailed`` (respecting ``mergemarkertemplate``) or
1606 ``$labelbase`` are ``detailed`` (respecting ``mergemarkertemplate``) or
1602 ``basic``. If ``premerge`` is ``keep`` or ``keep-merge3``, the conflict
1607 ``basic``. If ``premerge`` is ``keep`` or ``keep-merge3``, the conflict
1603 markers generated during premerge will be ``detailed`` if either this option or
1608 markers generated during premerge will be ``detailed`` if either this option or
1604 the corresponding option in the ``[ui]`` section is ``detailed``.
1609 the corresponding option in the ``[ui]`` section is ``detailed``.
1605 (default: ``basic``)
1610 (default: ``basic``)
1606
1611
1607 ``mergemarkertemplate``
1612 ``mergemarkertemplate``
1608 This setting can be used to override ``mergemarker`` from the
1613 This setting can be used to override ``mergemarker`` from the
1609 ``[command-templates]`` section on a per-tool basis; this applies to the
1614 ``[command-templates]`` section on a per-tool basis; this applies to the
1610 ``$label``-prefixed variables and to the conflict markers that are generated
1615 ``$label``-prefixed variables and to the conflict markers that are generated
1611 if ``premerge`` is ``keep` or ``keep-merge3``. See the corresponding variable
1616 if ``premerge`` is ``keep` or ``keep-merge3``. See the corresponding variable
1612 in ``[ui]`` for more information.
1617 in ``[ui]`` for more information.
1613
1618
1614 .. container:: windows
1619 .. container:: windows
1615
1620
1616 ``regkey``
1621 ``regkey``
1617 Windows registry key which describes install location of this
1622 Windows registry key which describes install location of this
1618 tool. Mercurial will search for this key first under
1623 tool. Mercurial will search for this key first under
1619 ``HKEY_CURRENT_USER`` and then under ``HKEY_LOCAL_MACHINE``.
1624 ``HKEY_CURRENT_USER`` and then under ``HKEY_LOCAL_MACHINE``.
1620 (default: None)
1625 (default: None)
1621
1626
1622 ``regkeyalt``
1627 ``regkeyalt``
1623 An alternate Windows registry key to try if the first key is not
1628 An alternate Windows registry key to try if the first key is not
1624 found. The alternate key uses the same ``regname`` and ``regappend``
1629 found. The alternate key uses the same ``regname`` and ``regappend``
1625 semantics of the primary key. The most common use for this key
1630 semantics of the primary key. The most common use for this key
1626 is to search for 32bit applications on 64bit operating systems.
1631 is to search for 32bit applications on 64bit operating systems.
1627 (default: None)
1632 (default: None)
1628
1633
1629 ``regname``
1634 ``regname``
1630 Name of value to read from specified registry key.
1635 Name of value to read from specified registry key.
1631 (default: the unnamed (default) value)
1636 (default: the unnamed (default) value)
1632
1637
1633 ``regappend``
1638 ``regappend``
1634 String to append to the value read from the registry, typically
1639 String to append to the value read from the registry, typically
1635 the executable name of the tool.
1640 the executable name of the tool.
1636 (default: None)
1641 (default: None)
1637
1642
1638 ``pager``
1643 ``pager``
1639 ---------
1644 ---------
1640
1645
1641 Setting used to control when to paginate and with what external tool. See
1646 Setting used to control when to paginate and with what external tool. See
1642 :hg:`help pager` for details.
1647 :hg:`help pager` for details.
1643
1648
1644 ``pager``
1649 ``pager``
1645 Define the external tool used as pager.
1650 Define the external tool used as pager.
1646
1651
1647 If no pager is set, Mercurial uses the environment variable $PAGER.
1652 If no pager is set, Mercurial uses the environment variable $PAGER.
1648 If neither pager.pager, nor $PAGER is set, a default pager will be
1653 If neither pager.pager, nor $PAGER is set, a default pager will be
1649 used, typically `less` on Unix and `more` on Windows. Example::
1654 used, typically `less` on Unix and `more` on Windows. Example::
1650
1655
1651 [pager]
1656 [pager]
1652 pager = less -FRX
1657 pager = less -FRX
1653
1658
1654 ``ignore``
1659 ``ignore``
1655 List of commands to disable the pager for. Example::
1660 List of commands to disable the pager for. Example::
1656
1661
1657 [pager]
1662 [pager]
1658 ignore = version, help, update
1663 ignore = version, help, update
1659
1664
1660 ``patch``
1665 ``patch``
1661 ---------
1666 ---------
1662
1667
1663 Settings used when applying patches, for instance through the 'import'
1668 Settings used when applying patches, for instance through the 'import'
1664 command or with Mercurial Queues extension.
1669 command or with Mercurial Queues extension.
1665
1670
1666 ``eol``
1671 ``eol``
1667 When set to 'strict' patch content and patched files end of lines
1672 When set to 'strict' patch content and patched files end of lines
1668 are preserved. When set to ``lf`` or ``crlf``, both files end of
1673 are preserved. When set to ``lf`` or ``crlf``, both files end of
1669 lines are ignored when patching and the result line endings are
1674 lines are ignored when patching and the result line endings are
1670 normalized to either LF (Unix) or CRLF (Windows). When set to
1675 normalized to either LF (Unix) or CRLF (Windows). When set to
1671 ``auto``, end of lines are again ignored while patching but line
1676 ``auto``, end of lines are again ignored while patching but line
1672 endings in patched files are normalized to their original setting
1677 endings in patched files are normalized to their original setting
1673 on a per-file basis. If target file does not exist or has no end
1678 on a per-file basis. If target file does not exist or has no end
1674 of line, patch line endings are preserved.
1679 of line, patch line endings are preserved.
1675 (default: strict)
1680 (default: strict)
1676
1681
1677 ``fuzz``
1682 ``fuzz``
1678 The number of lines of 'fuzz' to allow when applying patches. This
1683 The number of lines of 'fuzz' to allow when applying patches. This
1679 controls how much context the patcher is allowed to ignore when
1684 controls how much context the patcher is allowed to ignore when
1680 trying to apply a patch.
1685 trying to apply a patch.
1681 (default: 2)
1686 (default: 2)
1682
1687
1683 ``paths``
1688 ``paths``
1684 ---------
1689 ---------
1685
1690
1686 Assigns symbolic names and behavior to repositories.
1691 Assigns symbolic names and behavior to repositories.
1687
1692
1688 Options are symbolic names defining the URL or directory that is the
1693 Options are symbolic names defining the URL or directory that is the
1689 location of the repository. Example::
1694 location of the repository. Example::
1690
1695
1691 [paths]
1696 [paths]
1692 my_server = https://example.com/my_repo
1697 my_server = https://example.com/my_repo
1693 local_path = /home/me/repo
1698 local_path = /home/me/repo
1694
1699
1695 These symbolic names can be used from the command line. To pull
1700 These symbolic names can be used from the command line. To pull
1696 from ``my_server``: :hg:`pull my_server`. To push to ``local_path``:
1701 from ``my_server``: :hg:`pull my_server`. To push to ``local_path``:
1697 :hg:`push local_path`.
1702 :hg:`push local_path`.
1698
1703
1699 Options containing colons (``:``) denote sub-options that can influence
1704 Options containing colons (``:``) denote sub-options that can influence
1700 behavior for that specific path. Example::
1705 behavior for that specific path. Example::
1701
1706
1702 [paths]
1707 [paths]
1703 my_server = https://example.com/my_path
1708 my_server = https://example.com/my_path
1704 my_server:pushurl = ssh://example.com/my_path
1709 my_server:pushurl = ssh://example.com/my_path
1705
1710
1706 The following sub-options can be defined:
1711 The following sub-options can be defined:
1707
1712
1708 ``pushurl``
1713 ``pushurl``
1709 The URL to use for push operations. If not defined, the location
1714 The URL to use for push operations. If not defined, the location
1710 defined by the path's main entry is used.
1715 defined by the path's main entry is used.
1711
1716
1712 ``pushrev``
1717 ``pushrev``
1713 A revset defining which revisions to push by default.
1718 A revset defining which revisions to push by default.
1714
1719
1715 When :hg:`push` is executed without a ``-r`` argument, the revset
1720 When :hg:`push` is executed without a ``-r`` argument, the revset
1716 defined by this sub-option is evaluated to determine what to push.
1721 defined by this sub-option is evaluated to determine what to push.
1717
1722
1718 For example, a value of ``.`` will push the working directory's
1723 For example, a value of ``.`` will push the working directory's
1719 revision by default.
1724 revision by default.
1720
1725
1721 Revsets specifying bookmarks will not result in the bookmark being
1726 Revsets specifying bookmarks will not result in the bookmark being
1722 pushed.
1727 pushed.
1723
1728
1724 The following special named paths exist:
1729 The following special named paths exist:
1725
1730
1726 ``default``
1731 ``default``
1727 The URL or directory to use when no source or remote is specified.
1732 The URL or directory to use when no source or remote is specified.
1728
1733
1729 :hg:`clone` will automatically define this path to the location the
1734 :hg:`clone` will automatically define this path to the location the
1730 repository was cloned from.
1735 repository was cloned from.
1731
1736
1732 ``default-push``
1737 ``default-push``
1733 (deprecated) The URL or directory for the default :hg:`push` location.
1738 (deprecated) The URL or directory for the default :hg:`push` location.
1734 ``default:pushurl`` should be used instead.
1739 ``default:pushurl`` should be used instead.
1735
1740
1736 ``phases``
1741 ``phases``
1737 ----------
1742 ----------
1738
1743
1739 Specifies default handling of phases. See :hg:`help phases` for more
1744 Specifies default handling of phases. See :hg:`help phases` for more
1740 information about working with phases.
1745 information about working with phases.
1741
1746
1742 ``publish``
1747 ``publish``
1743 Controls draft phase behavior when working as a server. When true,
1748 Controls draft phase behavior when working as a server. When true,
1744 pushed changesets are set to public in both client and server and
1749 pushed changesets are set to public in both client and server and
1745 pulled or cloned changesets are set to public in the client.
1750 pulled or cloned changesets are set to public in the client.
1746 (default: True)
1751 (default: True)
1747
1752
1748 ``new-commit``
1753 ``new-commit``
1749 Phase of newly-created commits.
1754 Phase of newly-created commits.
1750 (default: draft)
1755 (default: draft)
1751
1756
1752 ``checksubrepos``
1757 ``checksubrepos``
1753 Check the phase of the current revision of each subrepository. Allowed
1758 Check the phase of the current revision of each subrepository. Allowed
1754 values are "ignore", "follow" and "abort". For settings other than
1759 values are "ignore", "follow" and "abort". For settings other than
1755 "ignore", the phase of the current revision of each subrepository is
1760 "ignore", the phase of the current revision of each subrepository is
1756 checked before committing the parent repository. If any of those phases is
1761 checked before committing the parent repository. If any of those phases is
1757 greater than the phase of the parent repository (e.g. if a subrepo is in a
1762 greater than the phase of the parent repository (e.g. if a subrepo is in a
1758 "secret" phase while the parent repo is in "draft" phase), the commit is
1763 "secret" phase while the parent repo is in "draft" phase), the commit is
1759 either aborted (if checksubrepos is set to "abort") or the higher phase is
1764 either aborted (if checksubrepos is set to "abort") or the higher phase is
1760 used for the parent repository commit (if set to "follow").
1765 used for the parent repository commit (if set to "follow").
1761 (default: follow)
1766 (default: follow)
1762
1767
1763
1768
1764 ``profiling``
1769 ``profiling``
1765 -------------
1770 -------------
1766
1771
1767 Specifies profiling type, format, and file output. Two profilers are
1772 Specifies profiling type, format, and file output. Two profilers are
1768 supported: an instrumenting profiler (named ``ls``), and a sampling
1773 supported: an instrumenting profiler (named ``ls``), and a sampling
1769 profiler (named ``stat``).
1774 profiler (named ``stat``).
1770
1775
1771 In this section description, 'profiling data' stands for the raw data
1776 In this section description, 'profiling data' stands for the raw data
1772 collected during profiling, while 'profiling report' stands for a
1777 collected during profiling, while 'profiling report' stands for a
1773 statistical text report generated from the profiling data.
1778 statistical text report generated from the profiling data.
1774
1779
1775 ``enabled``
1780 ``enabled``
1776 Enable the profiler.
1781 Enable the profiler.
1777 (default: false)
1782 (default: false)
1778
1783
1779 This is equivalent to passing ``--profile`` on the command line.
1784 This is equivalent to passing ``--profile`` on the command line.
1780
1785
1781 ``type``
1786 ``type``
1782 The type of profiler to use.
1787 The type of profiler to use.
1783 (default: stat)
1788 (default: stat)
1784
1789
1785 ``ls``
1790 ``ls``
1786 Use Python's built-in instrumenting profiler. This profiler
1791 Use Python's built-in instrumenting profiler. This profiler
1787 works on all platforms, but each line number it reports is the
1792 works on all platforms, but each line number it reports is the
1788 first line of a function. This restriction makes it difficult to
1793 first line of a function. This restriction makes it difficult to
1789 identify the expensive parts of a non-trivial function.
1794 identify the expensive parts of a non-trivial function.
1790 ``stat``
1795 ``stat``
1791 Use a statistical profiler, statprof. This profiler is most
1796 Use a statistical profiler, statprof. This profiler is most
1792 useful for profiling commands that run for longer than about 0.1
1797 useful for profiling commands that run for longer than about 0.1
1793 seconds.
1798 seconds.
1794
1799
1795 ``format``
1800 ``format``
1796 Profiling format. Specific to the ``ls`` instrumenting profiler.
1801 Profiling format. Specific to the ``ls`` instrumenting profiler.
1797 (default: text)
1802 (default: text)
1798
1803
1799 ``text``
1804 ``text``
1800 Generate a profiling report. When saving to a file, it should be
1805 Generate a profiling report. When saving to a file, it should be
1801 noted that only the report is saved, and the profiling data is
1806 noted that only the report is saved, and the profiling data is
1802 not kept.
1807 not kept.
1803 ``kcachegrind``
1808 ``kcachegrind``
1804 Format profiling data for kcachegrind use: when saving to a
1809 Format profiling data for kcachegrind use: when saving to a
1805 file, the generated file can directly be loaded into
1810 file, the generated file can directly be loaded into
1806 kcachegrind.
1811 kcachegrind.
1807
1812
1808 ``statformat``
1813 ``statformat``
1809 Profiling format for the ``stat`` profiler.
1814 Profiling format for the ``stat`` profiler.
1810 (default: hotpath)
1815 (default: hotpath)
1811
1816
1812 ``hotpath``
1817 ``hotpath``
1813 Show a tree-based display containing the hot path of execution (where
1818 Show a tree-based display containing the hot path of execution (where
1814 most time was spent).
1819 most time was spent).
1815 ``bymethod``
1820 ``bymethod``
1816 Show a table of methods ordered by how frequently they are active.
1821 Show a table of methods ordered by how frequently they are active.
1817 ``byline``
1822 ``byline``
1818 Show a table of lines in files ordered by how frequently they are active.
1823 Show a table of lines in files ordered by how frequently they are active.
1819 ``json``
1824 ``json``
1820 Render profiling data as JSON.
1825 Render profiling data as JSON.
1821
1826
1822 ``frequency``
1827 ``frequency``
1823 Sampling frequency. Specific to the ``stat`` sampling profiler.
1828 Sampling frequency. Specific to the ``stat`` sampling profiler.
1824 (default: 1000)
1829 (default: 1000)
1825
1830
1826 ``output``
1831 ``output``
1827 File path where profiling data or report should be saved. If the
1832 File path where profiling data or report should be saved. If the
1828 file exists, it is replaced. (default: None, data is printed on
1833 file exists, it is replaced. (default: None, data is printed on
1829 stderr)
1834 stderr)
1830
1835
1831 ``sort``
1836 ``sort``
1832 Sort field. Specific to the ``ls`` instrumenting profiler.
1837 Sort field. Specific to the ``ls`` instrumenting profiler.
1833 One of ``callcount``, ``reccallcount``, ``totaltime`` and
1838 One of ``callcount``, ``reccallcount``, ``totaltime`` and
1834 ``inlinetime``.
1839 ``inlinetime``.
1835 (default: inlinetime)
1840 (default: inlinetime)
1836
1841
1837 ``time-track``
1842 ``time-track``
1838 Control if the stat profiler track ``cpu`` or ``real`` time.
1843 Control if the stat profiler track ``cpu`` or ``real`` time.
1839 (default: ``cpu`` on Windows, otherwise ``real``)
1844 (default: ``cpu`` on Windows, otherwise ``real``)
1840
1845
1841 ``limit``
1846 ``limit``
1842 Number of lines to show. Specific to the ``ls`` instrumenting profiler.
1847 Number of lines to show. Specific to the ``ls`` instrumenting profiler.
1843 (default: 30)
1848 (default: 30)
1844
1849
1845 ``nested``
1850 ``nested``
1846 Show at most this number of lines of drill-down info after each main entry.
1851 Show at most this number of lines of drill-down info after each main entry.
1847 This can help explain the difference between Total and Inline.
1852 This can help explain the difference between Total and Inline.
1848 Specific to the ``ls`` instrumenting profiler.
1853 Specific to the ``ls`` instrumenting profiler.
1849 (default: 0)
1854 (default: 0)
1850
1855
1851 ``showmin``
1856 ``showmin``
1852 Minimum fraction of samples an entry must have for it to be displayed.
1857 Minimum fraction of samples an entry must have for it to be displayed.
1853 Can be specified as a float between ``0.0`` and ``1.0`` or can have a
1858 Can be specified as a float between ``0.0`` and ``1.0`` or can have a
1854 ``%`` afterwards to allow values up to ``100``. e.g. ``5%``.
1859 ``%`` afterwards to allow values up to ``100``. e.g. ``5%``.
1855
1860
1856 Only used by the ``stat`` profiler.
1861 Only used by the ``stat`` profiler.
1857
1862
1858 For the ``hotpath`` format, default is ``0.05``.
1863 For the ``hotpath`` format, default is ``0.05``.
1859 For the ``chrome`` format, default is ``0.005``.
1864 For the ``chrome`` format, default is ``0.005``.
1860
1865
1861 The option is unused on other formats.
1866 The option is unused on other formats.
1862
1867
1863 ``showmax``
1868 ``showmax``
1864 Maximum fraction of samples an entry can have before it is ignored in
1869 Maximum fraction of samples an entry can have before it is ignored in
1865 display. Values format is the same as ``showmin``.
1870 display. Values format is the same as ``showmin``.
1866
1871
1867 Only used by the ``stat`` profiler.
1872 Only used by the ``stat`` profiler.
1868
1873
1869 For the ``chrome`` format, default is ``0.999``.
1874 For the ``chrome`` format, default is ``0.999``.
1870
1875
1871 The option is unused on other formats.
1876 The option is unused on other formats.
1872
1877
1873 ``showtime``
1878 ``showtime``
1874 Show time taken as absolute durations, in addition to percentages.
1879 Show time taken as absolute durations, in addition to percentages.
1875 Only used by the ``hotpath`` format.
1880 Only used by the ``hotpath`` format.
1876 (default: true)
1881 (default: true)
1877
1882
1878 ``progress``
1883 ``progress``
1879 ------------
1884 ------------
1880
1885
1881 Mercurial commands can draw progress bars that are as informative as
1886 Mercurial commands can draw progress bars that are as informative as
1882 possible. Some progress bars only offer indeterminate information, while others
1887 possible. Some progress bars only offer indeterminate information, while others
1883 have a definite end point.
1888 have a definite end point.
1884
1889
1885 ``debug``
1890 ``debug``
1886 Whether to print debug info when updating the progress bar. (default: False)
1891 Whether to print debug info when updating the progress bar. (default: False)
1887
1892
1888 ``delay``
1893 ``delay``
1889 Number of seconds (float) before showing the progress bar. (default: 3)
1894 Number of seconds (float) before showing the progress bar. (default: 3)
1890
1895
1891 ``changedelay``
1896 ``changedelay``
1892 Minimum delay before showing a new topic. When set to less than 3 * refresh,
1897 Minimum delay before showing a new topic. When set to less than 3 * refresh,
1893 that value will be used instead. (default: 1)
1898 that value will be used instead. (default: 1)
1894
1899
1895 ``estimateinterval``
1900 ``estimateinterval``
1896 Maximum sampling interval in seconds for speed and estimated time
1901 Maximum sampling interval in seconds for speed and estimated time
1897 calculation. (default: 60)
1902 calculation. (default: 60)
1898
1903
1899 ``refresh``
1904 ``refresh``
1900 Time in seconds between refreshes of the progress bar. (default: 0.1)
1905 Time in seconds between refreshes of the progress bar. (default: 0.1)
1901
1906
1902 ``format``
1907 ``format``
1903 Format of the progress bar.
1908 Format of the progress bar.
1904
1909
1905 Valid entries for the format field are ``topic``, ``bar``, ``number``,
1910 Valid entries for the format field are ``topic``, ``bar``, ``number``,
1906 ``unit``, ``estimate``, ``speed``, and ``item``. ``item`` defaults to the
1911 ``unit``, ``estimate``, ``speed``, and ``item``. ``item`` defaults to the
1907 last 20 characters of the item, but this can be changed by adding either
1912 last 20 characters of the item, but this can be changed by adding either
1908 ``-<num>`` which would take the last num characters, or ``+<num>`` for the
1913 ``-<num>`` which would take the last num characters, or ``+<num>`` for the
1909 first num characters.
1914 first num characters.
1910
1915
1911 (default: topic bar number estimate)
1916 (default: topic bar number estimate)
1912
1917
1913 ``width``
1918 ``width``
1914 If set, the maximum width of the progress information (that is, min(width,
1919 If set, the maximum width of the progress information (that is, min(width,
1915 term width) will be used).
1920 term width) will be used).
1916
1921
1917 ``clear-complete``
1922 ``clear-complete``
1918 Clear the progress bar after it's done. (default: True)
1923 Clear the progress bar after it's done. (default: True)
1919
1924
1920 ``disable``
1925 ``disable``
1921 If true, don't show a progress bar.
1926 If true, don't show a progress bar.
1922
1927
1923 ``assume-tty``
1928 ``assume-tty``
1924 If true, ALWAYS show a progress bar, unless disable is given.
1929 If true, ALWAYS show a progress bar, unless disable is given.
1925
1930
1926 ``rebase``
1931 ``rebase``
1927 ----------
1932 ----------
1928
1933
1929 ``evolution.allowdivergence``
1934 ``evolution.allowdivergence``
1930 Default to False, when True allow creating divergence when performing
1935 Default to False, when True allow creating divergence when performing
1931 rebase of obsolete changesets.
1936 rebase of obsolete changesets.
1932
1937
1933 ``revsetalias``
1938 ``revsetalias``
1934 ---------------
1939 ---------------
1935
1940
1936 Alias definitions for revsets. See :hg:`help revsets` for details.
1941 Alias definitions for revsets. See :hg:`help revsets` for details.
1937
1942
1938 ``rewrite``
1943 ``rewrite``
1939 -----------
1944 -----------
1940
1945
1941 ``backup-bundle``
1946 ``backup-bundle``
1942 Whether to save stripped changesets to a bundle file. (default: True)
1947 Whether to save stripped changesets to a bundle file. (default: True)
1943
1948
1944 ``update-timestamp``
1949 ``update-timestamp``
1945 If true, updates the date and time of the changeset to current. It is only
1950 If true, updates the date and time of the changeset to current. It is only
1946 applicable for `hg amend`, `hg commit --amend` and `hg uncommit` in the
1951 applicable for `hg amend`, `hg commit --amend` and `hg uncommit` in the
1947 current version.
1952 current version.
1948
1953
1949 ``empty-successor``
1954 ``empty-successor``
1950
1955
1951 Control what happens with empty successors that are the result of rewrite
1956 Control what happens with empty successors that are the result of rewrite
1952 operations. If set to ``skip``, the successor is not created. If set to
1957 operations. If set to ``skip``, the successor is not created. If set to
1953 ``keep``, the empty successor is created and kept.
1958 ``keep``, the empty successor is created and kept.
1954
1959
1955 Currently, only the rebase and absorb commands consider this configuration.
1960 Currently, only the rebase and absorb commands consider this configuration.
1956 (EXPERIMENTAL)
1961 (EXPERIMENTAL)
1957
1962
1958 ``share``
1963 ``share``
1959 ---------
1964 ---------
1960
1965
1961 ``safe-mismatch.source-safe``
1966 ``safe-mismatch.source-safe``
1962
1967
1963 Controls what happens when the shared repository does not use the
1968 Controls what happens when the shared repository does not use the
1964 share-safe mechanism but its source repository does.
1969 share-safe mechanism but its source repository does.
1965
1970
1966 Possible values are `abort` (default), `allow`, `upgrade-abort` and
1971 Possible values are `abort` (default), `allow`, `upgrade-abort` and
1967 `upgrade-abort`.
1972 `upgrade-abort`.
1968
1973
1969 ``abort``
1974 ``abort``
1970 Disallows running any command and aborts
1975 Disallows running any command and aborts
1971 ``allow``
1976 ``allow``
1972 Respects the feature presence in the share source
1977 Respects the feature presence in the share source
1973 ``upgrade-abort``
1978 ``upgrade-abort``
1974 tries to upgrade the share to use share-safe; if it fails, aborts
1979 tries to upgrade the share to use share-safe; if it fails, aborts
1975 ``upgrade-allow``
1980 ``upgrade-allow``
1976 tries to upgrade the share; if it fails, continue by
1981 tries to upgrade the share; if it fails, continue by
1977 respecting the share source setting
1982 respecting the share source setting
1978
1983
1979 Check :hg:`help config format.use-share-safe` for details about the
1984 Check :hg:`help config format.use-share-safe` for details about the
1980 share-safe feature.
1985 share-safe feature.
1981
1986
1982 ``safe-mismatch.source-safe.warn``
1987 ``safe-mismatch.source-safe.warn``
1983 Shows a warning on operations if the shared repository does not use
1988 Shows a warning on operations if the shared repository does not use
1984 share-safe, but the source repository does.
1989 share-safe, but the source repository does.
1985 (default: True)
1990 (default: True)
1986
1991
1987 ``safe-mismatch.source-not-safe``
1992 ``safe-mismatch.source-not-safe``
1988
1993
1989 Controls what happens when the shared repository uses the share-safe
1994 Controls what happens when the shared repository uses the share-safe
1990 mechanism but its source does not.
1995 mechanism but its source does not.
1991
1996
1992 Possible values are `abort` (default), `allow`, `downgrade-abort` and
1997 Possible values are `abort` (default), `allow`, `downgrade-abort` and
1993 `downgrade-abort`.
1998 `downgrade-abort`.
1994
1999
1995 ``abort``
2000 ``abort``
1996 Disallows running any command and aborts
2001 Disallows running any command and aborts
1997 ``allow``
2002 ``allow``
1998 Respects the feature presence in the share source
2003 Respects the feature presence in the share source
1999 ``downgrade-abort``
2004 ``downgrade-abort``
2000 tries to downgrade the share to not use share-safe; if it fails, aborts
2005 tries to downgrade the share to not use share-safe; if it fails, aborts
2001 ``downgrade-allow``
2006 ``downgrade-allow``
2002 tries to downgrade the share to not use share-safe;
2007 tries to downgrade the share to not use share-safe;
2003 if it fails, continue by respecting the shared source setting
2008 if it fails, continue by respecting the shared source setting
2004
2009
2005 Check :hg:`help config format.use-share-safe` for details about the
2010 Check :hg:`help config format.use-share-safe` for details about the
2006 share-safe feature.
2011 share-safe feature.
2007
2012
2008 ``safe-mismatch.source-not-safe.warn``
2013 ``safe-mismatch.source-not-safe.warn``
2009 Shows a warning on operations if the shared repository uses share-safe,
2014 Shows a warning on operations if the shared repository uses share-safe,
2010 but the source repository does not.
2015 but the source repository does not.
2011 (default: True)
2016 (default: True)
2012
2017
2013 ``storage``
2018 ``storage``
2014 -----------
2019 -----------
2015
2020
2016 Control the strategy Mercurial uses internally to store history. Options in this
2021 Control the strategy Mercurial uses internally to store history. Options in this
2017 category impact performance and repository size.
2022 category impact performance and repository size.
2018
2023
2019 ``revlog.optimize-delta-parent-choice``
2024 ``revlog.optimize-delta-parent-choice``
2020 When storing a merge revision, both parents will be equally considered as
2025 When storing a merge revision, both parents will be equally considered as
2021 a possible delta base. This results in better delta selection and improved
2026 a possible delta base. This results in better delta selection and improved
2022 revlog compression. This option is enabled by default.
2027 revlog compression. This option is enabled by default.
2023
2028
2024 Turning this option off can result in large increase of repository size for
2029 Turning this option off can result in large increase of repository size for
2025 repository with many merges.
2030 repository with many merges.
2026
2031
2027 ``revlog.persistent-nodemap.mmap``
2032 ``revlog.persistent-nodemap.mmap``
2028 Whether to use the Operating System "memory mapping" feature (when
2033 Whether to use the Operating System "memory mapping" feature (when
2029 possible) to access the persistent nodemap data. This improve performance
2034 possible) to access the persistent nodemap data. This improve performance
2030 and reduce memory pressure.
2035 and reduce memory pressure.
2031
2036
2032 Default to True.
2037 Default to True.
2033
2038
2034 For details on the "persistent-nodemap" feature, see:
2039 For details on the "persistent-nodemap" feature, see:
2035 :hg:`help config format.use-persistent-nodemap`.
2040 :hg:`help config format.use-persistent-nodemap`.
2036
2041
2037 ``revlog.persistent-nodemap.slow-path``
2042 ``revlog.persistent-nodemap.slow-path``
2038 Control the behavior of Merucrial when using a repository with "persistent"
2043 Control the behavior of Merucrial when using a repository with "persistent"
2039 nodemap with an installation of Mercurial without a fast implementation for
2044 nodemap with an installation of Mercurial without a fast implementation for
2040 the feature:
2045 the feature:
2041
2046
2042 ``allow``: Silently use the slower implementation to access the repository.
2047 ``allow``: Silently use the slower implementation to access the repository.
2043 ``warn``: Warn, but use the slower implementation to access the repository.
2048 ``warn``: Warn, but use the slower implementation to access the repository.
2044 ``abort``: Prevent access to such repositories. (This is the default)
2049 ``abort``: Prevent access to such repositories. (This is the default)
2045
2050
2046 For details on the "persistent-nodemap" feature, see:
2051 For details on the "persistent-nodemap" feature, see:
2047 :hg:`help config format.use-persistent-nodemap`.
2052 :hg:`help config format.use-persistent-nodemap`.
2048
2053
2049 ``revlog.reuse-external-delta-parent``
2054 ``revlog.reuse-external-delta-parent``
2050 Control the order in which delta parents are considered when adding new
2055 Control the order in which delta parents are considered when adding new
2051 revisions from an external source.
2056 revisions from an external source.
2052 (typically: apply bundle from `hg pull` or `hg push`).
2057 (typically: apply bundle from `hg pull` or `hg push`).
2053
2058
2054 New revisions are usually provided as a delta against other revisions. By
2059 New revisions are usually provided as a delta against other revisions. By
2055 default, Mercurial will try to reuse this delta first, therefore using the
2060 default, Mercurial will try to reuse this delta first, therefore using the
2056 same "delta parent" as the source. Directly using delta's from the source
2061 same "delta parent" as the source. Directly using delta's from the source
2057 reduces CPU usage and usually speeds up operation. However, in some case,
2062 reduces CPU usage and usually speeds up operation. However, in some case,
2058 the source might have sub-optimal delta bases and forcing their reevaluation
2063 the source might have sub-optimal delta bases and forcing their reevaluation
2059 is useful. For example, pushes from an old client could have sub-optimal
2064 is useful. For example, pushes from an old client could have sub-optimal
2060 delta's parent that the server want to optimize. (lack of general delta, bad
2065 delta's parent that the server want to optimize. (lack of general delta, bad
2061 parents, choice, lack of sparse-revlog, etc).
2066 parents, choice, lack of sparse-revlog, etc).
2062
2067
2063 This option is enabled by default. Turning it off will ensure bad delta
2068 This option is enabled by default. Turning it off will ensure bad delta
2064 parent choices from older client do not propagate to this repository, at
2069 parent choices from older client do not propagate to this repository, at
2065 the cost of a small increase in CPU consumption.
2070 the cost of a small increase in CPU consumption.
2066
2071
2067 Note: this option only control the order in which delta parents are
2072 Note: this option only control the order in which delta parents are
2068 considered. Even when disabled, the existing delta from the source will be
2073 considered. Even when disabled, the existing delta from the source will be
2069 reused if the same delta parent is selected.
2074 reused if the same delta parent is selected.
2070
2075
2071 ``revlog.reuse-external-delta``
2076 ``revlog.reuse-external-delta``
2072 Control the reuse of delta from external source.
2077 Control the reuse of delta from external source.
2073 (typically: apply bundle from `hg pull` or `hg push`).
2078 (typically: apply bundle from `hg pull` or `hg push`).
2074
2079
2075 New revisions are usually provided as a delta against another revision. By
2080 New revisions are usually provided as a delta against another revision. By
2076 default, Mercurial will not recompute the same delta again, trusting
2081 default, Mercurial will not recompute the same delta again, trusting
2077 externally provided deltas. There have been rare cases of small adjustment
2082 externally provided deltas. There have been rare cases of small adjustment
2078 to the diffing algorithm in the past. So in some rare case, recomputing
2083 to the diffing algorithm in the past. So in some rare case, recomputing
2079 delta provided by ancient clients can provides better results. Disabling
2084 delta provided by ancient clients can provides better results. Disabling
2080 this option means going through a full delta recomputation for all incoming
2085 this option means going through a full delta recomputation for all incoming
2081 revisions. It means a large increase in CPU usage and will slow operations
2086 revisions. It means a large increase in CPU usage and will slow operations
2082 down.
2087 down.
2083
2088
2084 This option is enabled by default. When disabled, it also disables the
2089 This option is enabled by default. When disabled, it also disables the
2085 related ``storage.revlog.reuse-external-delta-parent`` option.
2090 related ``storage.revlog.reuse-external-delta-parent`` option.
2086
2091
2087 ``revlog.zlib.level``
2092 ``revlog.zlib.level``
2088 Zlib compression level used when storing data into the repository. Accepted
2093 Zlib compression level used when storing data into the repository. Accepted
2089 Value range from 1 (lowest compression) to 9 (highest compression). Zlib
2094 Value range from 1 (lowest compression) to 9 (highest compression). Zlib
2090 default value is 6.
2095 default value is 6.
2091
2096
2092
2097
2093 ``revlog.zstd.level``
2098 ``revlog.zstd.level``
2094 zstd compression level used when storing data into the repository. Accepted
2099 zstd compression level used when storing data into the repository. Accepted
2095 Value range from 1 (lowest compression) to 22 (highest compression).
2100 Value range from 1 (lowest compression) to 22 (highest compression).
2096 (default 3)
2101 (default 3)
2097
2102
2098 ``server``
2103 ``server``
2099 ----------
2104 ----------
2100
2105
2101 Controls generic server settings.
2106 Controls generic server settings.
2102
2107
2103 ``bookmarks-pushkey-compat``
2108 ``bookmarks-pushkey-compat``
2104 Trigger pushkey hook when being pushed bookmark updates. This config exist
2109 Trigger pushkey hook when being pushed bookmark updates. This config exist
2105 for compatibility purpose (default to True)
2110 for compatibility purpose (default to True)
2106
2111
2107 If you use ``pushkey`` and ``pre-pushkey`` hooks to control bookmark
2112 If you use ``pushkey`` and ``pre-pushkey`` hooks to control bookmark
2108 movement we recommend you migrate them to ``txnclose-bookmark`` and
2113 movement we recommend you migrate them to ``txnclose-bookmark`` and
2109 ``pretxnclose-bookmark``.
2114 ``pretxnclose-bookmark``.
2110
2115
2111 ``compressionengines``
2116 ``compressionengines``
2112 List of compression engines and their relative priority to advertise
2117 List of compression engines and their relative priority to advertise
2113 to clients.
2118 to clients.
2114
2119
2115 The order of compression engines determines their priority, the first
2120 The order of compression engines determines their priority, the first
2116 having the highest priority. If a compression engine is not listed
2121 having the highest priority. If a compression engine is not listed
2117 here, it won't be advertised to clients.
2122 here, it won't be advertised to clients.
2118
2123
2119 If not set (the default), built-in defaults are used. Run
2124 If not set (the default), built-in defaults are used. Run
2120 :hg:`debuginstall` to list available compression engines and their
2125 :hg:`debuginstall` to list available compression engines and their
2121 default wire protocol priority.
2126 default wire protocol priority.
2122
2127
2123 Older Mercurial clients only support zlib compression and this setting
2128 Older Mercurial clients only support zlib compression and this setting
2124 has no effect for legacy clients.
2129 has no effect for legacy clients.
2125
2130
2126 ``uncompressed``
2131 ``uncompressed``
2127 Whether to allow clients to clone a repository using the
2132 Whether to allow clients to clone a repository using the
2128 uncompressed streaming protocol. This transfers about 40% more
2133 uncompressed streaming protocol. This transfers about 40% more
2129 data than a regular clone, but uses less memory and CPU on both
2134 data than a regular clone, but uses less memory and CPU on both
2130 server and client. Over a LAN (100 Mbps or better) or a very fast
2135 server and client. Over a LAN (100 Mbps or better) or a very fast
2131 WAN, an uncompressed streaming clone is a lot faster (~10x) than a
2136 WAN, an uncompressed streaming clone is a lot faster (~10x) than a
2132 regular clone. Over most WAN connections (anything slower than
2137 regular clone. Over most WAN connections (anything slower than
2133 about 6 Mbps), uncompressed streaming is slower, because of the
2138 about 6 Mbps), uncompressed streaming is slower, because of the
2134 extra data transfer overhead. This mode will also temporarily hold
2139 extra data transfer overhead. This mode will also temporarily hold
2135 the write lock while determining what data to transfer.
2140 the write lock while determining what data to transfer.
2136 (default: True)
2141 (default: True)
2137
2142
2138 ``uncompressedallowsecret``
2143 ``uncompressedallowsecret``
2139 Whether to allow stream clones when the repository contains secret
2144 Whether to allow stream clones when the repository contains secret
2140 changesets. (default: False)
2145 changesets. (default: False)
2141
2146
2142 ``preferuncompressed``
2147 ``preferuncompressed``
2143 When set, clients will try to use the uncompressed streaming
2148 When set, clients will try to use the uncompressed streaming
2144 protocol. (default: False)
2149 protocol. (default: False)
2145
2150
2146 ``disablefullbundle``
2151 ``disablefullbundle``
2147 When set, servers will refuse attempts to do pull-based clones.
2152 When set, servers will refuse attempts to do pull-based clones.
2148 If this option is set, ``preferuncompressed`` and/or clone bundles
2153 If this option is set, ``preferuncompressed`` and/or clone bundles
2149 are highly recommended. Partial clones will still be allowed.
2154 are highly recommended. Partial clones will still be allowed.
2150 (default: False)
2155 (default: False)
2151
2156
2152 ``streamunbundle``
2157 ``streamunbundle``
2153 When set, servers will apply data sent from the client directly,
2158 When set, servers will apply data sent from the client directly,
2154 otherwise it will be written to a temporary file first. This option
2159 otherwise it will be written to a temporary file first. This option
2155 effectively prevents concurrent pushes.
2160 effectively prevents concurrent pushes.
2156
2161
2157 ``pullbundle``
2162 ``pullbundle``
2158 When set, the server will check pullbundle.manifest for bundles
2163 When set, the server will check pullbundle.manifest for bundles
2159 covering the requested heads and common nodes. The first matching
2164 covering the requested heads and common nodes. The first matching
2160 entry will be streamed to the client.
2165 entry will be streamed to the client.
2161
2166
2162 For HTTP transport, the stream will still use zlib compression
2167 For HTTP transport, the stream will still use zlib compression
2163 for older clients.
2168 for older clients.
2164
2169
2165 ``concurrent-push-mode``
2170 ``concurrent-push-mode``
2166 Level of allowed race condition between two pushing clients.
2171 Level of allowed race condition between two pushing clients.
2167
2172
2168 - 'strict': push is abort if another client touched the repository
2173 - 'strict': push is abort if another client touched the repository
2169 while the push was preparing.
2174 while the push was preparing.
2170 - 'check-related': push is only aborted if it affects head that got also
2175 - 'check-related': push is only aborted if it affects head that got also
2171 affected while the push was preparing. (default since 5.4)
2176 affected while the push was preparing. (default since 5.4)
2172
2177
2173 'check-related' only takes effect for compatible clients (version
2178 'check-related' only takes effect for compatible clients (version
2174 4.3 and later). Older clients will use 'strict'.
2179 4.3 and later). Older clients will use 'strict'.
2175
2180
2176 ``validate``
2181 ``validate``
2177 Whether to validate the completeness of pushed changesets by
2182 Whether to validate the completeness of pushed changesets by
2178 checking that all new file revisions specified in manifests are
2183 checking that all new file revisions specified in manifests are
2179 present. (default: False)
2184 present. (default: False)
2180
2185
2181 ``maxhttpheaderlen``
2186 ``maxhttpheaderlen``
2182 Instruct HTTP clients not to send request headers longer than this
2187 Instruct HTTP clients not to send request headers longer than this
2183 many bytes. (default: 1024)
2188 many bytes. (default: 1024)
2184
2189
2185 ``bundle1``
2190 ``bundle1``
2186 Whether to allow clients to push and pull using the legacy bundle1
2191 Whether to allow clients to push and pull using the legacy bundle1
2187 exchange format. (default: True)
2192 exchange format. (default: True)
2188
2193
2189 ``bundle1gd``
2194 ``bundle1gd``
2190 Like ``bundle1`` but only used if the repository is using the
2195 Like ``bundle1`` but only used if the repository is using the
2191 *generaldelta* storage format. (default: True)
2196 *generaldelta* storage format. (default: True)
2192
2197
2193 ``bundle1.push``
2198 ``bundle1.push``
2194 Whether to allow clients to push using the legacy bundle1 exchange
2199 Whether to allow clients to push using the legacy bundle1 exchange
2195 format. (default: True)
2200 format. (default: True)
2196
2201
2197 ``bundle1gd.push``
2202 ``bundle1gd.push``
2198 Like ``bundle1.push`` but only used if the repository is using the
2203 Like ``bundle1.push`` but only used if the repository is using the
2199 *generaldelta* storage format. (default: True)
2204 *generaldelta* storage format. (default: True)
2200
2205
2201 ``bundle1.pull``
2206 ``bundle1.pull``
2202 Whether to allow clients to pull using the legacy bundle1 exchange
2207 Whether to allow clients to pull using the legacy bundle1 exchange
2203 format. (default: True)
2208 format. (default: True)
2204
2209
2205 ``bundle1gd.pull``
2210 ``bundle1gd.pull``
2206 Like ``bundle1.pull`` but only used if the repository is using the
2211 Like ``bundle1.pull`` but only used if the repository is using the
2207 *generaldelta* storage format. (default: True)
2212 *generaldelta* storage format. (default: True)
2208
2213
2209 Large repositories using the *generaldelta* storage format should
2214 Large repositories using the *generaldelta* storage format should
2210 consider setting this option because converting *generaldelta*
2215 consider setting this option because converting *generaldelta*
2211 repositories to the exchange format required by the bundle1 data
2216 repositories to the exchange format required by the bundle1 data
2212 format can consume a lot of CPU.
2217 format can consume a lot of CPU.
2213
2218
2214 ``bundle2.stream``
2219 ``bundle2.stream``
2215 Whether to allow clients to pull using the bundle2 streaming protocol.
2220 Whether to allow clients to pull using the bundle2 streaming protocol.
2216 (default: True)
2221 (default: True)
2217
2222
2218 ``zliblevel``
2223 ``zliblevel``
2219 Integer between ``-1`` and ``9`` that controls the zlib compression level
2224 Integer between ``-1`` and ``9`` that controls the zlib compression level
2220 for wire protocol commands that send zlib compressed output (notably the
2225 for wire protocol commands that send zlib compressed output (notably the
2221 commands that send repository history data).
2226 commands that send repository history data).
2222
2227
2223 The default (``-1``) uses the default zlib compression level, which is
2228 The default (``-1``) uses the default zlib compression level, which is
2224 likely equivalent to ``6``. ``0`` means no compression. ``9`` means
2229 likely equivalent to ``6``. ``0`` means no compression. ``9`` means
2225 maximum compression.
2230 maximum compression.
2226
2231
2227 Setting this option allows server operators to make trade-offs between
2232 Setting this option allows server operators to make trade-offs between
2228 bandwidth and CPU used. Lowering the compression lowers CPU utilization
2233 bandwidth and CPU used. Lowering the compression lowers CPU utilization
2229 but sends more bytes to clients.
2234 but sends more bytes to clients.
2230
2235
2231 This option only impacts the HTTP server.
2236 This option only impacts the HTTP server.
2232
2237
2233 ``zstdlevel``
2238 ``zstdlevel``
2234 Integer between ``1`` and ``22`` that controls the zstd compression level
2239 Integer between ``1`` and ``22`` that controls the zstd compression level
2235 for wire protocol commands. ``1`` is the minimal amount of compression and
2240 for wire protocol commands. ``1`` is the minimal amount of compression and
2236 ``22`` is the highest amount of compression.
2241 ``22`` is the highest amount of compression.
2237
2242
2238 The default (``3``) should be significantly faster than zlib while likely
2243 The default (``3``) should be significantly faster than zlib while likely
2239 delivering better compression ratios.
2244 delivering better compression ratios.
2240
2245
2241 This option only impacts the HTTP server.
2246 This option only impacts the HTTP server.
2242
2247
2243 See also ``server.zliblevel``.
2248 See also ``server.zliblevel``.
2244
2249
2245 ``view``
2250 ``view``
2246 Repository filter used when exchanging revisions with the peer.
2251 Repository filter used when exchanging revisions with the peer.
2247
2252
2248 The default view (``served``) excludes secret and hidden changesets.
2253 The default view (``served``) excludes secret and hidden changesets.
2249 Another useful value is ``immutable`` (no draft, secret or hidden
2254 Another useful value is ``immutable`` (no draft, secret or hidden
2250 changesets). (EXPERIMENTAL)
2255 changesets). (EXPERIMENTAL)
2251
2256
2252 ``smtp``
2257 ``smtp``
2253 --------
2258 --------
2254
2259
2255 Configuration for extensions that need to send email messages.
2260 Configuration for extensions that need to send email messages.
2256
2261
2257 ``host``
2262 ``host``
2258 Host name of mail server, e.g. "mail.example.com".
2263 Host name of mail server, e.g. "mail.example.com".
2259
2264
2260 ``port``
2265 ``port``
2261 Optional. Port to connect to on mail server. (default: 465 if
2266 Optional. Port to connect to on mail server. (default: 465 if
2262 ``tls`` is smtps; 25 otherwise)
2267 ``tls`` is smtps; 25 otherwise)
2263
2268
2264 ``tls``
2269 ``tls``
2265 Optional. Method to enable TLS when connecting to mail server: starttls,
2270 Optional. Method to enable TLS when connecting to mail server: starttls,
2266 smtps or none. (default: none)
2271 smtps or none. (default: none)
2267
2272
2268 ``username``
2273 ``username``
2269 Optional. User name for authenticating with the SMTP server.
2274 Optional. User name for authenticating with the SMTP server.
2270 (default: None)
2275 (default: None)
2271
2276
2272 ``password``
2277 ``password``
2273 Optional. Password for authenticating with the SMTP server. If not
2278 Optional. Password for authenticating with the SMTP server. If not
2274 specified, interactive sessions will prompt the user for a
2279 specified, interactive sessions will prompt the user for a
2275 password; non-interactive sessions will fail. (default: None)
2280 password; non-interactive sessions will fail. (default: None)
2276
2281
2277 ``local_hostname``
2282 ``local_hostname``
2278 Optional. The hostname that the sender can use to identify
2283 Optional. The hostname that the sender can use to identify
2279 itself to the MTA.
2284 itself to the MTA.
2280
2285
2281
2286
2282 ``subpaths``
2287 ``subpaths``
2283 ------------
2288 ------------
2284
2289
2285 Subrepository source URLs can go stale if a remote server changes name
2290 Subrepository source URLs can go stale if a remote server changes name
2286 or becomes temporarily unavailable. This section lets you define
2291 or becomes temporarily unavailable. This section lets you define
2287 rewrite rules of the form::
2292 rewrite rules of the form::
2288
2293
2289 <pattern> = <replacement>
2294 <pattern> = <replacement>
2290
2295
2291 where ``pattern`` is a regular expression matching a subrepository
2296 where ``pattern`` is a regular expression matching a subrepository
2292 source URL and ``replacement`` is the replacement string used to
2297 source URL and ``replacement`` is the replacement string used to
2293 rewrite it. Groups can be matched in ``pattern`` and referenced in
2298 rewrite it. Groups can be matched in ``pattern`` and referenced in
2294 ``replacements``. For instance::
2299 ``replacements``. For instance::
2295
2300
2296 http://server/(.*)-hg/ = http://hg.server/\1/
2301 http://server/(.*)-hg/ = http://hg.server/\1/
2297
2302
2298 rewrites ``http://server/foo-hg/`` into ``http://hg.server/foo/``.
2303 rewrites ``http://server/foo-hg/`` into ``http://hg.server/foo/``.
2299
2304
2300 Relative subrepository paths are first made absolute, and the
2305 Relative subrepository paths are first made absolute, and the
2301 rewrite rules are then applied on the full (absolute) path. If ``pattern``
2306 rewrite rules are then applied on the full (absolute) path. If ``pattern``
2302 doesn't match the full path, an attempt is made to apply it on the
2307 doesn't match the full path, an attempt is made to apply it on the
2303 relative path alone. The rules are applied in definition order.
2308 relative path alone. The rules are applied in definition order.
2304
2309
2305 ``subrepos``
2310 ``subrepos``
2306 ------------
2311 ------------
2307
2312
2308 This section contains options that control the behavior of the
2313 This section contains options that control the behavior of the
2309 subrepositories feature. See also :hg:`help subrepos`.
2314 subrepositories feature. See also :hg:`help subrepos`.
2310
2315
2311 Security note: auditing in Mercurial is known to be insufficient to
2316 Security note: auditing in Mercurial is known to be insufficient to
2312 prevent clone-time code execution with carefully constructed Git
2317 prevent clone-time code execution with carefully constructed Git
2313 subrepos. It is unknown if a similar detect is present in Subversion
2318 subrepos. It is unknown if a similar detect is present in Subversion
2314 subrepos. Both Git and Subversion subrepos are disabled by default
2319 subrepos. Both Git and Subversion subrepos are disabled by default
2315 out of security concerns. These subrepo types can be enabled using
2320 out of security concerns. These subrepo types can be enabled using
2316 the respective options below.
2321 the respective options below.
2317
2322
2318 ``allowed``
2323 ``allowed``
2319 Whether subrepositories are allowed in the working directory.
2324 Whether subrepositories are allowed in the working directory.
2320
2325
2321 When false, commands involving subrepositories (like :hg:`update`)
2326 When false, commands involving subrepositories (like :hg:`update`)
2322 will fail for all subrepository types.
2327 will fail for all subrepository types.
2323 (default: true)
2328 (default: true)
2324
2329
2325 ``hg:allowed``
2330 ``hg:allowed``
2326 Whether Mercurial subrepositories are allowed in the working
2331 Whether Mercurial subrepositories are allowed in the working
2327 directory. This option only has an effect if ``subrepos.allowed``
2332 directory. This option only has an effect if ``subrepos.allowed``
2328 is true.
2333 is true.
2329 (default: true)
2334 (default: true)
2330
2335
2331 ``git:allowed``
2336 ``git:allowed``
2332 Whether Git subrepositories are allowed in the working directory.
2337 Whether Git subrepositories are allowed in the working directory.
2333 This option only has an effect if ``subrepos.allowed`` is true.
2338 This option only has an effect if ``subrepos.allowed`` is true.
2334
2339
2335 See the security note above before enabling Git subrepos.
2340 See the security note above before enabling Git subrepos.
2336 (default: false)
2341 (default: false)
2337
2342
2338 ``svn:allowed``
2343 ``svn:allowed``
2339 Whether Subversion subrepositories are allowed in the working
2344 Whether Subversion subrepositories are allowed in the working
2340 directory. This option only has an effect if ``subrepos.allowed``
2345 directory. This option only has an effect if ``subrepos.allowed``
2341 is true.
2346 is true.
2342
2347
2343 See the security note above before enabling Subversion subrepos.
2348 See the security note above before enabling Subversion subrepos.
2344 (default: false)
2349 (default: false)
2345
2350
2346 ``templatealias``
2351 ``templatealias``
2347 -----------------
2352 -----------------
2348
2353
2349 Alias definitions for templates. See :hg:`help templates` for details.
2354 Alias definitions for templates. See :hg:`help templates` for details.
2350
2355
2351 ``templates``
2356 ``templates``
2352 -------------
2357 -------------
2353
2358
2354 Use the ``[templates]`` section to define template strings.
2359 Use the ``[templates]`` section to define template strings.
2355 See :hg:`help templates` for details.
2360 See :hg:`help templates` for details.
2356
2361
2357 ``trusted``
2362 ``trusted``
2358 -----------
2363 -----------
2359
2364
2360 Mercurial will not use the settings in the
2365 Mercurial will not use the settings in the
2361 ``.hg/hgrc`` file from a repository if it doesn't belong to a trusted
2366 ``.hg/hgrc`` file from a repository if it doesn't belong to a trusted
2362 user or to a trusted group, as various hgrc features allow arbitrary
2367 user or to a trusted group, as various hgrc features allow arbitrary
2363 commands to be run. This issue is often encountered when configuring
2368 commands to be run. This issue is often encountered when configuring
2364 hooks or extensions for shared repositories or servers. However,
2369 hooks or extensions for shared repositories or servers. However,
2365 the web interface will use some safe settings from the ``[web]``
2370 the web interface will use some safe settings from the ``[web]``
2366 section.
2371 section.
2367
2372
2368 This section specifies what users and groups are trusted. The
2373 This section specifies what users and groups are trusted. The
2369 current user is always trusted. To trust everybody, list a user or a
2374 current user is always trusted. To trust everybody, list a user or a
2370 group with name ``*``. These settings must be placed in an
2375 group with name ``*``. These settings must be placed in an
2371 *already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
2376 *already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
2372 user or service running Mercurial.
2377 user or service running Mercurial.
2373
2378
2374 ``users``
2379 ``users``
2375 Comma-separated list of trusted users.
2380 Comma-separated list of trusted users.
2376
2381
2377 ``groups``
2382 ``groups``
2378 Comma-separated list of trusted groups.
2383 Comma-separated list of trusted groups.
2379
2384
2380
2385
2381 ``ui``
2386 ``ui``
2382 ------
2387 ------
2383
2388
2384 User interface controls.
2389 User interface controls.
2385
2390
2386 ``archivemeta``
2391 ``archivemeta``
2387 Whether to include the .hg_archival.txt file containing meta data
2392 Whether to include the .hg_archival.txt file containing meta data
2388 (hashes for the repository base and for tip) in archives created
2393 (hashes for the repository base and for tip) in archives created
2389 by the :hg:`archive` command or downloaded via hgweb.
2394 by the :hg:`archive` command or downloaded via hgweb.
2390 (default: True)
2395 (default: True)
2391
2396
2392 ``askusername``
2397 ``askusername``
2393 Whether to prompt for a username when committing. If True, and
2398 Whether to prompt for a username when committing. If True, and
2394 neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
2399 neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
2395 be prompted to enter a username. If no username is entered, the
2400 be prompted to enter a username. If no username is entered, the
2396 default ``USER@HOST`` is used instead.
2401 default ``USER@HOST`` is used instead.
2397 (default: False)
2402 (default: False)
2398
2403
2399 ``clonebundles``
2404 ``clonebundles``
2400 Whether the "clone bundles" feature is enabled.
2405 Whether the "clone bundles" feature is enabled.
2401
2406
2402 When enabled, :hg:`clone` may download and apply a server-advertised
2407 When enabled, :hg:`clone` may download and apply a server-advertised
2403 bundle file from a URL instead of using the normal exchange mechanism.
2408 bundle file from a URL instead of using the normal exchange mechanism.
2404
2409
2405 This can likely result in faster and more reliable clones.
2410 This can likely result in faster and more reliable clones.
2406
2411
2407 (default: True)
2412 (default: True)
2408
2413
2409 ``clonebundlefallback``
2414 ``clonebundlefallback``
2410 Whether failure to apply an advertised "clone bundle" from a server
2415 Whether failure to apply an advertised "clone bundle" from a server
2411 should result in fallback to a regular clone.
2416 should result in fallback to a regular clone.
2412
2417
2413 This is disabled by default because servers advertising "clone
2418 This is disabled by default because servers advertising "clone
2414 bundles" often do so to reduce server load. If advertised bundles
2419 bundles" often do so to reduce server load. If advertised bundles
2415 start mass failing and clients automatically fall back to a regular
2420 start mass failing and clients automatically fall back to a regular
2416 clone, this would add significant and unexpected load to the server
2421 clone, this would add significant and unexpected load to the server
2417 since the server is expecting clone operations to be offloaded to
2422 since the server is expecting clone operations to be offloaded to
2418 pre-generated bundles. Failing fast (the default behavior) ensures
2423 pre-generated bundles. Failing fast (the default behavior) ensures
2419 clients don't overwhelm the server when "clone bundle" application
2424 clients don't overwhelm the server when "clone bundle" application
2420 fails.
2425 fails.
2421
2426
2422 (default: False)
2427 (default: False)
2423
2428
2424 ``clonebundleprefers``
2429 ``clonebundleprefers``
2425 Defines preferences for which "clone bundles" to use.
2430 Defines preferences for which "clone bundles" to use.
2426
2431
2427 Servers advertising "clone bundles" may advertise multiple available
2432 Servers advertising "clone bundles" may advertise multiple available
2428 bundles. Each bundle may have different attributes, such as the bundle
2433 bundles. Each bundle may have different attributes, such as the bundle
2429 type and compression format. This option is used to prefer a particular
2434 type and compression format. This option is used to prefer a particular
2430 bundle over another.
2435 bundle over another.
2431
2436
2432 The following keys are defined by Mercurial:
2437 The following keys are defined by Mercurial:
2433
2438
2434 BUNDLESPEC
2439 BUNDLESPEC
2435 A bundle type specifier. These are strings passed to :hg:`bundle -t`.
2440 A bundle type specifier. These are strings passed to :hg:`bundle -t`.
2436 e.g. ``gzip-v2`` or ``bzip2-v1``.
2441 e.g. ``gzip-v2`` or ``bzip2-v1``.
2437
2442
2438 COMPRESSION
2443 COMPRESSION
2439 The compression format of the bundle. e.g. ``gzip`` and ``bzip2``.
2444 The compression format of the bundle. e.g. ``gzip`` and ``bzip2``.
2440
2445
2441 Server operators may define custom keys.
2446 Server operators may define custom keys.
2442
2447
2443 Example values: ``COMPRESSION=bzip2``,
2448 Example values: ``COMPRESSION=bzip2``,
2444 ``BUNDLESPEC=gzip-v2, COMPRESSION=gzip``.
2449 ``BUNDLESPEC=gzip-v2, COMPRESSION=gzip``.
2445
2450
2446 By default, the first bundle advertised by the server is used.
2451 By default, the first bundle advertised by the server is used.
2447
2452
2448 ``color``
2453 ``color``
2449 When to colorize output. Possible value are Boolean ("yes" or "no"), or
2454 When to colorize output. Possible value are Boolean ("yes" or "no"), or
2450 "debug", or "always". (default: "yes"). "yes" will use color whenever it
2455 "debug", or "always". (default: "yes"). "yes" will use color whenever it
2451 seems possible. See :hg:`help color` for details.
2456 seems possible. See :hg:`help color` for details.
2452
2457
2453 ``commitsubrepos``
2458 ``commitsubrepos``
2454 Whether to commit modified subrepositories when committing the
2459 Whether to commit modified subrepositories when committing the
2455 parent repository. If False and one subrepository has uncommitted
2460 parent repository. If False and one subrepository has uncommitted
2456 changes, abort the commit.
2461 changes, abort the commit.
2457 (default: False)
2462 (default: False)
2458
2463
2459 ``debug``
2464 ``debug``
2460 Print debugging information. (default: False)
2465 Print debugging information. (default: False)
2461
2466
2462 ``editor``
2467 ``editor``
2463 The editor to use during a commit. (default: ``$EDITOR`` or ``vi``)
2468 The editor to use during a commit. (default: ``$EDITOR`` or ``vi``)
2464
2469
2465 ``fallbackencoding``
2470 ``fallbackencoding``
2466 Encoding to try if it's not possible to decode the changelog using
2471 Encoding to try if it's not possible to decode the changelog using
2467 UTF-8. (default: ISO-8859-1)
2472 UTF-8. (default: ISO-8859-1)
2468
2473
2469 ``graphnodetemplate``
2474 ``graphnodetemplate``
2470 (DEPRECATED) Use ``command-templates.graphnode`` instead.
2475 (DEPRECATED) Use ``command-templates.graphnode`` instead.
2471
2476
2472 ``ignore``
2477 ``ignore``
2473 A file to read per-user ignore patterns from. This file should be
2478 A file to read per-user ignore patterns from. This file should be
2474 in the same format as a repository-wide .hgignore file. Filenames
2479 in the same format as a repository-wide .hgignore file. Filenames
2475 are relative to the repository root. This option supports hook syntax,
2480 are relative to the repository root. This option supports hook syntax,
2476 so if you want to specify multiple ignore files, you can do so by
2481 so if you want to specify multiple ignore files, you can do so by
2477 setting something like ``ignore.other = ~/.hgignore2``. For details
2482 setting something like ``ignore.other = ~/.hgignore2``. For details
2478 of the ignore file format, see the ``hgignore(5)`` man page.
2483 of the ignore file format, see the ``hgignore(5)`` man page.
2479
2484
2480 ``interactive``
2485 ``interactive``
2481 Allow to prompt the user. (default: True)
2486 Allow to prompt the user. (default: True)
2482
2487
2483 ``interface``
2488 ``interface``
2484 Select the default interface for interactive features (default: text).
2489 Select the default interface for interactive features (default: text).
2485 Possible values are 'text' and 'curses'.
2490 Possible values are 'text' and 'curses'.
2486
2491
2487 ``interface.chunkselector``
2492 ``interface.chunkselector``
2488 Select the interface for change recording (e.g. :hg:`commit -i`).
2493 Select the interface for change recording (e.g. :hg:`commit -i`).
2489 Possible values are 'text' and 'curses'.
2494 Possible values are 'text' and 'curses'.
2490 This config overrides the interface specified by ui.interface.
2495 This config overrides the interface specified by ui.interface.
2491
2496
2492 ``large-file-limit``
2497 ``large-file-limit``
2493 Largest file size that gives no memory use warning.
2498 Largest file size that gives no memory use warning.
2494 Possible values are integers or 0 to disable the check.
2499 Possible values are integers or 0 to disable the check.
2495 (default: 10000000)
2500 (default: 10000000)
2496
2501
2497 ``logtemplate``
2502 ``logtemplate``
2498 (DEPRECATED) Use ``command-templates.log`` instead.
2503 (DEPRECATED) Use ``command-templates.log`` instead.
2499
2504
2500 ``merge``
2505 ``merge``
2501 The conflict resolution program to use during a manual merge.
2506 The conflict resolution program to use during a manual merge.
2502 For more information on merge tools see :hg:`help merge-tools`.
2507 For more information on merge tools see :hg:`help merge-tools`.
2503 For configuring merge tools see the ``[merge-tools]`` section.
2508 For configuring merge tools see the ``[merge-tools]`` section.
2504
2509
2505 ``mergemarkers``
2510 ``mergemarkers``
2506 Sets the merge conflict marker label styling. The ``detailed`` style
2511 Sets the merge conflict marker label styling. The ``detailed`` style
2507 uses the ``command-templates.mergemarker`` setting to style the labels.
2512 uses the ``command-templates.mergemarker`` setting to style the labels.
2508 The ``basic`` style just uses 'local' and 'other' as the marker label.
2513 The ``basic`` style just uses 'local' and 'other' as the marker label.
2509 One of ``basic`` or ``detailed``.
2514 One of ``basic`` or ``detailed``.
2510 (default: ``basic``)
2515 (default: ``basic``)
2511
2516
2512 ``mergemarkertemplate``
2517 ``mergemarkertemplate``
2513 (DEPRECATED) Use ``command-templates.mergemarker`` instead.
2518 (DEPRECATED) Use ``command-templates.mergemarker`` instead.
2514
2519
2515 ``message-output``
2520 ``message-output``
2516 Where to write status and error messages. (default: ``stdio``)
2521 Where to write status and error messages. (default: ``stdio``)
2517
2522
2518 ``channel``
2523 ``channel``
2519 Use separate channel for structured output. (Command-server only)
2524 Use separate channel for structured output. (Command-server only)
2520 ``stderr``
2525 ``stderr``
2521 Everything to stderr.
2526 Everything to stderr.
2522 ``stdio``
2527 ``stdio``
2523 Status to stdout, and error to stderr.
2528 Status to stdout, and error to stderr.
2524
2529
2525 ``origbackuppath``
2530 ``origbackuppath``
2526 The path to a directory used to store generated .orig files. If the path is
2531 The path to a directory used to store generated .orig files. If the path is
2527 not a directory, one will be created. If set, files stored in this
2532 not a directory, one will be created. If set, files stored in this
2528 directory have the same name as the original file and do not have a .orig
2533 directory have the same name as the original file and do not have a .orig
2529 suffix.
2534 suffix.
2530
2535
2531 ``paginate``
2536 ``paginate``
2532 Control the pagination of command output (default: True). See :hg:`help pager`
2537 Control the pagination of command output (default: True). See :hg:`help pager`
2533 for details.
2538 for details.
2534
2539
2535 ``patch``
2540 ``patch``
2536 An optional external tool that ``hg import`` and some extensions
2541 An optional external tool that ``hg import`` and some extensions
2537 will use for applying patches. By default Mercurial uses an
2542 will use for applying patches. By default Mercurial uses an
2538 internal patch utility. The external tool must work as the common
2543 internal patch utility. The external tool must work as the common
2539 Unix ``patch`` program. In particular, it must accept a ``-p``
2544 Unix ``patch`` program. In particular, it must accept a ``-p``
2540 argument to strip patch headers, a ``-d`` argument to specify the
2545 argument to strip patch headers, a ``-d`` argument to specify the
2541 current directory, a file name to patch, and a patch file to take
2546 current directory, a file name to patch, and a patch file to take
2542 from stdin.
2547 from stdin.
2543
2548
2544 It is possible to specify a patch tool together with extra
2549 It is possible to specify a patch tool together with extra
2545 arguments. For example, setting this option to ``patch --merge``
2550 arguments. For example, setting this option to ``patch --merge``
2546 will use the ``patch`` program with its 2-way merge option.
2551 will use the ``patch`` program with its 2-way merge option.
2547
2552
2548 ``portablefilenames``
2553 ``portablefilenames``
2549 Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
2554 Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
2550 (default: ``warn``)
2555 (default: ``warn``)
2551
2556
2552 ``warn``
2557 ``warn``
2553 Print a warning message on POSIX platforms, if a file with a non-portable
2558 Print a warning message on POSIX platforms, if a file with a non-portable
2554 filename is added (e.g. a file with a name that can't be created on
2559 filename is added (e.g. a file with a name that can't be created on
2555 Windows because it contains reserved parts like ``AUX``, reserved
2560 Windows because it contains reserved parts like ``AUX``, reserved
2556 characters like ``:``, or would cause a case collision with an existing
2561 characters like ``:``, or would cause a case collision with an existing
2557 file).
2562 file).
2558
2563
2559 ``ignore``
2564 ``ignore``
2560 Don't print a warning.
2565 Don't print a warning.
2561
2566
2562 ``abort``
2567 ``abort``
2563 The command is aborted.
2568 The command is aborted.
2564
2569
2565 ``true``
2570 ``true``
2566 Alias for ``warn``.
2571 Alias for ``warn``.
2567
2572
2568 ``false``
2573 ``false``
2569 Alias for ``ignore``.
2574 Alias for ``ignore``.
2570
2575
2571 .. container:: windows
2576 .. container:: windows
2572
2577
2573 On Windows, this configuration option is ignored and the command aborted.
2578 On Windows, this configuration option is ignored and the command aborted.
2574
2579
2575 ``pre-merge-tool-output-template``
2580 ``pre-merge-tool-output-template``
2576 (DEPRECATED) Use ``command-template.pre-merge-tool-output`` instead.
2581 (DEPRECATED) Use ``command-template.pre-merge-tool-output`` instead.
2577
2582
2578 ``quiet``
2583 ``quiet``
2579 Reduce the amount of output printed.
2584 Reduce the amount of output printed.
2580 (default: False)
2585 (default: False)
2581
2586
2582 ``relative-paths``
2587 ``relative-paths``
2583 Prefer relative paths in the UI.
2588 Prefer relative paths in the UI.
2584
2589
2585 ``remotecmd``
2590 ``remotecmd``
2586 Remote command to use for clone/push/pull operations.
2591 Remote command to use for clone/push/pull operations.
2587 (default: ``hg``)
2592 (default: ``hg``)
2588
2593
2589 ``report_untrusted``
2594 ``report_untrusted``
2590 Warn if a ``.hg/hgrc`` file is ignored due to not being owned by a
2595 Warn if a ``.hg/hgrc`` file is ignored due to not being owned by a
2591 trusted user or group.
2596 trusted user or group.
2592 (default: True)
2597 (default: True)
2593
2598
2594 ``slash``
2599 ``slash``
2595 (Deprecated. Use ``slashpath`` template filter instead.)
2600 (Deprecated. Use ``slashpath`` template filter instead.)
2596
2601
2597 Display paths using a slash (``/``) as the path separator. This
2602 Display paths using a slash (``/``) as the path separator. This
2598 only makes a difference on systems where the default path
2603 only makes a difference on systems where the default path
2599 separator is not the slash character (e.g. Windows uses the
2604 separator is not the slash character (e.g. Windows uses the
2600 backslash character (``\``)).
2605 backslash character (``\``)).
2601 (default: False)
2606 (default: False)
2602
2607
2603 ``statuscopies``
2608 ``statuscopies``
2604 Display copies in the status command.
2609 Display copies in the status command.
2605
2610
2606 ``ssh``
2611 ``ssh``
2607 Command to use for SSH connections. (default: ``ssh``)
2612 Command to use for SSH connections. (default: ``ssh``)
2608
2613
2609 ``ssherrorhint``
2614 ``ssherrorhint``
2610 A hint shown to the user in the case of SSH error (e.g.
2615 A hint shown to the user in the case of SSH error (e.g.
2611 ``Please see http://company/internalwiki/ssh.html``)
2616 ``Please see http://company/internalwiki/ssh.html``)
2612
2617
2613 ``strict``
2618 ``strict``
2614 Require exact command names, instead of allowing unambiguous
2619 Require exact command names, instead of allowing unambiguous
2615 abbreviations. (default: False)
2620 abbreviations. (default: False)
2616
2621
2617 ``style``
2622 ``style``
2618 Name of style to use for command output.
2623 Name of style to use for command output.
2619
2624
2620 ``supportcontact``
2625 ``supportcontact``
2621 A URL where users should report a Mercurial traceback. Use this if you are a
2626 A URL where users should report a Mercurial traceback. Use this if you are a
2622 large organisation with its own Mercurial deployment process and crash
2627 large organisation with its own Mercurial deployment process and crash
2623 reports should be addressed to your internal support.
2628 reports should be addressed to your internal support.
2624
2629
2625 ``textwidth``
2630 ``textwidth``
2626 Maximum width of help text. A longer line generated by ``hg help`` or
2631 Maximum width of help text. A longer line generated by ``hg help`` or
2627 ``hg subcommand --help`` will be broken after white space to get this
2632 ``hg subcommand --help`` will be broken after white space to get this
2628 width or the terminal width, whichever comes first.
2633 width or the terminal width, whichever comes first.
2629 A non-positive value will disable this and the terminal width will be
2634 A non-positive value will disable this and the terminal width will be
2630 used. (default: 78)
2635 used. (default: 78)
2631
2636
2632 ``timeout``
2637 ``timeout``
2633 The timeout used when a lock is held (in seconds), a negative value
2638 The timeout used when a lock is held (in seconds), a negative value
2634 means no timeout. (default: 600)
2639 means no timeout. (default: 600)
2635
2640
2636 ``timeout.warn``
2641 ``timeout.warn``
2637 Time (in seconds) before a warning is printed about held lock. A negative
2642 Time (in seconds) before a warning is printed about held lock. A negative
2638 value means no warning. (default: 0)
2643 value means no warning. (default: 0)
2639
2644
2640 ``traceback``
2645 ``traceback``
2641 Mercurial always prints a traceback when an unknown exception
2646 Mercurial always prints a traceback when an unknown exception
2642 occurs. Setting this to True will make Mercurial print a traceback
2647 occurs. Setting this to True will make Mercurial print a traceback
2643 on all exceptions, even those recognized by Mercurial (such as
2648 on all exceptions, even those recognized by Mercurial (such as
2644 IOError or MemoryError). (default: False)
2649 IOError or MemoryError). (default: False)
2645
2650
2646 ``tweakdefaults``
2651 ``tweakdefaults``
2647
2652
2648 By default Mercurial's behavior changes very little from release
2653 By default Mercurial's behavior changes very little from release
2649 to release, but over time the recommended config settings
2654 to release, but over time the recommended config settings
2650 shift. Enable this config to opt in to get automatic tweaks to
2655 shift. Enable this config to opt in to get automatic tweaks to
2651 Mercurial's behavior over time. This config setting will have no
2656 Mercurial's behavior over time. This config setting will have no
2652 effect if ``HGPLAIN`` is set or ``HGPLAINEXCEPT`` is set and does
2657 effect if ``HGPLAIN`` is set or ``HGPLAINEXCEPT`` is set and does
2653 not include ``tweakdefaults``. (default: False)
2658 not include ``tweakdefaults``. (default: False)
2654
2659
2655 It currently means::
2660 It currently means::
2656
2661
2657 .. tweakdefaultsmarker
2662 .. tweakdefaultsmarker
2658
2663
2659 ``username``
2664 ``username``
2660 The committer of a changeset created when running "commit".
2665 The committer of a changeset created when running "commit".
2661 Typically a person's name and email address, e.g. ``Fred Widget
2666 Typically a person's name and email address, e.g. ``Fred Widget
2662 <fred@example.com>``. Environment variables in the
2667 <fred@example.com>``. Environment variables in the
2663 username are expanded.
2668 username are expanded.
2664
2669
2665 (default: ``$EMAIL`` or ``username@hostname``. If the username in
2670 (default: ``$EMAIL`` or ``username@hostname``. If the username in
2666 hgrc is empty, e.g. if the system admin set ``username =`` in the
2671 hgrc is empty, e.g. if the system admin set ``username =`` in the
2667 system hgrc, it has to be specified manually or in a different
2672 system hgrc, it has to be specified manually or in a different
2668 hgrc file)
2673 hgrc file)
2669
2674
2670 ``verbose``
2675 ``verbose``
2671 Increase the amount of output printed. (default: False)
2676 Increase the amount of output printed. (default: False)
2672
2677
2673
2678
2674 ``command-templates``
2679 ``command-templates``
2675 ---------------------
2680 ---------------------
2676
2681
2677 Templates used for customizing the output of commands.
2682 Templates used for customizing the output of commands.
2678
2683
2679 ``graphnode``
2684 ``graphnode``
2680 The template used to print changeset nodes in an ASCII revision graph.
2685 The template used to print changeset nodes in an ASCII revision graph.
2681 (default: ``{graphnode}``)
2686 (default: ``{graphnode}``)
2682
2687
2683 ``log``
2688 ``log``
2684 Template string for commands that print changesets.
2689 Template string for commands that print changesets.
2685
2690
2686 ``mergemarker``
2691 ``mergemarker``
2687 The template used to print the commit description next to each conflict
2692 The template used to print the commit description next to each conflict
2688 marker during merge conflicts. See :hg:`help templates` for the template
2693 marker during merge conflicts. See :hg:`help templates` for the template
2689 format.
2694 format.
2690
2695
2691 Defaults to showing the hash, tags, branches, bookmarks, author, and
2696 Defaults to showing the hash, tags, branches, bookmarks, author, and
2692 the first line of the commit description.
2697 the first line of the commit description.
2693
2698
2694 If you use non-ASCII characters in names for tags, branches, bookmarks,
2699 If you use non-ASCII characters in names for tags, branches, bookmarks,
2695 authors, and/or commit descriptions, you must pay attention to encodings of
2700 authors, and/or commit descriptions, you must pay attention to encodings of
2696 managed files. At template expansion, non-ASCII characters use the encoding
2701 managed files. At template expansion, non-ASCII characters use the encoding
2697 specified by the ``--encoding`` global option, ``HGENCODING`` or other
2702 specified by the ``--encoding`` global option, ``HGENCODING`` or other
2698 environment variables that govern your locale. If the encoding of the merge
2703 environment variables that govern your locale. If the encoding of the merge
2699 markers is different from the encoding of the merged files,
2704 markers is different from the encoding of the merged files,
2700 serious problems may occur.
2705 serious problems may occur.
2701
2706
2702 Can be overridden per-merge-tool, see the ``[merge-tools]`` section.
2707 Can be overridden per-merge-tool, see the ``[merge-tools]`` section.
2703
2708
2704 ``oneline-summary``
2709 ``oneline-summary``
2705 A template used by `hg rebase` and other commands for showing a one-line
2710 A template used by `hg rebase` and other commands for showing a one-line
2706 summary of a commit. If the template configured here is longer than one
2711 summary of a commit. If the template configured here is longer than one
2707 line, then only the first line is used.
2712 line, then only the first line is used.
2708
2713
2709 The template can be overridden per command by defining a template in
2714 The template can be overridden per command by defining a template in
2710 `oneline-summary.<command>`, where `<command>` can be e.g. "rebase".
2715 `oneline-summary.<command>`, where `<command>` can be e.g. "rebase".
2711
2716
2712 ``pre-merge-tool-output``
2717 ``pre-merge-tool-output``
2713 A template that is printed before executing an external merge tool. This can
2718 A template that is printed before executing an external merge tool. This can
2714 be used to print out additional context that might be useful to have during
2719 be used to print out additional context that might be useful to have during
2715 the conflict resolution, such as the description of the various commits
2720 the conflict resolution, such as the description of the various commits
2716 involved or bookmarks/tags.
2721 involved or bookmarks/tags.
2717
2722
2718 Additional information is available in the ``local`, ``base``, and ``other``
2723 Additional information is available in the ``local`, ``base``, and ``other``
2719 dicts. For example: ``{local.label}``, ``{base.name}``, or
2724 dicts. For example: ``{local.label}``, ``{base.name}``, or
2720 ``{other.islink}``.
2725 ``{other.islink}``.
2721
2726
2722
2727
2723 ``web``
2728 ``web``
2724 -------
2729 -------
2725
2730
2726 Web interface configuration. The settings in this section apply to
2731 Web interface configuration. The settings in this section apply to
2727 both the builtin webserver (started by :hg:`serve`) and the script you
2732 both the builtin webserver (started by :hg:`serve`) and the script you
2728 run through a webserver (``hgweb.cgi`` and the derivatives for FastCGI
2733 run through a webserver (``hgweb.cgi`` and the derivatives for FastCGI
2729 and WSGI).
2734 and WSGI).
2730
2735
2731 The Mercurial webserver does no authentication (it does not prompt for
2736 The Mercurial webserver does no authentication (it does not prompt for
2732 usernames and passwords to validate *who* users are), but it does do
2737 usernames and passwords to validate *who* users are), but it does do
2733 authorization (it grants or denies access for *authenticated users*
2738 authorization (it grants or denies access for *authenticated users*
2734 based on settings in this section). You must either configure your
2739 based on settings in this section). You must either configure your
2735 webserver to do authentication for you, or disable the authorization
2740 webserver to do authentication for you, or disable the authorization
2736 checks.
2741 checks.
2737
2742
2738 For a quick setup in a trusted environment, e.g., a private LAN, where
2743 For a quick setup in a trusted environment, e.g., a private LAN, where
2739 you want it to accept pushes from anybody, you can use the following
2744 you want it to accept pushes from anybody, you can use the following
2740 command line::
2745 command line::
2741
2746
2742 $ hg --config web.allow-push=* --config web.push_ssl=False serve
2747 $ hg --config web.allow-push=* --config web.push_ssl=False serve
2743
2748
2744 Note that this will allow anybody to push anything to the server and
2749 Note that this will allow anybody to push anything to the server and
2745 that this should not be used for public servers.
2750 that this should not be used for public servers.
2746
2751
2747 The full set of options is:
2752 The full set of options is:
2748
2753
2749 ``accesslog``
2754 ``accesslog``
2750 Where to output the access log. (default: stdout)
2755 Where to output the access log. (default: stdout)
2751
2756
2752 ``address``
2757 ``address``
2753 Interface address to bind to. (default: all)
2758 Interface address to bind to. (default: all)
2754
2759
2755 ``allow-archive``
2760 ``allow-archive``
2756 List of archive format (bz2, gz, zip) allowed for downloading.
2761 List of archive format (bz2, gz, zip) allowed for downloading.
2757 (default: empty)
2762 (default: empty)
2758
2763
2759 ``allowbz2``
2764 ``allowbz2``
2760 (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
2765 (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
2761 revisions.
2766 revisions.
2762 (default: False)
2767 (default: False)
2763
2768
2764 ``allowgz``
2769 ``allowgz``
2765 (DEPRECATED) Whether to allow .tar.gz downloading of repository
2770 (DEPRECATED) Whether to allow .tar.gz downloading of repository
2766 revisions.
2771 revisions.
2767 (default: False)
2772 (default: False)
2768
2773
2769 ``allow-pull``
2774 ``allow-pull``
2770 Whether to allow pulling from the repository. (default: True)
2775 Whether to allow pulling from the repository. (default: True)
2771
2776
2772 ``allow-push``
2777 ``allow-push``
2773 Whether to allow pushing to the repository. If empty or not set,
2778 Whether to allow pushing to the repository. If empty or not set,
2774 pushing is not allowed. If the special value ``*``, any remote
2779 pushing is not allowed. If the special value ``*``, any remote
2775 user can push, including unauthenticated users. Otherwise, the
2780 user can push, including unauthenticated users. Otherwise, the
2776 remote user must have been authenticated, and the authenticated
2781 remote user must have been authenticated, and the authenticated
2777 user name must be present in this list. The contents of the
2782 user name must be present in this list. The contents of the
2778 allow-push list are examined after the deny_push list.
2783 allow-push list are examined after the deny_push list.
2779
2784
2780 ``allow_read``
2785 ``allow_read``
2781 If the user has not already been denied repository access due to
2786 If the user has not already been denied repository access due to
2782 the contents of deny_read, this list determines whether to grant
2787 the contents of deny_read, this list determines whether to grant
2783 repository access to the user. If this list is not empty, and the
2788 repository access to the user. If this list is not empty, and the
2784 user is unauthenticated or not present in the list, then access is
2789 user is unauthenticated or not present in the list, then access is
2785 denied for the user. If the list is empty or not set, then access
2790 denied for the user. If the list is empty or not set, then access
2786 is permitted to all users by default. Setting allow_read to the
2791 is permitted to all users by default. Setting allow_read to the
2787 special value ``*`` is equivalent to it not being set (i.e. access
2792 special value ``*`` is equivalent to it not being set (i.e. access
2788 is permitted to all users). The contents of the allow_read list are
2793 is permitted to all users). The contents of the allow_read list are
2789 examined after the deny_read list.
2794 examined after the deny_read list.
2790
2795
2791 ``allowzip``
2796 ``allowzip``
2792 (DEPRECATED) Whether to allow .zip downloading of repository
2797 (DEPRECATED) Whether to allow .zip downloading of repository
2793 revisions. This feature creates temporary files.
2798 revisions. This feature creates temporary files.
2794 (default: False)
2799 (default: False)
2795
2800
2796 ``archivesubrepos``
2801 ``archivesubrepos``
2797 Whether to recurse into subrepositories when archiving.
2802 Whether to recurse into subrepositories when archiving.
2798 (default: False)
2803 (default: False)
2799
2804
2800 ``baseurl``
2805 ``baseurl``
2801 Base URL to use when publishing URLs in other locations, so
2806 Base URL to use when publishing URLs in other locations, so
2802 third-party tools like email notification hooks can construct
2807 third-party tools like email notification hooks can construct
2803 URLs. Example: ``http://hgserver/repos/``.
2808 URLs. Example: ``http://hgserver/repos/``.
2804
2809
2805 ``cacerts``
2810 ``cacerts``
2806 Path to file containing a list of PEM encoded certificate
2811 Path to file containing a list of PEM encoded certificate
2807 authority certificates. Environment variables and ``~user``
2812 authority certificates. Environment variables and ``~user``
2808 constructs are expanded in the filename. If specified on the
2813 constructs are expanded in the filename. If specified on the
2809 client, then it will verify the identity of remote HTTPS servers
2814 client, then it will verify the identity of remote HTTPS servers
2810 with these certificates.
2815 with these certificates.
2811
2816
2812 To disable SSL verification temporarily, specify ``--insecure`` from
2817 To disable SSL verification temporarily, specify ``--insecure`` from
2813 command line.
2818 command line.
2814
2819
2815 You can use OpenSSL's CA certificate file if your platform has
2820 You can use OpenSSL's CA certificate file if your platform has
2816 one. On most Linux systems this will be
2821 one. On most Linux systems this will be
2817 ``/etc/ssl/certs/ca-certificates.crt``. Otherwise you will have to
2822 ``/etc/ssl/certs/ca-certificates.crt``. Otherwise you will have to
2818 generate this file manually. The form must be as follows::
2823 generate this file manually. The form must be as follows::
2819
2824
2820 -----BEGIN CERTIFICATE-----
2825 -----BEGIN CERTIFICATE-----
2821 ... (certificate in base64 PEM encoding) ...
2826 ... (certificate in base64 PEM encoding) ...
2822 -----END CERTIFICATE-----
2827 -----END CERTIFICATE-----
2823 -----BEGIN CERTIFICATE-----
2828 -----BEGIN CERTIFICATE-----
2824 ... (certificate in base64 PEM encoding) ...
2829 ... (certificate in base64 PEM encoding) ...
2825 -----END CERTIFICATE-----
2830 -----END CERTIFICATE-----
2826
2831
2827 ``cache``
2832 ``cache``
2828 Whether to support caching in hgweb. (default: True)
2833 Whether to support caching in hgweb. (default: True)
2829
2834
2830 ``certificate``
2835 ``certificate``
2831 Certificate to use when running :hg:`serve`.
2836 Certificate to use when running :hg:`serve`.
2832
2837
2833 ``collapse``
2838 ``collapse``
2834 With ``descend`` enabled, repositories in subdirectories are shown at
2839 With ``descend`` enabled, repositories in subdirectories are shown at
2835 a single level alongside repositories in the current path. With
2840 a single level alongside repositories in the current path. With
2836 ``collapse`` also enabled, repositories residing at a deeper level than
2841 ``collapse`` also enabled, repositories residing at a deeper level than
2837 the current path are grouped behind navigable directory entries that
2842 the current path are grouped behind navigable directory entries that
2838 lead to the locations of these repositories. In effect, this setting
2843 lead to the locations of these repositories. In effect, this setting
2839 collapses each collection of repositories found within a subdirectory
2844 collapses each collection of repositories found within a subdirectory
2840 into a single entry for that subdirectory. (default: False)
2845 into a single entry for that subdirectory. (default: False)
2841
2846
2842 ``comparisoncontext``
2847 ``comparisoncontext``
2843 Number of lines of context to show in side-by-side file comparison. If
2848 Number of lines of context to show in side-by-side file comparison. If
2844 negative or the value ``full``, whole files are shown. (default: 5)
2849 negative or the value ``full``, whole files are shown. (default: 5)
2845
2850
2846 This setting can be overridden by a ``context`` request parameter to the
2851 This setting can be overridden by a ``context`` request parameter to the
2847 ``comparison`` command, taking the same values.
2852 ``comparison`` command, taking the same values.
2848
2853
2849 ``contact``
2854 ``contact``
2850 Name or email address of the person in charge of the repository.
2855 Name or email address of the person in charge of the repository.
2851 (default: ui.username or ``$EMAIL`` or "unknown" if unset or empty)
2856 (default: ui.username or ``$EMAIL`` or "unknown" if unset or empty)
2852
2857
2853 ``csp``
2858 ``csp``
2854 Send a ``Content-Security-Policy`` HTTP header with this value.
2859 Send a ``Content-Security-Policy`` HTTP header with this value.
2855
2860
2856 The value may contain a special string ``%nonce%``, which will be replaced
2861 The value may contain a special string ``%nonce%``, which will be replaced
2857 by a randomly-generated one-time use value. If the value contains
2862 by a randomly-generated one-time use value. If the value contains
2858 ``%nonce%``, ``web.cache`` will be disabled, as caching undermines the
2863 ``%nonce%``, ``web.cache`` will be disabled, as caching undermines the
2859 one-time property of the nonce. This nonce will also be inserted into
2864 one-time property of the nonce. This nonce will also be inserted into
2860 ``<script>`` elements containing inline JavaScript.
2865 ``<script>`` elements containing inline JavaScript.
2861
2866
2862 Note: lots of HTML content sent by the server is derived from repository
2867 Note: lots of HTML content sent by the server is derived from repository
2863 data. Please consider the potential for malicious repository data to
2868 data. Please consider the potential for malicious repository data to
2864 "inject" itself into generated HTML content as part of your security
2869 "inject" itself into generated HTML content as part of your security
2865 threat model.
2870 threat model.
2866
2871
2867 ``deny_push``
2872 ``deny_push``
2868 Whether to deny pushing to the repository. If empty or not set,
2873 Whether to deny pushing to the repository. If empty or not set,
2869 push is not denied. If the special value ``*``, all remote users are
2874 push is not denied. If the special value ``*``, all remote users are
2870 denied push. Otherwise, unauthenticated users are all denied, and
2875 denied push. Otherwise, unauthenticated users are all denied, and
2871 any authenticated user name present in this list is also denied. The
2876 any authenticated user name present in this list is also denied. The
2872 contents of the deny_push list are examined before the allow-push list.
2877 contents of the deny_push list are examined before the allow-push list.
2873
2878
2874 ``deny_read``
2879 ``deny_read``
2875 Whether to deny reading/viewing of the repository. If this list is
2880 Whether to deny reading/viewing of the repository. If this list is
2876 not empty, unauthenticated users are all denied, and any
2881 not empty, unauthenticated users are all denied, and any
2877 authenticated user name present in this list is also denied access to
2882 authenticated user name present in this list is also denied access to
2878 the repository. If set to the special value ``*``, all remote users
2883 the repository. If set to the special value ``*``, all remote users
2879 are denied access (rarely needed ;). If deny_read is empty or not set,
2884 are denied access (rarely needed ;). If deny_read is empty or not set,
2880 the determination of repository access depends on the presence and
2885 the determination of repository access depends on the presence and
2881 content of the allow_read list (see description). If both
2886 content of the allow_read list (see description). If both
2882 deny_read and allow_read are empty or not set, then access is
2887 deny_read and allow_read are empty or not set, then access is
2883 permitted to all users by default. If the repository is being
2888 permitted to all users by default. If the repository is being
2884 served via hgwebdir, denied users will not be able to see it in
2889 served via hgwebdir, denied users will not be able to see it in
2885 the list of repositories. The contents of the deny_read list have
2890 the list of repositories. The contents of the deny_read list have
2886 priority over (are examined before) the contents of the allow_read
2891 priority over (are examined before) the contents of the allow_read
2887 list.
2892 list.
2888
2893
2889 ``descend``
2894 ``descend``
2890 hgwebdir indexes will not descend into subdirectories. Only repositories
2895 hgwebdir indexes will not descend into subdirectories. Only repositories
2891 directly in the current path will be shown (other repositories are still
2896 directly in the current path will be shown (other repositories are still
2892 available from the index corresponding to their containing path).
2897 available from the index corresponding to their containing path).
2893
2898
2894 ``description``
2899 ``description``
2895 Textual description of the repository's purpose or contents.
2900 Textual description of the repository's purpose or contents.
2896 (default: "unknown")
2901 (default: "unknown")
2897
2902
2898 ``encoding``
2903 ``encoding``
2899 Character encoding name. (default: the current locale charset)
2904 Character encoding name. (default: the current locale charset)
2900 Example: "UTF-8".
2905 Example: "UTF-8".
2901
2906
2902 ``errorlog``
2907 ``errorlog``
2903 Where to output the error log. (default: stderr)
2908 Where to output the error log. (default: stderr)
2904
2909
2905 ``guessmime``
2910 ``guessmime``
2906 Control MIME types for raw download of file content.
2911 Control MIME types for raw download of file content.
2907 Set to True to let hgweb guess the content type from the file
2912 Set to True to let hgweb guess the content type from the file
2908 extension. This will serve HTML files as ``text/html`` and might
2913 extension. This will serve HTML files as ``text/html`` and might
2909 allow cross-site scripting attacks when serving untrusted
2914 allow cross-site scripting attacks when serving untrusted
2910 repositories. (default: False)
2915 repositories. (default: False)
2911
2916
2912 ``hidden``
2917 ``hidden``
2913 Whether to hide the repository in the hgwebdir index.
2918 Whether to hide the repository in the hgwebdir index.
2914 (default: False)
2919 (default: False)
2915
2920
2916 ``ipv6``
2921 ``ipv6``
2917 Whether to use IPv6. (default: False)
2922 Whether to use IPv6. (default: False)
2918
2923
2919 ``labels``
2924 ``labels``
2920 List of string *labels* associated with the repository.
2925 List of string *labels* associated with the repository.
2921
2926
2922 Labels are exposed as a template keyword and can be used to customize
2927 Labels are exposed as a template keyword and can be used to customize
2923 output. e.g. the ``index`` template can group or filter repositories
2928 output. e.g. the ``index`` template can group or filter repositories
2924 by labels and the ``summary`` template can display additional content
2929 by labels and the ``summary`` template can display additional content
2925 if a specific label is present.
2930 if a specific label is present.
2926
2931
2927 ``logoimg``
2932 ``logoimg``
2928 File name of the logo image that some templates display on each page.
2933 File name of the logo image that some templates display on each page.
2929 The file name is relative to ``staticurl``. That is, the full path to
2934 The file name is relative to ``staticurl``. That is, the full path to
2930 the logo image is "staticurl/logoimg".
2935 the logo image is "staticurl/logoimg".
2931 If unset, ``hglogo.png`` will be used.
2936 If unset, ``hglogo.png`` will be used.
2932
2937
2933 ``logourl``
2938 ``logourl``
2934 Base URL to use for logos. If unset, ``https://mercurial-scm.org/``
2939 Base URL to use for logos. If unset, ``https://mercurial-scm.org/``
2935 will be used.
2940 will be used.
2936
2941
2937 ``maxchanges``
2942 ``maxchanges``
2938 Maximum number of changes to list on the changelog. (default: 10)
2943 Maximum number of changes to list on the changelog. (default: 10)
2939
2944
2940 ``maxfiles``
2945 ``maxfiles``
2941 Maximum number of files to list per changeset. (default: 10)
2946 Maximum number of files to list per changeset. (default: 10)
2942
2947
2943 ``maxshortchanges``
2948 ``maxshortchanges``
2944 Maximum number of changes to list on the shortlog, graph or filelog
2949 Maximum number of changes to list on the shortlog, graph or filelog
2945 pages. (default: 60)
2950 pages. (default: 60)
2946
2951
2947 ``name``
2952 ``name``
2948 Repository name to use in the web interface.
2953 Repository name to use in the web interface.
2949 (default: current working directory)
2954 (default: current working directory)
2950
2955
2951 ``port``
2956 ``port``
2952 Port to listen on. (default: 8000)
2957 Port to listen on. (default: 8000)
2953
2958
2954 ``prefix``
2959 ``prefix``
2955 Prefix path to serve from. (default: '' (server root))
2960 Prefix path to serve from. (default: '' (server root))
2956
2961
2957 ``push_ssl``
2962 ``push_ssl``
2958 Whether to require that inbound pushes be transported over SSL to
2963 Whether to require that inbound pushes be transported over SSL to
2959 prevent password sniffing. (default: True)
2964 prevent password sniffing. (default: True)
2960
2965
2961 ``refreshinterval``
2966 ``refreshinterval``
2962 How frequently directory listings re-scan the filesystem for new
2967 How frequently directory listings re-scan the filesystem for new
2963 repositories, in seconds. This is relevant when wildcards are used
2968 repositories, in seconds. This is relevant when wildcards are used
2964 to define paths. Depending on how much filesystem traversal is
2969 to define paths. Depending on how much filesystem traversal is
2965 required, refreshing may negatively impact performance.
2970 required, refreshing may negatively impact performance.
2966
2971
2967 Values less than or equal to 0 always refresh.
2972 Values less than or equal to 0 always refresh.
2968 (default: 20)
2973 (default: 20)
2969
2974
2970 ``server-header``
2975 ``server-header``
2971 Value for HTTP ``Server`` response header.
2976 Value for HTTP ``Server`` response header.
2972
2977
2973 ``static``
2978 ``static``
2974 Directory where static files are served from.
2979 Directory where static files are served from.
2975
2980
2976 ``staticurl``
2981 ``staticurl``
2977 Base URL to use for static files. If unset, static files (e.g. the
2982 Base URL to use for static files. If unset, static files (e.g. the
2978 hgicon.png favicon) will be served by the CGI script itself. Use
2983 hgicon.png favicon) will be served by the CGI script itself. Use
2979 this setting to serve them directly with the HTTP server.
2984 this setting to serve them directly with the HTTP server.
2980 Example: ``http://hgserver/static/``.
2985 Example: ``http://hgserver/static/``.
2981
2986
2982 ``stripes``
2987 ``stripes``
2983 How many lines a "zebra stripe" should span in multi-line output.
2988 How many lines a "zebra stripe" should span in multi-line output.
2984 Set to 0 to disable. (default: 1)
2989 Set to 0 to disable. (default: 1)
2985
2990
2986 ``style``
2991 ``style``
2987 Which template map style to use. The available options are the names of
2992 Which template map style to use. The available options are the names of
2988 subdirectories in the HTML templates path. (default: ``paper``)
2993 subdirectories in the HTML templates path. (default: ``paper``)
2989 Example: ``monoblue``.
2994 Example: ``monoblue``.
2990
2995
2991 ``templates``
2996 ``templates``
2992 Where to find the HTML templates. The default path to the HTML templates
2997 Where to find the HTML templates. The default path to the HTML templates
2993 can be obtained from ``hg debuginstall``.
2998 can be obtained from ``hg debuginstall``.
2994
2999
2995 ``websub``
3000 ``websub``
2996 ----------
3001 ----------
2997
3002
2998 Web substitution filter definition. You can use this section to
3003 Web substitution filter definition. You can use this section to
2999 define a set of regular expression substitution patterns which
3004 define a set of regular expression substitution patterns which
3000 let you automatically modify the hgweb server output.
3005 let you automatically modify the hgweb server output.
3001
3006
3002 The default hgweb templates only apply these substitution patterns
3007 The default hgweb templates only apply these substitution patterns
3003 on the revision description fields. You can apply them anywhere
3008 on the revision description fields. You can apply them anywhere
3004 you want when you create your own templates by adding calls to the
3009 you want when you create your own templates by adding calls to the
3005 "websub" filter (usually after calling the "escape" filter).
3010 "websub" filter (usually after calling the "escape" filter).
3006
3011
3007 This can be used, for example, to convert issue references to links
3012 This can be used, for example, to convert issue references to links
3008 to your issue tracker, or to convert "markdown-like" syntax into
3013 to your issue tracker, or to convert "markdown-like" syntax into
3009 HTML (see the examples below).
3014 HTML (see the examples below).
3010
3015
3011 Each entry in this section names a substitution filter.
3016 Each entry in this section names a substitution filter.
3012 The value of each entry defines the substitution expression itself.
3017 The value of each entry defines the substitution expression itself.
3013 The websub expressions follow the old interhg extension syntax,
3018 The websub expressions follow the old interhg extension syntax,
3014 which in turn imitates the Unix sed replacement syntax::
3019 which in turn imitates the Unix sed replacement syntax::
3015
3020
3016 patternname = s/SEARCH_REGEX/REPLACE_EXPRESSION/[i]
3021 patternname = s/SEARCH_REGEX/REPLACE_EXPRESSION/[i]
3017
3022
3018 You can use any separator other than "/". The final "i" is optional
3023 You can use any separator other than "/". The final "i" is optional
3019 and indicates that the search must be case insensitive.
3024 and indicates that the search must be case insensitive.
3020
3025
3021 Examples::
3026 Examples::
3022
3027
3023 [websub]
3028 [websub]
3024 issues = s|issue(\d+)|<a href="http://bts.example.org/issue\1">issue\1</a>|i
3029 issues = s|issue(\d+)|<a href="http://bts.example.org/issue\1">issue\1</a>|i
3025 italic = s/\b_(\S+)_\b/<i>\1<\/i>/
3030 italic = s/\b_(\S+)_\b/<i>\1<\/i>/
3026 bold = s/\*\b(\S+)\b\*/<b>\1<\/b>/
3031 bold = s/\*\b(\S+)\b\*/<b>\1<\/b>/
3027
3032
3028 ``worker``
3033 ``worker``
3029 ----------
3034 ----------
3030
3035
3031 Parallel master/worker configuration. We currently perform working
3036 Parallel master/worker configuration. We currently perform working
3032 directory updates in parallel on Unix-like systems, which greatly
3037 directory updates in parallel on Unix-like systems, which greatly
3033 helps performance.
3038 helps performance.
3034
3039
3035 ``enabled``
3040 ``enabled``
3036 Whether to enable workers code to be used.
3041 Whether to enable workers code to be used.
3037 (default: true)
3042 (default: true)
3038
3043
3039 ``numcpus``
3044 ``numcpus``
3040 Number of CPUs to use for parallel operations. A zero or
3045 Number of CPUs to use for parallel operations. A zero or
3041 negative value is treated as ``use the default``.
3046 negative value is treated as ``use the default``.
3042 (default: 4 or the number of CPUs on the system, whichever is larger)
3047 (default: 4 or the number of CPUs on the system, whichever is larger)
3043
3048
3044 ``backgroundclose``
3049 ``backgroundclose``
3045 Whether to enable closing file handles on background threads during certain
3050 Whether to enable closing file handles on background threads during certain
3046 operations. Some platforms aren't very efficient at closing file
3051 operations. Some platforms aren't very efficient at closing file
3047 handles that have been written or appended to. By performing file closing
3052 handles that have been written or appended to. By performing file closing
3048 on background threads, file write rate can increase substantially.
3053 on background threads, file write rate can increase substantially.
3049 (default: true on Windows, false elsewhere)
3054 (default: true on Windows, false elsewhere)
3050
3055
3051 ``backgroundcloseminfilecount``
3056 ``backgroundcloseminfilecount``
3052 Minimum number of files required to trigger background file closing.
3057 Minimum number of files required to trigger background file closing.
3053 Operations not writing this many files won't start background close
3058 Operations not writing this many files won't start background close
3054 threads.
3059 threads.
3055 (default: 2048)
3060 (default: 2048)
3056
3061
3057 ``backgroundclosemaxqueue``
3062 ``backgroundclosemaxqueue``
3058 The maximum number of opened file handles waiting to be closed in the
3063 The maximum number of opened file handles waiting to be closed in the
3059 background. This option only has an effect if ``backgroundclose`` is
3064 background. This option only has an effect if ``backgroundclose`` is
3060 enabled.
3065 enabled.
3061 (default: 384)
3066 (default: 384)
3062
3067
3063 ``backgroundclosethreadcount``
3068 ``backgroundclosethreadcount``
3064 Number of threads to process background file closes. Only relevant if
3069 Number of threads to process background file closes. Only relevant if
3065 ``backgroundclose`` is enabled.
3070 ``backgroundclose`` is enabled.
3066 (default: 4)
3071 (default: 4)
@@ -1,354 +1,359 b''
1 # hook.py - hook support for mercurial
1 # hook.py - hook support for mercurial
2 #
2 #
3 # Copyright 2007 Matt Mackall <mpm@selenic.com>
3 # Copyright 2007 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
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.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import contextlib
10 import contextlib
11 import errno
11 import errno
12 import os
12 import os
13 import sys
13 import sys
14
14
15 from .i18n import _
15 from .i18n import _
16 from .pycompat import getattr
16 from .pycompat import getattr
17 from . import (
17 from . import (
18 demandimport,
18 demandimport,
19 encoding,
19 encoding,
20 error,
20 error,
21 extensions,
21 extensions,
22 pycompat,
22 pycompat,
23 util,
23 util,
24 )
24 )
25 from .utils import (
25 from .utils import (
26 procutil,
26 procutil,
27 resourceutil,
27 resourceutil,
28 stringutil,
28 stringutil,
29 )
29 )
30
30
31
31
32 def pythonhook(ui, repo, htype, hname, funcname, args, throw):
32 def pythonhook(ui, repo, htype, hname, funcname, args, throw):
33 """call python hook. hook is callable object, looked up as
33 """call python hook. hook is callable object, looked up as
34 name in python module. if callable returns "true", hook
34 name in python module. if callable returns "true", hook
35 fails, else passes. if hook raises exception, treated as
35 fails, else passes. if hook raises exception, treated as
36 hook failure. exception propagates if throw is "true".
36 hook failure. exception propagates if throw is "true".
37
37
38 reason for "true" meaning "hook failed" is so that
38 reason for "true" meaning "hook failed" is so that
39 unmodified commands (e.g. mercurial.commands.update) can
39 unmodified commands (e.g. mercurial.commands.update) can
40 be run as hooks without wrappers to convert return values."""
40 be run as hooks without wrappers to convert return values."""
41
41
42 if callable(funcname):
42 if callable(funcname):
43 obj = funcname
43 obj = funcname
44 funcname = pycompat.sysbytes(obj.__module__ + "." + obj.__name__)
44 funcname = pycompat.sysbytes(obj.__module__ + "." + obj.__name__)
45 else:
45 else:
46 d = funcname.rfind(b'.')
46 d = funcname.rfind(b'.')
47 if d == -1:
47 if d == -1:
48 raise error.HookLoadError(
48 raise error.HookLoadError(
49 _(b'%s hook is invalid: "%s" not in a module')
49 _(b'%s hook is invalid: "%s" not in a module')
50 % (hname, funcname)
50 % (hname, funcname)
51 )
51 )
52 modname = funcname[:d]
52 modname = funcname[:d]
53 oldpaths = sys.path
53 oldpaths = sys.path
54 if resourceutil.mainfrozen():
54 if resourceutil.mainfrozen():
55 # binary installs require sys.path manipulation
55 # binary installs require sys.path manipulation
56 modpath, modfile = os.path.split(modname)
56 modpath, modfile = os.path.split(modname)
57 if modpath and modfile:
57 if modpath and modfile:
58 sys.path = sys.path[:] + [modpath]
58 sys.path = sys.path[:] + [modpath]
59 modname = modfile
59 modname = modfile
60 with demandimport.deactivated():
60 with demandimport.deactivated():
61 try:
61 try:
62 obj = __import__(pycompat.sysstr(modname))
62 obj = __import__(pycompat.sysstr(modname))
63 except (ImportError, SyntaxError):
63 except (ImportError, SyntaxError):
64 e1 = sys.exc_info()
64 e1 = sys.exc_info()
65 try:
65 try:
66 # extensions are loaded with hgext_ prefix
66 # extensions are loaded with hgext_ prefix
67 obj = __import__("hgext_%s" % pycompat.sysstr(modname))
67 obj = __import__("hgext_%s" % pycompat.sysstr(modname))
68 except (ImportError, SyntaxError):
68 except (ImportError, SyntaxError):
69 e2 = sys.exc_info()
69 e2 = sys.exc_info()
70 if ui.tracebackflag:
70 if ui.tracebackflag:
71 ui.warn(
71 ui.warn(
72 _(
72 _(
73 b'exception from first failed import '
73 b'exception from first failed import '
74 b'attempt:\n'
74 b'attempt:\n'
75 )
75 )
76 )
76 )
77 ui.traceback(e1)
77 ui.traceback(e1)
78 if ui.tracebackflag:
78 if ui.tracebackflag:
79 ui.warn(
79 ui.warn(
80 _(
80 _(
81 b'exception from second failed import '
81 b'exception from second failed import '
82 b'attempt:\n'
82 b'attempt:\n'
83 )
83 )
84 )
84 )
85 ui.traceback(e2)
85 ui.traceback(e2)
86
86
87 if not ui.tracebackflag:
87 if not ui.tracebackflag:
88 tracebackhint = _(
88 tracebackhint = _(
89 b'run with --traceback for stack trace'
89 b'run with --traceback for stack trace'
90 )
90 )
91 else:
91 else:
92 tracebackhint = None
92 tracebackhint = None
93 raise error.HookLoadError(
93 raise error.HookLoadError(
94 _(b'%s hook is invalid: import of "%s" failed')
94 _(b'%s hook is invalid: import of "%s" failed')
95 % (hname, modname),
95 % (hname, modname),
96 hint=tracebackhint,
96 hint=tracebackhint,
97 )
97 )
98 sys.path = oldpaths
98 sys.path = oldpaths
99 try:
99 try:
100 for p in funcname.split(b'.')[1:]:
100 for p in funcname.split(b'.')[1:]:
101 obj = getattr(obj, p)
101 obj = getattr(obj, p)
102 except AttributeError:
102 except AttributeError:
103 raise error.HookLoadError(
103 raise error.HookLoadError(
104 _(b'%s hook is invalid: "%s" is not defined')
104 _(b'%s hook is invalid: "%s" is not defined')
105 % (hname, funcname)
105 % (hname, funcname)
106 )
106 )
107 if not callable(obj):
107 if not callable(obj):
108 raise error.HookLoadError(
108 raise error.HookLoadError(
109 _(b'%s hook is invalid: "%s" is not callable')
109 _(b'%s hook is invalid: "%s" is not callable')
110 % (hname, funcname)
110 % (hname, funcname)
111 )
111 )
112
112
113 ui.note(_(b"calling hook %s: %s\n") % (hname, funcname))
113 ui.note(_(b"calling hook %s: %s\n") % (hname, funcname))
114 starttime = util.timer()
114 starttime = util.timer()
115
115
116 try:
116 try:
117 r = obj(ui=ui, repo=repo, hooktype=htype, **pycompat.strkwargs(args))
117 r = obj(ui=ui, repo=repo, hooktype=htype, **pycompat.strkwargs(args))
118 except Exception as exc:
118 except Exception as exc:
119 if isinstance(exc, error.Abort):
119 if isinstance(exc, error.Abort):
120 ui.warn(_(b'error: %s hook failed: %s\n') % (hname, exc.args[0]))
120 ui.warn(_(b'error: %s hook failed: %s\n') % (hname, exc.args[0]))
121 else:
121 else:
122 ui.warn(
122 ui.warn(
123 _(b'error: %s hook raised an exception: %s\n')
123 _(b'error: %s hook raised an exception: %s\n')
124 % (hname, stringutil.forcebytestr(exc))
124 % (hname, stringutil.forcebytestr(exc))
125 )
125 )
126 if throw:
126 if throw:
127 raise
127 raise
128 if not ui.tracebackflag:
128 if not ui.tracebackflag:
129 ui.warn(_(b'(run with --traceback for stack trace)\n'))
129 ui.warn(_(b'(run with --traceback for stack trace)\n'))
130 ui.traceback()
130 ui.traceback()
131 return True, True
131 return True, True
132 finally:
132 finally:
133 duration = util.timer() - starttime
133 duration = util.timer() - starttime
134 ui.log(
134 ui.log(
135 b'pythonhook',
135 b'pythonhook',
136 b'pythonhook-%s: %s finished in %0.2f seconds\n',
136 b'pythonhook-%s: %s finished in %0.2f seconds\n',
137 htype,
137 htype,
138 funcname,
138 funcname,
139 duration,
139 duration,
140 )
140 )
141 if r:
141 if r:
142 if throw:
142 if throw:
143 raise error.HookAbort(_(b'%s hook failed') % hname)
143 raise error.HookAbort(_(b'%s hook failed') % hname)
144 ui.warn(_(b'warning: %s hook failed\n') % hname)
144 ui.warn(_(b'warning: %s hook failed\n') % hname)
145 return r, False
145 return r, False
146
146
147
147
148 def _exthook(ui, repo, htype, name, cmd, args, throw):
148 def _exthook(ui, repo, htype, name, cmd, args, throw):
149 starttime = util.timer()
149 starttime = util.timer()
150 env = {}
150 env = {}
151
151
152 # make in-memory changes visible to external process
152 # make in-memory changes visible to external process
153 if repo is not None:
153 if repo is not None:
154 tr = repo.currenttransaction()
154 tr = repo.currenttransaction()
155 repo.dirstate.write(tr)
155 repo.dirstate.write(tr)
156 if tr and tr.writepending():
156 if tr and tr.writepending():
157 env[b'HG_PENDING'] = repo.root
157 env[b'HG_PENDING'] = repo.root
158 env[b'HG_HOOKTYPE'] = htype
158 env[b'HG_HOOKTYPE'] = htype
159 env[b'HG_HOOKNAME'] = name
159 env[b'HG_HOOKNAME'] = name
160 env[b'HGPLAIN'] = b'1'
160
161 plain = ui.configbool(b'hooks', b'%s:run-with-plain' % name)
162 if plain:
163 env[b'HGPLAIN'] = b'1'
164 else:
165 env[b'HGPLAIN'] = b''
161
166
162 for k, v in pycompat.iteritems(args):
167 for k, v in pycompat.iteritems(args):
163 # transaction changes can accumulate MBs of data, so skip it
168 # transaction changes can accumulate MBs of data, so skip it
164 # for external hooks
169 # for external hooks
165 if k == b'changes':
170 if k == b'changes':
166 continue
171 continue
167 if callable(v):
172 if callable(v):
168 v = v()
173 v = v()
169 if isinstance(v, (dict, list)):
174 if isinstance(v, (dict, list)):
170 v = stringutil.pprint(v)
175 v = stringutil.pprint(v)
171 env[b'HG_' + k.upper()] = v
176 env[b'HG_' + k.upper()] = v
172
177
173 if ui.configbool(b'hooks', b'tonative.%s' % name, False):
178 if ui.configbool(b'hooks', b'tonative.%s' % name, False):
174 oldcmd = cmd
179 oldcmd = cmd
175 cmd = procutil.shelltonative(cmd, env)
180 cmd = procutil.shelltonative(cmd, env)
176 if cmd != oldcmd:
181 if cmd != oldcmd:
177 ui.note(_(b'converting hook "%s" to native\n') % name)
182 ui.note(_(b'converting hook "%s" to native\n') % name)
178
183
179 ui.note(_(b"running hook %s: %s\n") % (name, cmd))
184 ui.note(_(b"running hook %s: %s\n") % (name, cmd))
180
185
181 if repo:
186 if repo:
182 cwd = repo.root
187 cwd = repo.root
183 else:
188 else:
184 cwd = encoding.getcwd()
189 cwd = encoding.getcwd()
185 r = ui.system(cmd, environ=env, cwd=cwd, blockedtag=b'exthook-%s' % (name,))
190 r = ui.system(cmd, environ=env, cwd=cwd, blockedtag=b'exthook-%s' % (name,))
186
191
187 duration = util.timer() - starttime
192 duration = util.timer() - starttime
188 ui.log(
193 ui.log(
189 b'exthook',
194 b'exthook',
190 b'exthook-%s: %s finished in %0.2f seconds\n',
195 b'exthook-%s: %s finished in %0.2f seconds\n',
191 name,
196 name,
192 cmd,
197 cmd,
193 duration,
198 duration,
194 )
199 )
195 if r:
200 if r:
196 desc = procutil.explainexit(r)
201 desc = procutil.explainexit(r)
197 if throw:
202 if throw:
198 raise error.HookAbort(_(b'%s hook %s') % (name, desc))
203 raise error.HookAbort(_(b'%s hook %s') % (name, desc))
199 ui.warn(_(b'warning: %s hook %s\n') % (name, desc))
204 ui.warn(_(b'warning: %s hook %s\n') % (name, desc))
200 return r
205 return r
201
206
202
207
203 # represent an untrusted hook command
208 # represent an untrusted hook command
204 _fromuntrusted = object()
209 _fromuntrusted = object()
205
210
206
211
207 def _allhooks(ui):
212 def _allhooks(ui):
208 """return a list of (hook-id, cmd) pairs sorted by priority"""
213 """return a list of (hook-id, cmd) pairs sorted by priority"""
209 hooks = _hookitems(ui)
214 hooks = _hookitems(ui)
210 # Be careful in this section, propagating the real commands from untrusted
215 # Be careful in this section, propagating the real commands from untrusted
211 # sources would create a security vulnerability, make sure anything altered
216 # sources would create a security vulnerability, make sure anything altered
212 # in that section uses "_fromuntrusted" as its command.
217 # in that section uses "_fromuntrusted" as its command.
213 untrustedhooks = _hookitems(ui, _untrusted=True)
218 untrustedhooks = _hookitems(ui, _untrusted=True)
214 for name, value in untrustedhooks.items():
219 for name, value in untrustedhooks.items():
215 trustedvalue = hooks.get(name, ((), (), name, _fromuntrusted))
220 trustedvalue = hooks.get(name, ((), (), name, _fromuntrusted))
216 if value != trustedvalue:
221 if value != trustedvalue:
217 (lp, lo, lk, lv) = trustedvalue
222 (lp, lo, lk, lv) = trustedvalue
218 hooks[name] = (lp, lo, lk, _fromuntrusted)
223 hooks[name] = (lp, lo, lk, _fromuntrusted)
219 # (end of the security sensitive section)
224 # (end of the security sensitive section)
220 return [(k, v) for p, o, k, v in sorted(hooks.values())]
225 return [(k, v) for p, o, k, v in sorted(hooks.values())]
221
226
222
227
223 def _hookitems(ui, _untrusted=False):
228 def _hookitems(ui, _untrusted=False):
224 """return all hooks items ready to be sorted"""
229 """return all hooks items ready to be sorted"""
225 hooks = {}
230 hooks = {}
226 for name, cmd in ui.configitems(b'hooks', untrusted=_untrusted):
231 for name, cmd in ui.configitems(b'hooks', untrusted=_untrusted):
227 if (
232 if (
228 name.startswith(b'priority.')
233 name.startswith(b'priority.')
229 or name.startswith(b'tonative.')
234 or name.startswith(b'tonative.')
230 or b':' in name
235 or b':' in name
231 ):
236 ):
232 continue
237 continue
233
238
234 priority = ui.configint(b'hooks', b'priority.%s' % name, 0)
239 priority = ui.configint(b'hooks', b'priority.%s' % name, 0)
235 hooks[name] = ((-priority,), (len(hooks),), name, cmd)
240 hooks[name] = ((-priority,), (len(hooks),), name, cmd)
236 return hooks
241 return hooks
237
242
238
243
239 _redirect = False
244 _redirect = False
240
245
241
246
242 def redirect(state):
247 def redirect(state):
243 global _redirect
248 global _redirect
244 _redirect = state
249 _redirect = state
245
250
246
251
247 def hashook(ui, htype):
252 def hashook(ui, htype):
248 """return True if a hook is configured for 'htype'"""
253 """return True if a hook is configured for 'htype'"""
249 if not ui.callhooks:
254 if not ui.callhooks:
250 return False
255 return False
251 for hname, cmd in _allhooks(ui):
256 for hname, cmd in _allhooks(ui):
252 if hname.split(b'.')[0] == htype and cmd:
257 if hname.split(b'.')[0] == htype and cmd:
253 return True
258 return True
254 return False
259 return False
255
260
256
261
257 def hook(ui, repo, htype, throw=False, **args):
262 def hook(ui, repo, htype, throw=False, **args):
258 if not ui.callhooks:
263 if not ui.callhooks:
259 return False
264 return False
260
265
261 hooks = []
266 hooks = []
262 for hname, cmd in _allhooks(ui):
267 for hname, cmd in _allhooks(ui):
263 if hname.split(b'.')[0] == htype and cmd:
268 if hname.split(b'.')[0] == htype and cmd:
264 hooks.append((hname, cmd))
269 hooks.append((hname, cmd))
265
270
266 res = runhooks(ui, repo, htype, hooks, throw=throw, **args)
271 res = runhooks(ui, repo, htype, hooks, throw=throw, **args)
267 r = False
272 r = False
268 for hname, cmd in hooks:
273 for hname, cmd in hooks:
269 r = res[hname][0] or r
274 r = res[hname][0] or r
270 return r
275 return r
271
276
272
277
273 @contextlib.contextmanager
278 @contextlib.contextmanager
274 def redirect_stdio():
279 def redirect_stdio():
275 """Redirects stdout to stderr, if possible."""
280 """Redirects stdout to stderr, if possible."""
276
281
277 oldstdout = -1
282 oldstdout = -1
278 try:
283 try:
279 if _redirect:
284 if _redirect:
280 try:
285 try:
281 stdoutno = procutil.stdout.fileno()
286 stdoutno = procutil.stdout.fileno()
282 stderrno = procutil.stderr.fileno()
287 stderrno = procutil.stderr.fileno()
283 # temporarily redirect stdout to stderr, if possible
288 # temporarily redirect stdout to stderr, if possible
284 if stdoutno >= 0 and stderrno >= 0:
289 if stdoutno >= 0 and stderrno >= 0:
285 procutil.stdout.flush()
290 procutil.stdout.flush()
286 oldstdout = os.dup(stdoutno)
291 oldstdout = os.dup(stdoutno)
287 os.dup2(stderrno, stdoutno)
292 os.dup2(stderrno, stdoutno)
288 except (OSError, AttributeError):
293 except (OSError, AttributeError):
289 # files seem to be bogus, give up on redirecting (WSGI, etc)
294 # files seem to be bogus, give up on redirecting (WSGI, etc)
290 pass
295 pass
291
296
292 yield
297 yield
293
298
294 finally:
299 finally:
295 # The stderr is fully buffered on Windows when connected to a pipe.
300 # The stderr is fully buffered on Windows when connected to a pipe.
296 # A forcible flush is required to make small stderr data in the
301 # A forcible flush is required to make small stderr data in the
297 # remote side available to the client immediately.
302 # remote side available to the client immediately.
298 try:
303 try:
299 procutil.stderr.flush()
304 procutil.stderr.flush()
300 except IOError as err:
305 except IOError as err:
301 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
306 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
302 raise error.StdioError(err)
307 raise error.StdioError(err)
303
308
304 if _redirect and oldstdout >= 0:
309 if _redirect and oldstdout >= 0:
305 try:
310 try:
306 procutil.stdout.flush() # write hook output to stderr fd
311 procutil.stdout.flush() # write hook output to stderr fd
307 except IOError as err:
312 except IOError as err:
308 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
313 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
309 raise error.StdioError(err)
314 raise error.StdioError(err)
310 os.dup2(oldstdout, stdoutno)
315 os.dup2(oldstdout, stdoutno)
311 os.close(oldstdout)
316 os.close(oldstdout)
312
317
313
318
314 def runhooks(ui, repo, htype, hooks, throw=False, **args):
319 def runhooks(ui, repo, htype, hooks, throw=False, **args):
315 args = pycompat.byteskwargs(args)
320 args = pycompat.byteskwargs(args)
316 res = {}
321 res = {}
317
322
318 with redirect_stdio():
323 with redirect_stdio():
319 for hname, cmd in hooks:
324 for hname, cmd in hooks:
320 if cmd is _fromuntrusted:
325 if cmd is _fromuntrusted:
321 if throw:
326 if throw:
322 raise error.HookAbort(
327 raise error.HookAbort(
323 _(b'untrusted hook %s not executed') % hname,
328 _(b'untrusted hook %s not executed') % hname,
324 hint=_(b"see 'hg help config.trusted'"),
329 hint=_(b"see 'hg help config.trusted'"),
325 )
330 )
326 ui.warn(_(b'warning: untrusted hook %s not executed\n') % hname)
331 ui.warn(_(b'warning: untrusted hook %s not executed\n') % hname)
327 r = 1
332 r = 1
328 raised = False
333 raised = False
329 elif callable(cmd):
334 elif callable(cmd):
330 r, raised = pythonhook(ui, repo, htype, hname, cmd, args, throw)
335 r, raised = pythonhook(ui, repo, htype, hname, cmd, args, throw)
331 elif cmd.startswith(b'python:'):
336 elif cmd.startswith(b'python:'):
332 if cmd.count(b':') >= 2:
337 if cmd.count(b':') >= 2:
333 path, cmd = cmd[7:].rsplit(b':', 1)
338 path, cmd = cmd[7:].rsplit(b':', 1)
334 path = util.expandpath(path)
339 path = util.expandpath(path)
335 if repo:
340 if repo:
336 path = os.path.join(repo.root, path)
341 path = os.path.join(repo.root, path)
337 try:
342 try:
338 mod = extensions.loadpath(path, b'hghook.%s' % hname)
343 mod = extensions.loadpath(path, b'hghook.%s' % hname)
339 except Exception:
344 except Exception:
340 ui.write(_(b"loading %s hook failed:\n") % hname)
345 ui.write(_(b"loading %s hook failed:\n") % hname)
341 raise
346 raise
342 hookfn = getattr(mod, cmd)
347 hookfn = getattr(mod, cmd)
343 else:
348 else:
344 hookfn = cmd[7:].strip()
349 hookfn = cmd[7:].strip()
345 r, raised = pythonhook(
350 r, raised = pythonhook(
346 ui, repo, htype, hname, hookfn, args, throw
351 ui, repo, htype, hname, hookfn, args, throw
347 )
352 )
348 else:
353 else:
349 r = _exthook(ui, repo, htype, hname, cmd, args, throw)
354 r = _exthook(ui, repo, htype, hname, cmd, args, throw)
350 raised = False
355 raised = False
351
356
352 res[hname] = r, raised
357 res[hname] = r, raised
353
358
354 return res
359 return res
@@ -1,1419 +1,1427 b''
1 commit hooks can see env vars
1 commit hooks can see env vars
2 (and post-transaction one are run unlocked)
2 (and post-transaction one are run unlocked)
3
3
4
4
5 $ cat > $TESTTMP/txnabort.checkargs.py <<EOF
5 $ cat > $TESTTMP/txnabort.checkargs.py <<EOF
6 > from mercurial import pycompat
6 > from mercurial import pycompat
7 > def showargs(ui, repo, hooktype, **kwargs):
7 > def showargs(ui, repo, hooktype, **kwargs):
8 > kwargs = pycompat.byteskwargs(kwargs)
8 > kwargs = pycompat.byteskwargs(kwargs)
9 > ui.write(b'%s Python hook: %s\n' % (hooktype,
9 > ui.write(b'%s Python hook: %s\n' % (hooktype,
10 > b','.join(sorted(kwargs))))
10 > b','.join(sorted(kwargs))))
11 > EOF
11 > EOF
12
12
13 $ hg init a
13 $ hg init a
14 $ cd a
14 $ cd a
15 $ cat > .hg/hgrc <<EOF
15 $ cat > .hg/hgrc <<EOF
16 > [hooks]
16 > [hooks]
17 > commit = sh -c "HG_LOCAL= HG_TAG= printenv.py --line commit"
17 > commit = sh -c "HG_LOCAL= HG_TAG= printenv.py --line commit"
18 > commit.b = sh -c "HG_LOCAL= HG_TAG= printenv.py --line commit.b"
18 > commit.b = sh -c "HG_LOCAL= HG_TAG= printenv.py --line commit.b"
19 > precommit = sh -c "HG_LOCAL= HG_NODE= HG_TAG= printenv.py --line precommit"
19 > precommit = sh -c "HG_LOCAL= HG_NODE= HG_TAG= printenv.py --line precommit"
20 > pretxncommit = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxncommit"
20 > pretxncommit = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxncommit"
21 > pretxncommit.tip = hg -q tip
21 > pretxncommit.tip = hg -q tip
22 > pre-identify = sh -c "printenv.py --line pre-identify 1"
22 > pre-identify = sh -c "printenv.py --line pre-identify 1"
23 > pre-cat = sh -c "printenv.py --line pre-cat"
23 > pre-cat = sh -c "printenv.py --line pre-cat"
24 > post-cat = sh -c "printenv.py --line post-cat"
24 > post-cat = sh -c "printenv.py --line post-cat"
25 > pretxnopen = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxnopen"
25 > pretxnopen = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxnopen"
26 > pretxnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxnclose"
26 > pretxnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxnclose"
27 > txnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py --line txnclose"
27 > txnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py --line txnclose"
28 > txnabort.0 = python:$TESTTMP/txnabort.checkargs.py:showargs
28 > txnabort.0 = python:$TESTTMP/txnabort.checkargs.py:showargs
29 > txnabort.1 = sh -c "HG_LOCAL= HG_TAG= printenv.py --line txnabort"
29 > txnabort.1 = sh -c "HG_LOCAL= HG_TAG= printenv.py --line txnabort"
30 > txnclose.checklock = sh -c "hg debuglock > /dev/null"
30 > txnclose.checklock = sh -c "hg debuglock > /dev/null"
31 > EOF
31 > EOF
32 $ echo a > a
32 $ echo a > a
33 $ hg add a
33 $ hg add a
34 $ hg commit -m a
34 $ hg commit -m a
35 precommit hook: HG_HOOKNAME=precommit
35 precommit hook: HG_HOOKNAME=precommit
36 HG_HOOKTYPE=precommit
36 HG_HOOKTYPE=precommit
37 HG_PARENT1=0000000000000000000000000000000000000000
37 HG_PARENT1=0000000000000000000000000000000000000000
38
38
39 pretxnopen hook: HG_HOOKNAME=pretxnopen
39 pretxnopen hook: HG_HOOKNAME=pretxnopen
40 HG_HOOKTYPE=pretxnopen
40 HG_HOOKTYPE=pretxnopen
41 HG_TXNID=TXN:$ID$
41 HG_TXNID=TXN:$ID$
42 HG_TXNNAME=commit
42 HG_TXNNAME=commit
43
43
44 pretxncommit hook: HG_HOOKNAME=pretxncommit
44 pretxncommit hook: HG_HOOKNAME=pretxncommit
45 HG_HOOKTYPE=pretxncommit
45 HG_HOOKTYPE=pretxncommit
46 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
46 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
47 HG_PARENT1=0000000000000000000000000000000000000000
47 HG_PARENT1=0000000000000000000000000000000000000000
48 HG_PENDING=$TESTTMP/a
48 HG_PENDING=$TESTTMP/a
49
49
50 0:cb9a9f314b8b
50 0:cb9a9f314b8b
51 pretxnclose hook: HG_HOOKNAME=pretxnclose
51 pretxnclose hook: HG_HOOKNAME=pretxnclose
52 HG_HOOKTYPE=pretxnclose
52 HG_HOOKTYPE=pretxnclose
53 HG_PENDING=$TESTTMP/a
53 HG_PENDING=$TESTTMP/a
54 HG_PHASES_MOVED=1
54 HG_PHASES_MOVED=1
55 HG_TXNID=TXN:$ID$
55 HG_TXNID=TXN:$ID$
56 HG_TXNNAME=commit
56 HG_TXNNAME=commit
57
57
58 txnclose hook: HG_HOOKNAME=txnclose
58 txnclose hook: HG_HOOKNAME=txnclose
59 HG_HOOKTYPE=txnclose
59 HG_HOOKTYPE=txnclose
60 HG_PHASES_MOVED=1
60 HG_PHASES_MOVED=1
61 HG_TXNID=TXN:$ID$
61 HG_TXNID=TXN:$ID$
62 HG_TXNNAME=commit
62 HG_TXNNAME=commit
63
63
64 commit hook: HG_HOOKNAME=commit
64 commit hook: HG_HOOKNAME=commit
65 HG_HOOKTYPE=commit
65 HG_HOOKTYPE=commit
66 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
66 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
67 HG_PARENT1=0000000000000000000000000000000000000000
67 HG_PARENT1=0000000000000000000000000000000000000000
68
68
69 commit.b hook: HG_HOOKNAME=commit.b
69 commit.b hook: HG_HOOKNAME=commit.b
70 HG_HOOKTYPE=commit
70 HG_HOOKTYPE=commit
71 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
71 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
72 HG_PARENT1=0000000000000000000000000000000000000000
72 HG_PARENT1=0000000000000000000000000000000000000000
73
73
74
74
75 $ hg clone . ../b
75 $ hg clone . ../b
76 updating to branch default
76 updating to branch default
77 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
77 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
78 $ cd ../b
78 $ cd ../b
79
79
80 changegroup hooks can see env vars
80 changegroup hooks can see env vars
81
81
82 $ cat > .hg/hgrc <<EOF
82 $ cat > .hg/hgrc <<EOF
83 > [hooks]
83 > [hooks]
84 > prechangegroup = sh -c "printenv.py --line prechangegroup"
84 > prechangegroup = sh -c "printenv.py --line prechangegroup"
85 > changegroup = sh -c "printenv.py --line changegroup"
85 > changegroup = sh -c "printenv.py --line changegroup"
86 > incoming = sh -c "printenv.py --line incoming"
86 > incoming = sh -c "printenv.py --line incoming"
87 > EOF
87 > EOF
88
88
89 pretxncommit and commit hooks can see both parents of merge
89 pretxncommit and commit hooks can see both parents of merge
90
90
91 $ cd ../a
91 $ cd ../a
92 $ echo b >> a
92 $ echo b >> a
93 $ hg commit -m a1 -d "1 0"
93 $ hg commit -m a1 -d "1 0"
94 precommit hook: HG_HOOKNAME=precommit
94 precommit hook: HG_HOOKNAME=precommit
95 HG_HOOKTYPE=precommit
95 HG_HOOKTYPE=precommit
96 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
96 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
97
97
98 pretxnopen hook: HG_HOOKNAME=pretxnopen
98 pretxnopen hook: HG_HOOKNAME=pretxnopen
99 HG_HOOKTYPE=pretxnopen
99 HG_HOOKTYPE=pretxnopen
100 HG_TXNID=TXN:$ID$
100 HG_TXNID=TXN:$ID$
101 HG_TXNNAME=commit
101 HG_TXNNAME=commit
102
102
103 pretxncommit hook: HG_HOOKNAME=pretxncommit
103 pretxncommit hook: HG_HOOKNAME=pretxncommit
104 HG_HOOKTYPE=pretxncommit
104 HG_HOOKTYPE=pretxncommit
105 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
105 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
106 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
106 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
107 HG_PENDING=$TESTTMP/a
107 HG_PENDING=$TESTTMP/a
108
108
109 1:ab228980c14d
109 1:ab228980c14d
110 pretxnclose hook: HG_HOOKNAME=pretxnclose
110 pretxnclose hook: HG_HOOKNAME=pretxnclose
111 HG_HOOKTYPE=pretxnclose
111 HG_HOOKTYPE=pretxnclose
112 HG_PENDING=$TESTTMP/a
112 HG_PENDING=$TESTTMP/a
113 HG_TXNID=TXN:$ID$
113 HG_TXNID=TXN:$ID$
114 HG_TXNNAME=commit
114 HG_TXNNAME=commit
115
115
116 txnclose hook: HG_HOOKNAME=txnclose
116 txnclose hook: HG_HOOKNAME=txnclose
117 HG_HOOKTYPE=txnclose
117 HG_HOOKTYPE=txnclose
118 HG_TXNID=TXN:$ID$
118 HG_TXNID=TXN:$ID$
119 HG_TXNNAME=commit
119 HG_TXNNAME=commit
120
120
121 commit hook: HG_HOOKNAME=commit
121 commit hook: HG_HOOKNAME=commit
122 HG_HOOKTYPE=commit
122 HG_HOOKTYPE=commit
123 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
123 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
124 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
124 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
125
125
126 commit.b hook: HG_HOOKNAME=commit.b
126 commit.b hook: HG_HOOKNAME=commit.b
127 HG_HOOKTYPE=commit
127 HG_HOOKTYPE=commit
128 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
128 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
129 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
129 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
130
130
131 $ hg update -C 0
131 $ hg update -C 0
132 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
132 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
133 $ echo b > b
133 $ echo b > b
134 $ hg add b
134 $ hg add b
135 $ hg commit -m b -d '1 0'
135 $ hg commit -m b -d '1 0'
136 precommit hook: HG_HOOKNAME=precommit
136 precommit hook: HG_HOOKNAME=precommit
137 HG_HOOKTYPE=precommit
137 HG_HOOKTYPE=precommit
138 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
138 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
139
139
140 pretxnopen hook: HG_HOOKNAME=pretxnopen
140 pretxnopen hook: HG_HOOKNAME=pretxnopen
141 HG_HOOKTYPE=pretxnopen
141 HG_HOOKTYPE=pretxnopen
142 HG_TXNID=TXN:$ID$
142 HG_TXNID=TXN:$ID$
143 HG_TXNNAME=commit
143 HG_TXNNAME=commit
144
144
145 pretxncommit hook: HG_HOOKNAME=pretxncommit
145 pretxncommit hook: HG_HOOKNAME=pretxncommit
146 HG_HOOKTYPE=pretxncommit
146 HG_HOOKTYPE=pretxncommit
147 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
147 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
148 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
148 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
149 HG_PENDING=$TESTTMP/a
149 HG_PENDING=$TESTTMP/a
150
150
151 2:ee9deb46ab31
151 2:ee9deb46ab31
152 pretxnclose hook: HG_HOOKNAME=pretxnclose
152 pretxnclose hook: HG_HOOKNAME=pretxnclose
153 HG_HOOKTYPE=pretxnclose
153 HG_HOOKTYPE=pretxnclose
154 HG_PENDING=$TESTTMP/a
154 HG_PENDING=$TESTTMP/a
155 HG_TXNID=TXN:$ID$
155 HG_TXNID=TXN:$ID$
156 HG_TXNNAME=commit
156 HG_TXNNAME=commit
157
157
158 created new head
158 created new head
159 txnclose hook: HG_HOOKNAME=txnclose
159 txnclose hook: HG_HOOKNAME=txnclose
160 HG_HOOKTYPE=txnclose
160 HG_HOOKTYPE=txnclose
161 HG_TXNID=TXN:$ID$
161 HG_TXNID=TXN:$ID$
162 HG_TXNNAME=commit
162 HG_TXNNAME=commit
163
163
164 commit hook: HG_HOOKNAME=commit
164 commit hook: HG_HOOKNAME=commit
165 HG_HOOKTYPE=commit
165 HG_HOOKTYPE=commit
166 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
166 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
167 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
167 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
168
168
169 commit.b hook: HG_HOOKNAME=commit.b
169 commit.b hook: HG_HOOKNAME=commit.b
170 HG_HOOKTYPE=commit
170 HG_HOOKTYPE=commit
171 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
171 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
172 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
172 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
173
173
174 $ hg merge 1
174 $ hg merge 1
175 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
175 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
176 (branch merge, don't forget to commit)
176 (branch merge, don't forget to commit)
177 $ hg commit -m merge -d '2 0'
177 $ hg commit -m merge -d '2 0'
178 precommit hook: HG_HOOKNAME=precommit
178 precommit hook: HG_HOOKNAME=precommit
179 HG_HOOKTYPE=precommit
179 HG_HOOKTYPE=precommit
180 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
180 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
181 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
181 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
182
182
183 pretxnopen hook: HG_HOOKNAME=pretxnopen
183 pretxnopen hook: HG_HOOKNAME=pretxnopen
184 HG_HOOKTYPE=pretxnopen
184 HG_HOOKTYPE=pretxnopen
185 HG_TXNID=TXN:$ID$
185 HG_TXNID=TXN:$ID$
186 HG_TXNNAME=commit
186 HG_TXNNAME=commit
187
187
188 pretxncommit hook: HG_HOOKNAME=pretxncommit
188 pretxncommit hook: HG_HOOKNAME=pretxncommit
189 HG_HOOKTYPE=pretxncommit
189 HG_HOOKTYPE=pretxncommit
190 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
190 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
191 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
191 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
192 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
192 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
193 HG_PENDING=$TESTTMP/a
193 HG_PENDING=$TESTTMP/a
194
194
195 3:07f3376c1e65
195 3:07f3376c1e65
196 pretxnclose hook: HG_HOOKNAME=pretxnclose
196 pretxnclose hook: HG_HOOKNAME=pretxnclose
197 HG_HOOKTYPE=pretxnclose
197 HG_HOOKTYPE=pretxnclose
198 HG_PENDING=$TESTTMP/a
198 HG_PENDING=$TESTTMP/a
199 HG_TXNID=TXN:$ID$
199 HG_TXNID=TXN:$ID$
200 HG_TXNNAME=commit
200 HG_TXNNAME=commit
201
201
202 txnclose hook: HG_HOOKNAME=txnclose
202 txnclose hook: HG_HOOKNAME=txnclose
203 HG_HOOKTYPE=txnclose
203 HG_HOOKTYPE=txnclose
204 HG_TXNID=TXN:$ID$
204 HG_TXNID=TXN:$ID$
205 HG_TXNNAME=commit
205 HG_TXNNAME=commit
206
206
207 commit hook: HG_HOOKNAME=commit
207 commit hook: HG_HOOKNAME=commit
208 HG_HOOKTYPE=commit
208 HG_HOOKTYPE=commit
209 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
209 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
210 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
210 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
211 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
211 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
212
212
213 commit.b hook: HG_HOOKNAME=commit.b
213 commit.b hook: HG_HOOKNAME=commit.b
214 HG_HOOKTYPE=commit
214 HG_HOOKTYPE=commit
215 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
215 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
216 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
216 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
217 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
217 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
218
218
219
219
220 test generic hooks
220 test generic hooks
221
221
222 $ hg id
222 $ hg id
223 pre-identify hook: HG_ARGS=id
223 pre-identify hook: HG_ARGS=id
224 HG_HOOKNAME=pre-identify
224 HG_HOOKNAME=pre-identify
225 HG_HOOKTYPE=pre-identify
225 HG_HOOKTYPE=pre-identify
226 HG_OPTS={'bookmarks': None, 'branch': None, 'id': None, 'insecure': None, 'num': None, 'remotecmd': '', 'rev': '', 'ssh': '', 'tags': None, 'template': ''}
226 HG_OPTS={'bookmarks': None, 'branch': None, 'id': None, 'insecure': None, 'num': None, 'remotecmd': '', 'rev': '', 'ssh': '', 'tags': None, 'template': ''}
227 HG_PATS=[]
227 HG_PATS=[]
228
228
229 abort: pre-identify hook exited with status 1
229 abort: pre-identify hook exited with status 1
230 [40]
230 [40]
231 $ hg cat b
231 $ hg cat b
232 pre-cat hook: HG_ARGS=cat b
232 pre-cat hook: HG_ARGS=cat b
233 HG_HOOKNAME=pre-cat
233 HG_HOOKNAME=pre-cat
234 HG_HOOKTYPE=pre-cat
234 HG_HOOKTYPE=pre-cat
235 HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': '', 'template': ''}
235 HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': '', 'template': ''}
236 HG_PATS=['b']
236 HG_PATS=['b']
237
237
238 b
238 b
239 post-cat hook: HG_ARGS=cat b
239 post-cat hook: HG_ARGS=cat b
240 HG_HOOKNAME=post-cat
240 HG_HOOKNAME=post-cat
241 HG_HOOKTYPE=post-cat
241 HG_HOOKTYPE=post-cat
242 HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': '', 'template': ''}
242 HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': '', 'template': ''}
243 HG_PATS=['b']
243 HG_PATS=['b']
244 HG_RESULT=0
244 HG_RESULT=0
245
245
246
246
247 $ cd ../b
247 $ cd ../b
248 $ hg pull ../a
248 $ hg pull ../a
249 pulling from ../a
249 pulling from ../a
250 searching for changes
250 searching for changes
251 prechangegroup hook: HG_HOOKNAME=prechangegroup
251 prechangegroup hook: HG_HOOKNAME=prechangegroup
252 HG_HOOKTYPE=prechangegroup
252 HG_HOOKTYPE=prechangegroup
253 HG_SOURCE=pull
253 HG_SOURCE=pull
254 HG_TXNID=TXN:$ID$
254 HG_TXNID=TXN:$ID$
255 HG_TXNNAME=pull
255 HG_TXNNAME=pull
256 file:/*/$TESTTMP/a (glob)
256 file:/*/$TESTTMP/a (glob)
257 HG_URL=file:$TESTTMP/a
257 HG_URL=file:$TESTTMP/a
258
258
259 adding changesets
259 adding changesets
260 adding manifests
260 adding manifests
261 adding file changes
261 adding file changes
262 added 3 changesets with 2 changes to 2 files
262 added 3 changesets with 2 changes to 2 files
263 new changesets ab228980c14d:07f3376c1e65
263 new changesets ab228980c14d:07f3376c1e65
264 changegroup hook: HG_HOOKNAME=changegroup
264 changegroup hook: HG_HOOKNAME=changegroup
265 HG_HOOKTYPE=changegroup
265 HG_HOOKTYPE=changegroup
266 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
266 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
267 HG_NODE_LAST=07f3376c1e655977439df2a814e3cc14b27abac2
267 HG_NODE_LAST=07f3376c1e655977439df2a814e3cc14b27abac2
268 HG_SOURCE=pull
268 HG_SOURCE=pull
269 HG_TXNID=TXN:$ID$
269 HG_TXNID=TXN:$ID$
270 HG_TXNNAME=pull
270 HG_TXNNAME=pull
271 file:/*/$TESTTMP/a (glob)
271 file:/*/$TESTTMP/a (glob)
272 HG_URL=file:$TESTTMP/a
272 HG_URL=file:$TESTTMP/a
273
273
274 incoming hook: HG_HOOKNAME=incoming
274 incoming hook: HG_HOOKNAME=incoming
275 HG_HOOKTYPE=incoming
275 HG_HOOKTYPE=incoming
276 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
276 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
277 HG_SOURCE=pull
277 HG_SOURCE=pull
278 HG_TXNID=TXN:$ID$
278 HG_TXNID=TXN:$ID$
279 HG_TXNNAME=pull
279 HG_TXNNAME=pull
280 file:/*/$TESTTMP/a (glob)
280 file:/*/$TESTTMP/a (glob)
281 HG_URL=file:$TESTTMP/a
281 HG_URL=file:$TESTTMP/a
282
282
283 incoming hook: HG_HOOKNAME=incoming
283 incoming hook: HG_HOOKNAME=incoming
284 HG_HOOKTYPE=incoming
284 HG_HOOKTYPE=incoming
285 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
285 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
286 HG_SOURCE=pull
286 HG_SOURCE=pull
287 HG_TXNID=TXN:$ID$
287 HG_TXNID=TXN:$ID$
288 HG_TXNNAME=pull
288 HG_TXNNAME=pull
289 file:/*/$TESTTMP/a (glob)
289 file:/*/$TESTTMP/a (glob)
290 HG_URL=file:$TESTTMP/a
290 HG_URL=file:$TESTTMP/a
291
291
292 incoming hook: HG_HOOKNAME=incoming
292 incoming hook: HG_HOOKNAME=incoming
293 HG_HOOKTYPE=incoming
293 HG_HOOKTYPE=incoming
294 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
294 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
295 HG_SOURCE=pull
295 HG_SOURCE=pull
296 HG_TXNID=TXN:$ID$
296 HG_TXNID=TXN:$ID$
297 HG_TXNNAME=pull
297 HG_TXNNAME=pull
298 file:/*/$TESTTMP/a (glob)
298 file:/*/$TESTTMP/a (glob)
299 HG_URL=file:$TESTTMP/a
299 HG_URL=file:$TESTTMP/a
300
300
301 (run 'hg update' to get a working copy)
301 (run 'hg update' to get a working copy)
302
302
303 tag hooks can see env vars
303 tag hooks can see env vars
304
304
305 $ cd ../a
305 $ cd ../a
306 $ cat >> .hg/hgrc <<EOF
306 $ cat >> .hg/hgrc <<EOF
307 > pretag = sh -c "printenv.py --line pretag"
307 > pretag = sh -c "printenv.py --line pretag"
308 > tag = sh -c "HG_PARENT1= HG_PARENT2= printenv.py --line tag"
308 > tag = sh -c "HG_PARENT1= HG_PARENT2= printenv.py --line tag"
309 > EOF
309 > EOF
310 $ hg tag -d '3 0' a
310 $ hg tag -d '3 0' a
311 pretag hook: HG_HOOKNAME=pretag
311 pretag hook: HG_HOOKNAME=pretag
312 HG_HOOKTYPE=pretag
312 HG_HOOKTYPE=pretag
313 HG_LOCAL=0
313 HG_LOCAL=0
314 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
314 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
315 HG_TAG=a
315 HG_TAG=a
316
316
317 precommit hook: HG_HOOKNAME=precommit
317 precommit hook: HG_HOOKNAME=precommit
318 HG_HOOKTYPE=precommit
318 HG_HOOKTYPE=precommit
319 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
319 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
320
320
321 pretxnopen hook: HG_HOOKNAME=pretxnopen
321 pretxnopen hook: HG_HOOKNAME=pretxnopen
322 HG_HOOKTYPE=pretxnopen
322 HG_HOOKTYPE=pretxnopen
323 HG_TXNID=TXN:$ID$
323 HG_TXNID=TXN:$ID$
324 HG_TXNNAME=commit
324 HG_TXNNAME=commit
325
325
326 pretxncommit hook: HG_HOOKNAME=pretxncommit
326 pretxncommit hook: HG_HOOKNAME=pretxncommit
327 HG_HOOKTYPE=pretxncommit
327 HG_HOOKTYPE=pretxncommit
328 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
328 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
329 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
329 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
330 HG_PENDING=$TESTTMP/a
330 HG_PENDING=$TESTTMP/a
331
331
332 4:539e4b31b6dc
332 4:539e4b31b6dc
333 pretxnclose hook: HG_HOOKNAME=pretxnclose
333 pretxnclose hook: HG_HOOKNAME=pretxnclose
334 HG_HOOKTYPE=pretxnclose
334 HG_HOOKTYPE=pretxnclose
335 HG_PENDING=$TESTTMP/a
335 HG_PENDING=$TESTTMP/a
336 HG_TXNID=TXN:$ID$
336 HG_TXNID=TXN:$ID$
337 HG_TXNNAME=commit
337 HG_TXNNAME=commit
338
338
339 tag hook: HG_HOOKNAME=tag
339 tag hook: HG_HOOKNAME=tag
340 HG_HOOKTYPE=tag
340 HG_HOOKTYPE=tag
341 HG_LOCAL=0
341 HG_LOCAL=0
342 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
342 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
343 HG_TAG=a
343 HG_TAG=a
344
344
345 txnclose hook: HG_HOOKNAME=txnclose
345 txnclose hook: HG_HOOKNAME=txnclose
346 HG_HOOKTYPE=txnclose
346 HG_HOOKTYPE=txnclose
347 HG_TXNID=TXN:$ID$
347 HG_TXNID=TXN:$ID$
348 HG_TXNNAME=commit
348 HG_TXNNAME=commit
349
349
350 commit hook: HG_HOOKNAME=commit
350 commit hook: HG_HOOKNAME=commit
351 HG_HOOKTYPE=commit
351 HG_HOOKTYPE=commit
352 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
352 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
353 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
353 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
354
354
355 commit.b hook: HG_HOOKNAME=commit.b
355 commit.b hook: HG_HOOKNAME=commit.b
356 HG_HOOKTYPE=commit
356 HG_HOOKTYPE=commit
357 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
357 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
358 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
358 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
359
359
360 $ hg tag -l la
360 $ hg tag -l la
361 pretag hook: HG_HOOKNAME=pretag
361 pretag hook: HG_HOOKNAME=pretag
362 HG_HOOKTYPE=pretag
362 HG_HOOKTYPE=pretag
363 HG_LOCAL=1
363 HG_LOCAL=1
364 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
364 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
365 HG_TAG=la
365 HG_TAG=la
366
366
367 tag hook: HG_HOOKNAME=tag
367 tag hook: HG_HOOKNAME=tag
368 HG_HOOKTYPE=tag
368 HG_HOOKTYPE=tag
369 HG_LOCAL=1
369 HG_LOCAL=1
370 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
370 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
371 HG_TAG=la
371 HG_TAG=la
372
372
373
373
374 pretag hook can forbid tagging
374 pretag hook can forbid tagging
375
375
376 $ cat >> .hg/hgrc <<EOF
376 $ cat >> .hg/hgrc <<EOF
377 > pretag.forbid = sh -c "printenv.py --line pretag.forbid 1"
377 > pretag.forbid = sh -c "printenv.py --line pretag.forbid 1"
378 > EOF
378 > EOF
379 $ hg tag -d '4 0' fa
379 $ hg tag -d '4 0' fa
380 pretag hook: HG_HOOKNAME=pretag
380 pretag hook: HG_HOOKNAME=pretag
381 HG_HOOKTYPE=pretag
381 HG_HOOKTYPE=pretag
382 HG_LOCAL=0
382 HG_LOCAL=0
383 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
383 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
384 HG_TAG=fa
384 HG_TAG=fa
385
385
386 pretag.forbid hook: HG_HOOKNAME=pretag.forbid
386 pretag.forbid hook: HG_HOOKNAME=pretag.forbid
387 HG_HOOKTYPE=pretag
387 HG_HOOKTYPE=pretag
388 HG_LOCAL=0
388 HG_LOCAL=0
389 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
389 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
390 HG_TAG=fa
390 HG_TAG=fa
391
391
392 abort: pretag.forbid hook exited with status 1
392 abort: pretag.forbid hook exited with status 1
393 [40]
393 [40]
394 $ hg tag -l fla
394 $ hg tag -l fla
395 pretag hook: HG_HOOKNAME=pretag
395 pretag hook: HG_HOOKNAME=pretag
396 HG_HOOKTYPE=pretag
396 HG_HOOKTYPE=pretag
397 HG_LOCAL=1
397 HG_LOCAL=1
398 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
398 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
399 HG_TAG=fla
399 HG_TAG=fla
400
400
401 pretag.forbid hook: HG_HOOKNAME=pretag.forbid
401 pretag.forbid hook: HG_HOOKNAME=pretag.forbid
402 HG_HOOKTYPE=pretag
402 HG_HOOKTYPE=pretag
403 HG_LOCAL=1
403 HG_LOCAL=1
404 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
404 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
405 HG_TAG=fla
405 HG_TAG=fla
406
406
407 abort: pretag.forbid hook exited with status 1
407 abort: pretag.forbid hook exited with status 1
408 [40]
408 [40]
409
409
410 pretxncommit hook can see changeset, can roll back txn, changeset no
410 pretxncommit hook can see changeset, can roll back txn, changeset no
411 more there after
411 more there after
412
412
413 $ cat >> .hg/hgrc <<EOF
413 $ cat >> .hg/hgrc <<EOF
414 > pretxncommit.forbid0 = sh -c "hg tip -q"
414 > pretxncommit.forbid0 = sh -c "hg tip -q"
415 > pretxncommit.forbid1 = sh -c "printenv.py --line pretxncommit.forbid 1"
415 > pretxncommit.forbid1 = sh -c "printenv.py --line pretxncommit.forbid 1"
416 > EOF
416 > EOF
417 $ echo z > z
417 $ echo z > z
418 $ hg add z
418 $ hg add z
419 $ hg -q tip
419 $ hg -q tip
420 4:539e4b31b6dc
420 4:539e4b31b6dc
421 $ hg commit -m 'fail' -d '4 0'
421 $ hg commit -m 'fail' -d '4 0'
422 precommit hook: HG_HOOKNAME=precommit
422 precommit hook: HG_HOOKNAME=precommit
423 HG_HOOKTYPE=precommit
423 HG_HOOKTYPE=precommit
424 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
424 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
425
425
426 pretxnopen hook: HG_HOOKNAME=pretxnopen
426 pretxnopen hook: HG_HOOKNAME=pretxnopen
427 HG_HOOKTYPE=pretxnopen
427 HG_HOOKTYPE=pretxnopen
428 HG_TXNID=TXN:$ID$
428 HG_TXNID=TXN:$ID$
429 HG_TXNNAME=commit
429 HG_TXNNAME=commit
430
430
431 pretxncommit hook: HG_HOOKNAME=pretxncommit
431 pretxncommit hook: HG_HOOKNAME=pretxncommit
432 HG_HOOKTYPE=pretxncommit
432 HG_HOOKTYPE=pretxncommit
433 HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567
433 HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567
434 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
434 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
435 HG_PENDING=$TESTTMP/a
435 HG_PENDING=$TESTTMP/a
436
436
437 5:6f611f8018c1
437 5:6f611f8018c1
438 5:6f611f8018c1
438 5:6f611f8018c1
439 pretxncommit.forbid hook: HG_HOOKNAME=pretxncommit.forbid1
439 pretxncommit.forbid hook: HG_HOOKNAME=pretxncommit.forbid1
440 HG_HOOKTYPE=pretxncommit
440 HG_HOOKTYPE=pretxncommit
441 HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567
441 HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567
442 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
442 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
443 HG_PENDING=$TESTTMP/a
443 HG_PENDING=$TESTTMP/a
444
444
445 transaction abort!
445 transaction abort!
446 txnabort Python hook: changes,txnid,txnname
446 txnabort Python hook: changes,txnid,txnname
447 txnabort hook: HG_HOOKNAME=txnabort.1
447 txnabort hook: HG_HOOKNAME=txnabort.1
448 HG_HOOKTYPE=txnabort
448 HG_HOOKTYPE=txnabort
449 HG_TXNID=TXN:$ID$
449 HG_TXNID=TXN:$ID$
450 HG_TXNNAME=commit
450 HG_TXNNAME=commit
451
451
452 rollback completed
452 rollback completed
453 abort: pretxncommit.forbid1 hook exited with status 1
453 abort: pretxncommit.forbid1 hook exited with status 1
454 [40]
454 [40]
455 $ hg -q tip
455 $ hg -q tip
456 4:539e4b31b6dc
456 4:539e4b31b6dc
457
457
458 (Check that no 'changelog.i.a' file were left behind)
458 (Check that no 'changelog.i.a' file were left behind)
459
459
460 $ ls -1 .hg/store/
460 $ ls -1 .hg/store/
461 00changelog.i
461 00changelog.i
462 00manifest.i
462 00manifest.i
463 data
463 data
464 fncache (repofncache !)
464 fncache (repofncache !)
465 journal.phaseroots
465 journal.phaseroots
466 phaseroots
466 phaseroots
467 undo
467 undo
468 undo.backup.fncache (repofncache !)
468 undo.backup.fncache (repofncache !)
469 undo.backupfiles
469 undo.backupfiles
470 undo.phaseroots
470 undo.phaseroots
471
471
472
472
473 precommit hook can prevent commit
473 precommit hook can prevent commit
474
474
475 $ cat >> .hg/hgrc <<EOF
475 $ cat >> .hg/hgrc <<EOF
476 > precommit.forbid = sh -c "printenv.py --line precommit.forbid 1"
476 > precommit.forbid = sh -c "printenv.py --line precommit.forbid 1"
477 > EOF
477 > EOF
478 $ hg commit -m 'fail' -d '4 0'
478 $ hg commit -m 'fail' -d '4 0'
479 precommit hook: HG_HOOKNAME=precommit
479 precommit hook: HG_HOOKNAME=precommit
480 HG_HOOKTYPE=precommit
480 HG_HOOKTYPE=precommit
481 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
481 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
482
482
483 precommit.forbid hook: HG_HOOKNAME=precommit.forbid
483 precommit.forbid hook: HG_HOOKNAME=precommit.forbid
484 HG_HOOKTYPE=precommit
484 HG_HOOKTYPE=precommit
485 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
485 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
486
486
487 abort: precommit.forbid hook exited with status 1
487 abort: precommit.forbid hook exited with status 1
488 [40]
488 [40]
489 $ hg -q tip
489 $ hg -q tip
490 4:539e4b31b6dc
490 4:539e4b31b6dc
491
491
492 preupdate hook can prevent update
492 preupdate hook can prevent update
493
493
494 $ cat >> .hg/hgrc <<EOF
494 $ cat >> .hg/hgrc <<EOF
495 > preupdate = sh -c "printenv.py --line preupdate"
495 > preupdate = sh -c "printenv.py --line preupdate"
496 > EOF
496 > EOF
497 $ hg update 1
497 $ hg update 1
498 preupdate hook: HG_HOOKNAME=preupdate
498 preupdate hook: HG_HOOKNAME=preupdate
499 HG_HOOKTYPE=preupdate
499 HG_HOOKTYPE=preupdate
500 HG_PARENT1=ab228980c14d
500 HG_PARENT1=ab228980c14d
501
501
502 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
502 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
503
503
504 update hook
504 update hook
505
505
506 $ cat >> .hg/hgrc <<EOF
506 $ cat >> .hg/hgrc <<EOF
507 > update = sh -c "printenv.py --line update"
507 > update = sh -c "printenv.py --line update"
508 > EOF
508 > EOF
509 $ hg update
509 $ hg update
510 preupdate hook: HG_HOOKNAME=preupdate
510 preupdate hook: HG_HOOKNAME=preupdate
511 HG_HOOKTYPE=preupdate
511 HG_HOOKTYPE=preupdate
512 HG_PARENT1=539e4b31b6dc
512 HG_PARENT1=539e4b31b6dc
513
513
514 update hook: HG_ERROR=0
514 update hook: HG_ERROR=0
515 HG_HOOKNAME=update
515 HG_HOOKNAME=update
516 HG_HOOKTYPE=update
516 HG_HOOKTYPE=update
517 HG_PARENT1=539e4b31b6dc
517 HG_PARENT1=539e4b31b6dc
518
518
519 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
519 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
520
520
521 pushkey hook
521 pushkey hook
522
522
523 $ cat >> .hg/hgrc <<EOF
523 $ cat >> .hg/hgrc <<EOF
524 > pushkey = sh -c "printenv.py --line pushkey"
524 > pushkey = sh -c "printenv.py --line pushkey"
525 > EOF
525 > EOF
526 $ cd ../b
526 $ cd ../b
527 $ hg bookmark -r null foo
527 $ hg bookmark -r null foo
528 $ hg push -B foo ../a
528 $ hg push -B foo ../a
529 pushing to ../a
529 pushing to ../a
530 searching for changes
530 searching for changes
531 no changes found
531 no changes found
532 pretxnopen hook: HG_HOOKNAME=pretxnopen
532 pretxnopen hook: HG_HOOKNAME=pretxnopen
533 HG_HOOKTYPE=pretxnopen
533 HG_HOOKTYPE=pretxnopen
534 HG_TXNID=TXN:$ID$
534 HG_TXNID=TXN:$ID$
535 HG_TXNNAME=push
535 HG_TXNNAME=push
536
536
537 pretxnclose hook: HG_BOOKMARK_MOVED=1
537 pretxnclose hook: HG_BOOKMARK_MOVED=1
538 HG_BUNDLE2=1
538 HG_BUNDLE2=1
539 HG_HOOKNAME=pretxnclose
539 HG_HOOKNAME=pretxnclose
540 HG_HOOKTYPE=pretxnclose
540 HG_HOOKTYPE=pretxnclose
541 HG_PENDING=$TESTTMP/a
541 HG_PENDING=$TESTTMP/a
542 HG_SOURCE=push
542 HG_SOURCE=push
543 HG_TXNID=TXN:$ID$
543 HG_TXNID=TXN:$ID$
544 HG_TXNNAME=push
544 HG_TXNNAME=push
545 HG_URL=file:$TESTTMP/a
545 HG_URL=file:$TESTTMP/a
546
546
547 pushkey hook: HG_BUNDLE2=1
547 pushkey hook: HG_BUNDLE2=1
548 HG_HOOKNAME=pushkey
548 HG_HOOKNAME=pushkey
549 HG_HOOKTYPE=pushkey
549 HG_HOOKTYPE=pushkey
550 HG_KEY=foo
550 HG_KEY=foo
551 HG_NAMESPACE=bookmarks
551 HG_NAMESPACE=bookmarks
552 HG_NEW=0000000000000000000000000000000000000000
552 HG_NEW=0000000000000000000000000000000000000000
553 HG_PUSHKEYCOMPAT=1
553 HG_PUSHKEYCOMPAT=1
554 HG_SOURCE=push
554 HG_SOURCE=push
555 HG_TXNID=TXN:$ID$
555 HG_TXNID=TXN:$ID$
556 HG_TXNNAME=push
556 HG_TXNNAME=push
557 HG_URL=file:$TESTTMP/a
557 HG_URL=file:$TESTTMP/a
558
558
559 txnclose hook: HG_BOOKMARK_MOVED=1
559 txnclose hook: HG_BOOKMARK_MOVED=1
560 HG_BUNDLE2=1
560 HG_BUNDLE2=1
561 HG_HOOKNAME=txnclose
561 HG_HOOKNAME=txnclose
562 HG_HOOKTYPE=txnclose
562 HG_HOOKTYPE=txnclose
563 HG_SOURCE=push
563 HG_SOURCE=push
564 HG_TXNID=TXN:$ID$
564 HG_TXNID=TXN:$ID$
565 HG_TXNNAME=push
565 HG_TXNNAME=push
566 HG_URL=file:$TESTTMP/a
566 HG_URL=file:$TESTTMP/a
567
567
568 exporting bookmark foo
568 exporting bookmark foo
569 [1]
569 [1]
570 $ cd ../a
570 $ cd ../a
571
571
572 listkeys hook
572 listkeys hook
573
573
574 $ cat >> .hg/hgrc <<EOF
574 $ cat >> .hg/hgrc <<EOF
575 > listkeys = sh -c "printenv.py --line listkeys"
575 > listkeys = sh -c "printenv.py --line listkeys"
576 > EOF
576 > EOF
577 $ hg bookmark -r null bar
577 $ hg bookmark -r null bar
578 pretxnopen hook: HG_HOOKNAME=pretxnopen
578 pretxnopen hook: HG_HOOKNAME=pretxnopen
579 HG_HOOKTYPE=pretxnopen
579 HG_HOOKTYPE=pretxnopen
580 HG_TXNID=TXN:$ID$
580 HG_TXNID=TXN:$ID$
581 HG_TXNNAME=bookmark
581 HG_TXNNAME=bookmark
582
582
583 pretxnclose hook: HG_BOOKMARK_MOVED=1
583 pretxnclose hook: HG_BOOKMARK_MOVED=1
584 HG_HOOKNAME=pretxnclose
584 HG_HOOKNAME=pretxnclose
585 HG_HOOKTYPE=pretxnclose
585 HG_HOOKTYPE=pretxnclose
586 HG_PENDING=$TESTTMP/a
586 HG_PENDING=$TESTTMP/a
587 HG_TXNID=TXN:$ID$
587 HG_TXNID=TXN:$ID$
588 HG_TXNNAME=bookmark
588 HG_TXNNAME=bookmark
589
589
590 txnclose hook: HG_BOOKMARK_MOVED=1
590 txnclose hook: HG_BOOKMARK_MOVED=1
591 HG_HOOKNAME=txnclose
591 HG_HOOKNAME=txnclose
592 HG_HOOKTYPE=txnclose
592 HG_HOOKTYPE=txnclose
593 HG_TXNID=TXN:$ID$
593 HG_TXNID=TXN:$ID$
594 HG_TXNNAME=bookmark
594 HG_TXNNAME=bookmark
595
595
596 $ cd ../b
596 $ cd ../b
597 $ hg pull -B bar ../a
597 $ hg pull -B bar ../a
598 pulling from ../a
598 pulling from ../a
599 listkeys hook: HG_HOOKNAME=listkeys
599 listkeys hook: HG_HOOKNAME=listkeys
600 HG_HOOKTYPE=listkeys
600 HG_HOOKTYPE=listkeys
601 HG_NAMESPACE=bookmarks
601 HG_NAMESPACE=bookmarks
602 HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
602 HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
603
603
604 no changes found
604 no changes found
605 adding remote bookmark bar
605 adding remote bookmark bar
606 $ cd ../a
606 $ cd ../a
607
607
608 test that prepushkey can prevent incoming keys
608 test that prepushkey can prevent incoming keys
609
609
610 $ cat >> .hg/hgrc <<EOF
610 $ cat >> .hg/hgrc <<EOF
611 > prepushkey = sh -c "printenv.py --line prepushkey.forbid 1"
611 > prepushkey = sh -c "printenv.py --line prepushkey.forbid 1"
612 > EOF
612 > EOF
613 $ cd ../b
613 $ cd ../b
614 $ hg bookmark -r null baz
614 $ hg bookmark -r null baz
615 $ hg push -B baz ../a
615 $ hg push -B baz ../a
616 pushing to ../a
616 pushing to ../a
617 searching for changes
617 searching for changes
618 listkeys hook: HG_HOOKNAME=listkeys
618 listkeys hook: HG_HOOKNAME=listkeys
619 HG_HOOKTYPE=listkeys
619 HG_HOOKTYPE=listkeys
620 HG_NAMESPACE=phases
620 HG_NAMESPACE=phases
621 HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'}
621 HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'}
622
622
623 listkeys hook: HG_HOOKNAME=listkeys
623 listkeys hook: HG_HOOKNAME=listkeys
624 HG_HOOKTYPE=listkeys
624 HG_HOOKTYPE=listkeys
625 HG_NAMESPACE=bookmarks
625 HG_NAMESPACE=bookmarks
626 HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
626 HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
627
627
628 no changes found
628 no changes found
629 pretxnopen hook: HG_HOOKNAME=pretxnopen
629 pretxnopen hook: HG_HOOKNAME=pretxnopen
630 HG_HOOKTYPE=pretxnopen
630 HG_HOOKTYPE=pretxnopen
631 HG_TXNID=TXN:$ID$
631 HG_TXNID=TXN:$ID$
632 HG_TXNNAME=push
632 HG_TXNNAME=push
633
633
634 prepushkey.forbid hook: HG_BUNDLE2=1
634 prepushkey.forbid hook: HG_BUNDLE2=1
635 HG_HOOKNAME=prepushkey
635 HG_HOOKNAME=prepushkey
636 HG_HOOKTYPE=prepushkey
636 HG_HOOKTYPE=prepushkey
637 HG_KEY=baz
637 HG_KEY=baz
638 HG_NAMESPACE=bookmarks
638 HG_NAMESPACE=bookmarks
639 HG_NEW=0000000000000000000000000000000000000000
639 HG_NEW=0000000000000000000000000000000000000000
640 HG_PUSHKEYCOMPAT=1
640 HG_PUSHKEYCOMPAT=1
641 HG_SOURCE=push
641 HG_SOURCE=push
642 HG_TXNID=TXN:$ID$
642 HG_TXNID=TXN:$ID$
643 HG_TXNNAME=push
643 HG_TXNNAME=push
644 HG_URL=file:$TESTTMP/a
644 HG_URL=file:$TESTTMP/a
645
645
646 abort: prepushkey hook exited with status 1
646 abort: prepushkey hook exited with status 1
647 [40]
647 [40]
648 $ cd ../a
648 $ cd ../a
649
649
650 test that prelistkeys can prevent listing keys
650 test that prelistkeys can prevent listing keys
651
651
652 $ cat >> .hg/hgrc <<EOF
652 $ cat >> .hg/hgrc <<EOF
653 > prelistkeys = sh -c "printenv.py --line prelistkeys.forbid 1"
653 > prelistkeys = sh -c "printenv.py --line prelistkeys.forbid 1"
654 > EOF
654 > EOF
655 $ hg bookmark -r null quux
655 $ hg bookmark -r null quux
656 pretxnopen hook: HG_HOOKNAME=pretxnopen
656 pretxnopen hook: HG_HOOKNAME=pretxnopen
657 HG_HOOKTYPE=pretxnopen
657 HG_HOOKTYPE=pretxnopen
658 HG_TXNID=TXN:$ID$
658 HG_TXNID=TXN:$ID$
659 HG_TXNNAME=bookmark
659 HG_TXNNAME=bookmark
660
660
661 pretxnclose hook: HG_BOOKMARK_MOVED=1
661 pretxnclose hook: HG_BOOKMARK_MOVED=1
662 HG_HOOKNAME=pretxnclose
662 HG_HOOKNAME=pretxnclose
663 HG_HOOKTYPE=pretxnclose
663 HG_HOOKTYPE=pretxnclose
664 HG_PENDING=$TESTTMP/a
664 HG_PENDING=$TESTTMP/a
665 HG_TXNID=TXN:$ID$
665 HG_TXNID=TXN:$ID$
666 HG_TXNNAME=bookmark
666 HG_TXNNAME=bookmark
667
667
668 txnclose hook: HG_BOOKMARK_MOVED=1
668 txnclose hook: HG_BOOKMARK_MOVED=1
669 HG_HOOKNAME=txnclose
669 HG_HOOKNAME=txnclose
670 HG_HOOKTYPE=txnclose
670 HG_HOOKTYPE=txnclose
671 HG_TXNID=TXN:$ID$
671 HG_TXNID=TXN:$ID$
672 HG_TXNNAME=bookmark
672 HG_TXNNAME=bookmark
673
673
674 $ cd ../b
674 $ cd ../b
675 $ hg pull -B quux ../a
675 $ hg pull -B quux ../a
676 pulling from ../a
676 pulling from ../a
677 prelistkeys.forbid hook: HG_HOOKNAME=prelistkeys
677 prelistkeys.forbid hook: HG_HOOKNAME=prelistkeys
678 HG_HOOKTYPE=prelistkeys
678 HG_HOOKTYPE=prelistkeys
679 HG_NAMESPACE=bookmarks
679 HG_NAMESPACE=bookmarks
680
680
681 abort: prelistkeys hook exited with status 1
681 abort: prelistkeys hook exited with status 1
682 [40]
682 [40]
683 $ cd ../a
683 $ cd ../a
684 $ rm .hg/hgrc
684 $ rm .hg/hgrc
685
685
686 prechangegroup hook can prevent incoming changes
686 prechangegroup hook can prevent incoming changes
687
687
688 $ cd ../b
688 $ cd ../b
689 $ hg -q tip
689 $ hg -q tip
690 3:07f3376c1e65
690 3:07f3376c1e65
691 $ cat > .hg/hgrc <<EOF
691 $ cat > .hg/hgrc <<EOF
692 > [hooks]
692 > [hooks]
693 > prechangegroup.forbid = sh -c "printenv.py --line prechangegroup.forbid 1"
693 > prechangegroup.forbid = sh -c "printenv.py --line prechangegroup.forbid 1"
694 > EOF
694 > EOF
695 $ hg pull ../a
695 $ hg pull ../a
696 pulling from ../a
696 pulling from ../a
697 searching for changes
697 searching for changes
698 prechangegroup.forbid hook: HG_HOOKNAME=prechangegroup.forbid
698 prechangegroup.forbid hook: HG_HOOKNAME=prechangegroup.forbid
699 HG_HOOKTYPE=prechangegroup
699 HG_HOOKTYPE=prechangegroup
700 HG_SOURCE=pull
700 HG_SOURCE=pull
701 HG_TXNID=TXN:$ID$
701 HG_TXNID=TXN:$ID$
702 HG_TXNNAME=pull
702 HG_TXNNAME=pull
703 file:/*/$TESTTMP/a (glob)
703 file:/*/$TESTTMP/a (glob)
704 HG_URL=file:$TESTTMP/a
704 HG_URL=file:$TESTTMP/a
705
705
706 abort: prechangegroup.forbid hook exited with status 1
706 abort: prechangegroup.forbid hook exited with status 1
707 [40]
707 [40]
708
708
709 pretxnchangegroup hook can see incoming changes, can roll back txn,
709 pretxnchangegroup hook can see incoming changes, can roll back txn,
710 incoming changes no longer there after
710 incoming changes no longer there after
711
711
712 $ cat > .hg/hgrc <<EOF
712 $ cat > .hg/hgrc <<EOF
713 > [hooks]
713 > [hooks]
714 > pretxnchangegroup.forbid0 = hg tip -q
714 > pretxnchangegroup.forbid0 = hg tip -q
715 > pretxnchangegroup.forbid1 = sh -c "printenv.py --line pretxnchangegroup.forbid 1"
715 > pretxnchangegroup.forbid1 = sh -c "printenv.py --line pretxnchangegroup.forbid 1"
716 > EOF
716 > EOF
717 $ hg pull ../a
717 $ hg pull ../a
718 pulling from ../a
718 pulling from ../a
719 searching for changes
719 searching for changes
720 adding changesets
720 adding changesets
721 adding manifests
721 adding manifests
722 adding file changes
722 adding file changes
723 4:539e4b31b6dc
723 4:539e4b31b6dc
724 pretxnchangegroup.forbid hook: HG_HOOKNAME=pretxnchangegroup.forbid1
724 pretxnchangegroup.forbid hook: HG_HOOKNAME=pretxnchangegroup.forbid1
725 HG_HOOKTYPE=pretxnchangegroup
725 HG_HOOKTYPE=pretxnchangegroup
726 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
726 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
727 HG_NODE_LAST=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
727 HG_NODE_LAST=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
728 HG_PENDING=$TESTTMP/b
728 HG_PENDING=$TESTTMP/b
729 HG_SOURCE=pull
729 HG_SOURCE=pull
730 HG_TXNID=TXN:$ID$
730 HG_TXNID=TXN:$ID$
731 HG_TXNNAME=pull
731 HG_TXNNAME=pull
732 file:/*/$TESTTMP/a (glob)
732 file:/*/$TESTTMP/a (glob)
733 HG_URL=file:$TESTTMP/a
733 HG_URL=file:$TESTTMP/a
734
734
735 transaction abort!
735 transaction abort!
736 rollback completed
736 rollback completed
737 abort: pretxnchangegroup.forbid1 hook exited with status 1
737 abort: pretxnchangegroup.forbid1 hook exited with status 1
738 [40]
738 [40]
739 $ hg -q tip
739 $ hg -q tip
740 3:07f3376c1e65
740 3:07f3376c1e65
741
741
742 outgoing hooks can see env vars
742 outgoing hooks can see env vars
743
743
744 $ rm .hg/hgrc
744 $ rm .hg/hgrc
745 $ cat > ../a/.hg/hgrc <<EOF
745 $ cat > ../a/.hg/hgrc <<EOF
746 > [hooks]
746 > [hooks]
747 > preoutgoing = sh -c "printenv.py --line preoutgoing"
747 > preoutgoing = sh -c "printenv.py --line preoutgoing"
748 > outgoing = sh -c "printenv.py --line outgoing"
748 > outgoing = sh -c "printenv.py --line outgoing"
749 > EOF
749 > EOF
750 $ hg pull ../a
750 $ hg pull ../a
751 pulling from ../a
751 pulling from ../a
752 searching for changes
752 searching for changes
753 preoutgoing hook: HG_HOOKNAME=preoutgoing
753 preoutgoing hook: HG_HOOKNAME=preoutgoing
754 HG_HOOKTYPE=preoutgoing
754 HG_HOOKTYPE=preoutgoing
755 HG_SOURCE=pull
755 HG_SOURCE=pull
756
756
757 outgoing hook: HG_HOOKNAME=outgoing
757 outgoing hook: HG_HOOKNAME=outgoing
758 HG_HOOKTYPE=outgoing
758 HG_HOOKTYPE=outgoing
759 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
759 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
760 HG_SOURCE=pull
760 HG_SOURCE=pull
761
761
762 adding changesets
762 adding changesets
763 adding manifests
763 adding manifests
764 adding file changes
764 adding file changes
765 adding remote bookmark quux
765 adding remote bookmark quux
766 added 1 changesets with 1 changes to 1 files
766 added 1 changesets with 1 changes to 1 files
767 new changesets 539e4b31b6dc
767 new changesets 539e4b31b6dc
768 (run 'hg update' to get a working copy)
768 (run 'hg update' to get a working copy)
769 $ hg rollback
769 $ hg rollback
770 repository tip rolled back to revision 3 (undo pull)
770 repository tip rolled back to revision 3 (undo pull)
771
771
772 preoutgoing hook can prevent outgoing changes
772 preoutgoing hook can prevent outgoing changes
773
773
774 $ cat >> ../a/.hg/hgrc <<EOF
774 $ cat >> ../a/.hg/hgrc <<EOF
775 > preoutgoing.forbid = sh -c "printenv.py --line preoutgoing.forbid 1"
775 > preoutgoing.forbid = sh -c "printenv.py --line preoutgoing.forbid 1"
776 > EOF
776 > EOF
777 $ hg pull ../a
777 $ hg pull ../a
778 pulling from ../a
778 pulling from ../a
779 searching for changes
779 searching for changes
780 preoutgoing hook: HG_HOOKNAME=preoutgoing
780 preoutgoing hook: HG_HOOKNAME=preoutgoing
781 HG_HOOKTYPE=preoutgoing
781 HG_HOOKTYPE=preoutgoing
782 HG_SOURCE=pull
782 HG_SOURCE=pull
783
783
784 preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid
784 preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid
785 HG_HOOKTYPE=preoutgoing
785 HG_HOOKTYPE=preoutgoing
786 HG_SOURCE=pull
786 HG_SOURCE=pull
787
787
788 abort: preoutgoing.forbid hook exited with status 1
788 abort: preoutgoing.forbid hook exited with status 1
789 [40]
789 [40]
790
790
791 outgoing hooks work for local clones
791 outgoing hooks work for local clones
792
792
793 $ cd ..
793 $ cd ..
794 $ cat > a/.hg/hgrc <<EOF
794 $ cat > a/.hg/hgrc <<EOF
795 > [hooks]
795 > [hooks]
796 > preoutgoing = sh -c "printenv.py --line preoutgoing"
796 > preoutgoing = sh -c "printenv.py --line preoutgoing"
797 > outgoing = sh -c "printenv.py --line outgoing"
797 > outgoing = sh -c "printenv.py --line outgoing"
798 > EOF
798 > EOF
799 $ hg clone a c
799 $ hg clone a c
800 preoutgoing hook: HG_HOOKNAME=preoutgoing
800 preoutgoing hook: HG_HOOKNAME=preoutgoing
801 HG_HOOKTYPE=preoutgoing
801 HG_HOOKTYPE=preoutgoing
802 HG_SOURCE=clone
802 HG_SOURCE=clone
803
803
804 outgoing hook: HG_HOOKNAME=outgoing
804 outgoing hook: HG_HOOKNAME=outgoing
805 HG_HOOKTYPE=outgoing
805 HG_HOOKTYPE=outgoing
806 HG_NODE=0000000000000000000000000000000000000000
806 HG_NODE=0000000000000000000000000000000000000000
807 HG_SOURCE=clone
807 HG_SOURCE=clone
808
808
809 updating to branch default
809 updating to branch default
810 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
810 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
811 $ rm -rf c
811 $ rm -rf c
812
812
813 preoutgoing hook can prevent outgoing changes for local clones
813 preoutgoing hook can prevent outgoing changes for local clones
814
814
815 $ cat >> a/.hg/hgrc <<EOF
815 $ cat >> a/.hg/hgrc <<EOF
816 > preoutgoing.forbid = sh -c "printenv.py --line preoutgoing.forbid 1"
816 > preoutgoing.forbid = sh -c "printenv.py --line preoutgoing.forbid 1"
817 > EOF
817 > EOF
818 $ hg clone a zzz
818 $ hg clone a zzz
819 preoutgoing hook: HG_HOOKNAME=preoutgoing
819 preoutgoing hook: HG_HOOKNAME=preoutgoing
820 HG_HOOKTYPE=preoutgoing
820 HG_HOOKTYPE=preoutgoing
821 HG_SOURCE=clone
821 HG_SOURCE=clone
822
822
823 preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid
823 preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid
824 HG_HOOKTYPE=preoutgoing
824 HG_HOOKTYPE=preoutgoing
825 HG_SOURCE=clone
825 HG_SOURCE=clone
826
826
827 abort: preoutgoing.forbid hook exited with status 1
827 abort: preoutgoing.forbid hook exited with status 1
828 [40]
828 [40]
829
829
830 $ cd "$TESTTMP/b"
830 $ cd "$TESTTMP/b"
831
831
832 $ cat > hooktests.py <<EOF
832 $ cat > hooktests.py <<EOF
833 > from __future__ import print_function
833 > from __future__ import print_function
834 > from mercurial import (
834 > from mercurial import (
835 > error,
835 > error,
836 > pycompat,
836 > pycompat,
837 > )
837 > )
838 >
838 >
839 > uncallable = 0
839 > uncallable = 0
840 >
840 >
841 > def printargs(ui, args):
841 > def printargs(ui, args):
842 > a = list(pycompat.byteskwargs(args).items())
842 > a = list(pycompat.byteskwargs(args).items())
843 > a.sort()
843 > a.sort()
844 > ui.write(b'hook args:\n')
844 > ui.write(b'hook args:\n')
845 > for k, v in a:
845 > for k, v in a:
846 > ui.write(b' %s %s\n' % (k, v))
846 > ui.write(b' %s %s\n' % (k, v))
847 >
847 >
848 > def passhook(ui, repo, **args):
848 > def passhook(ui, repo, **args):
849 > printargs(ui, args)
849 > printargs(ui, args)
850 >
850 >
851 > def failhook(ui, repo, **args):
851 > def failhook(ui, repo, **args):
852 > printargs(ui, args)
852 > printargs(ui, args)
853 > return True
853 > return True
854 >
854 >
855 > class LocalException(Exception):
855 > class LocalException(Exception):
856 > pass
856 > pass
857 >
857 >
858 > def raisehook(**args):
858 > def raisehook(**args):
859 > raise LocalException('exception from hook')
859 > raise LocalException('exception from hook')
860 >
860 >
861 > def aborthook(**args):
861 > def aborthook(**args):
862 > raise error.Abort(b'raise abort from hook')
862 > raise error.Abort(b'raise abort from hook')
863 >
863 >
864 > def brokenhook(**args):
864 > def brokenhook(**args):
865 > return 1 + {}
865 > return 1 + {}
866 >
866 >
867 > def verbosehook(ui, **args):
867 > def verbosehook(ui, **args):
868 > ui.note(b'verbose output from hook\n')
868 > ui.note(b'verbose output from hook\n')
869 >
869 >
870 > def printtags(ui, repo, **args):
870 > def printtags(ui, repo, **args):
871 > ui.write(b'[%s]\n' % b', '.join(sorted(repo.tags())))
871 > ui.write(b'[%s]\n' % b', '.join(sorted(repo.tags())))
872 >
872 >
873 > class container(object):
873 > class container(object):
874 > unreachable = 1
874 > unreachable = 1
875 > EOF
875 > EOF
876
876
877 $ cat > syntaxerror.py << NO_CHECK_EOF
877 $ cat > syntaxerror.py << NO_CHECK_EOF
878 > (foo
878 > (foo
879 > NO_CHECK_EOF
879 > NO_CHECK_EOF
880
880
881 test python hooks
881 test python hooks
882
882
883 #if windows
883 #if windows
884 $ PYTHONPATH="$TESTTMP/b;$PYTHONPATH"
884 $ PYTHONPATH="$TESTTMP/b;$PYTHONPATH"
885 #else
885 #else
886 $ PYTHONPATH="$TESTTMP/b:$PYTHONPATH"
886 $ PYTHONPATH="$TESTTMP/b:$PYTHONPATH"
887 #endif
887 #endif
888 $ export PYTHONPATH
888 $ export PYTHONPATH
889
889
890 $ echo '[hooks]' > ../a/.hg/hgrc
890 $ echo '[hooks]' > ../a/.hg/hgrc
891 $ echo 'preoutgoing.broken = python:hooktests.brokenhook' >> ../a/.hg/hgrc
891 $ echo 'preoutgoing.broken = python:hooktests.brokenhook' >> ../a/.hg/hgrc
892 $ hg pull ../a 2>&1 | grep 'raised an exception'
892 $ hg pull ../a 2>&1 | grep 'raised an exception'
893 error: preoutgoing.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
893 error: preoutgoing.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
894
894
895 $ echo '[hooks]' > ../a/.hg/hgrc
895 $ echo '[hooks]' > ../a/.hg/hgrc
896 $ echo 'preoutgoing.raise = python:hooktests.raisehook' >> ../a/.hg/hgrc
896 $ echo 'preoutgoing.raise = python:hooktests.raisehook' >> ../a/.hg/hgrc
897 $ hg pull ../a 2>&1 | grep 'raised an exception'
897 $ hg pull ../a 2>&1 | grep 'raised an exception'
898 error: preoutgoing.raise hook raised an exception: exception from hook
898 error: preoutgoing.raise hook raised an exception: exception from hook
899
899
900 $ echo '[hooks]' > ../a/.hg/hgrc
900 $ echo '[hooks]' > ../a/.hg/hgrc
901 $ echo 'preoutgoing.abort = python:hooktests.aborthook' >> ../a/.hg/hgrc
901 $ echo 'preoutgoing.abort = python:hooktests.aborthook' >> ../a/.hg/hgrc
902 $ hg pull ../a
902 $ hg pull ../a
903 pulling from ../a
903 pulling from ../a
904 searching for changes
904 searching for changes
905 error: preoutgoing.abort hook failed: raise abort from hook
905 error: preoutgoing.abort hook failed: raise abort from hook
906 abort: raise abort from hook
906 abort: raise abort from hook
907 [255]
907 [255]
908
908
909 $ echo '[hooks]' > ../a/.hg/hgrc
909 $ echo '[hooks]' > ../a/.hg/hgrc
910 $ echo 'preoutgoing.fail = python:hooktests.failhook' >> ../a/.hg/hgrc
910 $ echo 'preoutgoing.fail = python:hooktests.failhook' >> ../a/.hg/hgrc
911 $ hg pull ../a
911 $ hg pull ../a
912 pulling from ../a
912 pulling from ../a
913 searching for changes
913 searching for changes
914 hook args:
914 hook args:
915 hooktype preoutgoing
915 hooktype preoutgoing
916 source pull
916 source pull
917 abort: preoutgoing.fail hook failed
917 abort: preoutgoing.fail hook failed
918 [40]
918 [40]
919
919
920 $ echo '[hooks]' > ../a/.hg/hgrc
920 $ echo '[hooks]' > ../a/.hg/hgrc
921 $ echo 'preoutgoing.uncallable = python:hooktests.uncallable' >> ../a/.hg/hgrc
921 $ echo 'preoutgoing.uncallable = python:hooktests.uncallable' >> ../a/.hg/hgrc
922 $ hg pull ../a
922 $ hg pull ../a
923 pulling from ../a
923 pulling from ../a
924 searching for changes
924 searching for changes
925 abort: preoutgoing.uncallable hook is invalid: "hooktests.uncallable" is not callable
925 abort: preoutgoing.uncallable hook is invalid: "hooktests.uncallable" is not callable
926 [255]
926 [255]
927
927
928 $ echo '[hooks]' > ../a/.hg/hgrc
928 $ echo '[hooks]' > ../a/.hg/hgrc
929 $ echo 'preoutgoing.nohook = python:hooktests.nohook' >> ../a/.hg/hgrc
929 $ echo 'preoutgoing.nohook = python:hooktests.nohook' >> ../a/.hg/hgrc
930 $ hg pull ../a
930 $ hg pull ../a
931 pulling from ../a
931 pulling from ../a
932 searching for changes
932 searching for changes
933 abort: preoutgoing.nohook hook is invalid: "hooktests.nohook" is not defined
933 abort: preoutgoing.nohook hook is invalid: "hooktests.nohook" is not defined
934 [255]
934 [255]
935
935
936 $ echo '[hooks]' > ../a/.hg/hgrc
936 $ echo '[hooks]' > ../a/.hg/hgrc
937 $ echo 'preoutgoing.nomodule = python:nomodule' >> ../a/.hg/hgrc
937 $ echo 'preoutgoing.nomodule = python:nomodule' >> ../a/.hg/hgrc
938 $ hg pull ../a
938 $ hg pull ../a
939 pulling from ../a
939 pulling from ../a
940 searching for changes
940 searching for changes
941 abort: preoutgoing.nomodule hook is invalid: "nomodule" not in a module
941 abort: preoutgoing.nomodule hook is invalid: "nomodule" not in a module
942 [255]
942 [255]
943
943
944 $ echo '[hooks]' > ../a/.hg/hgrc
944 $ echo '[hooks]' > ../a/.hg/hgrc
945 $ echo 'preoutgoing.badmodule = python:nomodule.nowhere' >> ../a/.hg/hgrc
945 $ echo 'preoutgoing.badmodule = python:nomodule.nowhere' >> ../a/.hg/hgrc
946 $ hg pull ../a
946 $ hg pull ../a
947 pulling from ../a
947 pulling from ../a
948 searching for changes
948 searching for changes
949 abort: preoutgoing.badmodule hook is invalid: import of "nomodule" failed
949 abort: preoutgoing.badmodule hook is invalid: import of "nomodule" failed
950 (run with --traceback for stack trace)
950 (run with --traceback for stack trace)
951 [255]
951 [255]
952
952
953 $ echo '[hooks]' > ../a/.hg/hgrc
953 $ echo '[hooks]' > ../a/.hg/hgrc
954 $ echo 'preoutgoing.unreachable = python:hooktests.container.unreachable' >> ../a/.hg/hgrc
954 $ echo 'preoutgoing.unreachable = python:hooktests.container.unreachable' >> ../a/.hg/hgrc
955 $ hg pull ../a
955 $ hg pull ../a
956 pulling from ../a
956 pulling from ../a
957 searching for changes
957 searching for changes
958 abort: preoutgoing.unreachable hook is invalid: import of "hooktests.container" failed
958 abort: preoutgoing.unreachable hook is invalid: import of "hooktests.container" failed
959 (run with --traceback for stack trace)
959 (run with --traceback for stack trace)
960 [255]
960 [255]
961
961
962 $ echo '[hooks]' > ../a/.hg/hgrc
962 $ echo '[hooks]' > ../a/.hg/hgrc
963 $ echo 'preoutgoing.syntaxerror = python:syntaxerror.syntaxerror' >> ../a/.hg/hgrc
963 $ echo 'preoutgoing.syntaxerror = python:syntaxerror.syntaxerror' >> ../a/.hg/hgrc
964 $ hg pull ../a
964 $ hg pull ../a
965 pulling from ../a
965 pulling from ../a
966 searching for changes
966 searching for changes
967 abort: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed
967 abort: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed
968 (run with --traceback for stack trace)
968 (run with --traceback for stack trace)
969 [255]
969 [255]
970
970
971 $ hg pull ../a --traceback 2>&1 | egrep 'pulling|searching|^exception|Traceback|SyntaxError|ImportError|ModuleNotFoundError|HookLoadError|abort'
971 $ hg pull ../a --traceback 2>&1 | egrep 'pulling|searching|^exception|Traceback|SyntaxError|ImportError|ModuleNotFoundError|HookLoadError|abort'
972 pulling from ../a
972 pulling from ../a
973 searching for changes
973 searching for changes
974 exception from first failed import attempt:
974 exception from first failed import attempt:
975 Traceback (most recent call last):
975 Traceback (most recent call last):
976 SyntaxError: * (glob)
976 SyntaxError: * (glob)
977 exception from second failed import attempt:
977 exception from second failed import attempt:
978 Traceback (most recent call last): (py3 !)
978 Traceback (most recent call last): (py3 !)
979 SyntaxError: * (glob) (py3 !)
979 SyntaxError: * (glob) (py3 !)
980 Traceback (most recent call last):
980 Traceback (most recent call last):
981 ImportError: No module named hgext_syntaxerror (no-py3 !)
981 ImportError: No module named hgext_syntaxerror (no-py3 !)
982 ImportError: No module named 'hgext_syntaxerror' (py3 no-py36 !)
982 ImportError: No module named 'hgext_syntaxerror' (py3 no-py36 !)
983 ModuleNotFoundError: No module named 'hgext_syntaxerror' (py36 !)
983 ModuleNotFoundError: No module named 'hgext_syntaxerror' (py36 !)
984 Traceback (most recent call last):
984 Traceback (most recent call last):
985 SyntaxError: * (glob) (py3 !)
985 SyntaxError: * (glob) (py3 !)
986 Traceback (most recent call last): (py3 !)
986 Traceback (most recent call last): (py3 !)
987 ImportError: No module named 'hgext_syntaxerror' (py3 no-py36 !)
987 ImportError: No module named 'hgext_syntaxerror' (py3 no-py36 !)
988 ModuleNotFoundError: No module named 'hgext_syntaxerror' (py36 !)
988 ModuleNotFoundError: No module named 'hgext_syntaxerror' (py36 !)
989 Traceback (most recent call last): (py3 !)
989 Traceback (most recent call last): (py3 !)
990 HookLoadError: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed (no-py3 !)
990 HookLoadError: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed (no-py3 !)
991 raise error.HookLoadError( (py38 !)
991 raise error.HookLoadError( (py38 !)
992 mercurial.error.HookLoadError: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed (py3 !)
992 mercurial.error.HookLoadError: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed (py3 !)
993 abort: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed
993 abort: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed
994
994
995 $ echo '[hooks]' > ../a/.hg/hgrc
995 $ echo '[hooks]' > ../a/.hg/hgrc
996 $ echo 'preoutgoing.pass = python:hooktests.passhook' >> ../a/.hg/hgrc
996 $ echo 'preoutgoing.pass = python:hooktests.passhook' >> ../a/.hg/hgrc
997 $ hg pull ../a
997 $ hg pull ../a
998 pulling from ../a
998 pulling from ../a
999 searching for changes
999 searching for changes
1000 hook args:
1000 hook args:
1001 hooktype preoutgoing
1001 hooktype preoutgoing
1002 source pull
1002 source pull
1003 adding changesets
1003 adding changesets
1004 adding manifests
1004 adding manifests
1005 adding file changes
1005 adding file changes
1006 adding remote bookmark quux
1006 adding remote bookmark quux
1007 added 1 changesets with 1 changes to 1 files
1007 added 1 changesets with 1 changes to 1 files
1008 new changesets 539e4b31b6dc
1008 new changesets 539e4b31b6dc
1009 (run 'hg update' to get a working copy)
1009 (run 'hg update' to get a working copy)
1010
1010
1011 post- python hooks that fail to *run* don't cause an abort
1011 post- python hooks that fail to *run* don't cause an abort
1012 $ rm ../a/.hg/hgrc
1012 $ rm ../a/.hg/hgrc
1013 $ echo '[hooks]' > .hg/hgrc
1013 $ echo '[hooks]' > .hg/hgrc
1014 $ echo 'post-pull.broken = python:hooktests.brokenhook' >> .hg/hgrc
1014 $ echo 'post-pull.broken = python:hooktests.brokenhook' >> .hg/hgrc
1015 $ hg pull ../a
1015 $ hg pull ../a
1016 pulling from ../a
1016 pulling from ../a
1017 searching for changes
1017 searching for changes
1018 no changes found
1018 no changes found
1019 error: post-pull.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
1019 error: post-pull.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
1020 (run with --traceback for stack trace)
1020 (run with --traceback for stack trace)
1021
1021
1022 but post- python hooks that fail to *load* do
1022 but post- python hooks that fail to *load* do
1023 $ echo '[hooks]' > .hg/hgrc
1023 $ echo '[hooks]' > .hg/hgrc
1024 $ echo 'post-pull.nomodule = python:nomodule' >> .hg/hgrc
1024 $ echo 'post-pull.nomodule = python:nomodule' >> .hg/hgrc
1025 $ hg pull ../a
1025 $ hg pull ../a
1026 pulling from ../a
1026 pulling from ../a
1027 searching for changes
1027 searching for changes
1028 no changes found
1028 no changes found
1029 abort: post-pull.nomodule hook is invalid: "nomodule" not in a module
1029 abort: post-pull.nomodule hook is invalid: "nomodule" not in a module
1030 [255]
1030 [255]
1031
1031
1032 $ echo '[hooks]' > .hg/hgrc
1032 $ echo '[hooks]' > .hg/hgrc
1033 $ echo 'post-pull.badmodule = python:nomodule.nowhere' >> .hg/hgrc
1033 $ echo 'post-pull.badmodule = python:nomodule.nowhere' >> .hg/hgrc
1034 $ hg pull ../a
1034 $ hg pull ../a
1035 pulling from ../a
1035 pulling from ../a
1036 searching for changes
1036 searching for changes
1037 no changes found
1037 no changes found
1038 abort: post-pull.badmodule hook is invalid: import of "nomodule" failed
1038 abort: post-pull.badmodule hook is invalid: import of "nomodule" failed
1039 (run with --traceback for stack trace)
1039 (run with --traceback for stack trace)
1040 [255]
1040 [255]
1041
1041
1042 $ echo '[hooks]' > .hg/hgrc
1042 $ echo '[hooks]' > .hg/hgrc
1043 $ echo 'post-pull.nohook = python:hooktests.nohook' >> .hg/hgrc
1043 $ echo 'post-pull.nohook = python:hooktests.nohook' >> .hg/hgrc
1044 $ hg pull ../a
1044 $ hg pull ../a
1045 pulling from ../a
1045 pulling from ../a
1046 searching for changes
1046 searching for changes
1047 no changes found
1047 no changes found
1048 abort: post-pull.nohook hook is invalid: "hooktests.nohook" is not defined
1048 abort: post-pull.nohook hook is invalid: "hooktests.nohook" is not defined
1049 [255]
1049 [255]
1050
1050
1051 make sure --traceback works
1051 make sure --traceback works
1052
1052
1053 $ echo '[hooks]' > .hg/hgrc
1053 $ echo '[hooks]' > .hg/hgrc
1054 $ echo 'commit.abort = python:hooktests.aborthook' >> .hg/hgrc
1054 $ echo 'commit.abort = python:hooktests.aborthook' >> .hg/hgrc
1055
1055
1056 $ echo aa > a
1056 $ echo aa > a
1057 $ hg --traceback commit -d '0 0' -ma 2>&1 | grep '^Traceback'
1057 $ hg --traceback commit -d '0 0' -ma 2>&1 | grep '^Traceback'
1058 Traceback (most recent call last):
1058 Traceback (most recent call last):
1059
1059
1060 $ cd ..
1060 $ cd ..
1061 $ hg init c
1061 $ hg init c
1062 $ cd c
1062 $ cd c
1063
1063
1064 $ cat > hookext.py <<EOF
1064 $ cat > hookext.py <<EOF
1065 > def autohook(ui, **args):
1065 > def autohook(ui, **args):
1066 > ui.write(b'Automatically installed hook\n')
1066 > ui.write(b'Automatically installed hook\n')
1067 >
1067 >
1068 > def reposetup(ui, repo):
1068 > def reposetup(ui, repo):
1069 > repo.ui.setconfig(b"hooks", b"commit.auto", autohook)
1069 > repo.ui.setconfig(b"hooks", b"commit.auto", autohook)
1070 > EOF
1070 > EOF
1071 $ echo '[extensions]' >> .hg/hgrc
1071 $ echo '[extensions]' >> .hg/hgrc
1072 $ echo 'hookext = hookext.py' >> .hg/hgrc
1072 $ echo 'hookext = hookext.py' >> .hg/hgrc
1073
1073
1074 $ touch foo
1074 $ touch foo
1075 $ hg add foo
1075 $ hg add foo
1076 $ hg ci -d '0 0' -m 'add foo'
1076 $ hg ci -d '0 0' -m 'add foo'
1077 Automatically installed hook
1077 Automatically installed hook
1078 $ echo >> foo
1078 $ echo >> foo
1079 $ hg ci --debug -d '0 0' -m 'change foo'
1079 $ hg ci --debug -d '0 0' -m 'change foo'
1080 committing files:
1080 committing files:
1081 foo
1081 foo
1082 committing manifest
1082 committing manifest
1083 committing changelog
1083 committing changelog
1084 updating the branch cache
1084 updating the branch cache
1085 committed changeset 1:52998019f6252a2b893452765fcb0a47351a5708
1085 committed changeset 1:52998019f6252a2b893452765fcb0a47351a5708
1086 calling hook commit.auto: hgext_hookext.autohook
1086 calling hook commit.auto: hgext_hookext.autohook
1087 Automatically installed hook
1087 Automatically installed hook
1088
1088
1089 $ hg showconfig hooks
1089 $ hg showconfig hooks
1090 hooks.commit.auto=<function autohook at *> (glob)
1090 hooks.commit.auto=<function autohook at *> (glob)
1091
1091
1092 test python hook configured with python:[file]:[hook] syntax
1092 test python hook configured with python:[file]:[hook] syntax
1093
1093
1094 $ cd ..
1094 $ cd ..
1095 $ mkdir d
1095 $ mkdir d
1096 $ cd d
1096 $ cd d
1097 $ hg init repo
1097 $ hg init repo
1098 $ mkdir hooks
1098 $ mkdir hooks
1099
1099
1100 $ cd hooks
1100 $ cd hooks
1101 $ cat > testhooks.py <<EOF
1101 $ cat > testhooks.py <<EOF
1102 > def testhook(ui, **args):
1102 > def testhook(ui, **args):
1103 > ui.write(b'hook works\n')
1103 > ui.write(b'hook works\n')
1104 > EOF
1104 > EOF
1105 $ echo '[hooks]' > ../repo/.hg/hgrc
1105 $ echo '[hooks]' > ../repo/.hg/hgrc
1106 $ echo "pre-commit.test = python:`pwd`/testhooks.py:testhook" >> ../repo/.hg/hgrc
1106 $ echo "pre-commit.test = python:`pwd`/testhooks.py:testhook" >> ../repo/.hg/hgrc
1107
1107
1108 $ cd ../repo
1108 $ cd ../repo
1109 $ hg commit -d '0 0'
1109 $ hg commit -d '0 0'
1110 hook works
1110 hook works
1111 nothing changed
1111 nothing changed
1112 [1]
1112 [1]
1113
1113
1114 $ echo '[hooks]' > .hg/hgrc
1114 $ echo '[hooks]' > .hg/hgrc
1115 $ echo "update.ne = python:`pwd`/nonexistent.py:testhook" >> .hg/hgrc
1115 $ echo "update.ne = python:`pwd`/nonexistent.py:testhook" >> .hg/hgrc
1116 $ echo "pre-identify.npmd = python:`pwd`/:no_python_module_dir" >> .hg/hgrc
1116 $ echo "pre-identify.npmd = python:`pwd`/:no_python_module_dir" >> .hg/hgrc
1117
1117
1118 $ hg up null
1118 $ hg up null
1119 loading update.ne hook failed:
1119 loading update.ne hook failed:
1120 abort: $ENOENT$: '$TESTTMP/d/repo/nonexistent.py'
1120 abort: $ENOENT$: '$TESTTMP/d/repo/nonexistent.py'
1121 [255]
1121 [255]
1122
1122
1123 $ hg id
1123 $ hg id
1124 loading pre-identify.npmd hook failed:
1124 loading pre-identify.npmd hook failed:
1125 abort: No module named repo (no-py3 !)
1125 abort: No module named repo (no-py3 !)
1126 abort: No module named 'repo' (py3 !)
1126 abort: No module named 'repo' (py3 !)
1127 [255]
1127 [255]
1128
1128
1129 $ cd ../../b
1129 $ cd ../../b
1130
1130
1131 make sure --traceback works on hook import failure
1131 make sure --traceback works on hook import failure
1132
1132
1133 $ cat > importfail.py <<EOF
1133 $ cat > importfail.py <<EOF
1134 > import somebogusmodule
1134 > import somebogusmodule
1135 > # dereference something in the module to force demandimport to load it
1135 > # dereference something in the module to force demandimport to load it
1136 > somebogusmodule.whatever
1136 > somebogusmodule.whatever
1137 > EOF
1137 > EOF
1138
1138
1139 $ echo '[hooks]' > .hg/hgrc
1139 $ echo '[hooks]' > .hg/hgrc
1140 $ echo 'precommit.importfail = python:importfail.whatever' >> .hg/hgrc
1140 $ echo 'precommit.importfail = python:importfail.whatever' >> .hg/hgrc
1141
1141
1142 $ echo a >> a
1142 $ echo a >> a
1143 $ hg --traceback commit -ma 2>&1 | egrep '^exception|ImportError|ModuleNotFoundError|Traceback|HookLoadError|abort'
1143 $ hg --traceback commit -ma 2>&1 | egrep '^exception|ImportError|ModuleNotFoundError|Traceback|HookLoadError|abort'
1144 exception from first failed import attempt:
1144 exception from first failed import attempt:
1145 Traceback (most recent call last):
1145 Traceback (most recent call last):
1146 ImportError: No module named somebogusmodule (no-py3 !)
1146 ImportError: No module named somebogusmodule (no-py3 !)
1147 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1147 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1148 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1148 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1149 exception from second failed import attempt:
1149 exception from second failed import attempt:
1150 Traceback (most recent call last): (py3 !)
1150 Traceback (most recent call last): (py3 !)
1151 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1151 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1152 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1152 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1153 Traceback (most recent call last): (py3 !)
1153 Traceback (most recent call last): (py3 !)
1154 ImportError: No module named 'hgext_importfail' (py3 no-py36 !)
1154 ImportError: No module named 'hgext_importfail' (py3 no-py36 !)
1155 ModuleNotFoundError: No module named 'hgext_importfail' (py36 !)
1155 ModuleNotFoundError: No module named 'hgext_importfail' (py36 !)
1156 Traceback (most recent call last): (py3 !)
1156 Traceback (most recent call last): (py3 !)
1157 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1157 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1158 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1158 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1159 Traceback (most recent call last):
1159 Traceback (most recent call last):
1160 ImportError: No module named hgext_importfail (no-py3 !)
1160 ImportError: No module named hgext_importfail (no-py3 !)
1161 ImportError: No module named 'hgext_importfail' (py3 no-py36 !)
1161 ImportError: No module named 'hgext_importfail' (py3 no-py36 !)
1162 ModuleNotFoundError: No module named 'hgext_importfail' (py36 !)
1162 ModuleNotFoundError: No module named 'hgext_importfail' (py36 !)
1163 Traceback (most recent call last):
1163 Traceback (most recent call last):
1164 HookLoadError: precommit.importfail hook is invalid: import of "importfail" failed (no-py3 !)
1164 HookLoadError: precommit.importfail hook is invalid: import of "importfail" failed (no-py3 !)
1165 raise error.HookLoadError( (py38 !)
1165 raise error.HookLoadError( (py38 !)
1166 mercurial.error.HookLoadError: precommit.importfail hook is invalid: import of "importfail" failed (py3 !)
1166 mercurial.error.HookLoadError: precommit.importfail hook is invalid: import of "importfail" failed (py3 !)
1167 abort: precommit.importfail hook is invalid: import of "importfail" failed
1167 abort: precommit.importfail hook is invalid: import of "importfail" failed
1168
1168
1169 Issue1827: Hooks Update & Commit not completely post operation
1169 Issue1827: Hooks Update & Commit not completely post operation
1170
1170
1171 commit and update hooks should run after command completion. The largefiles
1171 commit and update hooks should run after command completion. The largefiles
1172 use demonstrates a recursive wlock, showing the hook doesn't run until the
1172 use demonstrates a recursive wlock, showing the hook doesn't run until the
1173 final release (and dirstate flush).
1173 final release (and dirstate flush).
1174
1174
1175 $ echo '[hooks]' > .hg/hgrc
1175 $ echo '[hooks]' > .hg/hgrc
1176 $ echo 'commit = hg id' >> .hg/hgrc
1176 $ echo 'commit = hg id' >> .hg/hgrc
1177 $ echo 'update = hg id' >> .hg/hgrc
1177 $ echo 'update = hg id' >> .hg/hgrc
1178 $ echo bb > a
1178 $ echo bb > a
1179 $ hg ci -ma
1179 $ hg ci -ma
1180 223eafe2750c tip
1180 223eafe2750c tip
1181 $ hg up 0 --config extensions.largefiles=
1181 $ hg up 0 --config extensions.largefiles=
1182 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
1182 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
1183 cb9a9f314b8b
1183 cb9a9f314b8b
1184 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1184 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1185
1185
1186 make sure --verbose (and --quiet/--debug etc.) are propagated to the local ui
1186 make sure --verbose (and --quiet/--debug etc.) are propagated to the local ui
1187 that is passed to pre/post hooks
1187 that is passed to pre/post hooks
1188
1188
1189 $ echo '[hooks]' > .hg/hgrc
1189 $ echo '[hooks]' > .hg/hgrc
1190 $ echo 'pre-identify = python:hooktests.verbosehook' >> .hg/hgrc
1190 $ echo 'pre-identify = python:hooktests.verbosehook' >> .hg/hgrc
1191 $ hg id
1191 $ hg id
1192 cb9a9f314b8b
1192 cb9a9f314b8b
1193 $ hg id --verbose
1193 $ hg id --verbose
1194 calling hook pre-identify: hooktests.verbosehook
1194 calling hook pre-identify: hooktests.verbosehook
1195 verbose output from hook
1195 verbose output from hook
1196 cb9a9f314b8b
1196 cb9a9f314b8b
1197
1197
1198 Ensure hooks can be prioritized
1198 Ensure hooks can be prioritized
1199
1199
1200 $ echo '[hooks]' > .hg/hgrc
1200 $ echo '[hooks]' > .hg/hgrc
1201 $ echo 'pre-identify.a = python:hooktests.verbosehook' >> .hg/hgrc
1201 $ echo 'pre-identify.a = python:hooktests.verbosehook' >> .hg/hgrc
1202 $ echo 'pre-identify.b = python:hooktests.verbosehook' >> .hg/hgrc
1202 $ echo 'pre-identify.b = python:hooktests.verbosehook' >> .hg/hgrc
1203 $ echo 'priority.pre-identify.b = 1' >> .hg/hgrc
1203 $ echo 'priority.pre-identify.b = 1' >> .hg/hgrc
1204 $ echo 'pre-identify.c = python:hooktests.verbosehook' >> .hg/hgrc
1204 $ echo 'pre-identify.c = python:hooktests.verbosehook' >> .hg/hgrc
1205 $ hg id --verbose
1205 $ hg id --verbose
1206 calling hook pre-identify.b: hooktests.verbosehook
1206 calling hook pre-identify.b: hooktests.verbosehook
1207 verbose output from hook
1207 verbose output from hook
1208 calling hook pre-identify.a: hooktests.verbosehook
1208 calling hook pre-identify.a: hooktests.verbosehook
1209 verbose output from hook
1209 verbose output from hook
1210 calling hook pre-identify.c: hooktests.verbosehook
1210 calling hook pre-identify.c: hooktests.verbosehook
1211 verbose output from hook
1211 verbose output from hook
1212 cb9a9f314b8b
1212 cb9a9f314b8b
1213
1213
1214 new tags must be visible in pretxncommit (issue3210)
1214 new tags must be visible in pretxncommit (issue3210)
1215
1215
1216 $ echo 'pretxncommit.printtags = python:hooktests.printtags' >> .hg/hgrc
1216 $ echo 'pretxncommit.printtags = python:hooktests.printtags' >> .hg/hgrc
1217 $ hg tag -f foo
1217 $ hg tag -f foo
1218 [a, foo, tip]
1218 [a, foo, tip]
1219
1219
1220 post-init hooks must not crash (issue4983)
1220 post-init hooks must not crash (issue4983)
1221 This also creates the `to` repo for the next test block.
1221 This also creates the `to` repo for the next test block.
1222
1222
1223 $ cd ..
1223 $ cd ..
1224 $ cat << EOF >> hgrc-with-post-init-hook
1224 $ cat << EOF >> hgrc-with-post-init-hook
1225 > [hooks]
1225 > [hooks]
1226 > post-init = sh -c "printenv.py --line post-init"
1226 > post-init = sh -c "printenv.py --line post-init"
1227 > EOF
1227 > EOF
1228 $ HGRCPATH=hgrc-with-post-init-hook hg init to
1228 $ HGRCPATH=hgrc-with-post-init-hook hg init to
1229 post-init hook: HG_ARGS=init to
1229 post-init hook: HG_ARGS=init to
1230 HG_HOOKNAME=post-init
1230 HG_HOOKNAME=post-init
1231 HG_HOOKTYPE=post-init
1231 HG_HOOKTYPE=post-init
1232 HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''}
1232 HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''}
1233 HG_PATS=['to']
1233 HG_PATS=['to']
1234 HG_RESULT=0
1234 HG_RESULT=0
1235
1235
1236
1236
1237 new commits must be visible in pretxnchangegroup (issue3428)
1237 new commits must be visible in pretxnchangegroup (issue3428)
1238
1238
1239 $ echo '[hooks]' >> to/.hg/hgrc
1239 $ echo '[hooks]' >> to/.hg/hgrc
1240 $ echo 'prechangegroup = hg --traceback tip' >> to/.hg/hgrc
1240 $ echo 'prechangegroup = hg --traceback tip' >> to/.hg/hgrc
1241 $ echo 'pretxnchangegroup = hg --traceback tip' >> to/.hg/hgrc
1241 $ echo 'pretxnchangegroup = hg --traceback tip' >> to/.hg/hgrc
1242 $ echo a >> to/a
1242 $ echo a >> to/a
1243 $ hg --cwd to ci -Ama
1243 $ hg --cwd to ci -Ama
1244 adding a
1244 adding a
1245 $ hg clone to from
1245 $ hg clone to from
1246 updating to branch default
1246 updating to branch default
1247 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1247 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1248 $ echo aa >> from/a
1248 $ echo aa >> from/a
1249 $ hg --cwd from ci -mb
1249 $ hg --cwd from ci -mb
1250 $ hg --cwd from push
1250 $ hg --cwd from push
1251 pushing to $TESTTMP/to
1251 pushing to $TESTTMP/to
1252 searching for changes
1252 searching for changes
1253 changeset: 0:cb9a9f314b8b
1253 changeset: 0:cb9a9f314b8b
1254 tag: tip
1254 tag: tip
1255 user: test
1255 user: test
1256 date: Thu Jan 01 00:00:00 1970 +0000
1256 date: Thu Jan 01 00:00:00 1970 +0000
1257 summary: a
1257 summary: a
1258
1258
1259 adding changesets
1259 adding changesets
1260 adding manifests
1260 adding manifests
1261 adding file changes
1261 adding file changes
1262 changeset: 1:9836a07b9b9d
1262 changeset: 1:9836a07b9b9d
1263 tag: tip
1263 tag: tip
1264 user: test
1264 user: test
1265 date: Thu Jan 01 00:00:00 1970 +0000
1265 date: Thu Jan 01 00:00:00 1970 +0000
1266 summary: b
1266 summary: b
1267
1267
1268 added 1 changesets with 1 changes to 1 files
1268 added 1 changesets with 1 changes to 1 files
1269
1269
1270 pretxnclose hook failure should abort the transaction
1270 pretxnclose hook failure should abort the transaction
1271
1271
1272 $ hg init txnfailure
1272 $ hg init txnfailure
1273 $ cd txnfailure
1273 $ cd txnfailure
1274 $ touch a && hg commit -Aqm a
1274 $ touch a && hg commit -Aqm a
1275 $ cat >> .hg/hgrc <<EOF
1275 $ cat >> .hg/hgrc <<EOF
1276 > [hooks]
1276 > [hooks]
1277 > pretxnclose.error = exit 1
1277 > pretxnclose.error = exit 1
1278 > EOF
1278 > EOF
1279 $ hg strip -r 0 --config extensions.strip=
1279 $ hg strip -r 0 --config extensions.strip=
1280 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1280 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1281 saved backup bundle to * (glob)
1281 saved backup bundle to * (glob)
1282 transaction abort!
1282 transaction abort!
1283 rollback completed
1283 rollback completed
1284 strip failed, backup bundle stored in * (glob)
1284 strip failed, backup bundle stored in * (glob)
1285 abort: pretxnclose.error hook exited with status 1
1285 abort: pretxnclose.error hook exited with status 1
1286 [40]
1286 [40]
1287 $ hg recover
1287 $ hg recover
1288 no interrupted transaction available
1288 no interrupted transaction available
1289 [1]
1289 [1]
1290 $ cd ..
1290 $ cd ..
1291
1291
1292 check whether HG_PENDING makes pending changes only in related
1292 check whether HG_PENDING makes pending changes only in related
1293 repositories visible to an external hook.
1293 repositories visible to an external hook.
1294
1294
1295 (emulate a transaction running concurrently by copied
1295 (emulate a transaction running concurrently by copied
1296 .hg/store/00changelog.i.a in subsequent test)
1296 .hg/store/00changelog.i.a in subsequent test)
1297
1297
1298 $ cat > $TESTTMP/savepending.sh <<EOF
1298 $ cat > $TESTTMP/savepending.sh <<EOF
1299 > cp .hg/store/00changelog.i.a .hg/store/00changelog.i.a.saved
1299 > cp .hg/store/00changelog.i.a .hg/store/00changelog.i.a.saved
1300 > exit 1 # to avoid adding new revision for subsequent tests
1300 > exit 1 # to avoid adding new revision for subsequent tests
1301 > EOF
1301 > EOF
1302 $ cd a
1302 $ cd a
1303 $ hg tip -q
1303 $ hg tip -q
1304 4:539e4b31b6dc
1304 4:539e4b31b6dc
1305 $ hg --config hooks.pretxnclose="sh $TESTTMP/savepending.sh" commit -m "invisible"
1305 $ hg --config hooks.pretxnclose="sh $TESTTMP/savepending.sh" commit -m "invisible"
1306 transaction abort!
1306 transaction abort!
1307 rollback completed
1307 rollback completed
1308 abort: pretxnclose hook exited with status 1
1308 abort: pretxnclose hook exited with status 1
1309 [40]
1309 [40]
1310 $ cp .hg/store/00changelog.i.a.saved .hg/store/00changelog.i.a
1310 $ cp .hg/store/00changelog.i.a.saved .hg/store/00changelog.i.a
1311
1311
1312 (check (in)visibility of new changeset while transaction running in
1312 (check (in)visibility of new changeset while transaction running in
1313 repo)
1313 repo)
1314
1314
1315 $ cat > $TESTTMP/checkpending.sh <<EOF
1315 $ cat > $TESTTMP/checkpending.sh <<EOF
1316 > echo '@a'
1316 > echo '@a'
1317 > hg -R "$TESTTMP/a" tip -q
1317 > hg -R "$TESTTMP/a" tip -q
1318 > echo '@a/nested'
1318 > echo '@a/nested'
1319 > hg -R "$TESTTMP/a/nested" tip -q
1319 > hg -R "$TESTTMP/a/nested" tip -q
1320 > exit 1 # to avoid adding new revision for subsequent tests
1320 > exit 1 # to avoid adding new revision for subsequent tests
1321 > EOF
1321 > EOF
1322 $ hg init nested
1322 $ hg init nested
1323 $ cd nested
1323 $ cd nested
1324 $ echo a > a
1324 $ echo a > a
1325 $ hg add a
1325 $ hg add a
1326 $ hg --config hooks.pretxnclose="sh $TESTTMP/checkpending.sh" commit -m '#0'
1326 $ hg --config hooks.pretxnclose="sh $TESTTMP/checkpending.sh" commit -m '#0'
1327 @a
1327 @a
1328 4:539e4b31b6dc
1328 4:539e4b31b6dc
1329 @a/nested
1329 @a/nested
1330 0:bf5e395ced2c
1330 0:bf5e395ced2c
1331 transaction abort!
1331 transaction abort!
1332 rollback completed
1332 rollback completed
1333 abort: pretxnclose hook exited with status 1
1333 abort: pretxnclose hook exited with status 1
1334 [40]
1334 [40]
1335
1335
1336 Hook from untrusted hgrc are reported as failure
1336 Hook from untrusted hgrc are reported as failure
1337 ================================================
1337 ================================================
1338
1338
1339 $ cat << EOF > $TESTTMP/untrusted.py
1339 $ cat << EOF > $TESTTMP/untrusted.py
1340 > from mercurial import scmutil, util
1340 > from mercurial import scmutil, util
1341 > def uisetup(ui):
1341 > def uisetup(ui):
1342 > class untrustedui(ui.__class__):
1342 > class untrustedui(ui.__class__):
1343 > def _trusted(self, fp, f):
1343 > def _trusted(self, fp, f):
1344 > if util.normpath(fp.name).endswith(b'untrusted/.hg/hgrc'):
1344 > if util.normpath(fp.name).endswith(b'untrusted/.hg/hgrc'):
1345 > return False
1345 > return False
1346 > return super(untrustedui, self)._trusted(fp, f)
1346 > return super(untrustedui, self)._trusted(fp, f)
1347 > ui.__class__ = untrustedui
1347 > ui.__class__ = untrustedui
1348 > EOF
1348 > EOF
1349 $ cat << EOF >> $HGRCPATH
1349 $ cat << EOF >> $HGRCPATH
1350 > [extensions]
1350 > [extensions]
1351 > untrusted=$TESTTMP/untrusted.py
1351 > untrusted=$TESTTMP/untrusted.py
1352 > EOF
1352 > EOF
1353 $ hg init untrusted
1353 $ hg init untrusted
1354 $ cd untrusted
1354 $ cd untrusted
1355
1355
1356 Non-blocking hook
1356 Non-blocking hook
1357 -----------------
1357 -----------------
1358
1358
1359 $ cat << EOF >> .hg/hgrc
1359 $ cat << EOF >> .hg/hgrc
1360 > [hooks]
1360 > [hooks]
1361 > txnclose.testing=echo txnclose hook called
1361 > txnclose.testing=echo txnclose hook called
1362 > EOF
1362 > EOF
1363 $ touch a && hg commit -Aqm a
1363 $ touch a && hg commit -Aqm a
1364 warning: untrusted hook txnclose.testing not executed
1364 warning: untrusted hook txnclose.testing not executed
1365 $ hg log
1365 $ hg log
1366 changeset: 0:3903775176ed
1366 changeset: 0:3903775176ed
1367 tag: tip
1367 tag: tip
1368 user: test
1368 user: test
1369 date: Thu Jan 01 00:00:00 1970 +0000
1369 date: Thu Jan 01 00:00:00 1970 +0000
1370 summary: a
1370 summary: a
1371
1371
1372
1372
1373 Non-blocking hook
1373 Non-blocking hook
1374 -----------------
1374 -----------------
1375
1375
1376 $ cat << EOF >> .hg/hgrc
1376 $ cat << EOF >> .hg/hgrc
1377 > [hooks]
1377 > [hooks]
1378 > pretxnclose.testing=echo pre-txnclose hook called
1378 > pretxnclose.testing=echo pre-txnclose hook called
1379 > EOF
1379 > EOF
1380 $ touch b && hg commit -Aqm a
1380 $ touch b && hg commit -Aqm a
1381 transaction abort!
1381 transaction abort!
1382 rollback completed
1382 rollback completed
1383 abort: untrusted hook pretxnclose.testing not executed
1383 abort: untrusted hook pretxnclose.testing not executed
1384 (see 'hg help config.trusted')
1384 (see 'hg help config.trusted')
1385 [40]
1385 [40]
1386 $ hg log
1386 $ hg log
1387 changeset: 0:3903775176ed
1387 changeset: 0:3903775176ed
1388 tag: tip
1388 tag: tip
1389 user: test
1389 user: test
1390 date: Thu Jan 01 00:00:00 1970 +0000
1390 date: Thu Jan 01 00:00:00 1970 +0000
1391 summary: a
1391 summary: a
1392
1392
1393
1393
1394 unsetup the test
1394 unsetup the test
1395 ----------------
1395 ----------------
1396
1396
1397 # touch the file to unconfuse chg with a diffrent mtime
1397 # touch the file to unconfuse chg with a diffrent mtime
1398 $ sleep 1
1398 $ sleep 1
1399 $ touch $TESTTMP/untrusted.py
1399 $ touch $TESTTMP/untrusted.py
1400 $ cat << EOF >> $HGRCPATH
1400 $ cat << EOF >> $HGRCPATH
1401 > [extensions]
1401 > [extensions]
1402 > untrusted=!
1402 > untrusted=!
1403 > EOF
1403 > EOF
1404
1404
1405 HGPLAIN setting in hooks
1405 HGPLAIN setting in hooks
1406 ========================
1406 ========================
1407
1407
1408 $ cat << EOF >> .hg/hgrc
1408 $ cat << EOF >> .hg/hgrc
1409 > [hooks]
1409 > [hooks]
1410 > pre-version.testing-default=echo '### default ###' plain: \$HGPLAIN
1410 > pre-version.testing-default=echo '### default ###' plain: \${HGPLAIN:-'<unset>'}
1411 > pre-version.testing-yes=echo '### yes #######' plain: \${HGPLAIN:-'<unset>'}
1412 > pre-version.testing-yes:run-with-plain=yes
1413 > pre-version.testing-no=echo '### no ########' plain: \${HGPLAIN:-'<unset>'}
1414 > pre-version.testing-no:run-with-plain=no
1411 > EOF
1415 > EOF
1412
1416
1413 $ (unset HGPLAIN; hg version --quiet)
1417 $ (unset HGPLAIN; hg version --quiet)
1414 ### default ### plain: 1
1418 ### default ### plain: 1
1419 ### yes ####### plain: 1
1420 ### no ######## plain: <unset>
1415 Mercurial Distributed SCM (*) (glob)
1421 Mercurial Distributed SCM (*) (glob)
1416
1422
1417 $ HGPLAIN=1 hg version --quiet
1423 $ HGPLAIN=1 hg version --quiet
1418 ### default ### plain: 1
1424 ### default ### plain: 1
1425 ### yes ####### plain: 1
1426 ### no ######## plain: <unset>
1419 Mercurial Distributed SCM (*) (glob)
1427 Mercurial Distributed SCM (*) (glob)
General Comments 0
You need to be logged in to leave comments. Login now