##// END OF EJS Templates
configitems: add a new config option to control new filenode functionality...
Pulkit Goyal -
r46153:b9d6ab6c default
parent child Browse files
Show More
@@ -1,1588 +1,1593 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, configprefix + b'nodates', default=False,
136 section, configprefix + b'nodates', default=False,
137 )
137 )
138 coreconfigitem(
138 coreconfigitem(
139 section, configprefix + b'showfunc', default=False,
139 section, configprefix + b'showfunc', default=False,
140 )
140 )
141 coreconfigitem(
141 coreconfigitem(
142 section, configprefix + b'unified', default=None,
142 section, configprefix + b'unified', default=None,
143 )
143 )
144 coreconfigitem(
144 coreconfigitem(
145 section, configprefix + b'git', default=False,
145 section, configprefix + b'git', default=False,
146 )
146 )
147 coreconfigitem(
147 coreconfigitem(
148 section, configprefix + b'ignorews', default=False,
148 section, configprefix + b'ignorews', default=False,
149 )
149 )
150 coreconfigitem(
150 coreconfigitem(
151 section, configprefix + b'ignorewsamount', default=False,
151 section, configprefix + b'ignorewsamount', default=False,
152 )
152 )
153 coreconfigitem(
153 coreconfigitem(
154 section, configprefix + b'ignoreblanklines', default=False,
154 section, configprefix + b'ignoreblanklines', default=False,
155 )
155 )
156 coreconfigitem(
156 coreconfigitem(
157 section, configprefix + b'ignorewseol', default=False,
157 section, configprefix + b'ignorewseol', default=False,
158 )
158 )
159 coreconfigitem(
159 coreconfigitem(
160 section, configprefix + b'nobinary', default=False,
160 section, configprefix + b'nobinary', default=False,
161 )
161 )
162 coreconfigitem(
162 coreconfigitem(
163 section, configprefix + b'noprefix', default=False,
163 section, configprefix + b'noprefix', default=False,
164 )
164 )
165 coreconfigitem(
165 coreconfigitem(
166 section, configprefix + b'word-diff', default=False,
166 section, configprefix + b'word-diff', default=False,
167 )
167 )
168
168
169
169
170 coreconfigitem(
170 coreconfigitem(
171 b'alias', b'.*', default=dynamicdefault, generic=True,
171 b'alias', b'.*', default=dynamicdefault, generic=True,
172 )
172 )
173 coreconfigitem(
173 coreconfigitem(
174 b'auth', b'cookiefile', default=None,
174 b'auth', b'cookiefile', default=None,
175 )
175 )
176 _registerdiffopts(section=b'annotate')
176 _registerdiffopts(section=b'annotate')
177 # bookmarks.pushing: internal hack for discovery
177 # bookmarks.pushing: internal hack for discovery
178 coreconfigitem(
178 coreconfigitem(
179 b'bookmarks', b'pushing', default=list,
179 b'bookmarks', b'pushing', default=list,
180 )
180 )
181 # bundle.mainreporoot: internal hack for bundlerepo
181 # bundle.mainreporoot: internal hack for bundlerepo
182 coreconfigitem(
182 coreconfigitem(
183 b'bundle', b'mainreporoot', default=b'',
183 b'bundle', b'mainreporoot', default=b'',
184 )
184 )
185 coreconfigitem(
185 coreconfigitem(
186 b'censor', b'policy', default=b'abort', experimental=True,
186 b'censor', b'policy', default=b'abort', experimental=True,
187 )
187 )
188 coreconfigitem(
188 coreconfigitem(
189 b'chgserver', b'idletimeout', default=3600,
189 b'chgserver', b'idletimeout', default=3600,
190 )
190 )
191 coreconfigitem(
191 coreconfigitem(
192 b'chgserver', b'skiphash', default=False,
192 b'chgserver', b'skiphash', default=False,
193 )
193 )
194 coreconfigitem(
194 coreconfigitem(
195 b'cmdserver', b'log', default=None,
195 b'cmdserver', b'log', default=None,
196 )
196 )
197 coreconfigitem(
197 coreconfigitem(
198 b'cmdserver', b'max-log-files', default=7,
198 b'cmdserver', b'max-log-files', default=7,
199 )
199 )
200 coreconfigitem(
200 coreconfigitem(
201 b'cmdserver', b'max-log-size', default=b'1 MB',
201 b'cmdserver', b'max-log-size', default=b'1 MB',
202 )
202 )
203 coreconfigitem(
203 coreconfigitem(
204 b'cmdserver', b'max-repo-cache', default=0, experimental=True,
204 b'cmdserver', b'max-repo-cache', default=0, experimental=True,
205 )
205 )
206 coreconfigitem(
206 coreconfigitem(
207 b'cmdserver', b'message-encodings', default=list,
207 b'cmdserver', b'message-encodings', default=list,
208 )
208 )
209 coreconfigitem(
209 coreconfigitem(
210 b'cmdserver',
210 b'cmdserver',
211 b'track-log',
211 b'track-log',
212 default=lambda: [b'chgserver', b'cmdserver', b'repocache'],
212 default=lambda: [b'chgserver', b'cmdserver', b'repocache'],
213 )
213 )
214 coreconfigitem(
214 coreconfigitem(
215 b'cmdserver', b'shutdown-on-interrupt', default=True,
215 b'cmdserver', b'shutdown-on-interrupt', default=True,
216 )
216 )
217 coreconfigitem(
217 coreconfigitem(
218 b'color', b'.*', default=None, generic=True,
218 b'color', b'.*', default=None, generic=True,
219 )
219 )
220 coreconfigitem(
220 coreconfigitem(
221 b'color', b'mode', default=b'auto',
221 b'color', b'mode', default=b'auto',
222 )
222 )
223 coreconfigitem(
223 coreconfigitem(
224 b'color', b'pagermode', default=dynamicdefault,
224 b'color', b'pagermode', default=dynamicdefault,
225 )
225 )
226 _registerdiffopts(section=b'commands', configprefix=b'commit.interactive.')
226 _registerdiffopts(section=b'commands', configprefix=b'commit.interactive.')
227 coreconfigitem(
227 coreconfigitem(
228 b'commands', b'commit.post-status', default=False,
228 b'commands', b'commit.post-status', default=False,
229 )
229 )
230 coreconfigitem(
230 coreconfigitem(
231 b'commands', b'grep.all-files', default=False, experimental=True,
231 b'commands', b'grep.all-files', default=False, experimental=True,
232 )
232 )
233 coreconfigitem(
233 coreconfigitem(
234 b'commands', b'merge.require-rev', default=False,
234 b'commands', b'merge.require-rev', default=False,
235 )
235 )
236 coreconfigitem(
236 coreconfigitem(
237 b'commands', b'push.require-revs', default=False,
237 b'commands', b'push.require-revs', default=False,
238 )
238 )
239 coreconfigitem(
239 coreconfigitem(
240 b'commands', b'resolve.confirm', default=False,
240 b'commands', b'resolve.confirm', default=False,
241 )
241 )
242 coreconfigitem(
242 coreconfigitem(
243 b'commands', b'resolve.explicit-re-merge', default=False,
243 b'commands', b'resolve.explicit-re-merge', default=False,
244 )
244 )
245 coreconfigitem(
245 coreconfigitem(
246 b'commands', b'resolve.mark-check', default=b'none',
246 b'commands', b'resolve.mark-check', default=b'none',
247 )
247 )
248 _registerdiffopts(section=b'commands', configprefix=b'revert.interactive.')
248 _registerdiffopts(section=b'commands', configprefix=b'revert.interactive.')
249 coreconfigitem(
249 coreconfigitem(
250 b'commands', b'show.aliasprefix', default=list,
250 b'commands', b'show.aliasprefix', default=list,
251 )
251 )
252 coreconfigitem(
252 coreconfigitem(
253 b'commands', b'status.relative', default=False,
253 b'commands', b'status.relative', default=False,
254 )
254 )
255 coreconfigitem(
255 coreconfigitem(
256 b'commands', b'status.skipstates', default=[], experimental=True,
256 b'commands', b'status.skipstates', default=[], experimental=True,
257 )
257 )
258 coreconfigitem(
258 coreconfigitem(
259 b'commands', b'status.terse', default=b'',
259 b'commands', b'status.terse', default=b'',
260 )
260 )
261 coreconfigitem(
261 coreconfigitem(
262 b'commands', b'status.verbose', default=False,
262 b'commands', b'status.verbose', default=False,
263 )
263 )
264 coreconfigitem(
264 coreconfigitem(
265 b'commands', b'update.check', default=None,
265 b'commands', b'update.check', default=None,
266 )
266 )
267 coreconfigitem(
267 coreconfigitem(
268 b'commands', b'update.requiredest', default=False,
268 b'commands', b'update.requiredest', default=False,
269 )
269 )
270 coreconfigitem(
270 coreconfigitem(
271 b'committemplate', b'.*', default=None, generic=True,
271 b'committemplate', b'.*', default=None, generic=True,
272 )
272 )
273 coreconfigitem(
273 coreconfigitem(
274 b'convert', b'bzr.saverev', default=True,
274 b'convert', b'bzr.saverev', default=True,
275 )
275 )
276 coreconfigitem(
276 coreconfigitem(
277 b'convert', b'cvsps.cache', default=True,
277 b'convert', b'cvsps.cache', default=True,
278 )
278 )
279 coreconfigitem(
279 coreconfigitem(
280 b'convert', b'cvsps.fuzz', default=60,
280 b'convert', b'cvsps.fuzz', default=60,
281 )
281 )
282 coreconfigitem(
282 coreconfigitem(
283 b'convert', b'cvsps.logencoding', default=None,
283 b'convert', b'cvsps.logencoding', default=None,
284 )
284 )
285 coreconfigitem(
285 coreconfigitem(
286 b'convert', b'cvsps.mergefrom', default=None,
286 b'convert', b'cvsps.mergefrom', default=None,
287 )
287 )
288 coreconfigitem(
288 coreconfigitem(
289 b'convert', b'cvsps.mergeto', default=None,
289 b'convert', b'cvsps.mergeto', default=None,
290 )
290 )
291 coreconfigitem(
291 coreconfigitem(
292 b'convert', b'git.committeractions', default=lambda: [b'messagedifferent'],
292 b'convert', b'git.committeractions', default=lambda: [b'messagedifferent'],
293 )
293 )
294 coreconfigitem(
294 coreconfigitem(
295 b'convert', b'git.extrakeys', default=list,
295 b'convert', b'git.extrakeys', default=list,
296 )
296 )
297 coreconfigitem(
297 coreconfigitem(
298 b'convert', b'git.findcopiesharder', default=False,
298 b'convert', b'git.findcopiesharder', default=False,
299 )
299 )
300 coreconfigitem(
300 coreconfigitem(
301 b'convert', b'git.remoteprefix', default=b'remote',
301 b'convert', b'git.remoteprefix', default=b'remote',
302 )
302 )
303 coreconfigitem(
303 coreconfigitem(
304 b'convert', b'git.renamelimit', default=400,
304 b'convert', b'git.renamelimit', default=400,
305 )
305 )
306 coreconfigitem(
306 coreconfigitem(
307 b'convert', b'git.saverev', default=True,
307 b'convert', b'git.saverev', default=True,
308 )
308 )
309 coreconfigitem(
309 coreconfigitem(
310 b'convert', b'git.similarity', default=50,
310 b'convert', b'git.similarity', default=50,
311 )
311 )
312 coreconfigitem(
312 coreconfigitem(
313 b'convert', b'git.skipsubmodules', default=False,
313 b'convert', b'git.skipsubmodules', default=False,
314 )
314 )
315 coreconfigitem(
315 coreconfigitem(
316 b'convert', b'hg.clonebranches', default=False,
316 b'convert', b'hg.clonebranches', default=False,
317 )
317 )
318 coreconfigitem(
318 coreconfigitem(
319 b'convert', b'hg.ignoreerrors', default=False,
319 b'convert', b'hg.ignoreerrors', default=False,
320 )
320 )
321 coreconfigitem(
321 coreconfigitem(
322 b'convert', b'hg.preserve-hash', default=False,
322 b'convert', b'hg.preserve-hash', default=False,
323 )
323 )
324 coreconfigitem(
324 coreconfigitem(
325 b'convert', b'hg.revs', default=None,
325 b'convert', b'hg.revs', default=None,
326 )
326 )
327 coreconfigitem(
327 coreconfigitem(
328 b'convert', b'hg.saverev', default=False,
328 b'convert', b'hg.saverev', default=False,
329 )
329 )
330 coreconfigitem(
330 coreconfigitem(
331 b'convert', b'hg.sourcename', default=None,
331 b'convert', b'hg.sourcename', default=None,
332 )
332 )
333 coreconfigitem(
333 coreconfigitem(
334 b'convert', b'hg.startrev', default=None,
334 b'convert', b'hg.startrev', default=None,
335 )
335 )
336 coreconfigitem(
336 coreconfigitem(
337 b'convert', b'hg.tagsbranch', default=b'default',
337 b'convert', b'hg.tagsbranch', default=b'default',
338 )
338 )
339 coreconfigitem(
339 coreconfigitem(
340 b'convert', b'hg.usebranchnames', default=True,
340 b'convert', b'hg.usebranchnames', default=True,
341 )
341 )
342 coreconfigitem(
342 coreconfigitem(
343 b'convert', b'ignoreancestorcheck', default=False, experimental=True,
343 b'convert', b'ignoreancestorcheck', default=False, experimental=True,
344 )
344 )
345 coreconfigitem(
345 coreconfigitem(
346 b'convert', b'localtimezone', default=False,
346 b'convert', b'localtimezone', default=False,
347 )
347 )
348 coreconfigitem(
348 coreconfigitem(
349 b'convert', b'p4.encoding', default=dynamicdefault,
349 b'convert', b'p4.encoding', default=dynamicdefault,
350 )
350 )
351 coreconfigitem(
351 coreconfigitem(
352 b'convert', b'p4.startrev', default=0,
352 b'convert', b'p4.startrev', default=0,
353 )
353 )
354 coreconfigitem(
354 coreconfigitem(
355 b'convert', b'skiptags', default=False,
355 b'convert', b'skiptags', default=False,
356 )
356 )
357 coreconfigitem(
357 coreconfigitem(
358 b'convert', b'svn.debugsvnlog', default=True,
358 b'convert', b'svn.debugsvnlog', default=True,
359 )
359 )
360 coreconfigitem(
360 coreconfigitem(
361 b'convert', b'svn.trunk', default=None,
361 b'convert', b'svn.trunk', default=None,
362 )
362 )
363 coreconfigitem(
363 coreconfigitem(
364 b'convert', b'svn.tags', default=None,
364 b'convert', b'svn.tags', default=None,
365 )
365 )
366 coreconfigitem(
366 coreconfigitem(
367 b'convert', b'svn.branches', default=None,
367 b'convert', b'svn.branches', default=None,
368 )
368 )
369 coreconfigitem(
369 coreconfigitem(
370 b'convert', b'svn.startrev', default=0,
370 b'convert', b'svn.startrev', default=0,
371 )
371 )
372 coreconfigitem(
372 coreconfigitem(
373 b'debug', b'dirstate.delaywrite', default=0,
373 b'debug', b'dirstate.delaywrite', default=0,
374 )
374 )
375 coreconfigitem(
375 coreconfigitem(
376 b'defaults', b'.*', default=None, generic=True,
376 b'defaults', b'.*', default=None, generic=True,
377 )
377 )
378 coreconfigitem(
378 coreconfigitem(
379 b'devel', b'all-warnings', default=False,
379 b'devel', b'all-warnings', default=False,
380 )
380 )
381 coreconfigitem(
381 coreconfigitem(
382 b'devel', b'bundle2.debug', default=False,
382 b'devel', b'bundle2.debug', default=False,
383 )
383 )
384 coreconfigitem(
384 coreconfigitem(
385 b'devel', b'bundle.delta', default=b'',
385 b'devel', b'bundle.delta', default=b'',
386 )
386 )
387 coreconfigitem(
387 coreconfigitem(
388 b'devel', b'cache-vfs', default=None,
388 b'devel', b'cache-vfs', default=None,
389 )
389 )
390 coreconfigitem(
390 coreconfigitem(
391 b'devel', b'check-locks', default=False,
391 b'devel', b'check-locks', default=False,
392 )
392 )
393 coreconfigitem(
393 coreconfigitem(
394 b'devel', b'check-relroot', default=False,
394 b'devel', b'check-relroot', default=False,
395 )
395 )
396 coreconfigitem(
396 coreconfigitem(
397 b'devel', b'default-date', default=None,
397 b'devel', b'default-date', default=None,
398 )
398 )
399 coreconfigitem(
399 coreconfigitem(
400 b'devel', b'deprec-warn', default=False,
400 b'devel', b'deprec-warn', default=False,
401 )
401 )
402 coreconfigitem(
402 coreconfigitem(
403 b'devel', b'disableloaddefaultcerts', default=False,
403 b'devel', b'disableloaddefaultcerts', default=False,
404 )
404 )
405 coreconfigitem(
405 coreconfigitem(
406 b'devel', b'warn-empty-changegroup', default=False,
406 b'devel', b'warn-empty-changegroup', default=False,
407 )
407 )
408 coreconfigitem(
408 coreconfigitem(
409 b'devel', b'legacy.exchange', default=list,
409 b'devel', b'legacy.exchange', default=list,
410 )
410 )
411 coreconfigitem(
411 coreconfigitem(
412 b'devel', b'persistent-nodemap', default=False,
412 b'devel', b'persistent-nodemap', default=False,
413 )
413 )
414 coreconfigitem(
414 coreconfigitem(
415 b'devel', b'servercafile', default=b'',
415 b'devel', b'servercafile', default=b'',
416 )
416 )
417 coreconfigitem(
417 coreconfigitem(
418 b'devel', b'serverexactprotocol', default=b'',
418 b'devel', b'serverexactprotocol', default=b'',
419 )
419 )
420 coreconfigitem(
420 coreconfigitem(
421 b'devel', b'serverrequirecert', default=False,
421 b'devel', b'serverrequirecert', default=False,
422 )
422 )
423 coreconfigitem(
423 coreconfigitem(
424 b'devel', b'strip-obsmarkers', default=True,
424 b'devel', b'strip-obsmarkers', default=True,
425 )
425 )
426 coreconfigitem(
426 coreconfigitem(
427 b'devel', b'warn-config', default=None,
427 b'devel', b'warn-config', default=None,
428 )
428 )
429 coreconfigitem(
429 coreconfigitem(
430 b'devel', b'warn-config-default', default=None,
430 b'devel', b'warn-config-default', default=None,
431 )
431 )
432 coreconfigitem(
432 coreconfigitem(
433 b'devel', b'user.obsmarker', default=None,
433 b'devel', b'user.obsmarker', default=None,
434 )
434 )
435 coreconfigitem(
435 coreconfigitem(
436 b'devel', b'warn-config-unknown', default=None,
436 b'devel', b'warn-config-unknown', default=None,
437 )
437 )
438 coreconfigitem(
438 coreconfigitem(
439 b'devel', b'debug.copies', default=False,
439 b'devel', b'debug.copies', default=False,
440 )
440 )
441 coreconfigitem(
441 coreconfigitem(
442 b'devel', b'debug.extensions', default=False,
442 b'devel', b'debug.extensions', default=False,
443 )
443 )
444 coreconfigitem(
444 coreconfigitem(
445 b'devel', b'debug.repo-filters', default=False,
445 b'devel', b'debug.repo-filters', default=False,
446 )
446 )
447 coreconfigitem(
447 coreconfigitem(
448 b'devel', b'debug.peer-request', default=False,
448 b'devel', b'debug.peer-request', default=False,
449 )
449 )
450 coreconfigitem(
450 coreconfigitem(
451 b'devel', b'discovery.randomize', default=True,
451 b'devel', b'discovery.randomize', default=True,
452 )
452 )
453 _registerdiffopts(section=b'diff')
453 _registerdiffopts(section=b'diff')
454 coreconfigitem(
454 coreconfigitem(
455 b'email', b'bcc', default=None,
455 b'email', b'bcc', default=None,
456 )
456 )
457 coreconfigitem(
457 coreconfigitem(
458 b'email', b'cc', default=None,
458 b'email', b'cc', default=None,
459 )
459 )
460 coreconfigitem(
460 coreconfigitem(
461 b'email', b'charsets', default=list,
461 b'email', b'charsets', default=list,
462 )
462 )
463 coreconfigitem(
463 coreconfigitem(
464 b'email', b'from', default=None,
464 b'email', b'from', default=None,
465 )
465 )
466 coreconfigitem(
466 coreconfigitem(
467 b'email', b'method', default=b'smtp',
467 b'email', b'method', default=b'smtp',
468 )
468 )
469 coreconfigitem(
469 coreconfigitem(
470 b'email', b'reply-to', default=None,
470 b'email', b'reply-to', default=None,
471 )
471 )
472 coreconfigitem(
472 coreconfigitem(
473 b'email', b'to', default=None,
473 b'email', b'to', default=None,
474 )
474 )
475 coreconfigitem(
475 coreconfigitem(
476 b'experimental', b'archivemetatemplate', default=dynamicdefault,
476 b'experimental', b'archivemetatemplate', default=dynamicdefault,
477 )
477 )
478 coreconfigitem(
478 coreconfigitem(
479 b'experimental', b'auto-publish', default=b'publish',
479 b'experimental', b'auto-publish', default=b'publish',
480 )
480 )
481 coreconfigitem(
481 coreconfigitem(
482 b'experimental', b'bundle-phases', default=False,
482 b'experimental', b'bundle-phases', default=False,
483 )
483 )
484 coreconfigitem(
484 coreconfigitem(
485 b'experimental', b'bundle2-advertise', default=True,
485 b'experimental', b'bundle2-advertise', default=True,
486 )
486 )
487 coreconfigitem(
487 coreconfigitem(
488 b'experimental', b'bundle2-output-capture', default=False,
488 b'experimental', b'bundle2-output-capture', default=False,
489 )
489 )
490 coreconfigitem(
490 coreconfigitem(
491 b'experimental', b'bundle2.pushback', default=False,
491 b'experimental', b'bundle2.pushback', default=False,
492 )
492 )
493 coreconfigitem(
493 coreconfigitem(
494 b'experimental', b'bundle2lazylocking', default=False,
494 b'experimental', b'bundle2lazylocking', default=False,
495 )
495 )
496 coreconfigitem(
496 coreconfigitem(
497 b'experimental', b'bundlecomplevel', default=None,
497 b'experimental', b'bundlecomplevel', default=None,
498 )
498 )
499 coreconfigitem(
499 coreconfigitem(
500 b'experimental', b'bundlecomplevel.bzip2', default=None,
500 b'experimental', b'bundlecomplevel.bzip2', default=None,
501 )
501 )
502 coreconfigitem(
502 coreconfigitem(
503 b'experimental', b'bundlecomplevel.gzip', default=None,
503 b'experimental', b'bundlecomplevel.gzip', default=None,
504 )
504 )
505 coreconfigitem(
505 coreconfigitem(
506 b'experimental', b'bundlecomplevel.none', default=None,
506 b'experimental', b'bundlecomplevel.none', default=None,
507 )
507 )
508 coreconfigitem(
508 coreconfigitem(
509 b'experimental', b'bundlecomplevel.zstd', default=None,
509 b'experimental', b'bundlecomplevel.zstd', default=None,
510 )
510 )
511 coreconfigitem(
511 coreconfigitem(
512 b'experimental', b'changegroup3', default=False,
512 b'experimental', b'changegroup3', default=False,
513 )
513 )
514 coreconfigitem(
514 coreconfigitem(
515 b'experimental', b'cleanup-as-archived', default=False,
515 b'experimental', b'cleanup-as-archived', default=False,
516 )
516 )
517 coreconfigitem(
517 coreconfigitem(
518 b'experimental', b'clientcompressionengines', default=list,
518 b'experimental', b'clientcompressionengines', default=list,
519 )
519 )
520 coreconfigitem(
520 coreconfigitem(
521 b'experimental', b'copytrace', default=b'on',
521 b'experimental', b'copytrace', default=b'on',
522 )
522 )
523 coreconfigitem(
523 coreconfigitem(
524 b'experimental', b'copytrace.movecandidateslimit', default=100,
524 b'experimental', b'copytrace.movecandidateslimit', default=100,
525 )
525 )
526 coreconfigitem(
526 coreconfigitem(
527 b'experimental', b'copytrace.sourcecommitlimit', default=100,
527 b'experimental', b'copytrace.sourcecommitlimit', default=100,
528 )
528 )
529 coreconfigitem(
529 coreconfigitem(
530 b'experimental', b'copies.read-from', default=b"filelog-only",
530 b'experimental', b'copies.read-from', default=b"filelog-only",
531 )
531 )
532 coreconfigitem(
532 coreconfigitem(
533 b'experimental', b'copies.write-to', default=b'filelog-only',
533 b'experimental', b'copies.write-to', default=b'filelog-only',
534 )
534 )
535 coreconfigitem(
535 coreconfigitem(
536 b'experimental', b'crecordtest', default=None,
536 b'experimental', b'crecordtest', default=None,
537 )
537 )
538 coreconfigitem(
538 coreconfigitem(
539 b'experimental', b'directaccess', default=False,
539 b'experimental', b'directaccess', default=False,
540 )
540 )
541 coreconfigitem(
541 coreconfigitem(
542 b'experimental', b'directaccess.revnums', default=False,
542 b'experimental', b'directaccess.revnums', default=False,
543 )
543 )
544 coreconfigitem(
544 coreconfigitem(
545 b'experimental', b'editortmpinhg', default=False,
545 b'experimental', b'editortmpinhg', default=False,
546 )
546 )
547 coreconfigitem(
547 coreconfigitem(
548 b'experimental', b'evolution', default=list,
548 b'experimental', b'evolution', default=list,
549 )
549 )
550 coreconfigitem(
550 coreconfigitem(
551 b'experimental',
551 b'experimental',
552 b'evolution.allowdivergence',
552 b'evolution.allowdivergence',
553 default=False,
553 default=False,
554 alias=[(b'experimental', b'allowdivergence')],
554 alias=[(b'experimental', b'allowdivergence')],
555 )
555 )
556 coreconfigitem(
556 coreconfigitem(
557 b'experimental', b'evolution.allowunstable', default=None,
557 b'experimental', b'evolution.allowunstable', default=None,
558 )
558 )
559 coreconfigitem(
559 coreconfigitem(
560 b'experimental', b'evolution.createmarkers', default=None,
560 b'experimental', b'evolution.createmarkers', default=None,
561 )
561 )
562 coreconfigitem(
562 coreconfigitem(
563 b'experimental',
563 b'experimental',
564 b'evolution.effect-flags',
564 b'evolution.effect-flags',
565 default=True,
565 default=True,
566 alias=[(b'experimental', b'effect-flags')],
566 alias=[(b'experimental', b'effect-flags')],
567 )
567 )
568 coreconfigitem(
568 coreconfigitem(
569 b'experimental', b'evolution.exchange', default=None,
569 b'experimental', b'evolution.exchange', default=None,
570 )
570 )
571 coreconfigitem(
571 coreconfigitem(
572 b'experimental', b'evolution.bundle-obsmarker', default=False,
572 b'experimental', b'evolution.bundle-obsmarker', default=False,
573 )
573 )
574 coreconfigitem(
574 coreconfigitem(
575 b'experimental', b'log.topo', default=False,
575 b'experimental', b'log.topo', default=False,
576 )
576 )
577 coreconfigitem(
577 coreconfigitem(
578 b'experimental', b'evolution.report-instabilities', default=True,
578 b'experimental', b'evolution.report-instabilities', default=True,
579 )
579 )
580 coreconfigitem(
580 coreconfigitem(
581 b'experimental', b'evolution.track-operation', default=True,
581 b'experimental', b'evolution.track-operation', default=True,
582 )
582 )
583 # repo-level config to exclude a revset visibility
583 # repo-level config to exclude a revset visibility
584 #
584 #
585 # The target use case is to use `share` to expose different subset of the same
585 # The target use case is to use `share` to expose different subset of the same
586 # repository, especially server side. See also `server.view`.
586 # repository, especially server side. See also `server.view`.
587 coreconfigitem(
587 coreconfigitem(
588 b'experimental', b'extra-filter-revs', default=None,
588 b'experimental', b'extra-filter-revs', default=None,
589 )
589 )
590 coreconfigitem(
590 coreconfigitem(
591 b'experimental', b'maxdeltachainspan', default=-1,
591 b'experimental', b'maxdeltachainspan', default=-1,
592 )
592 )
593 # tracks files which were undeleted (merge might delete them but we explicitly
594 # kept/undeleted them) and creates new filenodes for them
595 coreconfigitem(
596 b'experimental', b'merge-track-salvaged', default=False,
597 )
593 coreconfigitem(
598 coreconfigitem(
594 b'experimental', b'mergetempdirprefix', default=None,
599 b'experimental', b'mergetempdirprefix', default=None,
595 )
600 )
596 coreconfigitem(
601 coreconfigitem(
597 b'experimental', b'mmapindexthreshold', default=None,
602 b'experimental', b'mmapindexthreshold', default=None,
598 )
603 )
599 coreconfigitem(
604 coreconfigitem(
600 b'experimental', b'narrow', default=False,
605 b'experimental', b'narrow', default=False,
601 )
606 )
602 coreconfigitem(
607 coreconfigitem(
603 b'experimental', b'nonnormalparanoidcheck', default=False,
608 b'experimental', b'nonnormalparanoidcheck', default=False,
604 )
609 )
605 coreconfigitem(
610 coreconfigitem(
606 b'experimental', b'exportableenviron', default=list,
611 b'experimental', b'exportableenviron', default=list,
607 )
612 )
608 coreconfigitem(
613 coreconfigitem(
609 b'experimental', b'extendedheader.index', default=None,
614 b'experimental', b'extendedheader.index', default=None,
610 )
615 )
611 coreconfigitem(
616 coreconfigitem(
612 b'experimental', b'extendedheader.similarity', default=False,
617 b'experimental', b'extendedheader.similarity', default=False,
613 )
618 )
614 coreconfigitem(
619 coreconfigitem(
615 b'experimental', b'graphshorten', default=False,
620 b'experimental', b'graphshorten', default=False,
616 )
621 )
617 coreconfigitem(
622 coreconfigitem(
618 b'experimental', b'graphstyle.parent', default=dynamicdefault,
623 b'experimental', b'graphstyle.parent', default=dynamicdefault,
619 )
624 )
620 coreconfigitem(
625 coreconfigitem(
621 b'experimental', b'graphstyle.missing', default=dynamicdefault,
626 b'experimental', b'graphstyle.missing', default=dynamicdefault,
622 )
627 )
623 coreconfigitem(
628 coreconfigitem(
624 b'experimental', b'graphstyle.grandparent', default=dynamicdefault,
629 b'experimental', b'graphstyle.grandparent', default=dynamicdefault,
625 )
630 )
626 coreconfigitem(
631 coreconfigitem(
627 b'experimental', b'hook-track-tags', default=False,
632 b'experimental', b'hook-track-tags', default=False,
628 )
633 )
629 coreconfigitem(
634 coreconfigitem(
630 b'experimental', b'httppeer.advertise-v2', default=False,
635 b'experimental', b'httppeer.advertise-v2', default=False,
631 )
636 )
632 coreconfigitem(
637 coreconfigitem(
633 b'experimental', b'httppeer.v2-encoder-order', default=None,
638 b'experimental', b'httppeer.v2-encoder-order', default=None,
634 )
639 )
635 coreconfigitem(
640 coreconfigitem(
636 b'experimental', b'httppostargs', default=False,
641 b'experimental', b'httppostargs', default=False,
637 )
642 )
638 coreconfigitem(b'experimental', b'nointerrupt', default=False)
643 coreconfigitem(b'experimental', b'nointerrupt', default=False)
639 coreconfigitem(b'experimental', b'nointerrupt-interactiveonly', default=True)
644 coreconfigitem(b'experimental', b'nointerrupt-interactiveonly', default=True)
640
645
641 coreconfigitem(
646 coreconfigitem(
642 b'experimental', b'obsmarkers-exchange-debug', default=False,
647 b'experimental', b'obsmarkers-exchange-debug', default=False,
643 )
648 )
644 coreconfigitem(
649 coreconfigitem(
645 b'experimental', b'remotenames', default=False,
650 b'experimental', b'remotenames', default=False,
646 )
651 )
647 coreconfigitem(
652 coreconfigitem(
648 b'experimental', b'removeemptydirs', default=True,
653 b'experimental', b'removeemptydirs', default=True,
649 )
654 )
650 coreconfigitem(
655 coreconfigitem(
651 b'experimental', b'revert.interactive.select-to-keep', default=False,
656 b'experimental', b'revert.interactive.select-to-keep', default=False,
652 )
657 )
653 coreconfigitem(
658 coreconfigitem(
654 b'experimental', b'revisions.prefixhexnode', default=False,
659 b'experimental', b'revisions.prefixhexnode', default=False,
655 )
660 )
656 coreconfigitem(
661 coreconfigitem(
657 b'experimental', b'revlogv2', default=None,
662 b'experimental', b'revlogv2', default=None,
658 )
663 )
659 coreconfigitem(
664 coreconfigitem(
660 b'experimental', b'revisions.disambiguatewithin', default=None,
665 b'experimental', b'revisions.disambiguatewithin', default=None,
661 )
666 )
662 coreconfigitem(
667 coreconfigitem(
663 b'experimental', b'rust.index', default=False,
668 b'experimental', b'rust.index', default=False,
664 )
669 )
665 coreconfigitem(
670 coreconfigitem(
666 b'experimental', b'server.filesdata.recommended-batch-size', default=50000,
671 b'experimental', b'server.filesdata.recommended-batch-size', default=50000,
667 )
672 )
668 coreconfigitem(
673 coreconfigitem(
669 b'experimental',
674 b'experimental',
670 b'server.manifestdata.recommended-batch-size',
675 b'server.manifestdata.recommended-batch-size',
671 default=100000,
676 default=100000,
672 )
677 )
673 coreconfigitem(
678 coreconfigitem(
674 b'experimental', b'server.stream-narrow-clones', default=False,
679 b'experimental', b'server.stream-narrow-clones', default=False,
675 )
680 )
676 coreconfigitem(
681 coreconfigitem(
677 b'experimental', b'single-head-per-branch', default=False,
682 b'experimental', b'single-head-per-branch', default=False,
678 )
683 )
679 coreconfigitem(
684 coreconfigitem(
680 b'experimental',
685 b'experimental',
681 b'single-head-per-branch:account-closed-heads',
686 b'single-head-per-branch:account-closed-heads',
682 default=False,
687 default=False,
683 )
688 )
684 coreconfigitem(
689 coreconfigitem(
685 b'experimental', b'sshserver.support-v2', default=False,
690 b'experimental', b'sshserver.support-v2', default=False,
686 )
691 )
687 coreconfigitem(
692 coreconfigitem(
688 b'experimental', b'sparse-read', default=False,
693 b'experimental', b'sparse-read', default=False,
689 )
694 )
690 coreconfigitem(
695 coreconfigitem(
691 b'experimental', b'sparse-read.density-threshold', default=0.50,
696 b'experimental', b'sparse-read.density-threshold', default=0.50,
692 )
697 )
693 coreconfigitem(
698 coreconfigitem(
694 b'experimental', b'sparse-read.min-gap-size', default=b'65K',
699 b'experimental', b'sparse-read.min-gap-size', default=b'65K',
695 )
700 )
696 coreconfigitem(
701 coreconfigitem(
697 b'experimental', b'treemanifest', default=False,
702 b'experimental', b'treemanifest', default=False,
698 )
703 )
699 coreconfigitem(
704 coreconfigitem(
700 b'experimental', b'update.atomic-file', default=False,
705 b'experimental', b'update.atomic-file', default=False,
701 )
706 )
702 coreconfigitem(
707 coreconfigitem(
703 b'experimental', b'sshpeer.advertise-v2', default=False,
708 b'experimental', b'sshpeer.advertise-v2', default=False,
704 )
709 )
705 coreconfigitem(
710 coreconfigitem(
706 b'experimental', b'web.apiserver', default=False,
711 b'experimental', b'web.apiserver', default=False,
707 )
712 )
708 coreconfigitem(
713 coreconfigitem(
709 b'experimental', b'web.api.http-v2', default=False,
714 b'experimental', b'web.api.http-v2', default=False,
710 )
715 )
711 coreconfigitem(
716 coreconfigitem(
712 b'experimental', b'web.api.debugreflect', default=False,
717 b'experimental', b'web.api.debugreflect', default=False,
713 )
718 )
714 coreconfigitem(
719 coreconfigitem(
715 b'experimental', b'worker.wdir-get-thread-safe', default=False,
720 b'experimental', b'worker.wdir-get-thread-safe', default=False,
716 )
721 )
717 coreconfigitem(
722 coreconfigitem(
718 b'experimental', b'worker.repository-upgrade', default=False,
723 b'experimental', b'worker.repository-upgrade', default=False,
719 )
724 )
720 coreconfigitem(
725 coreconfigitem(
721 b'experimental', b'xdiff', default=False,
726 b'experimental', b'xdiff', default=False,
722 )
727 )
723 coreconfigitem(
728 coreconfigitem(
724 b'extensions', b'.*', default=None, generic=True,
729 b'extensions', b'.*', default=None, generic=True,
725 )
730 )
726 coreconfigitem(
731 coreconfigitem(
727 b'extdata', b'.*', default=None, generic=True,
732 b'extdata', b'.*', default=None, generic=True,
728 )
733 )
729 coreconfigitem(
734 coreconfigitem(
730 b'format', b'bookmarks-in-store', default=False,
735 b'format', b'bookmarks-in-store', default=False,
731 )
736 )
732 coreconfigitem(
737 coreconfigitem(
733 b'format', b'chunkcachesize', default=None, experimental=True,
738 b'format', b'chunkcachesize', default=None, experimental=True,
734 )
739 )
735 coreconfigitem(
740 coreconfigitem(
736 b'format', b'dotencode', default=True,
741 b'format', b'dotencode', default=True,
737 )
742 )
738 coreconfigitem(
743 coreconfigitem(
739 b'format', b'generaldelta', default=False, experimental=True,
744 b'format', b'generaldelta', default=False, experimental=True,
740 )
745 )
741 coreconfigitem(
746 coreconfigitem(
742 b'format', b'manifestcachesize', default=None, experimental=True,
747 b'format', b'manifestcachesize', default=None, experimental=True,
743 )
748 )
744 coreconfigitem(
749 coreconfigitem(
745 b'format', b'maxchainlen', default=dynamicdefault, experimental=True,
750 b'format', b'maxchainlen', default=dynamicdefault, experimental=True,
746 )
751 )
747 coreconfigitem(
752 coreconfigitem(
748 b'format', b'obsstore-version', default=None,
753 b'format', b'obsstore-version', default=None,
749 )
754 )
750 coreconfigitem(
755 coreconfigitem(
751 b'format', b'sparse-revlog', default=True,
756 b'format', b'sparse-revlog', default=True,
752 )
757 )
753 coreconfigitem(
758 coreconfigitem(
754 b'format',
759 b'format',
755 b'revlog-compression',
760 b'revlog-compression',
756 default=lambda: [b'zlib'],
761 default=lambda: [b'zlib'],
757 alias=[(b'experimental', b'format.compression')],
762 alias=[(b'experimental', b'format.compression')],
758 )
763 )
759 coreconfigitem(
764 coreconfigitem(
760 b'format', b'usefncache', default=True,
765 b'format', b'usefncache', default=True,
761 )
766 )
762 coreconfigitem(
767 coreconfigitem(
763 b'format', b'usegeneraldelta', default=True,
768 b'format', b'usegeneraldelta', default=True,
764 )
769 )
765 coreconfigitem(
770 coreconfigitem(
766 b'format', b'usestore', default=True,
771 b'format', b'usestore', default=True,
767 )
772 )
768 # Right now, the only efficient implement of the nodemap logic is in Rust, so
773 # Right now, the only efficient implement of the nodemap logic is in Rust, so
769 # the persistent nodemap feature needs to stay experimental as long as the Rust
774 # the persistent nodemap feature needs to stay experimental as long as the Rust
770 # extensions are an experimental feature.
775 # extensions are an experimental feature.
771 coreconfigitem(
776 coreconfigitem(
772 b'format', b'use-persistent-nodemap', default=False, experimental=True
777 b'format', b'use-persistent-nodemap', default=False, experimental=True
773 )
778 )
774 coreconfigitem(
779 coreconfigitem(
775 b'format',
780 b'format',
776 b'exp-use-copies-side-data-changeset',
781 b'exp-use-copies-side-data-changeset',
777 default=False,
782 default=False,
778 experimental=True,
783 experimental=True,
779 )
784 )
780 coreconfigitem(
785 coreconfigitem(
781 b'format', b'exp-use-side-data', default=False, experimental=True,
786 b'format', b'exp-use-side-data', default=False, experimental=True,
782 )
787 )
783 coreconfigitem(
788 coreconfigitem(
784 b'format', b'exp-share-safe', default=False, experimental=True,
789 b'format', b'exp-share-safe', default=False, experimental=True,
785 )
790 )
786 coreconfigitem(
791 coreconfigitem(
787 b'format', b'internal-phase', default=False, experimental=True,
792 b'format', b'internal-phase', default=False, experimental=True,
788 )
793 )
789 coreconfigitem(
794 coreconfigitem(
790 b'fsmonitor', b'warn_when_unused', default=True,
795 b'fsmonitor', b'warn_when_unused', default=True,
791 )
796 )
792 coreconfigitem(
797 coreconfigitem(
793 b'fsmonitor', b'warn_update_file_count', default=50000,
798 b'fsmonitor', b'warn_update_file_count', default=50000,
794 )
799 )
795 coreconfigitem(
800 coreconfigitem(
796 b'fsmonitor', b'warn_update_file_count_rust', default=400000,
801 b'fsmonitor', b'warn_update_file_count_rust', default=400000,
797 )
802 )
798 coreconfigitem(
803 coreconfigitem(
799 b'help', br'hidden-command\..*', default=False, generic=True,
804 b'help', br'hidden-command\..*', default=False, generic=True,
800 )
805 )
801 coreconfigitem(
806 coreconfigitem(
802 b'help', br'hidden-topic\..*', default=False, generic=True,
807 b'help', br'hidden-topic\..*', default=False, generic=True,
803 )
808 )
804 coreconfigitem(
809 coreconfigitem(
805 b'hooks', b'.*', default=dynamicdefault, generic=True,
810 b'hooks', b'.*', default=dynamicdefault, generic=True,
806 )
811 )
807 coreconfigitem(
812 coreconfigitem(
808 b'hgweb-paths', b'.*', default=list, generic=True,
813 b'hgweb-paths', b'.*', default=list, generic=True,
809 )
814 )
810 coreconfigitem(
815 coreconfigitem(
811 b'hostfingerprints', b'.*', default=list, generic=True,
816 b'hostfingerprints', b'.*', default=list, generic=True,
812 )
817 )
813 coreconfigitem(
818 coreconfigitem(
814 b'hostsecurity', b'ciphers', default=None,
819 b'hostsecurity', b'ciphers', default=None,
815 )
820 )
816 coreconfigitem(
821 coreconfigitem(
817 b'hostsecurity', b'minimumprotocol', default=dynamicdefault,
822 b'hostsecurity', b'minimumprotocol', default=dynamicdefault,
818 )
823 )
819 coreconfigitem(
824 coreconfigitem(
820 b'hostsecurity',
825 b'hostsecurity',
821 b'.*:minimumprotocol$',
826 b'.*:minimumprotocol$',
822 default=dynamicdefault,
827 default=dynamicdefault,
823 generic=True,
828 generic=True,
824 )
829 )
825 coreconfigitem(
830 coreconfigitem(
826 b'hostsecurity', b'.*:ciphers$', default=dynamicdefault, generic=True,
831 b'hostsecurity', b'.*:ciphers$', default=dynamicdefault, generic=True,
827 )
832 )
828 coreconfigitem(
833 coreconfigitem(
829 b'hostsecurity', b'.*:fingerprints$', default=list, generic=True,
834 b'hostsecurity', b'.*:fingerprints$', default=list, generic=True,
830 )
835 )
831 coreconfigitem(
836 coreconfigitem(
832 b'hostsecurity', b'.*:verifycertsfile$', default=None, generic=True,
837 b'hostsecurity', b'.*:verifycertsfile$', default=None, generic=True,
833 )
838 )
834
839
835 coreconfigitem(
840 coreconfigitem(
836 b'http_proxy', b'always', default=False,
841 b'http_proxy', b'always', default=False,
837 )
842 )
838 coreconfigitem(
843 coreconfigitem(
839 b'http_proxy', b'host', default=None,
844 b'http_proxy', b'host', default=None,
840 )
845 )
841 coreconfigitem(
846 coreconfigitem(
842 b'http_proxy', b'no', default=list,
847 b'http_proxy', b'no', default=list,
843 )
848 )
844 coreconfigitem(
849 coreconfigitem(
845 b'http_proxy', b'passwd', default=None,
850 b'http_proxy', b'passwd', default=None,
846 )
851 )
847 coreconfigitem(
852 coreconfigitem(
848 b'http_proxy', b'user', default=None,
853 b'http_proxy', b'user', default=None,
849 )
854 )
850
855
851 coreconfigitem(
856 coreconfigitem(
852 b'http', b'timeout', default=None,
857 b'http', b'timeout', default=None,
853 )
858 )
854
859
855 coreconfigitem(
860 coreconfigitem(
856 b'logtoprocess', b'commandexception', default=None,
861 b'logtoprocess', b'commandexception', default=None,
857 )
862 )
858 coreconfigitem(
863 coreconfigitem(
859 b'logtoprocess', b'commandfinish', default=None,
864 b'logtoprocess', b'commandfinish', default=None,
860 )
865 )
861 coreconfigitem(
866 coreconfigitem(
862 b'logtoprocess', b'command', default=None,
867 b'logtoprocess', b'command', default=None,
863 )
868 )
864 coreconfigitem(
869 coreconfigitem(
865 b'logtoprocess', b'develwarn', default=None,
870 b'logtoprocess', b'develwarn', default=None,
866 )
871 )
867 coreconfigitem(
872 coreconfigitem(
868 b'logtoprocess', b'uiblocked', default=None,
873 b'logtoprocess', b'uiblocked', default=None,
869 )
874 )
870 coreconfigitem(
875 coreconfigitem(
871 b'merge', b'checkunknown', default=b'abort',
876 b'merge', b'checkunknown', default=b'abort',
872 )
877 )
873 coreconfigitem(
878 coreconfigitem(
874 b'merge', b'checkignored', default=b'abort',
879 b'merge', b'checkignored', default=b'abort',
875 )
880 )
876 coreconfigitem(
881 coreconfigitem(
877 b'experimental', b'merge.checkpathconflicts', default=False,
882 b'experimental', b'merge.checkpathconflicts', default=False,
878 )
883 )
879 coreconfigitem(
884 coreconfigitem(
880 b'merge', b'followcopies', default=True,
885 b'merge', b'followcopies', default=True,
881 )
886 )
882 coreconfigitem(
887 coreconfigitem(
883 b'merge', b'on-failure', default=b'continue',
888 b'merge', b'on-failure', default=b'continue',
884 )
889 )
885 coreconfigitem(
890 coreconfigitem(
886 b'merge', b'preferancestor', default=lambda: [b'*'], experimental=True,
891 b'merge', b'preferancestor', default=lambda: [b'*'], experimental=True,
887 )
892 )
888 coreconfigitem(
893 coreconfigitem(
889 b'merge', b'strict-capability-check', default=False,
894 b'merge', b'strict-capability-check', default=False,
890 )
895 )
891 coreconfigitem(
896 coreconfigitem(
892 b'merge-tools', b'.*', default=None, generic=True,
897 b'merge-tools', b'.*', default=None, generic=True,
893 )
898 )
894 coreconfigitem(
899 coreconfigitem(
895 b'merge-tools',
900 b'merge-tools',
896 br'.*\.args$',
901 br'.*\.args$',
897 default=b"$local $base $other",
902 default=b"$local $base $other",
898 generic=True,
903 generic=True,
899 priority=-1,
904 priority=-1,
900 )
905 )
901 coreconfigitem(
906 coreconfigitem(
902 b'merge-tools', br'.*\.binary$', default=False, generic=True, priority=-1,
907 b'merge-tools', br'.*\.binary$', default=False, generic=True, priority=-1,
903 )
908 )
904 coreconfigitem(
909 coreconfigitem(
905 b'merge-tools', br'.*\.check$', default=list, generic=True, priority=-1,
910 b'merge-tools', br'.*\.check$', default=list, generic=True, priority=-1,
906 )
911 )
907 coreconfigitem(
912 coreconfigitem(
908 b'merge-tools',
913 b'merge-tools',
909 br'.*\.checkchanged$',
914 br'.*\.checkchanged$',
910 default=False,
915 default=False,
911 generic=True,
916 generic=True,
912 priority=-1,
917 priority=-1,
913 )
918 )
914 coreconfigitem(
919 coreconfigitem(
915 b'merge-tools',
920 b'merge-tools',
916 br'.*\.executable$',
921 br'.*\.executable$',
917 default=dynamicdefault,
922 default=dynamicdefault,
918 generic=True,
923 generic=True,
919 priority=-1,
924 priority=-1,
920 )
925 )
921 coreconfigitem(
926 coreconfigitem(
922 b'merge-tools', br'.*\.fixeol$', default=False, generic=True, priority=-1,
927 b'merge-tools', br'.*\.fixeol$', default=False, generic=True, priority=-1,
923 )
928 )
924 coreconfigitem(
929 coreconfigitem(
925 b'merge-tools', br'.*\.gui$', default=False, generic=True, priority=-1,
930 b'merge-tools', br'.*\.gui$', default=False, generic=True, priority=-1,
926 )
931 )
927 coreconfigitem(
932 coreconfigitem(
928 b'merge-tools',
933 b'merge-tools',
929 br'.*\.mergemarkers$',
934 br'.*\.mergemarkers$',
930 default=b'basic',
935 default=b'basic',
931 generic=True,
936 generic=True,
932 priority=-1,
937 priority=-1,
933 )
938 )
934 coreconfigitem(
939 coreconfigitem(
935 b'merge-tools',
940 b'merge-tools',
936 br'.*\.mergemarkertemplate$',
941 br'.*\.mergemarkertemplate$',
937 default=dynamicdefault, # take from ui.mergemarkertemplate
942 default=dynamicdefault, # take from ui.mergemarkertemplate
938 generic=True,
943 generic=True,
939 priority=-1,
944 priority=-1,
940 )
945 )
941 coreconfigitem(
946 coreconfigitem(
942 b'merge-tools', br'.*\.priority$', default=0, generic=True, priority=-1,
947 b'merge-tools', br'.*\.priority$', default=0, generic=True, priority=-1,
943 )
948 )
944 coreconfigitem(
949 coreconfigitem(
945 b'merge-tools',
950 b'merge-tools',
946 br'.*\.premerge$',
951 br'.*\.premerge$',
947 default=dynamicdefault,
952 default=dynamicdefault,
948 generic=True,
953 generic=True,
949 priority=-1,
954 priority=-1,
950 )
955 )
951 coreconfigitem(
956 coreconfigitem(
952 b'merge-tools', br'.*\.symlink$', default=False, generic=True, priority=-1,
957 b'merge-tools', br'.*\.symlink$', default=False, generic=True, priority=-1,
953 )
958 )
954 coreconfigitem(
959 coreconfigitem(
955 b'pager', b'attend-.*', default=dynamicdefault, generic=True,
960 b'pager', b'attend-.*', default=dynamicdefault, generic=True,
956 )
961 )
957 coreconfigitem(
962 coreconfigitem(
958 b'pager', b'ignore', default=list,
963 b'pager', b'ignore', default=list,
959 )
964 )
960 coreconfigitem(
965 coreconfigitem(
961 b'pager', b'pager', default=dynamicdefault,
966 b'pager', b'pager', default=dynamicdefault,
962 )
967 )
963 coreconfigitem(
968 coreconfigitem(
964 b'patch', b'eol', default=b'strict',
969 b'patch', b'eol', default=b'strict',
965 )
970 )
966 coreconfigitem(
971 coreconfigitem(
967 b'patch', b'fuzz', default=2,
972 b'patch', b'fuzz', default=2,
968 )
973 )
969 coreconfigitem(
974 coreconfigitem(
970 b'paths', b'default', default=None,
975 b'paths', b'default', default=None,
971 )
976 )
972 coreconfigitem(
977 coreconfigitem(
973 b'paths', b'default-push', default=None,
978 b'paths', b'default-push', default=None,
974 )
979 )
975 coreconfigitem(
980 coreconfigitem(
976 b'paths', b'.*', default=None, generic=True,
981 b'paths', b'.*', default=None, generic=True,
977 )
982 )
978 coreconfigitem(
983 coreconfigitem(
979 b'phases', b'checksubrepos', default=b'follow',
984 b'phases', b'checksubrepos', default=b'follow',
980 )
985 )
981 coreconfigitem(
986 coreconfigitem(
982 b'phases', b'new-commit', default=b'draft',
987 b'phases', b'new-commit', default=b'draft',
983 )
988 )
984 coreconfigitem(
989 coreconfigitem(
985 b'phases', b'publish', default=True,
990 b'phases', b'publish', default=True,
986 )
991 )
987 coreconfigitem(
992 coreconfigitem(
988 b'profiling', b'enabled', default=False,
993 b'profiling', b'enabled', default=False,
989 )
994 )
990 coreconfigitem(
995 coreconfigitem(
991 b'profiling', b'format', default=b'text',
996 b'profiling', b'format', default=b'text',
992 )
997 )
993 coreconfigitem(
998 coreconfigitem(
994 b'profiling', b'freq', default=1000,
999 b'profiling', b'freq', default=1000,
995 )
1000 )
996 coreconfigitem(
1001 coreconfigitem(
997 b'profiling', b'limit', default=30,
1002 b'profiling', b'limit', default=30,
998 )
1003 )
999 coreconfigitem(
1004 coreconfigitem(
1000 b'profiling', b'nested', default=0,
1005 b'profiling', b'nested', default=0,
1001 )
1006 )
1002 coreconfigitem(
1007 coreconfigitem(
1003 b'profiling', b'output', default=None,
1008 b'profiling', b'output', default=None,
1004 )
1009 )
1005 coreconfigitem(
1010 coreconfigitem(
1006 b'profiling', b'showmax', default=0.999,
1011 b'profiling', b'showmax', default=0.999,
1007 )
1012 )
1008 coreconfigitem(
1013 coreconfigitem(
1009 b'profiling', b'showmin', default=dynamicdefault,
1014 b'profiling', b'showmin', default=dynamicdefault,
1010 )
1015 )
1011 coreconfigitem(
1016 coreconfigitem(
1012 b'profiling', b'showtime', default=True,
1017 b'profiling', b'showtime', default=True,
1013 )
1018 )
1014 coreconfigitem(
1019 coreconfigitem(
1015 b'profiling', b'sort', default=b'inlinetime',
1020 b'profiling', b'sort', default=b'inlinetime',
1016 )
1021 )
1017 coreconfigitem(
1022 coreconfigitem(
1018 b'profiling', b'statformat', default=b'hotpath',
1023 b'profiling', b'statformat', default=b'hotpath',
1019 )
1024 )
1020 coreconfigitem(
1025 coreconfigitem(
1021 b'profiling', b'time-track', default=dynamicdefault,
1026 b'profiling', b'time-track', default=dynamicdefault,
1022 )
1027 )
1023 coreconfigitem(
1028 coreconfigitem(
1024 b'profiling', b'type', default=b'stat',
1029 b'profiling', b'type', default=b'stat',
1025 )
1030 )
1026 coreconfigitem(
1031 coreconfigitem(
1027 b'progress', b'assume-tty', default=False,
1032 b'progress', b'assume-tty', default=False,
1028 )
1033 )
1029 coreconfigitem(
1034 coreconfigitem(
1030 b'progress', b'changedelay', default=1,
1035 b'progress', b'changedelay', default=1,
1031 )
1036 )
1032 coreconfigitem(
1037 coreconfigitem(
1033 b'progress', b'clear-complete', default=True,
1038 b'progress', b'clear-complete', default=True,
1034 )
1039 )
1035 coreconfigitem(
1040 coreconfigitem(
1036 b'progress', b'debug', default=False,
1041 b'progress', b'debug', default=False,
1037 )
1042 )
1038 coreconfigitem(
1043 coreconfigitem(
1039 b'progress', b'delay', default=3,
1044 b'progress', b'delay', default=3,
1040 )
1045 )
1041 coreconfigitem(
1046 coreconfigitem(
1042 b'progress', b'disable', default=False,
1047 b'progress', b'disable', default=False,
1043 )
1048 )
1044 coreconfigitem(
1049 coreconfigitem(
1045 b'progress', b'estimateinterval', default=60.0,
1050 b'progress', b'estimateinterval', default=60.0,
1046 )
1051 )
1047 coreconfigitem(
1052 coreconfigitem(
1048 b'progress',
1053 b'progress',
1049 b'format',
1054 b'format',
1050 default=lambda: [b'topic', b'bar', b'number', b'estimate'],
1055 default=lambda: [b'topic', b'bar', b'number', b'estimate'],
1051 )
1056 )
1052 coreconfigitem(
1057 coreconfigitem(
1053 b'progress', b'refresh', default=0.1,
1058 b'progress', b'refresh', default=0.1,
1054 )
1059 )
1055 coreconfigitem(
1060 coreconfigitem(
1056 b'progress', b'width', default=dynamicdefault,
1061 b'progress', b'width', default=dynamicdefault,
1057 )
1062 )
1058 coreconfigitem(
1063 coreconfigitem(
1059 b'pull', b'confirm', default=False,
1064 b'pull', b'confirm', default=False,
1060 )
1065 )
1061 coreconfigitem(
1066 coreconfigitem(
1062 b'push', b'pushvars.server', default=False,
1067 b'push', b'pushvars.server', default=False,
1063 )
1068 )
1064 coreconfigitem(
1069 coreconfigitem(
1065 b'rewrite',
1070 b'rewrite',
1066 b'backup-bundle',
1071 b'backup-bundle',
1067 default=True,
1072 default=True,
1068 alias=[(b'ui', b'history-editing-backup')],
1073 alias=[(b'ui', b'history-editing-backup')],
1069 )
1074 )
1070 coreconfigitem(
1075 coreconfigitem(
1071 b'rewrite', b'update-timestamp', default=False,
1076 b'rewrite', b'update-timestamp', default=False,
1072 )
1077 )
1073 coreconfigitem(
1078 coreconfigitem(
1074 b'rewrite', b'empty-successor', default=b'skip', experimental=True,
1079 b'rewrite', b'empty-successor', default=b'skip', experimental=True,
1075 )
1080 )
1076 coreconfigitem(
1081 coreconfigitem(
1077 b'storage', b'new-repo-backend', default=b'revlogv1', experimental=True,
1082 b'storage', b'new-repo-backend', default=b'revlogv1', experimental=True,
1078 )
1083 )
1079 coreconfigitem(
1084 coreconfigitem(
1080 b'storage',
1085 b'storage',
1081 b'revlog.optimize-delta-parent-choice',
1086 b'revlog.optimize-delta-parent-choice',
1082 default=True,
1087 default=True,
1083 alias=[(b'format', b'aggressivemergedeltas')],
1088 alias=[(b'format', b'aggressivemergedeltas')],
1084 )
1089 )
1085 # experimental as long as rust is experimental (or a C version is implemented)
1090 # experimental as long as rust is experimental (or a C version is implemented)
1086 coreconfigitem(
1091 coreconfigitem(
1087 b'storage', b'revlog.nodemap.mmap', default=True, experimental=True
1092 b'storage', b'revlog.nodemap.mmap', default=True, experimental=True
1088 )
1093 )
1089 # experimental as long as format.use-persistent-nodemap is.
1094 # experimental as long as format.use-persistent-nodemap is.
1090 coreconfigitem(
1095 coreconfigitem(
1091 b'storage', b'revlog.nodemap.mode', default=b'compat', experimental=True
1096 b'storage', b'revlog.nodemap.mode', default=b'compat', experimental=True
1092 )
1097 )
1093 coreconfigitem(
1098 coreconfigitem(
1094 b'storage', b'revlog.reuse-external-delta', default=True,
1099 b'storage', b'revlog.reuse-external-delta', default=True,
1095 )
1100 )
1096 coreconfigitem(
1101 coreconfigitem(
1097 b'storage', b'revlog.reuse-external-delta-parent', default=None,
1102 b'storage', b'revlog.reuse-external-delta-parent', default=None,
1098 )
1103 )
1099 coreconfigitem(
1104 coreconfigitem(
1100 b'storage', b'revlog.zlib.level', default=None,
1105 b'storage', b'revlog.zlib.level', default=None,
1101 )
1106 )
1102 coreconfigitem(
1107 coreconfigitem(
1103 b'storage', b'revlog.zstd.level', default=None,
1108 b'storage', b'revlog.zstd.level', default=None,
1104 )
1109 )
1105 coreconfigitem(
1110 coreconfigitem(
1106 b'server', b'bookmarks-pushkey-compat', default=True,
1111 b'server', b'bookmarks-pushkey-compat', default=True,
1107 )
1112 )
1108 coreconfigitem(
1113 coreconfigitem(
1109 b'server', b'bundle1', default=True,
1114 b'server', b'bundle1', default=True,
1110 )
1115 )
1111 coreconfigitem(
1116 coreconfigitem(
1112 b'server', b'bundle1gd', default=None,
1117 b'server', b'bundle1gd', default=None,
1113 )
1118 )
1114 coreconfigitem(
1119 coreconfigitem(
1115 b'server', b'bundle1.pull', default=None,
1120 b'server', b'bundle1.pull', default=None,
1116 )
1121 )
1117 coreconfigitem(
1122 coreconfigitem(
1118 b'server', b'bundle1gd.pull', default=None,
1123 b'server', b'bundle1gd.pull', default=None,
1119 )
1124 )
1120 coreconfigitem(
1125 coreconfigitem(
1121 b'server', b'bundle1.push', default=None,
1126 b'server', b'bundle1.push', default=None,
1122 )
1127 )
1123 coreconfigitem(
1128 coreconfigitem(
1124 b'server', b'bundle1gd.push', default=None,
1129 b'server', b'bundle1gd.push', default=None,
1125 )
1130 )
1126 coreconfigitem(
1131 coreconfigitem(
1127 b'server',
1132 b'server',
1128 b'bundle2.stream',
1133 b'bundle2.stream',
1129 default=True,
1134 default=True,
1130 alias=[(b'experimental', b'bundle2.stream')],
1135 alias=[(b'experimental', b'bundle2.stream')],
1131 )
1136 )
1132 coreconfigitem(
1137 coreconfigitem(
1133 b'server', b'compressionengines', default=list,
1138 b'server', b'compressionengines', default=list,
1134 )
1139 )
1135 coreconfigitem(
1140 coreconfigitem(
1136 b'server', b'concurrent-push-mode', default=b'check-related',
1141 b'server', b'concurrent-push-mode', default=b'check-related',
1137 )
1142 )
1138 coreconfigitem(
1143 coreconfigitem(
1139 b'server', b'disablefullbundle', default=False,
1144 b'server', b'disablefullbundle', default=False,
1140 )
1145 )
1141 coreconfigitem(
1146 coreconfigitem(
1142 b'server', b'maxhttpheaderlen', default=1024,
1147 b'server', b'maxhttpheaderlen', default=1024,
1143 )
1148 )
1144 coreconfigitem(
1149 coreconfigitem(
1145 b'server', b'pullbundle', default=False,
1150 b'server', b'pullbundle', default=False,
1146 )
1151 )
1147 coreconfigitem(
1152 coreconfigitem(
1148 b'server', b'preferuncompressed', default=False,
1153 b'server', b'preferuncompressed', default=False,
1149 )
1154 )
1150 coreconfigitem(
1155 coreconfigitem(
1151 b'server', b'streamunbundle', default=False,
1156 b'server', b'streamunbundle', default=False,
1152 )
1157 )
1153 coreconfigitem(
1158 coreconfigitem(
1154 b'server', b'uncompressed', default=True,
1159 b'server', b'uncompressed', default=True,
1155 )
1160 )
1156 coreconfigitem(
1161 coreconfigitem(
1157 b'server', b'uncompressedallowsecret', default=False,
1162 b'server', b'uncompressedallowsecret', default=False,
1158 )
1163 )
1159 coreconfigitem(
1164 coreconfigitem(
1160 b'server', b'view', default=b'served',
1165 b'server', b'view', default=b'served',
1161 )
1166 )
1162 coreconfigitem(
1167 coreconfigitem(
1163 b'server', b'validate', default=False,
1168 b'server', b'validate', default=False,
1164 )
1169 )
1165 coreconfigitem(
1170 coreconfigitem(
1166 b'server', b'zliblevel', default=-1,
1171 b'server', b'zliblevel', default=-1,
1167 )
1172 )
1168 coreconfigitem(
1173 coreconfigitem(
1169 b'server', b'zstdlevel', default=3,
1174 b'server', b'zstdlevel', default=3,
1170 )
1175 )
1171 coreconfigitem(
1176 coreconfigitem(
1172 b'share', b'pool', default=None,
1177 b'share', b'pool', default=None,
1173 )
1178 )
1174 coreconfigitem(
1179 coreconfigitem(
1175 b'share', b'poolnaming', default=b'identity',
1180 b'share', b'poolnaming', default=b'identity',
1176 )
1181 )
1177 coreconfigitem(
1182 coreconfigitem(
1178 b'shelve', b'maxbackups', default=10,
1183 b'shelve', b'maxbackups', default=10,
1179 )
1184 )
1180 coreconfigitem(
1185 coreconfigitem(
1181 b'smtp', b'host', default=None,
1186 b'smtp', b'host', default=None,
1182 )
1187 )
1183 coreconfigitem(
1188 coreconfigitem(
1184 b'smtp', b'local_hostname', default=None,
1189 b'smtp', b'local_hostname', default=None,
1185 )
1190 )
1186 coreconfigitem(
1191 coreconfigitem(
1187 b'smtp', b'password', default=None,
1192 b'smtp', b'password', default=None,
1188 )
1193 )
1189 coreconfigitem(
1194 coreconfigitem(
1190 b'smtp', b'port', default=dynamicdefault,
1195 b'smtp', b'port', default=dynamicdefault,
1191 )
1196 )
1192 coreconfigitem(
1197 coreconfigitem(
1193 b'smtp', b'tls', default=b'none',
1198 b'smtp', b'tls', default=b'none',
1194 )
1199 )
1195 coreconfigitem(
1200 coreconfigitem(
1196 b'smtp', b'username', default=None,
1201 b'smtp', b'username', default=None,
1197 )
1202 )
1198 coreconfigitem(
1203 coreconfigitem(
1199 b'sparse', b'missingwarning', default=True, experimental=True,
1204 b'sparse', b'missingwarning', default=True, experimental=True,
1200 )
1205 )
1201 coreconfigitem(
1206 coreconfigitem(
1202 b'subrepos',
1207 b'subrepos',
1203 b'allowed',
1208 b'allowed',
1204 default=dynamicdefault, # to make backporting simpler
1209 default=dynamicdefault, # to make backporting simpler
1205 )
1210 )
1206 coreconfigitem(
1211 coreconfigitem(
1207 b'subrepos', b'hg:allowed', default=dynamicdefault,
1212 b'subrepos', b'hg:allowed', default=dynamicdefault,
1208 )
1213 )
1209 coreconfigitem(
1214 coreconfigitem(
1210 b'subrepos', b'git:allowed', default=dynamicdefault,
1215 b'subrepos', b'git:allowed', default=dynamicdefault,
1211 )
1216 )
1212 coreconfigitem(
1217 coreconfigitem(
1213 b'subrepos', b'svn:allowed', default=dynamicdefault,
1218 b'subrepos', b'svn:allowed', default=dynamicdefault,
1214 )
1219 )
1215 coreconfigitem(
1220 coreconfigitem(
1216 b'templates', b'.*', default=None, generic=True,
1221 b'templates', b'.*', default=None, generic=True,
1217 )
1222 )
1218 coreconfigitem(
1223 coreconfigitem(
1219 b'templateconfig', b'.*', default=dynamicdefault, generic=True,
1224 b'templateconfig', b'.*', default=dynamicdefault, generic=True,
1220 )
1225 )
1221 coreconfigitem(
1226 coreconfigitem(
1222 b'trusted', b'groups', default=list,
1227 b'trusted', b'groups', default=list,
1223 )
1228 )
1224 coreconfigitem(
1229 coreconfigitem(
1225 b'trusted', b'users', default=list,
1230 b'trusted', b'users', default=list,
1226 )
1231 )
1227 coreconfigitem(
1232 coreconfigitem(
1228 b'ui', b'_usedassubrepo', default=False,
1233 b'ui', b'_usedassubrepo', default=False,
1229 )
1234 )
1230 coreconfigitem(
1235 coreconfigitem(
1231 b'ui', b'allowemptycommit', default=False,
1236 b'ui', b'allowemptycommit', default=False,
1232 )
1237 )
1233 coreconfigitem(
1238 coreconfigitem(
1234 b'ui', b'archivemeta', default=True,
1239 b'ui', b'archivemeta', default=True,
1235 )
1240 )
1236 coreconfigitem(
1241 coreconfigitem(
1237 b'ui', b'askusername', default=False,
1242 b'ui', b'askusername', default=False,
1238 )
1243 )
1239 coreconfigitem(
1244 coreconfigitem(
1240 b'ui', b'available-memory', default=None,
1245 b'ui', b'available-memory', default=None,
1241 )
1246 )
1242
1247
1243 coreconfigitem(
1248 coreconfigitem(
1244 b'ui', b'clonebundlefallback', default=False,
1249 b'ui', b'clonebundlefallback', default=False,
1245 )
1250 )
1246 coreconfigitem(
1251 coreconfigitem(
1247 b'ui', b'clonebundleprefers', default=list,
1252 b'ui', b'clonebundleprefers', default=list,
1248 )
1253 )
1249 coreconfigitem(
1254 coreconfigitem(
1250 b'ui', b'clonebundles', default=True,
1255 b'ui', b'clonebundles', default=True,
1251 )
1256 )
1252 coreconfigitem(
1257 coreconfigitem(
1253 b'ui', b'color', default=b'auto',
1258 b'ui', b'color', default=b'auto',
1254 )
1259 )
1255 coreconfigitem(
1260 coreconfigitem(
1256 b'ui', b'commitsubrepos', default=False,
1261 b'ui', b'commitsubrepos', default=False,
1257 )
1262 )
1258 coreconfigitem(
1263 coreconfigitem(
1259 b'ui', b'debug', default=False,
1264 b'ui', b'debug', default=False,
1260 )
1265 )
1261 coreconfigitem(
1266 coreconfigitem(
1262 b'ui', b'debugger', default=None,
1267 b'ui', b'debugger', default=None,
1263 )
1268 )
1264 coreconfigitem(
1269 coreconfigitem(
1265 b'ui', b'editor', default=dynamicdefault,
1270 b'ui', b'editor', default=dynamicdefault,
1266 )
1271 )
1267 coreconfigitem(
1272 coreconfigitem(
1268 b'ui', b'fallbackencoding', default=None,
1273 b'ui', b'fallbackencoding', default=None,
1269 )
1274 )
1270 coreconfigitem(
1275 coreconfigitem(
1271 b'ui', b'forcecwd', default=None,
1276 b'ui', b'forcecwd', default=None,
1272 )
1277 )
1273 coreconfigitem(
1278 coreconfigitem(
1274 b'ui', b'forcemerge', default=None,
1279 b'ui', b'forcemerge', default=None,
1275 )
1280 )
1276 coreconfigitem(
1281 coreconfigitem(
1277 b'ui', b'formatdebug', default=False,
1282 b'ui', b'formatdebug', default=False,
1278 )
1283 )
1279 coreconfigitem(
1284 coreconfigitem(
1280 b'ui', b'formatjson', default=False,
1285 b'ui', b'formatjson', default=False,
1281 )
1286 )
1282 coreconfigitem(
1287 coreconfigitem(
1283 b'ui', b'formatted', default=None,
1288 b'ui', b'formatted', default=None,
1284 )
1289 )
1285 coreconfigitem(
1290 coreconfigitem(
1286 b'ui', b'graphnodetemplate', default=None,
1291 b'ui', b'graphnodetemplate', default=None,
1287 )
1292 )
1288 coreconfigitem(
1293 coreconfigitem(
1289 b'ui', b'interactive', default=None,
1294 b'ui', b'interactive', default=None,
1290 )
1295 )
1291 coreconfigitem(
1296 coreconfigitem(
1292 b'ui', b'interface', default=None,
1297 b'ui', b'interface', default=None,
1293 )
1298 )
1294 coreconfigitem(
1299 coreconfigitem(
1295 b'ui', b'interface.chunkselector', default=None,
1300 b'ui', b'interface.chunkselector', default=None,
1296 )
1301 )
1297 coreconfigitem(
1302 coreconfigitem(
1298 b'ui', b'large-file-limit', default=10000000,
1303 b'ui', b'large-file-limit', default=10000000,
1299 )
1304 )
1300 coreconfigitem(
1305 coreconfigitem(
1301 b'ui', b'logblockedtimes', default=False,
1306 b'ui', b'logblockedtimes', default=False,
1302 )
1307 )
1303 coreconfigitem(
1308 coreconfigitem(
1304 b'ui', b'logtemplate', default=None,
1309 b'ui', b'logtemplate', default=None,
1305 )
1310 )
1306 coreconfigitem(
1311 coreconfigitem(
1307 b'ui', b'merge', default=None,
1312 b'ui', b'merge', default=None,
1308 )
1313 )
1309 coreconfigitem(
1314 coreconfigitem(
1310 b'ui', b'mergemarkers', default=b'basic',
1315 b'ui', b'mergemarkers', default=b'basic',
1311 )
1316 )
1312 coreconfigitem(
1317 coreconfigitem(
1313 b'ui',
1318 b'ui',
1314 b'mergemarkertemplate',
1319 b'mergemarkertemplate',
1315 default=(
1320 default=(
1316 b'{node|short} '
1321 b'{node|short} '
1317 b'{ifeq(tags, "tip", "", '
1322 b'{ifeq(tags, "tip", "", '
1318 b'ifeq(tags, "", "", "{tags} "))}'
1323 b'ifeq(tags, "", "", "{tags} "))}'
1319 b'{if(bookmarks, "{bookmarks} ")}'
1324 b'{if(bookmarks, "{bookmarks} ")}'
1320 b'{ifeq(branch, "default", "", "{branch} ")}'
1325 b'{ifeq(branch, "default", "", "{branch} ")}'
1321 b'- {author|user}: {desc|firstline}'
1326 b'- {author|user}: {desc|firstline}'
1322 ),
1327 ),
1323 )
1328 )
1324 coreconfigitem(
1329 coreconfigitem(
1325 b'ui', b'message-output', default=b'stdio',
1330 b'ui', b'message-output', default=b'stdio',
1326 )
1331 )
1327 coreconfigitem(
1332 coreconfigitem(
1328 b'ui', b'nontty', default=False,
1333 b'ui', b'nontty', default=False,
1329 )
1334 )
1330 coreconfigitem(
1335 coreconfigitem(
1331 b'ui', b'origbackuppath', default=None,
1336 b'ui', b'origbackuppath', default=None,
1332 )
1337 )
1333 coreconfigitem(
1338 coreconfigitem(
1334 b'ui', b'paginate', default=True,
1339 b'ui', b'paginate', default=True,
1335 )
1340 )
1336 coreconfigitem(
1341 coreconfigitem(
1337 b'ui', b'patch', default=None,
1342 b'ui', b'patch', default=None,
1338 )
1343 )
1339 coreconfigitem(
1344 coreconfigitem(
1340 b'ui', b'pre-merge-tool-output-template', default=None,
1345 b'ui', b'pre-merge-tool-output-template', default=None,
1341 )
1346 )
1342 coreconfigitem(
1347 coreconfigitem(
1343 b'ui', b'portablefilenames', default=b'warn',
1348 b'ui', b'portablefilenames', default=b'warn',
1344 )
1349 )
1345 coreconfigitem(
1350 coreconfigitem(
1346 b'ui', b'promptecho', default=False,
1351 b'ui', b'promptecho', default=False,
1347 )
1352 )
1348 coreconfigitem(
1353 coreconfigitem(
1349 b'ui', b'quiet', default=False,
1354 b'ui', b'quiet', default=False,
1350 )
1355 )
1351 coreconfigitem(
1356 coreconfigitem(
1352 b'ui', b'quietbookmarkmove', default=False,
1357 b'ui', b'quietbookmarkmove', default=False,
1353 )
1358 )
1354 coreconfigitem(
1359 coreconfigitem(
1355 b'ui', b'relative-paths', default=b'legacy',
1360 b'ui', b'relative-paths', default=b'legacy',
1356 )
1361 )
1357 coreconfigitem(
1362 coreconfigitem(
1358 b'ui', b'remotecmd', default=b'hg',
1363 b'ui', b'remotecmd', default=b'hg',
1359 )
1364 )
1360 coreconfigitem(
1365 coreconfigitem(
1361 b'ui', b'report_untrusted', default=True,
1366 b'ui', b'report_untrusted', default=True,
1362 )
1367 )
1363 coreconfigitem(
1368 coreconfigitem(
1364 b'ui', b'rollback', default=True,
1369 b'ui', b'rollback', default=True,
1365 )
1370 )
1366 coreconfigitem(
1371 coreconfigitem(
1367 b'ui', b'signal-safe-lock', default=True,
1372 b'ui', b'signal-safe-lock', default=True,
1368 )
1373 )
1369 coreconfigitem(
1374 coreconfigitem(
1370 b'ui', b'slash', default=False,
1375 b'ui', b'slash', default=False,
1371 )
1376 )
1372 coreconfigitem(
1377 coreconfigitem(
1373 b'ui', b'ssh', default=b'ssh',
1378 b'ui', b'ssh', default=b'ssh',
1374 )
1379 )
1375 coreconfigitem(
1380 coreconfigitem(
1376 b'ui', b'ssherrorhint', default=None,
1381 b'ui', b'ssherrorhint', default=None,
1377 )
1382 )
1378 coreconfigitem(
1383 coreconfigitem(
1379 b'ui', b'statuscopies', default=False,
1384 b'ui', b'statuscopies', default=False,
1380 )
1385 )
1381 coreconfigitem(
1386 coreconfigitem(
1382 b'ui', b'strict', default=False,
1387 b'ui', b'strict', default=False,
1383 )
1388 )
1384 coreconfigitem(
1389 coreconfigitem(
1385 b'ui', b'style', default=b'',
1390 b'ui', b'style', default=b'',
1386 )
1391 )
1387 coreconfigitem(
1392 coreconfigitem(
1388 b'ui', b'supportcontact', default=None,
1393 b'ui', b'supportcontact', default=None,
1389 )
1394 )
1390 coreconfigitem(
1395 coreconfigitem(
1391 b'ui', b'textwidth', default=78,
1396 b'ui', b'textwidth', default=78,
1392 )
1397 )
1393 coreconfigitem(
1398 coreconfigitem(
1394 b'ui', b'timeout', default=b'600',
1399 b'ui', b'timeout', default=b'600',
1395 )
1400 )
1396 coreconfigitem(
1401 coreconfigitem(
1397 b'ui', b'timeout.warn', default=0,
1402 b'ui', b'timeout.warn', default=0,
1398 )
1403 )
1399 coreconfigitem(
1404 coreconfigitem(
1400 b'ui', b'timestamp-output', default=False,
1405 b'ui', b'timestamp-output', default=False,
1401 )
1406 )
1402 coreconfigitem(
1407 coreconfigitem(
1403 b'ui', b'traceback', default=False,
1408 b'ui', b'traceback', default=False,
1404 )
1409 )
1405 coreconfigitem(
1410 coreconfigitem(
1406 b'ui', b'tweakdefaults', default=False,
1411 b'ui', b'tweakdefaults', default=False,
1407 )
1412 )
1408 coreconfigitem(b'ui', b'username', alias=[(b'ui', b'user')])
1413 coreconfigitem(b'ui', b'username', alias=[(b'ui', b'user')])
1409 coreconfigitem(
1414 coreconfigitem(
1410 b'ui', b'verbose', default=False,
1415 b'ui', b'verbose', default=False,
1411 )
1416 )
1412 coreconfigitem(
1417 coreconfigitem(
1413 b'verify', b'skipflags', default=None,
1418 b'verify', b'skipflags', default=None,
1414 )
1419 )
1415 coreconfigitem(
1420 coreconfigitem(
1416 b'web', b'allowbz2', default=False,
1421 b'web', b'allowbz2', default=False,
1417 )
1422 )
1418 coreconfigitem(
1423 coreconfigitem(
1419 b'web', b'allowgz', default=False,
1424 b'web', b'allowgz', default=False,
1420 )
1425 )
1421 coreconfigitem(
1426 coreconfigitem(
1422 b'web', b'allow-pull', alias=[(b'web', b'allowpull')], default=True,
1427 b'web', b'allow-pull', alias=[(b'web', b'allowpull')], default=True,
1423 )
1428 )
1424 coreconfigitem(
1429 coreconfigitem(
1425 b'web', b'allow-push', alias=[(b'web', b'allow_push')], default=list,
1430 b'web', b'allow-push', alias=[(b'web', b'allow_push')], default=list,
1426 )
1431 )
1427 coreconfigitem(
1432 coreconfigitem(
1428 b'web', b'allowzip', default=False,
1433 b'web', b'allowzip', default=False,
1429 )
1434 )
1430 coreconfigitem(
1435 coreconfigitem(
1431 b'web', b'archivesubrepos', default=False,
1436 b'web', b'archivesubrepos', default=False,
1432 )
1437 )
1433 coreconfigitem(
1438 coreconfigitem(
1434 b'web', b'cache', default=True,
1439 b'web', b'cache', default=True,
1435 )
1440 )
1436 coreconfigitem(
1441 coreconfigitem(
1437 b'web', b'comparisoncontext', default=5,
1442 b'web', b'comparisoncontext', default=5,
1438 )
1443 )
1439 coreconfigitem(
1444 coreconfigitem(
1440 b'web', b'contact', default=None,
1445 b'web', b'contact', default=None,
1441 )
1446 )
1442 coreconfigitem(
1447 coreconfigitem(
1443 b'web', b'deny_push', default=list,
1448 b'web', b'deny_push', default=list,
1444 )
1449 )
1445 coreconfigitem(
1450 coreconfigitem(
1446 b'web', b'guessmime', default=False,
1451 b'web', b'guessmime', default=False,
1447 )
1452 )
1448 coreconfigitem(
1453 coreconfigitem(
1449 b'web', b'hidden', default=False,
1454 b'web', b'hidden', default=False,
1450 )
1455 )
1451 coreconfigitem(
1456 coreconfigitem(
1452 b'web', b'labels', default=list,
1457 b'web', b'labels', default=list,
1453 )
1458 )
1454 coreconfigitem(
1459 coreconfigitem(
1455 b'web', b'logoimg', default=b'hglogo.png',
1460 b'web', b'logoimg', default=b'hglogo.png',
1456 )
1461 )
1457 coreconfigitem(
1462 coreconfigitem(
1458 b'web', b'logourl', default=b'https://mercurial-scm.org/',
1463 b'web', b'logourl', default=b'https://mercurial-scm.org/',
1459 )
1464 )
1460 coreconfigitem(
1465 coreconfigitem(
1461 b'web', b'accesslog', default=b'-',
1466 b'web', b'accesslog', default=b'-',
1462 )
1467 )
1463 coreconfigitem(
1468 coreconfigitem(
1464 b'web', b'address', default=b'',
1469 b'web', b'address', default=b'',
1465 )
1470 )
1466 coreconfigitem(
1471 coreconfigitem(
1467 b'web', b'allow-archive', alias=[(b'web', b'allow_archive')], default=list,
1472 b'web', b'allow-archive', alias=[(b'web', b'allow_archive')], default=list,
1468 )
1473 )
1469 coreconfigitem(
1474 coreconfigitem(
1470 b'web', b'allow_read', default=list,
1475 b'web', b'allow_read', default=list,
1471 )
1476 )
1472 coreconfigitem(
1477 coreconfigitem(
1473 b'web', b'baseurl', default=None,
1478 b'web', b'baseurl', default=None,
1474 )
1479 )
1475 coreconfigitem(
1480 coreconfigitem(
1476 b'web', b'cacerts', default=None,
1481 b'web', b'cacerts', default=None,
1477 )
1482 )
1478 coreconfigitem(
1483 coreconfigitem(
1479 b'web', b'certificate', default=None,
1484 b'web', b'certificate', default=None,
1480 )
1485 )
1481 coreconfigitem(
1486 coreconfigitem(
1482 b'web', b'collapse', default=False,
1487 b'web', b'collapse', default=False,
1483 )
1488 )
1484 coreconfigitem(
1489 coreconfigitem(
1485 b'web', b'csp', default=None,
1490 b'web', b'csp', default=None,
1486 )
1491 )
1487 coreconfigitem(
1492 coreconfigitem(
1488 b'web', b'deny_read', default=list,
1493 b'web', b'deny_read', default=list,
1489 )
1494 )
1490 coreconfigitem(
1495 coreconfigitem(
1491 b'web', b'descend', default=True,
1496 b'web', b'descend', default=True,
1492 )
1497 )
1493 coreconfigitem(
1498 coreconfigitem(
1494 b'web', b'description', default=b"",
1499 b'web', b'description', default=b"",
1495 )
1500 )
1496 coreconfigitem(
1501 coreconfigitem(
1497 b'web', b'encoding', default=lambda: encoding.encoding,
1502 b'web', b'encoding', default=lambda: encoding.encoding,
1498 )
1503 )
1499 coreconfigitem(
1504 coreconfigitem(
1500 b'web', b'errorlog', default=b'-',
1505 b'web', b'errorlog', default=b'-',
1501 )
1506 )
1502 coreconfigitem(
1507 coreconfigitem(
1503 b'web', b'ipv6', default=False,
1508 b'web', b'ipv6', default=False,
1504 )
1509 )
1505 coreconfigitem(
1510 coreconfigitem(
1506 b'web', b'maxchanges', default=10,
1511 b'web', b'maxchanges', default=10,
1507 )
1512 )
1508 coreconfigitem(
1513 coreconfigitem(
1509 b'web', b'maxfiles', default=10,
1514 b'web', b'maxfiles', default=10,
1510 )
1515 )
1511 coreconfigitem(
1516 coreconfigitem(
1512 b'web', b'maxshortchanges', default=60,
1517 b'web', b'maxshortchanges', default=60,
1513 )
1518 )
1514 coreconfigitem(
1519 coreconfigitem(
1515 b'web', b'motd', default=b'',
1520 b'web', b'motd', default=b'',
1516 )
1521 )
1517 coreconfigitem(
1522 coreconfigitem(
1518 b'web', b'name', default=dynamicdefault,
1523 b'web', b'name', default=dynamicdefault,
1519 )
1524 )
1520 coreconfigitem(
1525 coreconfigitem(
1521 b'web', b'port', default=8000,
1526 b'web', b'port', default=8000,
1522 )
1527 )
1523 coreconfigitem(
1528 coreconfigitem(
1524 b'web', b'prefix', default=b'',
1529 b'web', b'prefix', default=b'',
1525 )
1530 )
1526 coreconfigitem(
1531 coreconfigitem(
1527 b'web', b'push_ssl', default=True,
1532 b'web', b'push_ssl', default=True,
1528 )
1533 )
1529 coreconfigitem(
1534 coreconfigitem(
1530 b'web', b'refreshinterval', default=20,
1535 b'web', b'refreshinterval', default=20,
1531 )
1536 )
1532 coreconfigitem(
1537 coreconfigitem(
1533 b'web', b'server-header', default=None,
1538 b'web', b'server-header', default=None,
1534 )
1539 )
1535 coreconfigitem(
1540 coreconfigitem(
1536 b'web', b'static', default=None,
1541 b'web', b'static', default=None,
1537 )
1542 )
1538 coreconfigitem(
1543 coreconfigitem(
1539 b'web', b'staticurl', default=None,
1544 b'web', b'staticurl', default=None,
1540 )
1545 )
1541 coreconfigitem(
1546 coreconfigitem(
1542 b'web', b'stripes', default=1,
1547 b'web', b'stripes', default=1,
1543 )
1548 )
1544 coreconfigitem(
1549 coreconfigitem(
1545 b'web', b'style', default=b'paper',
1550 b'web', b'style', default=b'paper',
1546 )
1551 )
1547 coreconfigitem(
1552 coreconfigitem(
1548 b'web', b'templates', default=None,
1553 b'web', b'templates', default=None,
1549 )
1554 )
1550 coreconfigitem(
1555 coreconfigitem(
1551 b'web', b'view', default=b'served', experimental=True,
1556 b'web', b'view', default=b'served', experimental=True,
1552 )
1557 )
1553 coreconfigitem(
1558 coreconfigitem(
1554 b'worker', b'backgroundclose', default=dynamicdefault,
1559 b'worker', b'backgroundclose', default=dynamicdefault,
1555 )
1560 )
1556 # Windows defaults to a limit of 512 open files. A buffer of 128
1561 # Windows defaults to a limit of 512 open files. A buffer of 128
1557 # should give us enough headway.
1562 # should give us enough headway.
1558 coreconfigitem(
1563 coreconfigitem(
1559 b'worker', b'backgroundclosemaxqueue', default=384,
1564 b'worker', b'backgroundclosemaxqueue', default=384,
1560 )
1565 )
1561 coreconfigitem(
1566 coreconfigitem(
1562 b'worker', b'backgroundcloseminfilecount', default=2048,
1567 b'worker', b'backgroundcloseminfilecount', default=2048,
1563 )
1568 )
1564 coreconfigitem(
1569 coreconfigitem(
1565 b'worker', b'backgroundclosethreadcount', default=4,
1570 b'worker', b'backgroundclosethreadcount', default=4,
1566 )
1571 )
1567 coreconfigitem(
1572 coreconfigitem(
1568 b'worker', b'enabled', default=True,
1573 b'worker', b'enabled', default=True,
1569 )
1574 )
1570 coreconfigitem(
1575 coreconfigitem(
1571 b'worker', b'numcpus', default=None,
1576 b'worker', b'numcpus', default=None,
1572 )
1577 )
1573
1578
1574 # Rebase related configuration moved to core because other extension are doing
1579 # Rebase related configuration moved to core because other extension are doing
1575 # strange things. For example, shelve import the extensions to reuse some bit
1580 # strange things. For example, shelve import the extensions to reuse some bit
1576 # without formally loading it.
1581 # without formally loading it.
1577 coreconfigitem(
1582 coreconfigitem(
1578 b'commands', b'rebase.requiredest', default=False,
1583 b'commands', b'rebase.requiredest', default=False,
1579 )
1584 )
1580 coreconfigitem(
1585 coreconfigitem(
1581 b'experimental', b'rebaseskipobsolete', default=True,
1586 b'experimental', b'rebaseskipobsolete', default=True,
1582 )
1587 )
1583 coreconfigitem(
1588 coreconfigitem(
1584 b'rebase', b'singletransaction', default=False,
1589 b'rebase', b'singletransaction', default=False,
1585 )
1590 )
1586 coreconfigitem(
1591 coreconfigitem(
1587 b'rebase', b'experimental.inmemory', default=False,
1592 b'rebase', b'experimental.inmemory', default=False,
1588 )
1593 )
@@ -1,693 +1,705 b''
1 #testcases old newfilenode
2
3 #if newfilenode
4 Enable the config option
5 ------------------------
6
7 $ cat >> $HGRCPATH <<EOF
8 > [experimental]
9 > merge-track-salvaged = True
10 > EOF
11 #endif
12
1 Criss cross merging
13 Criss cross merging
2
14
3 $ hg init criss-cross
15 $ hg init criss-cross
4 $ cd criss-cross
16 $ cd criss-cross
5 $ echo '0 base' > f1
17 $ echo '0 base' > f1
6 $ echo '0 base' > f2
18 $ echo '0 base' > f2
7 $ hg ci -Aqm '0 base'
19 $ hg ci -Aqm '0 base'
8
20
9 $ echo '1 first change' > f1
21 $ echo '1 first change' > f1
10 $ hg ci -m '1 first change f1'
22 $ hg ci -m '1 first change f1'
11
23
12 $ hg up -qr0
24 $ hg up -qr0
13 $ echo '2 first change' > f2
25 $ echo '2 first change' > f2
14 $ hg ci -qm '2 first change f2'
26 $ hg ci -qm '2 first change f2'
15
27
16 $ hg merge -qr 1
28 $ hg merge -qr 1
17 $ hg ci -m '3 merge'
29 $ hg ci -m '3 merge'
18
30
19 $ hg up -qr2
31 $ hg up -qr2
20 $ hg merge -qr1
32 $ hg merge -qr1
21 $ hg ci -qm '4 merge'
33 $ hg ci -qm '4 merge'
22
34
23 $ echo '5 second change' > f1
35 $ echo '5 second change' > f1
24 $ hg ci -m '5 second change f1'
36 $ hg ci -m '5 second change f1'
25
37
26 $ hg up -r3
38 $ hg up -r3
27 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
39 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
28 $ echo '6 second change' > f2
40 $ echo '6 second change' > f2
29 $ hg ci -m '6 second change f2'
41 $ hg ci -m '6 second change f2'
30
42
31 $ hg log -G
43 $ hg log -G
32 @ changeset: 6:3b08d01b0ab5
44 @ changeset: 6:3b08d01b0ab5
33 | tag: tip
45 | tag: tip
34 | parent: 3:cf89f02107e5
46 | parent: 3:cf89f02107e5
35 | user: test
47 | user: test
36 | date: Thu Jan 01 00:00:00 1970 +0000
48 | date: Thu Jan 01 00:00:00 1970 +0000
37 | summary: 6 second change f2
49 | summary: 6 second change f2
38 |
50 |
39 | o changeset: 5:adfe50279922
51 | o changeset: 5:adfe50279922
40 | | user: test
52 | | user: test
41 | | date: Thu Jan 01 00:00:00 1970 +0000
53 | | date: Thu Jan 01 00:00:00 1970 +0000
42 | | summary: 5 second change f1
54 | | summary: 5 second change f1
43 | |
55 | |
44 | o changeset: 4:7d3e55501ae6
56 | o changeset: 4:7d3e55501ae6
45 | |\ parent: 2:40663881a6dd
57 | |\ parent: 2:40663881a6dd
46 | | | parent: 1:0f6b37dbe527
58 | | | parent: 1:0f6b37dbe527
47 | | | user: test
59 | | | user: test
48 | | | date: Thu Jan 01 00:00:00 1970 +0000
60 | | | date: Thu Jan 01 00:00:00 1970 +0000
49 | | | summary: 4 merge
61 | | | summary: 4 merge
50 | | |
62 | | |
51 o---+ changeset: 3:cf89f02107e5
63 o---+ changeset: 3:cf89f02107e5
52 | | | parent: 2:40663881a6dd
64 | | | parent: 2:40663881a6dd
53 |/ / parent: 1:0f6b37dbe527
65 |/ / parent: 1:0f6b37dbe527
54 | | user: test
66 | | user: test
55 | | date: Thu Jan 01 00:00:00 1970 +0000
67 | | date: Thu Jan 01 00:00:00 1970 +0000
56 | | summary: 3 merge
68 | | summary: 3 merge
57 | |
69 | |
58 | o changeset: 2:40663881a6dd
70 | o changeset: 2:40663881a6dd
59 | | parent: 0:40494bf2444c
71 | | parent: 0:40494bf2444c
60 | | user: test
72 | | user: test
61 | | date: Thu Jan 01 00:00:00 1970 +0000
73 | | date: Thu Jan 01 00:00:00 1970 +0000
62 | | summary: 2 first change f2
74 | | summary: 2 first change f2
63 | |
75 | |
64 o | changeset: 1:0f6b37dbe527
76 o | changeset: 1:0f6b37dbe527
65 |/ user: test
77 |/ user: test
66 | date: Thu Jan 01 00:00:00 1970 +0000
78 | date: Thu Jan 01 00:00:00 1970 +0000
67 | summary: 1 first change f1
79 | summary: 1 first change f1
68 |
80 |
69 o changeset: 0:40494bf2444c
81 o changeset: 0:40494bf2444c
70 user: test
82 user: test
71 date: Thu Jan 01 00:00:00 1970 +0000
83 date: Thu Jan 01 00:00:00 1970 +0000
72 summary: 0 base
84 summary: 0 base
73
85
74
86
75 $ hg merge -v --debug --tool internal:dump 5 --config merge.preferancestor='!'
87 $ hg merge -v --debug --tool internal:dump 5 --config merge.preferancestor='!'
76 note: using 0f6b37dbe527 as ancestor of 3b08d01b0ab5 and adfe50279922
88 note: using 0f6b37dbe527 as ancestor of 3b08d01b0ab5 and adfe50279922
77 alternatively, use --config merge.preferancestor=40663881a6dd
89 alternatively, use --config merge.preferancestor=40663881a6dd
78 resolving manifests
90 resolving manifests
79 branchmerge: True, force: False, partial: False
91 branchmerge: True, force: False, partial: False
80 ancestor: 0f6b37dbe527, local: 3b08d01b0ab5+, remote: adfe50279922
92 ancestor: 0f6b37dbe527, local: 3b08d01b0ab5+, remote: adfe50279922
81 f1: remote is newer -> g
93 f1: remote is newer -> g
82 getting f1
94 getting f1
83 preserving f2 for resolve of f2
95 preserving f2 for resolve of f2
84 f2: versions differ -> m (premerge)
96 f2: versions differ -> m (premerge)
85 picked tool ':dump' for f2 (binary False symlink False changedelete False)
97 picked tool ':dump' for f2 (binary False symlink False changedelete False)
86 merging f2
98 merging f2
87 my f2@3b08d01b0ab5+ other f2@adfe50279922 ancestor f2@0f6b37dbe527
99 my f2@3b08d01b0ab5+ other f2@adfe50279922 ancestor f2@0f6b37dbe527
88 f2: versions differ -> m (merge)
100 f2: versions differ -> m (merge)
89 picked tool ':dump' for f2 (binary False symlink False changedelete False)
101 picked tool ':dump' for f2 (binary False symlink False changedelete False)
90 my f2@3b08d01b0ab5+ other f2@adfe50279922 ancestor f2@0f6b37dbe527
102 my f2@3b08d01b0ab5+ other f2@adfe50279922 ancestor f2@0f6b37dbe527
91 1 files updated, 0 files merged, 0 files removed, 1 files unresolved
103 1 files updated, 0 files merged, 0 files removed, 1 files unresolved
92 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
104 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
93 [1]
105 [1]
94
106
95 $ f --dump *
107 $ f --dump *
96 f1:
108 f1:
97 >>>
109 >>>
98 5 second change
110 5 second change
99 <<<
111 <<<
100 f2:
112 f2:
101 >>>
113 >>>
102 6 second change
114 6 second change
103 <<<
115 <<<
104 f2.base:
116 f2.base:
105 >>>
117 >>>
106 0 base
118 0 base
107 <<<
119 <<<
108 f2.local:
120 f2.local:
109 >>>
121 >>>
110 6 second change
122 6 second change
111 <<<
123 <<<
112 f2.orig:
124 f2.orig:
113 >>>
125 >>>
114 6 second change
126 6 second change
115 <<<
127 <<<
116 f2.other:
128 f2.other:
117 >>>
129 >>>
118 2 first change
130 2 first change
119 <<<
131 <<<
120
132
121 $ hg up -qC .
133 $ hg up -qC .
122 $ hg merge -v --tool internal:dump 5 --config merge.preferancestor="null 40663881 3b08d"
134 $ hg merge -v --tool internal:dump 5 --config merge.preferancestor="null 40663881 3b08d"
123 note: using 40663881a6dd as ancestor of 3b08d01b0ab5 and adfe50279922
135 note: using 40663881a6dd as ancestor of 3b08d01b0ab5 and adfe50279922
124 alternatively, use --config merge.preferancestor=0f6b37dbe527
136 alternatively, use --config merge.preferancestor=0f6b37dbe527
125 resolving manifests
137 resolving manifests
126 merging f1
138 merging f1
127 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
139 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
128 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
140 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
129 [1]
141 [1]
130
142
131 Redo merge with merge.preferancestor="*" to enable bid merge
143 Redo merge with merge.preferancestor="*" to enable bid merge
132
144
133 $ rm f*
145 $ rm f*
134 $ hg up -qC .
146 $ hg up -qC .
135 $ hg merge -v --debug --tool internal:dump 5 --config merge.preferancestor="*"
147 $ hg merge -v --debug --tool internal:dump 5 --config merge.preferancestor="*"
136 note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
148 note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
137
149
138 calculating bids for ancestor 0f6b37dbe527
150 calculating bids for ancestor 0f6b37dbe527
139 resolving manifests
151 resolving manifests
140 branchmerge: True, force: False, partial: False
152 branchmerge: True, force: False, partial: False
141 ancestor: 0f6b37dbe527, local: 3b08d01b0ab5+, remote: adfe50279922
153 ancestor: 0f6b37dbe527, local: 3b08d01b0ab5+, remote: adfe50279922
142 f1: remote is newer -> g
154 f1: remote is newer -> g
143 f2: versions differ -> m
155 f2: versions differ -> m
144
156
145 calculating bids for ancestor 40663881a6dd
157 calculating bids for ancestor 40663881a6dd
146 resolving manifests
158 resolving manifests
147 branchmerge: True, force: False, partial: False
159 branchmerge: True, force: False, partial: False
148 ancestor: 40663881a6dd, local: 3b08d01b0ab5+, remote: adfe50279922
160 ancestor: 40663881a6dd, local: 3b08d01b0ab5+, remote: adfe50279922
149 f1: versions differ -> m
161 f1: versions differ -> m
150 f2: remote unchanged -> k
162 f2: remote unchanged -> k
151
163
152 auction for merging merge bids (2 ancestors)
164 auction for merging merge bids (2 ancestors)
153 list of bids for f1:
165 list of bids for f1:
154 remote is newer -> g
166 remote is newer -> g
155 versions differ -> m
167 versions differ -> m
156 f1: picking 'get' action
168 f1: picking 'get' action
157 list of bids for f2:
169 list of bids for f2:
158 remote unchanged -> k
170 remote unchanged -> k
159 versions differ -> m
171 versions differ -> m
160 f2: picking 'keep' action
172 f2: picking 'keep' action
161 end of auction
173 end of auction
162
174
163 f1: remote is newer -> g
175 f1: remote is newer -> g
164 getting f1
176 getting f1
165 f2: remote unchanged -> k
177 f2: remote unchanged -> k
166 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
178 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
167 (branch merge, don't forget to commit)
179 (branch merge, don't forget to commit)
168
180
169 $ f --dump *
181 $ f --dump *
170 f1:
182 f1:
171 >>>
183 >>>
172 5 second change
184 5 second change
173 <<<
185 <<<
174 f2:
186 f2:
175 >>>
187 >>>
176 6 second change
188 6 second change
177 <<<
189 <<<
178
190
179
191
180 The other way around:
192 The other way around:
181
193
182 $ hg up -C -r5
194 $ hg up -C -r5
183 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
195 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
184 $ hg merge -v --debug --config merge.preferancestor="*"
196 $ hg merge -v --debug --config merge.preferancestor="*"
185 note: merging adfe50279922+ and 3b08d01b0ab5 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
197 note: merging adfe50279922+ and 3b08d01b0ab5 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
186
198
187 calculating bids for ancestor 0f6b37dbe527
199 calculating bids for ancestor 0f6b37dbe527
188 resolving manifests
200 resolving manifests
189 branchmerge: True, force: False, partial: False
201 branchmerge: True, force: False, partial: False
190 ancestor: 0f6b37dbe527, local: adfe50279922+, remote: 3b08d01b0ab5
202 ancestor: 0f6b37dbe527, local: adfe50279922+, remote: 3b08d01b0ab5
191 f1: remote unchanged -> k
203 f1: remote unchanged -> k
192 f2: versions differ -> m
204 f2: versions differ -> m
193
205
194 calculating bids for ancestor 40663881a6dd
206 calculating bids for ancestor 40663881a6dd
195 resolving manifests
207 resolving manifests
196 branchmerge: True, force: False, partial: False
208 branchmerge: True, force: False, partial: False
197 ancestor: 40663881a6dd, local: adfe50279922+, remote: 3b08d01b0ab5
209 ancestor: 40663881a6dd, local: adfe50279922+, remote: 3b08d01b0ab5
198 f1: versions differ -> m
210 f1: versions differ -> m
199 f2: remote is newer -> g
211 f2: remote is newer -> g
200
212
201 auction for merging merge bids (2 ancestors)
213 auction for merging merge bids (2 ancestors)
202 list of bids for f1:
214 list of bids for f1:
203 remote unchanged -> k
215 remote unchanged -> k
204 versions differ -> m
216 versions differ -> m
205 f1: picking 'keep' action
217 f1: picking 'keep' action
206 list of bids for f2:
218 list of bids for f2:
207 remote is newer -> g
219 remote is newer -> g
208 versions differ -> m
220 versions differ -> m
209 f2: picking 'get' action
221 f2: picking 'get' action
210 end of auction
222 end of auction
211
223
212 f2: remote is newer -> g
224 f2: remote is newer -> g
213 getting f2
225 getting f2
214 f1: remote unchanged -> k
226 f1: remote unchanged -> k
215 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
227 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
216 (branch merge, don't forget to commit)
228 (branch merge, don't forget to commit)
217
229
218 $ f --dump *
230 $ f --dump *
219 f1:
231 f1:
220 >>>
232 >>>
221 5 second change
233 5 second change
222 <<<
234 <<<
223 f2:
235 f2:
224 >>>
236 >>>
225 6 second change
237 6 second change
226 <<<
238 <<<
227
239
228 Verify how the output looks and and how verbose it is:
240 Verify how the output looks and and how verbose it is:
229
241
230 $ hg up -qC
242 $ hg up -qC
231 $ hg merge
243 $ hg merge
232 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
244 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
233 (branch merge, don't forget to commit)
245 (branch merge, don't forget to commit)
234
246
235 $ hg up -qC tip
247 $ hg up -qC tip
236 $ hg merge -v
248 $ hg merge -v
237 note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
249 note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
238
250
239 calculating bids for ancestor 0f6b37dbe527
251 calculating bids for ancestor 0f6b37dbe527
240 resolving manifests
252 resolving manifests
241
253
242 calculating bids for ancestor 40663881a6dd
254 calculating bids for ancestor 40663881a6dd
243 resolving manifests
255 resolving manifests
244
256
245 auction for merging merge bids (2 ancestors)
257 auction for merging merge bids (2 ancestors)
246 f1: picking 'get' action
258 f1: picking 'get' action
247 f2: picking 'keep' action
259 f2: picking 'keep' action
248 end of auction
260 end of auction
249
261
250 getting f1
262 getting f1
251 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
263 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
252 (branch merge, don't forget to commit)
264 (branch merge, don't forget to commit)
253
265
254 $ hg up -qC
266 $ hg up -qC
255 $ hg merge -v --debug --config merge.preferancestor="*"
267 $ hg merge -v --debug --config merge.preferancestor="*"
256 note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
268 note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
257
269
258 calculating bids for ancestor 0f6b37dbe527
270 calculating bids for ancestor 0f6b37dbe527
259 resolving manifests
271 resolving manifests
260 branchmerge: True, force: False, partial: False
272 branchmerge: True, force: False, partial: False
261 ancestor: 0f6b37dbe527, local: 3b08d01b0ab5+, remote: adfe50279922
273 ancestor: 0f6b37dbe527, local: 3b08d01b0ab5+, remote: adfe50279922
262 f1: remote is newer -> g
274 f1: remote is newer -> g
263 f2: versions differ -> m
275 f2: versions differ -> m
264
276
265 calculating bids for ancestor 40663881a6dd
277 calculating bids for ancestor 40663881a6dd
266 resolving manifests
278 resolving manifests
267 branchmerge: True, force: False, partial: False
279 branchmerge: True, force: False, partial: False
268 ancestor: 40663881a6dd, local: 3b08d01b0ab5+, remote: adfe50279922
280 ancestor: 40663881a6dd, local: 3b08d01b0ab5+, remote: adfe50279922
269 f1: versions differ -> m
281 f1: versions differ -> m
270 f2: remote unchanged -> k
282 f2: remote unchanged -> k
271
283
272 auction for merging merge bids (2 ancestors)
284 auction for merging merge bids (2 ancestors)
273 list of bids for f1:
285 list of bids for f1:
274 remote is newer -> g
286 remote is newer -> g
275 versions differ -> m
287 versions differ -> m
276 f1: picking 'get' action
288 f1: picking 'get' action
277 list of bids for f2:
289 list of bids for f2:
278 remote unchanged -> k
290 remote unchanged -> k
279 versions differ -> m
291 versions differ -> m
280 f2: picking 'keep' action
292 f2: picking 'keep' action
281 end of auction
293 end of auction
282
294
283 f1: remote is newer -> g
295 f1: remote is newer -> g
284 getting f1
296 getting f1
285 f2: remote unchanged -> k
297 f2: remote unchanged -> k
286 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
298 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
287 (branch merge, don't forget to commit)
299 (branch merge, don't forget to commit)
288
300
289 Test the greatest common ancestor returning multiple changesets
301 Test the greatest common ancestor returning multiple changesets
290
302
291 $ hg log -r 'heads(commonancestors(head()))'
303 $ hg log -r 'heads(commonancestors(head()))'
292 changeset: 1:0f6b37dbe527
304 changeset: 1:0f6b37dbe527
293 user: test
305 user: test
294 date: Thu Jan 01 00:00:00 1970 +0000
306 date: Thu Jan 01 00:00:00 1970 +0000
295 summary: 1 first change f1
307 summary: 1 first change f1
296
308
297 changeset: 2:40663881a6dd
309 changeset: 2:40663881a6dd
298 parent: 0:40494bf2444c
310 parent: 0:40494bf2444c
299 user: test
311 user: test
300 date: Thu Jan 01 00:00:00 1970 +0000
312 date: Thu Jan 01 00:00:00 1970 +0000
301 summary: 2 first change f2
313 summary: 2 first change f2
302
314
303
315
304 $ cd ..
316 $ cd ..
305
317
306 http://stackoverflow.com/questions/9350005/how-do-i-specify-a-merge-base-to-use-in-a-hg-merge/9430810
318 http://stackoverflow.com/questions/9350005/how-do-i-specify-a-merge-base-to-use-in-a-hg-merge/9430810
307
319
308 $ hg init ancestor-merging
320 $ hg init ancestor-merging
309 $ cd ancestor-merging
321 $ cd ancestor-merging
310 $ echo a > x
322 $ echo a > x
311 $ hg commit -A -m a x
323 $ hg commit -A -m a x
312 $ hg update -q 0
324 $ hg update -q 0
313 $ echo b >> x
325 $ echo b >> x
314 $ hg commit -m b
326 $ hg commit -m b
315 $ hg update -q 0
327 $ hg update -q 0
316 $ echo c >> x
328 $ echo c >> x
317 $ hg commit -qm c
329 $ hg commit -qm c
318 $ hg update -q 1
330 $ hg update -q 1
319 $ hg merge -q --tool internal:local 2
331 $ hg merge -q --tool internal:local 2
320 $ echo c >> x
332 $ echo c >> x
321 $ hg commit -m bc
333 $ hg commit -m bc
322 $ hg update -q 2
334 $ hg update -q 2
323 $ hg merge -q --tool internal:local 1
335 $ hg merge -q --tool internal:local 1
324 $ echo b >> x
336 $ echo b >> x
325 $ hg commit -qm cb
337 $ hg commit -qm cb
326
338
327 $ hg merge --config merge.preferancestor='!'
339 $ hg merge --config merge.preferancestor='!'
328 note: using 70008a2163f6 as ancestor of 0d355fdef312 and 4b8b546a3eef
340 note: using 70008a2163f6 as ancestor of 0d355fdef312 and 4b8b546a3eef
329 alternatively, use --config merge.preferancestor=b211bbc6eb3c
341 alternatively, use --config merge.preferancestor=b211bbc6eb3c
330 merging x
342 merging x
331 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
343 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
332 (branch merge, don't forget to commit)
344 (branch merge, don't forget to commit)
333 $ cat x
345 $ cat x
334 a
346 a
335 c
347 c
336 b
348 b
337 c
349 c
338
350
339 $ hg up -qC .
351 $ hg up -qC .
340
352
341 $ hg merge --config merge.preferancestor=b211bbc6eb3c
353 $ hg merge --config merge.preferancestor=b211bbc6eb3c
342 note: using b211bbc6eb3c as ancestor of 0d355fdef312 and 4b8b546a3eef
354 note: using b211bbc6eb3c as ancestor of 0d355fdef312 and 4b8b546a3eef
343 alternatively, use --config merge.preferancestor=70008a2163f6
355 alternatively, use --config merge.preferancestor=70008a2163f6
344 merging x
356 merging x
345 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
357 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
346 (branch merge, don't forget to commit)
358 (branch merge, don't forget to commit)
347 $ cat x
359 $ cat x
348 a
360 a
349 b
361 b
350 c
362 c
351 b
363 b
352
364
353 $ hg up -qC .
365 $ hg up -qC .
354
366
355 $ hg merge -v --config merge.preferancestor="*"
367 $ hg merge -v --config merge.preferancestor="*"
356 note: merging 0d355fdef312+ and 4b8b546a3eef using bids from ancestors 70008a2163f6 and b211bbc6eb3c
368 note: merging 0d355fdef312+ and 4b8b546a3eef using bids from ancestors 70008a2163f6 and b211bbc6eb3c
357
369
358 calculating bids for ancestor 70008a2163f6
370 calculating bids for ancestor 70008a2163f6
359 resolving manifests
371 resolving manifests
360
372
361 calculating bids for ancestor b211bbc6eb3c
373 calculating bids for ancestor b211bbc6eb3c
362 resolving manifests
374 resolving manifests
363
375
364 auction for merging merge bids (2 ancestors)
376 auction for merging merge bids (2 ancestors)
365 x: multiple bids for merge action:
377 x: multiple bids for merge action:
366 versions differ -> m
378 versions differ -> m
367 versions differ -> m
379 versions differ -> m
368 x: ambiguous merge - picked m action
380 x: ambiguous merge - picked m action
369 end of auction
381 end of auction
370
382
371 merging x
383 merging x
372 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
384 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
373 (branch merge, don't forget to commit)
385 (branch merge, don't forget to commit)
374 $ cat x
386 $ cat x
375 a
387 a
376 c
388 c
377 b
389 b
378 c
390 c
379
391
380 Verify that the old context ancestor works with / despite preferancestor:
392 Verify that the old context ancestor works with / despite preferancestor:
381
393
382 $ hg log -r 'ancestor(head())' --config merge.preferancestor=1 -T '{rev}\n'
394 $ hg log -r 'ancestor(head())' --config merge.preferancestor=1 -T '{rev}\n'
383 1
395 1
384 $ hg log -r 'ancestor(head())' --config merge.preferancestor=2 -T '{rev}\n'
396 $ hg log -r 'ancestor(head())' --config merge.preferancestor=2 -T '{rev}\n'
385 2
397 2
386 $ hg log -r 'ancestor(head())' --config merge.preferancestor=3 -T '{rev}\n'
398 $ hg log -r 'ancestor(head())' --config merge.preferancestor=3 -T '{rev}\n'
387 1
399 1
388 $ hg log -r 'ancestor(head())' --config merge.preferancestor='1337 * - 2' -T '{rev}\n'
400 $ hg log -r 'ancestor(head())' --config merge.preferancestor='1337 * - 2' -T '{rev}\n'
389 2
401 2
390
402
391 $ cd ..
403 $ cd ..
392
404
393 $ hg init issue5020
405 $ hg init issue5020
394 $ cd issue5020
406 $ cd issue5020
395
407
396 $ echo a > noop
408 $ echo a > noop
397 $ hg ci -qAm initial
409 $ hg ci -qAm initial
398
410
399 $ echo b > noop
411 $ echo b > noop
400 $ hg ci -qAm 'uninteresting change'
412 $ hg ci -qAm 'uninteresting change'
401
413
402 $ hg up -q 0
414 $ hg up -q 0
403 $ mkdir d1
415 $ mkdir d1
404 $ echo a > d1/a
416 $ echo a > d1/a
405 $ echo b > d1/b
417 $ echo b > d1/b
406 $ hg ci -qAm 'add d1/a and d1/b'
418 $ hg ci -qAm 'add d1/a and d1/b'
407
419
408 $ hg merge -q 1
420 $ hg merge -q 1
409 $ hg rm d1/a
421 $ hg rm d1/a
410 $ hg mv -q d1 d2
422 $ hg mv -q d1 d2
411 $ hg ci -qm 'merge while removing d1/a and moving d1/b to d2/b'
423 $ hg ci -qm 'merge while removing d1/a and moving d1/b to d2/b'
412
424
413 $ hg up -q 1
425 $ hg up -q 1
414 $ hg merge -q 2
426 $ hg merge -q 2
415 $ hg ci -qm 'merge (no changes while merging)'
427 $ hg ci -qm 'merge (no changes while merging)'
416 $ hg log -G -T '{rev}:{node|short} {desc}'
428 $ hg log -G -T '{rev}:{node|short} {desc}'
417 @ 4:c0ef19750a22 merge (no changes while merging)
429 @ 4:c0ef19750a22 merge (no changes while merging)
418 |\
430 |\
419 +---o 3:6ca01f7342b9 merge while removing d1/a and moving d1/b to d2/b
431 +---o 3:6ca01f7342b9 merge while removing d1/a and moving d1/b to d2/b
420 | |/
432 | |/
421 | o 2:154e6000f54e add d1/a and d1/b
433 | o 2:154e6000f54e add d1/a and d1/b
422 | |
434 | |
423 o | 1:11b5b303e36c uninteresting change
435 o | 1:11b5b303e36c uninteresting change
424 |/
436 |/
425 o 0:7b54db1ebf33 initial
437 o 0:7b54db1ebf33 initial
426
438
427 $ hg merge 3 --debug
439 $ hg merge 3 --debug
428 note: merging c0ef19750a22+ and 6ca01f7342b9 using bids from ancestors 11b5b303e36c and 154e6000f54e
440 note: merging c0ef19750a22+ and 6ca01f7342b9 using bids from ancestors 11b5b303e36c and 154e6000f54e
429
441
430 calculating bids for ancestor 11b5b303e36c
442 calculating bids for ancestor 11b5b303e36c
431 resolving manifests
443 resolving manifests
432 branchmerge: True, force: False, partial: False
444 branchmerge: True, force: False, partial: False
433 ancestor: 11b5b303e36c, local: c0ef19750a22+, remote: 6ca01f7342b9
445 ancestor: 11b5b303e36c, local: c0ef19750a22+, remote: 6ca01f7342b9
434 d1/a: ancestor missing, remote missing -> kn
446 d1/a: ancestor missing, remote missing -> kn
435 d1/b: ancestor missing, remote missing -> kn
447 d1/b: ancestor missing, remote missing -> kn
436 d2/b: remote created -> g
448 d2/b: remote created -> g
437
449
438 calculating bids for ancestor 154e6000f54e
450 calculating bids for ancestor 154e6000f54e
439 unmatched files in other:
451 unmatched files in other:
440 d2/b
452 d2/b
441 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
453 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
442 on remote side:
454 on remote side:
443 src: 'd1/b' -> dst: 'd2/b'
455 src: 'd1/b' -> dst: 'd2/b'
444 checking for directory renames
456 checking for directory renames
445 discovered dir src: 'd1/' -> dst: 'd2/'
457 discovered dir src: 'd1/' -> dst: 'd2/'
446 resolving manifests
458 resolving manifests
447 branchmerge: True, force: False, partial: False
459 branchmerge: True, force: False, partial: False
448 ancestor: 154e6000f54e, local: c0ef19750a22+, remote: 6ca01f7342b9
460 ancestor: 154e6000f54e, local: c0ef19750a22+, remote: 6ca01f7342b9
449 d1/a: other deleted -> r
461 d1/a: other deleted -> r
450 d1/b: other deleted -> r
462 d1/b: other deleted -> r
451 d2/b: remote created -> g
463 d2/b: remote created -> g
452
464
453 auction for merging merge bids (2 ancestors)
465 auction for merging merge bids (2 ancestors)
454 list of bids for d1/a:
466 list of bids for d1/a:
455 ancestor missing, remote missing -> kn
467 ancestor missing, remote missing -> kn
456 other deleted -> r
468 other deleted -> r
457 d1/a: picking 'keep new' action
469 d1/a: picking 'keep new' action
458 list of bids for d1/b:
470 list of bids for d1/b:
459 ancestor missing, remote missing -> kn
471 ancestor missing, remote missing -> kn
460 other deleted -> r
472 other deleted -> r
461 d1/b: picking 'keep new' action
473 d1/b: picking 'keep new' action
462 list of bids for d2/b:
474 list of bids for d2/b:
463 remote created -> g
475 remote created -> g
464 remote created -> g
476 remote created -> g
465 d2/b: consensus for g
477 d2/b: consensus for g
466 end of auction
478 end of auction
467
479
468 d2/b: remote created -> g
480 d2/b: remote created -> g
469 getting d2/b
481 getting d2/b
470 d1/a: ancestor missing, remote missing -> kn
482 d1/a: ancestor missing, remote missing -> kn
471 d1/b: ancestor missing, remote missing -> kn
483 d1/b: ancestor missing, remote missing -> kn
472 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
484 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
473 (branch merge, don't forget to commit)
485 (branch merge, don't forget to commit)
474
486
475
487
476 Check that removal reversion does not go unotified
488 Check that removal reversion does not go unotified
477 ==================================================
489 ==================================================
478
490
479 On a merge, a file can be removed and user can revert that removal. This means
491 On a merge, a file can be removed and user can revert that removal. This means
480 user has made an explicit choice of keeping the file or reverting the removal
492 user has made an explicit choice of keeping the file or reverting the removal
481 even though the merge algo wanted to remove it.
493 even though the merge algo wanted to remove it.
482 Based on this, when we do criss cross merges, merge algorithm should not again
494 Based on this, when we do criss cross merges, merge algorithm should not again
483 choose to remove the file as in one of the merges, user made an explicit choice
495 choose to remove the file as in one of the merges, user made an explicit choice
484 to revert the removal.
496 to revert the removal.
485 Following test cases demonstrate how merge algo does not take in account
497 Following test cases demonstrate how merge algo does not take in account
486 explicit choices made by users to revert the removal and on criss-cross merging
498 explicit choices made by users to revert the removal and on criss-cross merging
487 removes the file again.
499 removes the file again.
488
500
489 "Simple" case where the filenode changes
501 "Simple" case where the filenode changes
490 ----------------------------------------
502 ----------------------------------------
491
503
492 $ cd ..
504 $ cd ..
493 $ hg init criss-cross-merge-reversal-with-update
505 $ hg init criss-cross-merge-reversal-with-update
494 $ cd criss-cross-merge-reversal-with-update
506 $ cd criss-cross-merge-reversal-with-update
495 $ echo the-file > the-file
507 $ echo the-file > the-file
496 $ echo other-file > other-file
508 $ echo other-file > other-file
497 $ hg add the-file other-file
509 $ hg add the-file other-file
498 $ hg ci -m 'root-commit'
510 $ hg ci -m 'root-commit'
499 $ echo foo >> the-file
511 $ echo foo >> the-file
500 $ echo bar >> other-file
512 $ echo bar >> other-file
501 $ hg ci -m 'updating-both-file'
513 $ hg ci -m 'updating-both-file'
502 $ hg up 'desc("root-commit")'
514 $ hg up 'desc("root-commit")'
503 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
515 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
504 $ hg rm the-file
516 $ hg rm the-file
505 $ hg ci -m 'delete-the-file'
517 $ hg ci -m 'delete-the-file'
506 created new head
518 created new head
507 $ hg log -G -T '{node|short} {desc}\n'
519 $ hg log -G -T '{node|short} {desc}\n'
508 @ 7801bc9b9899 delete-the-file
520 @ 7801bc9b9899 delete-the-file
509 |
521 |
510 | o 9b610631ab29 updating-both-file
522 | o 9b610631ab29 updating-both-file
511 |/
523 |/
512 o 955800955977 root-commit
524 o 955800955977 root-commit
513
525
514
526
515 Do all the merge combination (from the deleted or the update side × keeping and deleting the file
527 Do all the merge combination (from the deleted or the update side × keeping and deleting the file
516
528
517 $ hg update 'desc("delete-the-file")'
529 $ hg update 'desc("delete-the-file")'
518 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
530 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
519 $ hg merge 'desc("updating-both-file")' -t :local
531 $ hg merge 'desc("updating-both-file")' -t :local
520 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
532 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
521 (branch merge, don't forget to commit)
533 (branch merge, don't forget to commit)
522 $ hg ci -m "merge-deleting-the-file-from-deleted"
534 $ hg ci -m "merge-deleting-the-file-from-deleted"
523 $ hg manifest
535 $ hg manifest
524 other-file
536 other-file
525
537
526 $ hg update 'desc("updating-both-file")'
538 $ hg update 'desc("updating-both-file")'
527 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
539 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
528 $ hg merge 'desc("delete-the-file")' -t :other
540 $ hg merge 'desc("delete-the-file")' -t :other
529 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
541 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
530 (branch merge, don't forget to commit)
542 (branch merge, don't forget to commit)
531 $ hg ci -m "merge-deleting-the-file-from-updated"
543 $ hg ci -m "merge-deleting-the-file-from-updated"
532 created new head
544 created new head
533 $ hg manifest
545 $ hg manifest
534 other-file
546 other-file
535
547
536 $ hg update 'desc("delete-the-file")'
548 $ hg update 'desc("delete-the-file")'
537 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
549 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
538 $ hg merge 'desc("updating-both-file")' -t :other
550 $ hg merge 'desc("updating-both-file")' -t :other
539 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
551 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
540 (branch merge, don't forget to commit)
552 (branch merge, don't forget to commit)
541 $ hg ci -m "merge-keeping-the-file-from-deleted"
553 $ hg ci -m "merge-keeping-the-file-from-deleted"
542 created new head
554 created new head
543 $ hg manifest
555 $ hg manifest
544 other-file
556 other-file
545 the-file
557 the-file
546
558
547 $ hg update 'desc("updating-both-file")'
559 $ hg update 'desc("updating-both-file")'
548 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
560 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
549 $ hg merge 'desc("delete-the-file")' -t :local
561 $ hg merge 'desc("delete-the-file")' -t :local
550 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
562 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
551 (branch merge, don't forget to commit)
563 (branch merge, don't forget to commit)
552 $ hg ci -m "merge-keeping-the-file-from-updated"
564 $ hg ci -m "merge-keeping-the-file-from-updated"
553 created new head
565 created new head
554 $ hg manifest
566 $ hg manifest
555 other-file
567 other-file
556 the-file
568 the-file
557
569
558 There the resulting merge together (leading to criss cross situation). Check
570 There the resulting merge together (leading to criss cross situation). Check
559 the conflict is properly detected.
571 the conflict is properly detected.
560
572
561 (merging two deletion together → no conflict)
573 (merging two deletion together → no conflict)
562
574
563 $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")'
575 $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")'
564 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
576 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
565 $ hg merge 'desc("merge-deleting-the-file-from-updated")'
577 $ hg merge 'desc("merge-deleting-the-file-from-updated")'
566 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
578 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
567 (branch merge, don't forget to commit)
579 (branch merge, don't forget to commit)
568 $ ls -1
580 $ ls -1
569 other-file
581 other-file
570
582
571 (merging a deletion with keeping conflict)
583 (merging a deletion with keeping conflict)
572 BROKEN: this should result in conflict
584 BROKEN: this should result in conflict
573
585
574 $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")'
586 $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")'
575 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
587 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
576 $ hg merge 'desc("merge-keeping-the-file-from-deleted")'
588 $ hg merge 'desc("merge-keeping-the-file-from-deleted")'
577 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
589 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
578 (branch merge, don't forget to commit)
590 (branch merge, don't forget to commit)
579 $ ls -1
591 $ ls -1
580 other-file
592 other-file
581
593
582 (merging a deletion with keeping → conflict)
594 (merging a deletion with keeping → conflict)
583 BROKEN: this should result in conflict
595 BROKEN: this should result in conflict
584
596
585 $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")'
597 $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")'
586 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
598 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
587 $ hg merge 'desc("merge-keeping-the-file-from-updated")'
599 $ hg merge 'desc("merge-keeping-the-file-from-updated")'
588 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
600 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
589 (branch merge, don't forget to commit)
601 (branch merge, don't forget to commit)
590 $ ls -1
602 $ ls -1
591 other-file
603 other-file
592
604
593 (merging two deletion together no conflict)
605 (merging two deletion together no conflict)
594
606
595 $ hg update --clean 'desc("merge-deleting-the-file-from-updated")'
607 $ hg update --clean 'desc("merge-deleting-the-file-from-updated")'
596 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
608 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
597 $ hg merge 'desc("merge-deleting-the-file-from-deleted")'
609 $ hg merge 'desc("merge-deleting-the-file-from-deleted")'
598 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
610 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
599 (branch merge, don't forget to commit)
611 (branch merge, don't forget to commit)
600 $ ls -1
612 $ ls -1
601 other-file
613 other-file
602
614
603 (merging a deletion with keeping → conflict)
615 (merging a deletion with keeping → conflict)
604 BROKEN: this should result in conflict
616 BROKEN: this should result in conflict
605
617
606 $ hg update --clean 'desc("merge-deleting-the-file-from-updated")'
618 $ hg update --clean 'desc("merge-deleting-the-file-from-updated")'
607 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
619 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
608 $ hg merge 'desc("merge-keeping-the-file-from-deleted")'
620 $ hg merge 'desc("merge-keeping-the-file-from-deleted")'
609 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
621 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
610 (branch merge, don't forget to commit)
622 (branch merge, don't forget to commit)
611 $ ls -1
623 $ ls -1
612 other-file
624 other-file
613
625
614 (merging a deletion with keeping conflict)
626 (merging a deletion with keeping conflict)
615 BROKEN: this should result in conflict
627 BROKEN: this should result in conflict
616
628
617 $ hg update --clean 'desc("merge-deleting-the-file-from-updated")'
629 $ hg update --clean 'desc("merge-deleting-the-file-from-updated")'
618 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
630 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
619 $ hg merge 'desc("merge-keeping-the-file-from-updated")'
631 $ hg merge 'desc("merge-keeping-the-file-from-updated")'
620 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
632 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
621 (branch merge, don't forget to commit)
633 (branch merge, don't forget to commit)
622 $ ls -1
634 $ ls -1
623 other-file
635 other-file
624
636
625 (merging two "keeping" together → no conflict)
637 (merging two "keeping" together → no conflict)
626
638
627 $ hg update --clean 'desc("merge-keeping-the-file-from-updated")'
639 $ hg update --clean 'desc("merge-keeping-the-file-from-updated")'
628 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
640 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
629 $ hg merge 'desc("merge-keeping-the-file-from-deleted")'
641 $ hg merge 'desc("merge-keeping-the-file-from-deleted")'
630 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
642 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
631 (branch merge, don't forget to commit)
643 (branch merge, don't forget to commit)
632 $ ls -1
644 $ ls -1
633 other-file
645 other-file
634 the-file
646 the-file
635
647
636 (merging a deletion with keeping conflict)
648 (merging a deletion with keeping conflict)
637 BROKEN: this should result in conflict
649 BROKEN: this should result in conflict
638
650
639 $ hg update --clean 'desc("merge-keeping-the-file-from-updated")'
651 $ hg update --clean 'desc("merge-keeping-the-file-from-updated")'
640 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
652 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
641 $ hg merge 'desc("merge-deleted-the-file-from-deleted")'
653 $ hg merge 'desc("merge-deleted-the-file-from-deleted")'
642 abort: empty revision set
654 abort: empty revision set
643 [255]
655 [255]
644 $ ls -1
656 $ ls -1
645 other-file
657 other-file
646 the-file
658 the-file
647
659
648 (merging a deletion with keeping conflict)
660 (merging a deletion with keeping conflict)
649 BROKEN: this should result in conflict
661 BROKEN: this should result in conflict
650
662
651 $ hg update --clean 'desc("merge-keeping-the-file-from-updated")'
663 $ hg update --clean 'desc("merge-keeping-the-file-from-updated")'
652 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
664 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
653 $ hg merge 'desc("merge-deleting-the-file-from-updated")'
665 $ hg merge 'desc("merge-deleting-the-file-from-updated")'
654 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
666 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
655 (branch merge, don't forget to commit)
667 (branch merge, don't forget to commit)
656 $ ls -1
668 $ ls -1
657 other-file
669 other-file
658 the-file
670 the-file
659
671
660 (merging two "keeping" together → no conflict)
672 (merging two "keeping" together → no conflict)
661
673
662 $ hg update --clean 'desc("merge-keeping-the-file-from-deleted")'
674 $ hg update --clean 'desc("merge-keeping-the-file-from-deleted")'
663 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
675 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
664 $ hg merge 'desc("merge-keeping-the-file-from-updated")'
676 $ hg merge 'desc("merge-keeping-the-file-from-updated")'
665 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
677 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
666 (branch merge, don't forget to commit)
678 (branch merge, don't forget to commit)
667 $ ls -1
679 $ ls -1
668 other-file
680 other-file
669 the-file
681 the-file
670
682
671 (merging a deletion with keeping conflict)
683 (merging a deletion with keeping conflict)
672 BROKEN: this should result in conflict
684 BROKEN: this should result in conflict
673
685
674 $ hg update --clean 'desc("merge-keeping-the-file-from-deleted")'
686 $ hg update --clean 'desc("merge-keeping-the-file-from-deleted")'
675 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
687 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
676 $ hg merge 'desc("merge-deleted-the-file-from-deleted")'
688 $ hg merge 'desc("merge-deleted-the-file-from-deleted")'
677 abort: empty revision set
689 abort: empty revision set
678 [255]
690 [255]
679 $ ls -1
691 $ ls -1
680 other-file
692 other-file
681 the-file
693 the-file
682
694
683 (merging a deletion with keeping conflict)
695 (merging a deletion with keeping conflict)
684 BROKEN: this should result in conflict
696 BROKEN: this should result in conflict
685
697
686 $ hg update --clean 'desc("merge-keeping-the-file-from-deleted")'
698 $ hg update --clean 'desc("merge-keeping-the-file-from-deleted")'
687 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
699 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
688 $ hg merge 'desc("merge-deleting-the-file-from-updated")'
700 $ hg merge 'desc("merge-deleting-the-file-from-updated")'
689 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
701 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
690 (branch merge, don't forget to commit)
702 (branch merge, don't forget to commit)
691 $ ls -1
703 $ ls -1
692 other-file
704 other-file
693 the-file
705 the-file
General Comments 0
You need to be logged in to leave comments. Login now