##// END OF EJS Templates
ignore: resolve ignore files relative to repo root (issue4473) (BC)...
Siddharth Agarwal -
r23629:a04c7b74 default
parent child Browse files
Show More
@@ -1,916 +1,918 b''
1 1 # dirstate.py - working directory tracking for mercurial
2 2 #
3 3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8 from node import nullid
9 9 from i18n import _
10 10 import scmutil, util, ignore, osutil, parsers, encoding, pathutil
11 11 import os, stat, errno
12 12
13 13 propertycache = util.propertycache
14 14 filecache = scmutil.filecache
15 15 _rangemask = 0x7fffffff
16 16
17 17 dirstatetuple = parsers.dirstatetuple
18 18
19 19 class repocache(filecache):
20 20 """filecache for files in .hg/"""
21 21 def join(self, obj, fname):
22 22 return obj._opener.join(fname)
23 23
24 24 class rootcache(filecache):
25 25 """filecache for files in the repository root"""
26 26 def join(self, obj, fname):
27 27 return obj._join(fname)
28 28
29 29 class dirstate(object):
30 30
31 31 def __init__(self, opener, ui, root, validate):
32 32 '''Create a new dirstate object.
33 33
34 34 opener is an open()-like callable that can be used to open the
35 35 dirstate file; root is the root of the directory tracked by
36 36 the dirstate.
37 37 '''
38 38 self._opener = opener
39 39 self._validate = validate
40 40 self._root = root
41 41 self._rootdir = os.path.join(root, '')
42 42 self._dirty = False
43 43 self._dirtypl = False
44 44 self._lastnormaltime = 0
45 45 self._ui = ui
46 46 self._filecache = {}
47 47 self._parentwriters = 0
48 48
49 49 def beginparentchange(self):
50 50 '''Marks the beginning of a set of changes that involve changing
51 51 the dirstate parents. If there is an exception during this time,
52 52 the dirstate will not be written when the wlock is released. This
53 53 prevents writing an incoherent dirstate where the parent doesn't
54 54 match the contents.
55 55 '''
56 56 self._parentwriters += 1
57 57
58 58 def endparentchange(self):
59 59 '''Marks the end of a set of changes that involve changing the
60 60 dirstate parents. Once all parent changes have been marked done,
61 61 the wlock will be free to write the dirstate on release.
62 62 '''
63 63 if self._parentwriters > 0:
64 64 self._parentwriters -= 1
65 65
66 66 def pendingparentchange(self):
67 67 '''Returns true if the dirstate is in the middle of a set of changes
68 68 that modify the dirstate parent.
69 69 '''
70 70 return self._parentwriters > 0
71 71
72 72 @propertycache
73 73 def _map(self):
74 74 '''Return the dirstate contents as a map from filename to
75 75 (state, mode, size, time).'''
76 76 self._read()
77 77 return self._map
78 78
79 79 @propertycache
80 80 def _copymap(self):
81 81 self._read()
82 82 return self._copymap
83 83
84 84 @propertycache
85 85 def _foldmap(self):
86 86 f = {}
87 87 normcase = util.normcase
88 88 for name, s in self._map.iteritems():
89 89 if s[0] != 'r':
90 90 f[normcase(name)] = name
91 91 for name in self._dirs:
92 92 f[normcase(name)] = name
93 93 f['.'] = '.' # prevents useless util.fspath() invocation
94 94 return f
95 95
96 96 @repocache('branch')
97 97 def _branch(self):
98 98 try:
99 99 return self._opener.read("branch").strip() or "default"
100 100 except IOError, inst:
101 101 if inst.errno != errno.ENOENT:
102 102 raise
103 103 return "default"
104 104
105 105 @propertycache
106 106 def _pl(self):
107 107 try:
108 108 fp = self._opener("dirstate")
109 109 st = fp.read(40)
110 110 fp.close()
111 111 l = len(st)
112 112 if l == 40:
113 113 return st[:20], st[20:40]
114 114 elif l > 0 and l < 40:
115 115 raise util.Abort(_('working directory state appears damaged!'))
116 116 except IOError, err:
117 117 if err.errno != errno.ENOENT:
118 118 raise
119 119 return [nullid, nullid]
120 120
121 121 @propertycache
122 122 def _dirs(self):
123 123 return scmutil.dirs(self._map, 'r')
124 124
125 125 def dirs(self):
126 126 return self._dirs
127 127
128 128 @rootcache('.hgignore')
129 129 def _ignore(self):
130 130 files = [self._join('.hgignore')]
131 131 for name, path in self._ui.configitems("ui"):
132 132 if name == 'ignore' or name.startswith('ignore.'):
133 files.append(util.expandpath(path))
133 # we need to use os.path.join here rather than self._join
134 # because path is arbitrary and user-specified
135 files.append(os.path.join(self._rootdir, util.expandpath(path)))
134 136 return ignore.ignore(self._root, files, self._ui.warn)
135 137
136 138 @propertycache
137 139 def _slash(self):
138 140 return self._ui.configbool('ui', 'slash') and os.sep != '/'
139 141
140 142 @propertycache
141 143 def _checklink(self):
142 144 return util.checklink(self._root)
143 145
144 146 @propertycache
145 147 def _checkexec(self):
146 148 return util.checkexec(self._root)
147 149
148 150 @propertycache
149 151 def _checkcase(self):
150 152 return not util.checkcase(self._join('.hg'))
151 153
152 154 def _join(self, f):
153 155 # much faster than os.path.join()
154 156 # it's safe because f is always a relative path
155 157 return self._rootdir + f
156 158
157 159 def flagfunc(self, buildfallback):
158 160 if self._checklink and self._checkexec:
159 161 def f(x):
160 162 try:
161 163 st = os.lstat(self._join(x))
162 164 if util.statislink(st):
163 165 return 'l'
164 166 if util.statisexec(st):
165 167 return 'x'
166 168 except OSError:
167 169 pass
168 170 return ''
169 171 return f
170 172
171 173 fallback = buildfallback()
172 174 if self._checklink:
173 175 def f(x):
174 176 if os.path.islink(self._join(x)):
175 177 return 'l'
176 178 if 'x' in fallback(x):
177 179 return 'x'
178 180 return ''
179 181 return f
180 182 if self._checkexec:
181 183 def f(x):
182 184 if 'l' in fallback(x):
183 185 return 'l'
184 186 if util.isexec(self._join(x)):
185 187 return 'x'
186 188 return ''
187 189 return f
188 190 else:
189 191 return fallback
190 192
191 193 @propertycache
192 194 def _cwd(self):
193 195 return os.getcwd()
194 196
195 197 def getcwd(self):
196 198 cwd = self._cwd
197 199 if cwd == self._root:
198 200 return ''
199 201 # self._root ends with a path separator if self._root is '/' or 'C:\'
200 202 rootsep = self._root
201 203 if not util.endswithsep(rootsep):
202 204 rootsep += os.sep
203 205 if cwd.startswith(rootsep):
204 206 return cwd[len(rootsep):]
205 207 else:
206 208 # we're outside the repo. return an absolute path.
207 209 return cwd
208 210
209 211 def pathto(self, f, cwd=None):
210 212 if cwd is None:
211 213 cwd = self.getcwd()
212 214 path = util.pathto(self._root, cwd, f)
213 215 if self._slash:
214 216 return util.pconvert(path)
215 217 return path
216 218
217 219 def __getitem__(self, key):
218 220 '''Return the current state of key (a filename) in the dirstate.
219 221
220 222 States are:
221 223 n normal
222 224 m needs merging
223 225 r marked for removal
224 226 a marked for addition
225 227 ? not tracked
226 228 '''
227 229 return self._map.get(key, ("?",))[0]
228 230
229 231 def __contains__(self, key):
230 232 return key in self._map
231 233
232 234 def __iter__(self):
233 235 for x in sorted(self._map):
234 236 yield x
235 237
236 238 def iteritems(self):
237 239 return self._map.iteritems()
238 240
239 241 def parents(self):
240 242 return [self._validate(p) for p in self._pl]
241 243
242 244 def p1(self):
243 245 return self._validate(self._pl[0])
244 246
245 247 def p2(self):
246 248 return self._validate(self._pl[1])
247 249
248 250 def branch(self):
249 251 return encoding.tolocal(self._branch)
250 252
251 253 def setparents(self, p1, p2=nullid):
252 254 """Set dirstate parents to p1 and p2.
253 255
254 256 When moving from two parents to one, 'm' merged entries a
255 257 adjusted to normal and previous copy records discarded and
256 258 returned by the call.
257 259
258 260 See localrepo.setparents()
259 261 """
260 262 if self._parentwriters == 0:
261 263 raise ValueError("cannot set dirstate parent without "
262 264 "calling dirstate.beginparentchange")
263 265
264 266 self._dirty = self._dirtypl = True
265 267 oldp2 = self._pl[1]
266 268 self._pl = p1, p2
267 269 copies = {}
268 270 if oldp2 != nullid and p2 == nullid:
269 271 for f, s in self._map.iteritems():
270 272 # Discard 'm' markers when moving away from a merge state
271 273 if s[0] == 'm':
272 274 if f in self._copymap:
273 275 copies[f] = self._copymap[f]
274 276 self.normallookup(f)
275 277 # Also fix up otherparent markers
276 278 elif s[0] == 'n' and s[2] == -2:
277 279 if f in self._copymap:
278 280 copies[f] = self._copymap[f]
279 281 self.add(f)
280 282 return copies
281 283
282 284 def setbranch(self, branch):
283 285 self._branch = encoding.fromlocal(branch)
284 286 f = self._opener('branch', 'w', atomictemp=True)
285 287 try:
286 288 f.write(self._branch + '\n')
287 289 f.close()
288 290
289 291 # make sure filecache has the correct stat info for _branch after
290 292 # replacing the underlying file
291 293 ce = self._filecache['_branch']
292 294 if ce:
293 295 ce.refresh()
294 296 except: # re-raises
295 297 f.discard()
296 298 raise
297 299
298 300 def _read(self):
299 301 self._map = {}
300 302 self._copymap = {}
301 303 try:
302 304 st = self._opener.read("dirstate")
303 305 except IOError, err:
304 306 if err.errno != errno.ENOENT:
305 307 raise
306 308 return
307 309 if not st:
308 310 return
309 311
310 312 # Python's garbage collector triggers a GC each time a certain number
311 313 # of container objects (the number being defined by
312 314 # gc.get_threshold()) are allocated. parse_dirstate creates a tuple
313 315 # for each file in the dirstate. The C version then immediately marks
314 316 # them as not to be tracked by the collector. However, this has no
315 317 # effect on when GCs are triggered, only on what objects the GC looks
316 318 # into. This means that O(number of files) GCs are unavoidable.
317 319 # Depending on when in the process's lifetime the dirstate is parsed,
318 320 # this can get very expensive. As a workaround, disable GC while
319 321 # parsing the dirstate.
320 322 #
321 323 # (we cannot decorate the function directly since it is in a C module)
322 324 parse_dirstate = util.nogc(parsers.parse_dirstate)
323 325 p = parse_dirstate(self._map, self._copymap, st)
324 326 if not self._dirtypl:
325 327 self._pl = p
326 328
327 329 def invalidate(self):
328 330 for a in ("_map", "_copymap", "_foldmap", "_branch", "_pl", "_dirs",
329 331 "_ignore"):
330 332 if a in self.__dict__:
331 333 delattr(self, a)
332 334 self._lastnormaltime = 0
333 335 self._dirty = False
334 336 self._parentwriters = 0
335 337
336 338 def copy(self, source, dest):
337 339 """Mark dest as a copy of source. Unmark dest if source is None."""
338 340 if source == dest:
339 341 return
340 342 self._dirty = True
341 343 if source is not None:
342 344 self._copymap[dest] = source
343 345 elif dest in self._copymap:
344 346 del self._copymap[dest]
345 347
346 348 def copied(self, file):
347 349 return self._copymap.get(file, None)
348 350
349 351 def copies(self):
350 352 return self._copymap
351 353
352 354 def _droppath(self, f):
353 355 if self[f] not in "?r" and "_dirs" in self.__dict__:
354 356 self._dirs.delpath(f)
355 357
356 358 def _addpath(self, f, state, mode, size, mtime):
357 359 oldstate = self[f]
358 360 if state == 'a' or oldstate == 'r':
359 361 scmutil.checkfilename(f)
360 362 if f in self._dirs:
361 363 raise util.Abort(_('directory %r already in dirstate') % f)
362 364 # shadows
363 365 for d in scmutil.finddirs(f):
364 366 if d in self._dirs:
365 367 break
366 368 if d in self._map and self[d] != 'r':
367 369 raise util.Abort(
368 370 _('file %r in dirstate clashes with %r') % (d, f))
369 371 if oldstate in "?r" and "_dirs" in self.__dict__:
370 372 self._dirs.addpath(f)
371 373 self._dirty = True
372 374 self._map[f] = dirstatetuple(state, mode, size, mtime)
373 375
374 376 def normal(self, f):
375 377 '''Mark a file normal and clean.'''
376 378 s = os.lstat(self._join(f))
377 379 mtime = int(s.st_mtime)
378 380 self._addpath(f, 'n', s.st_mode,
379 381 s.st_size & _rangemask, mtime & _rangemask)
380 382 if f in self._copymap:
381 383 del self._copymap[f]
382 384 if mtime > self._lastnormaltime:
383 385 # Remember the most recent modification timeslot for status(),
384 386 # to make sure we won't miss future size-preserving file content
385 387 # modifications that happen within the same timeslot.
386 388 self._lastnormaltime = mtime
387 389
388 390 def normallookup(self, f):
389 391 '''Mark a file normal, but possibly dirty.'''
390 392 if self._pl[1] != nullid and f in self._map:
391 393 # if there is a merge going on and the file was either
392 394 # in state 'm' (-1) or coming from other parent (-2) before
393 395 # being removed, restore that state.
394 396 entry = self._map[f]
395 397 if entry[0] == 'r' and entry[2] in (-1, -2):
396 398 source = self._copymap.get(f)
397 399 if entry[2] == -1:
398 400 self.merge(f)
399 401 elif entry[2] == -2:
400 402 self.otherparent(f)
401 403 if source:
402 404 self.copy(source, f)
403 405 return
404 406 if entry[0] == 'm' or entry[0] == 'n' and entry[2] == -2:
405 407 return
406 408 self._addpath(f, 'n', 0, -1, -1)
407 409 if f in self._copymap:
408 410 del self._copymap[f]
409 411
410 412 def otherparent(self, f):
411 413 '''Mark as coming from the other parent, always dirty.'''
412 414 if self._pl[1] == nullid:
413 415 raise util.Abort(_("setting %r to other parent "
414 416 "only allowed in merges") % f)
415 417 if f in self and self[f] == 'n':
416 418 # merge-like
417 419 self._addpath(f, 'm', 0, -2, -1)
418 420 else:
419 421 # add-like
420 422 self._addpath(f, 'n', 0, -2, -1)
421 423
422 424 if f in self._copymap:
423 425 del self._copymap[f]
424 426
425 427 def add(self, f):
426 428 '''Mark a file added.'''
427 429 self._addpath(f, 'a', 0, -1, -1)
428 430 if f in self._copymap:
429 431 del self._copymap[f]
430 432
431 433 def remove(self, f):
432 434 '''Mark a file removed.'''
433 435 self._dirty = True
434 436 self._droppath(f)
435 437 size = 0
436 438 if self._pl[1] != nullid and f in self._map:
437 439 # backup the previous state
438 440 entry = self._map[f]
439 441 if entry[0] == 'm': # merge
440 442 size = -1
441 443 elif entry[0] == 'n' and entry[2] == -2: # other parent
442 444 size = -2
443 445 self._map[f] = dirstatetuple('r', 0, size, 0)
444 446 if size == 0 and f in self._copymap:
445 447 del self._copymap[f]
446 448
447 449 def merge(self, f):
448 450 '''Mark a file merged.'''
449 451 if self._pl[1] == nullid:
450 452 return self.normallookup(f)
451 453 return self.otherparent(f)
452 454
453 455 def drop(self, f):
454 456 '''Drop a file from the dirstate'''
455 457 if f in self._map:
456 458 self._dirty = True
457 459 self._droppath(f)
458 460 del self._map[f]
459 461
460 462 def _normalize(self, path, isknown, ignoremissing=False, exists=None):
461 463 normed = util.normcase(path)
462 464 folded = self._foldmap.get(normed, None)
463 465 if folded is None:
464 466 if isknown:
465 467 folded = path
466 468 else:
467 469 if exists is None:
468 470 exists = os.path.lexists(os.path.join(self._root, path))
469 471 if not exists:
470 472 # Maybe a path component exists
471 473 if not ignoremissing and '/' in path:
472 474 d, f = path.rsplit('/', 1)
473 475 d = self._normalize(d, isknown, ignoremissing, None)
474 476 folded = d + "/" + f
475 477 else:
476 478 # No path components, preserve original case
477 479 folded = path
478 480 else:
479 481 # recursively normalize leading directory components
480 482 # against dirstate
481 483 if '/' in normed:
482 484 d, f = normed.rsplit('/', 1)
483 485 d = self._normalize(d, isknown, ignoremissing, True)
484 486 r = self._root + "/" + d
485 487 folded = d + "/" + util.fspath(f, r)
486 488 else:
487 489 folded = util.fspath(normed, self._root)
488 490 self._foldmap[normed] = folded
489 491
490 492 return folded
491 493
492 494 def normalize(self, path, isknown=False, ignoremissing=False):
493 495 '''
494 496 normalize the case of a pathname when on a casefolding filesystem
495 497
496 498 isknown specifies whether the filename came from walking the
497 499 disk, to avoid extra filesystem access.
498 500
499 501 If ignoremissing is True, missing path are returned
500 502 unchanged. Otherwise, we try harder to normalize possibly
501 503 existing path components.
502 504
503 505 The normalized case is determined based on the following precedence:
504 506
505 507 - version of name already stored in the dirstate
506 508 - version of name stored on disk
507 509 - version provided via command arguments
508 510 '''
509 511
510 512 if self._checkcase:
511 513 return self._normalize(path, isknown, ignoremissing)
512 514 return path
513 515
514 516 def clear(self):
515 517 self._map = {}
516 518 if "_dirs" in self.__dict__:
517 519 delattr(self, "_dirs")
518 520 self._copymap = {}
519 521 self._pl = [nullid, nullid]
520 522 self._lastnormaltime = 0
521 523 self._dirty = True
522 524
523 525 def rebuild(self, parent, allfiles, changedfiles=None):
524 526 changedfiles = changedfiles or allfiles
525 527 oldmap = self._map
526 528 self.clear()
527 529 for f in allfiles:
528 530 if f not in changedfiles:
529 531 self._map[f] = oldmap[f]
530 532 else:
531 533 if 'x' in allfiles.flags(f):
532 534 self._map[f] = dirstatetuple('n', 0777, -1, 0)
533 535 else:
534 536 self._map[f] = dirstatetuple('n', 0666, -1, 0)
535 537 self._pl = (parent, nullid)
536 538 self._dirty = True
537 539
538 540 def write(self):
539 541 if not self._dirty:
540 542 return
541 543
542 544 # enough 'delaywrite' prevents 'pack_dirstate' from dropping
543 545 # timestamp of each entries in dirstate, because of 'now > mtime'
544 546 delaywrite = self._ui.configint('debug', 'dirstate.delaywrite', 0)
545 547 if delaywrite:
546 548 import time # to avoid useless import
547 549 time.sleep(delaywrite)
548 550
549 551 st = self._opener("dirstate", "w", atomictemp=True)
550 552 # use the modification time of the newly created temporary file as the
551 553 # filesystem's notion of 'now'
552 554 now = util.fstat(st).st_mtime
553 555 st.write(parsers.pack_dirstate(self._map, self._copymap, self._pl, now))
554 556 st.close()
555 557 self._lastnormaltime = 0
556 558 self._dirty = self._dirtypl = False
557 559
558 560 def _dirignore(self, f):
559 561 if f == '.':
560 562 return False
561 563 if self._ignore(f):
562 564 return True
563 565 for p in scmutil.finddirs(f):
564 566 if self._ignore(p):
565 567 return True
566 568 return False
567 569
568 570 def _walkexplicit(self, match, subrepos):
569 571 '''Get stat data about the files explicitly specified by match.
570 572
571 573 Return a triple (results, dirsfound, dirsnotfound).
572 574 - results is a mapping from filename to stat result. It also contains
573 575 listings mapping subrepos and .hg to None.
574 576 - dirsfound is a list of files found to be directories.
575 577 - dirsnotfound is a list of files that the dirstate thinks are
576 578 directories and that were not found.'''
577 579
578 580 def badtype(mode):
579 581 kind = _('unknown')
580 582 if stat.S_ISCHR(mode):
581 583 kind = _('character device')
582 584 elif stat.S_ISBLK(mode):
583 585 kind = _('block device')
584 586 elif stat.S_ISFIFO(mode):
585 587 kind = _('fifo')
586 588 elif stat.S_ISSOCK(mode):
587 589 kind = _('socket')
588 590 elif stat.S_ISDIR(mode):
589 591 kind = _('directory')
590 592 return _('unsupported file type (type is %s)') % kind
591 593
592 594 matchedir = match.explicitdir
593 595 badfn = match.bad
594 596 dmap = self._map
595 597 normpath = util.normpath
596 598 lstat = os.lstat
597 599 getkind = stat.S_IFMT
598 600 dirkind = stat.S_IFDIR
599 601 regkind = stat.S_IFREG
600 602 lnkkind = stat.S_IFLNK
601 603 join = self._join
602 604 dirsfound = []
603 605 foundadd = dirsfound.append
604 606 dirsnotfound = []
605 607 notfoundadd = dirsnotfound.append
606 608
607 609 if match.matchfn != match.exact and self._checkcase:
608 610 normalize = self._normalize
609 611 else:
610 612 normalize = None
611 613
612 614 files = sorted(match.files())
613 615 subrepos.sort()
614 616 i, j = 0, 0
615 617 while i < len(files) and j < len(subrepos):
616 618 subpath = subrepos[j] + "/"
617 619 if files[i] < subpath:
618 620 i += 1
619 621 continue
620 622 while i < len(files) and files[i].startswith(subpath):
621 623 del files[i]
622 624 j += 1
623 625
624 626 if not files or '.' in files:
625 627 files = ['']
626 628 results = dict.fromkeys(subrepos)
627 629 results['.hg'] = None
628 630
629 631 alldirs = None
630 632 for ff in files:
631 633 if normalize:
632 634 nf = normalize(normpath(ff), False, True)
633 635 else:
634 636 nf = normpath(ff)
635 637 if nf in results:
636 638 continue
637 639
638 640 try:
639 641 st = lstat(join(nf))
640 642 kind = getkind(st.st_mode)
641 643 if kind == dirkind:
642 644 if nf in dmap:
643 645 # file replaced by dir on disk but still in dirstate
644 646 results[nf] = None
645 647 if matchedir:
646 648 matchedir(nf)
647 649 foundadd(nf)
648 650 elif kind == regkind or kind == lnkkind:
649 651 results[nf] = st
650 652 else:
651 653 badfn(ff, badtype(kind))
652 654 if nf in dmap:
653 655 results[nf] = None
654 656 except OSError, inst: # nf not found on disk - it is dirstate only
655 657 if nf in dmap: # does it exactly match a missing file?
656 658 results[nf] = None
657 659 else: # does it match a missing directory?
658 660 if alldirs is None:
659 661 alldirs = scmutil.dirs(dmap)
660 662 if nf in alldirs:
661 663 if matchedir:
662 664 matchedir(nf)
663 665 notfoundadd(nf)
664 666 else:
665 667 badfn(ff, inst.strerror)
666 668
667 669 return results, dirsfound, dirsnotfound
668 670
669 671 def walk(self, match, subrepos, unknown, ignored, full=True):
670 672 '''
671 673 Walk recursively through the directory tree, finding all files
672 674 matched by match.
673 675
674 676 If full is False, maybe skip some known-clean files.
675 677
676 678 Return a dict mapping filename to stat-like object (either
677 679 mercurial.osutil.stat instance or return value of os.stat()).
678 680
679 681 '''
680 682 # full is a flag that extensions that hook into walk can use -- this
681 683 # implementation doesn't use it at all. This satisfies the contract
682 684 # because we only guarantee a "maybe".
683 685
684 686 if ignored:
685 687 ignore = util.never
686 688 dirignore = util.never
687 689 elif unknown:
688 690 ignore = self._ignore
689 691 dirignore = self._dirignore
690 692 else:
691 693 # if not unknown and not ignored, drop dir recursion and step 2
692 694 ignore = util.always
693 695 dirignore = util.always
694 696
695 697 matchfn = match.matchfn
696 698 matchalways = match.always()
697 699 matchtdir = match.traversedir
698 700 dmap = self._map
699 701 listdir = osutil.listdir
700 702 lstat = os.lstat
701 703 dirkind = stat.S_IFDIR
702 704 regkind = stat.S_IFREG
703 705 lnkkind = stat.S_IFLNK
704 706 join = self._join
705 707
706 708 exact = skipstep3 = False
707 709 if matchfn == match.exact: # match.exact
708 710 exact = True
709 711 dirignore = util.always # skip step 2
710 712 elif match.files() and not match.anypats(): # match.match, no patterns
711 713 skipstep3 = True
712 714
713 715 if not exact and self._checkcase:
714 716 normalize = self._normalize
715 717 skipstep3 = False
716 718 else:
717 719 normalize = None
718 720
719 721 # step 1: find all explicit files
720 722 results, work, dirsnotfound = self._walkexplicit(match, subrepos)
721 723
722 724 skipstep3 = skipstep3 and not (work or dirsnotfound)
723 725 work = [d for d in work if not dirignore(d)]
724 726 wadd = work.append
725 727
726 728 # step 2: visit subdirectories
727 729 while work:
728 730 nd = work.pop()
729 731 skip = None
730 732 if nd == '.':
731 733 nd = ''
732 734 else:
733 735 skip = '.hg'
734 736 try:
735 737 entries = listdir(join(nd), stat=True, skip=skip)
736 738 except OSError, inst:
737 739 if inst.errno in (errno.EACCES, errno.ENOENT):
738 740 match.bad(self.pathto(nd), inst.strerror)
739 741 continue
740 742 raise
741 743 for f, kind, st in entries:
742 744 if normalize:
743 745 nf = normalize(nd and (nd + "/" + f) or f, True, True)
744 746 else:
745 747 nf = nd and (nd + "/" + f) or f
746 748 if nf not in results:
747 749 if kind == dirkind:
748 750 if not ignore(nf):
749 751 if matchtdir:
750 752 matchtdir(nf)
751 753 wadd(nf)
752 754 if nf in dmap and (matchalways or matchfn(nf)):
753 755 results[nf] = None
754 756 elif kind == regkind or kind == lnkkind:
755 757 if nf in dmap:
756 758 if matchalways or matchfn(nf):
757 759 results[nf] = st
758 760 elif (matchalways or matchfn(nf)) and not ignore(nf):
759 761 results[nf] = st
760 762 elif nf in dmap and (matchalways or matchfn(nf)):
761 763 results[nf] = None
762 764
763 765 for s in subrepos:
764 766 del results[s]
765 767 del results['.hg']
766 768
767 769 # step 3: visit remaining files from dmap
768 770 if not skipstep3 and not exact:
769 771 # If a dmap file is not in results yet, it was either
770 772 # a) not matching matchfn b) ignored, c) missing, or d) under a
771 773 # symlink directory.
772 774 if not results and matchalways:
773 775 visit = dmap.keys()
774 776 else:
775 777 visit = [f for f in dmap if f not in results and matchfn(f)]
776 778 visit.sort()
777 779
778 780 if unknown:
779 781 # unknown == True means we walked all dirs under the roots
780 782 # that wasn't ignored, and everything that matched was stat'ed
781 783 # and is already in results.
782 784 # The rest must thus be ignored or under a symlink.
783 785 audit_path = pathutil.pathauditor(self._root)
784 786
785 787 for nf in iter(visit):
786 788 # Report ignored items in the dmap as long as they are not
787 789 # under a symlink directory.
788 790 if audit_path.check(nf):
789 791 try:
790 792 results[nf] = lstat(join(nf))
791 793 # file was just ignored, no links, and exists
792 794 except OSError:
793 795 # file doesn't exist
794 796 results[nf] = None
795 797 else:
796 798 # It's either missing or under a symlink directory
797 799 # which we in this case report as missing
798 800 results[nf] = None
799 801 else:
800 802 # We may not have walked the full directory tree above,
801 803 # so stat and check everything we missed.
802 804 nf = iter(visit).next
803 805 for st in util.statfiles([join(i) for i in visit]):
804 806 results[nf()] = st
805 807 return results
806 808
807 809 def status(self, match, subrepos, ignored, clean, unknown):
808 810 '''Determine the status of the working copy relative to the
809 811 dirstate and return a pair of (unsure, status), where status is of type
810 812 scmutil.status and:
811 813
812 814 unsure:
813 815 files that might have been modified since the dirstate was
814 816 written, but need to be read to be sure (size is the same
815 817 but mtime differs)
816 818 status.modified:
817 819 files that have definitely been modified since the dirstate
818 820 was written (different size or mode)
819 821 status.clean:
820 822 files that have definitely not been modified since the
821 823 dirstate was written
822 824 '''
823 825 listignored, listclean, listunknown = ignored, clean, unknown
824 826 lookup, modified, added, unknown, ignored = [], [], [], [], []
825 827 removed, deleted, clean = [], [], []
826 828
827 829 dmap = self._map
828 830 ladd = lookup.append # aka "unsure"
829 831 madd = modified.append
830 832 aadd = added.append
831 833 uadd = unknown.append
832 834 iadd = ignored.append
833 835 radd = removed.append
834 836 dadd = deleted.append
835 837 cadd = clean.append
836 838 mexact = match.exact
837 839 dirignore = self._dirignore
838 840 checkexec = self._checkexec
839 841 copymap = self._copymap
840 842 lastnormaltime = self._lastnormaltime
841 843
842 844 # We need to do full walks when either
843 845 # - we're listing all clean files, or
844 846 # - match.traversedir does something, because match.traversedir should
845 847 # be called for every dir in the working dir
846 848 full = listclean or match.traversedir is not None
847 849 for fn, st in self.walk(match, subrepos, listunknown, listignored,
848 850 full=full).iteritems():
849 851 if fn not in dmap:
850 852 if (listignored or mexact(fn)) and dirignore(fn):
851 853 if listignored:
852 854 iadd(fn)
853 855 else:
854 856 uadd(fn)
855 857 continue
856 858
857 859 # This is equivalent to 'state, mode, size, time = dmap[fn]' but not
858 860 # written like that for performance reasons. dmap[fn] is not a
859 861 # Python tuple in compiled builds. The CPython UNPACK_SEQUENCE
860 862 # opcode has fast paths when the value to be unpacked is a tuple or
861 863 # a list, but falls back to creating a full-fledged iterator in
862 864 # general. That is much slower than simply accessing and storing the
863 865 # tuple members one by one.
864 866 t = dmap[fn]
865 867 state = t[0]
866 868 mode = t[1]
867 869 size = t[2]
868 870 time = t[3]
869 871
870 872 if not st and state in "nma":
871 873 dadd(fn)
872 874 elif state == 'n':
873 875 mtime = int(st.st_mtime)
874 876 if (size >= 0 and
875 877 ((size != st.st_size and size != st.st_size & _rangemask)
876 878 or ((mode ^ st.st_mode) & 0100 and checkexec))
877 879 or size == -2 # other parent
878 880 or fn in copymap):
879 881 madd(fn)
880 882 elif time != mtime and time != mtime & _rangemask:
881 883 ladd(fn)
882 884 elif mtime == lastnormaltime:
883 885 # fn may have been changed in the same timeslot without
884 886 # changing its size. This can happen if we quickly do
885 887 # multiple commits in a single transaction.
886 888 # Force lookup, so we don't miss such a racy file change.
887 889 ladd(fn)
888 890 elif listclean:
889 891 cadd(fn)
890 892 elif state == 'm':
891 893 madd(fn)
892 894 elif state == 'a':
893 895 aadd(fn)
894 896 elif state == 'r':
895 897 radd(fn)
896 898
897 899 return (lookup, scmutil.status(modified, added, removed, deleted,
898 900 unknown, ignored, clean))
899 901
900 902 def matches(self, match):
901 903 '''
902 904 return files in the dirstate (in whatever state) filtered by match
903 905 '''
904 906 dmap = self._map
905 907 if match.always():
906 908 return dmap.keys()
907 909 files = match.files()
908 910 if match.matchfn == match.exact:
909 911 # fast path -- filter the other way around, since typically files is
910 912 # much smaller than dmap
911 913 return [f for f in files if f in dmap]
912 914 if not match.anypats() and util.all(fn in dmap for fn in files):
913 915 # fast path -- all the values are known to be files, so just return
914 916 # that
915 917 return list(files)
916 918 return [f for f in dmap if match(f)]
@@ -1,1723 +1,1723 b''
1 1 The Mercurial system uses a set of configuration files to control
2 2 aspects of its behavior.
3 3
4 4 The configuration files use a simple ini-file format. A configuration
5 5 file consists of sections, led by a ``[section]`` header and followed
6 6 by ``name = value`` entries::
7 7
8 8 [ui]
9 9 username = Firstname Lastname <firstname.lastname@example.net>
10 10 verbose = True
11 11
12 12 The above entries will be referred to as ``ui.username`` and
13 13 ``ui.verbose``, respectively. See the Syntax section below.
14 14
15 15 Files
16 16 =====
17 17
18 18 Mercurial reads configuration data from several files, if they exist.
19 19 These files do not exist by default and you will have to create the
20 20 appropriate configuration files yourself: global configuration like
21 21 the username setting is typically put into
22 22 ``%USERPROFILE%\mercurial.ini`` or ``$HOME/.hgrc`` and local
23 23 configuration is put into the per-repository ``<repo>/.hg/hgrc`` file.
24 24
25 25 The names of these files depend on the system on which Mercurial is
26 26 installed. ``*.rc`` files from a single directory are read in
27 27 alphabetical order, later ones overriding earlier ones. Where multiple
28 28 paths are given below, settings from earlier paths override later
29 29 ones.
30 30
31 31 .. container:: verbose.unix
32 32
33 33 On Unix, the following files are consulted:
34 34
35 35 - ``<repo>/.hg/hgrc`` (per-repository)
36 36 - ``$HOME/.hgrc`` (per-user)
37 37 - ``<install-root>/etc/mercurial/hgrc`` (per-installation)
38 38 - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)
39 39 - ``/etc/mercurial/hgrc`` (per-system)
40 40 - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)
41 41 - ``<internal>/default.d/*.rc`` (defaults)
42 42
43 43 .. container:: verbose.windows
44 44
45 45 On Windows, the following files are consulted:
46 46
47 47 - ``<repo>/.hg/hgrc`` (per-repository)
48 48 - ``%USERPROFILE%\.hgrc`` (per-user)
49 49 - ``%USERPROFILE%\Mercurial.ini`` (per-user)
50 50 - ``%HOME%\.hgrc`` (per-user)
51 51 - ``%HOME%\Mercurial.ini`` (per-user)
52 52 - ``<install-dir>\Mercurial.ini`` (per-installation)
53 53 - ``<install-dir>\hgrc.d\*.rc`` (per-installation)
54 54 - ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`` (per-installation)
55 55 - ``<internal>/default.d/*.rc`` (defaults)
56 56
57 57 .. note::
58 58
59 59 The registry key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mercurial``
60 60 is used when running 32-bit Python on 64-bit Windows.
61 61
62 62 .. container:: verbose.plan9
63 63
64 64 On Plan9, the following files are consulted:
65 65
66 66 - ``<repo>/.hg/hgrc`` (per-repository)
67 67 - ``$home/lib/hgrc`` (per-user)
68 68 - ``<install-root>/lib/mercurial/hgrc`` (per-installation)
69 69 - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)
70 70 - ``/lib/mercurial/hgrc`` (per-system)
71 71 - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)
72 72 - ``<internal>/default.d/*.rc`` (defaults)
73 73
74 74 Per-repository configuration options only apply in a
75 75 particular repository. This file is not version-controlled, and
76 76 will not get transferred during a "clone" operation. Options in
77 77 this file override options in all other configuration files. On
78 78 Plan 9 and Unix, most of this file will be ignored if it doesn't
79 79 belong to a trusted user or to a trusted group. See the documentation
80 80 for the ``[trusted]`` section below for more details.
81 81
82 82 Per-user configuration file(s) are for the user running Mercurial. On
83 83 Windows 9x, ``%HOME%`` is replaced by ``%APPDATA%``. Options in these
84 84 files apply to all Mercurial commands executed by this user in any
85 85 directory. Options in these files override per-system and per-installation
86 86 options.
87 87
88 88 Per-installation configuration files are searched for in the
89 89 directory where Mercurial is installed. ``<install-root>`` is the
90 90 parent directory of the **hg** executable (or symlink) being run. For
91 91 example, if installed in ``/shared/tools/bin/hg``, Mercurial will look
92 92 in ``/shared/tools/etc/mercurial/hgrc``. Options in these files apply
93 93 to all Mercurial commands executed by any user in any directory.
94 94
95 95 Per-installation configuration files are for the system on
96 96 which Mercurial is running. Options in these files apply to all
97 97 Mercurial commands executed by any user in any directory. Registry
98 98 keys contain PATH-like strings, every part of which must reference
99 99 a ``Mercurial.ini`` file or be a directory where ``*.rc`` files will
100 100 be read. Mercurial checks each of these locations in the specified
101 101 order until one or more configuration files are detected.
102 102
103 103 Per-system configuration files are for the system on which Mercurial
104 104 is running. Options in these files apply to all Mercurial commands
105 105 executed by any user in any directory. Options in these files
106 106 override per-installation options.
107 107
108 108 Mercurial comes with some default configuration. The default configuration
109 109 files are installed with Mercurial and will be overwritten on upgrades. Default
110 110 configuration files should never be edited by users or administrators but can
111 111 be overridden in other configuration files. So far the directory only contains
112 112 merge tool configuration but packagers can also put other default configuration
113 113 there.
114 114
115 115 Syntax
116 116 ======
117 117
118 118 A configuration file consists of sections, led by a ``[section]`` header
119 119 and followed by ``name = value`` entries (sometimes called
120 120 ``configuration keys``)::
121 121
122 122 [spam]
123 123 eggs=ham
124 124 green=
125 125 eggs
126 126
127 127 Each line contains one entry. If the lines that follow are indented,
128 128 they are treated as continuations of that entry. Leading whitespace is
129 129 removed from values. Empty lines are skipped. Lines beginning with
130 130 ``#`` or ``;`` are ignored and may be used to provide comments.
131 131
132 132 Configuration keys can be set multiple times, in which case Mercurial
133 133 will use the value that was configured last. As an example::
134 134
135 135 [spam]
136 136 eggs=large
137 137 ham=serrano
138 138 eggs=small
139 139
140 140 This would set the configuration key named ``eggs`` to ``small``.
141 141
142 142 It is also possible to define a section multiple times. A section can
143 143 be redefined on the same and/or on different configuration files. For
144 144 example::
145 145
146 146 [foo]
147 147 eggs=large
148 148 ham=serrano
149 149 eggs=small
150 150
151 151 [bar]
152 152 eggs=ham
153 153 green=
154 154 eggs
155 155
156 156 [foo]
157 157 ham=prosciutto
158 158 eggs=medium
159 159 bread=toasted
160 160
161 161 This would set the ``eggs``, ``ham``, and ``bread`` configuration keys
162 162 of the ``foo`` section to ``medium``, ``prosciutto``, and ``toasted``,
163 163 respectively. As you can see there only thing that matters is the last
164 164 value that was set for each of the configuration keys.
165 165
166 166 If a configuration key is set multiple times in different
167 167 configuration files the final value will depend on the order in which
168 168 the different configuration files are read, with settings from earlier
169 169 paths overriding later ones as described on the ``Files`` section
170 170 above.
171 171
172 172 A line of the form ``%include file`` will include ``file`` into the
173 173 current configuration file. The inclusion is recursive, which means
174 174 that included files can include other files. Filenames are relative to
175 175 the configuration file in which the ``%include`` directive is found.
176 176 Environment variables and ``~user`` constructs are expanded in
177 177 ``file``. This lets you do something like::
178 178
179 179 %include ~/.hgrc.d/$HOST.rc
180 180
181 181 to include a different configuration file on each computer you use.
182 182
183 183 A line with ``%unset name`` will remove ``name`` from the current
184 184 section, if it has been set previously.
185 185
186 186 The values are either free-form text strings, lists of text strings,
187 187 or Boolean values. Boolean values can be set to true using any of "1",
188 188 "yes", "true", or "on" and to false using "0", "no", "false", or "off"
189 189 (all case insensitive).
190 190
191 191 List values are separated by whitespace or comma, except when values are
192 192 placed in double quotation marks::
193 193
194 194 allow_read = "John Doe, PhD", brian, betty
195 195
196 196 Quotation marks can be escaped by prefixing them with a backslash. Only
197 197 quotation marks at the beginning of a word is counted as a quotation
198 198 (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
199 199
200 200 Sections
201 201 ========
202 202
203 203 This section describes the different sections that may appear in a
204 204 Mercurial configuration file, the purpose of each section, its possible
205 205 keys, and their possible values.
206 206
207 207 ``alias``
208 208 ---------
209 209
210 210 Defines command aliases.
211 211 Aliases allow you to define your own commands in terms of other
212 212 commands (or aliases), optionally including arguments. Positional
213 213 arguments in the form of ``$1``, ``$2``, etc in the alias definition
214 214 are expanded by Mercurial before execution. Positional arguments not
215 215 already used by ``$N`` in the definition are put at the end of the
216 216 command to be executed.
217 217
218 218 Alias definitions consist of lines of the form::
219 219
220 220 <alias> = <command> [<argument>]...
221 221
222 222 For example, this definition::
223 223
224 224 latest = log --limit 5
225 225
226 226 creates a new command ``latest`` that shows only the five most recent
227 227 changesets. You can define subsequent aliases using earlier ones::
228 228
229 229 stable5 = latest -b stable
230 230
231 231 .. note::
232 232
233 233 It is possible to create aliases with the same names as
234 234 existing commands, which will then override the original
235 235 definitions. This is almost always a bad idea!
236 236
237 237 An alias can start with an exclamation point (``!``) to make it a
238 238 shell alias. A shell alias is executed with the shell and will let you
239 239 run arbitrary commands. As an example, ::
240 240
241 241 echo = !echo $@
242 242
243 243 will let you do ``hg echo foo`` to have ``foo`` printed in your
244 244 terminal. A better example might be::
245 245
246 246 purge = !$HG status --no-status --unknown -0 | xargs -0 rm
247 247
248 248 which will make ``hg purge`` delete all unknown files in the
249 249 repository in the same manner as the purge extension.
250 250
251 251 Positional arguments like ``$1``, ``$2``, etc. in the alias definition
252 252 expand to the command arguments. Unmatched arguments are
253 253 removed. ``$0`` expands to the alias name and ``$@`` expands to all
254 254 arguments separated by a space. ``"$@"`` (with quotes) expands to all
255 255 arguments quoted individually and separated by a space. These expansions
256 256 happen before the command is passed to the shell.
257 257
258 258 Shell aliases are executed in an environment where ``$HG`` expands to
259 259 the path of the Mercurial that was used to execute the alias. This is
260 260 useful when you want to call further Mercurial commands in a shell
261 261 alias, as was done above for the purge alias. In addition,
262 262 ``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg
263 263 echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``.
264 264
265 265 .. note::
266 266
267 267 Some global configuration options such as ``-R`` are
268 268 processed before shell aliases and will thus not be passed to
269 269 aliases.
270 270
271 271
272 272 ``annotate``
273 273 ------------
274 274
275 275 Settings used when displaying file annotations. All values are
276 276 Booleans and default to False. See ``diff`` section for related
277 277 options for the diff command.
278 278
279 279 ``ignorews``
280 280 Ignore white space when comparing lines.
281 281
282 282 ``ignorewsamount``
283 283 Ignore changes in the amount of white space.
284 284
285 285 ``ignoreblanklines``
286 286 Ignore changes whose lines are all blank.
287 287
288 288
289 289 ``auth``
290 290 --------
291 291
292 292 Authentication credentials for HTTP authentication. This section
293 293 allows you to store usernames and passwords for use when logging
294 294 *into* HTTP servers. See the ``[web]`` configuration section if
295 295 you want to configure *who* can login to your HTTP server.
296 296
297 297 Each line has the following format::
298 298
299 299 <name>.<argument> = <value>
300 300
301 301 where ``<name>`` is used to group arguments into authentication
302 302 entries. Example::
303 303
304 304 foo.prefix = hg.intevation.org/mercurial
305 305 foo.username = foo
306 306 foo.password = bar
307 307 foo.schemes = http https
308 308
309 309 bar.prefix = secure.example.org
310 310 bar.key = path/to/file.key
311 311 bar.cert = path/to/file.cert
312 312 bar.schemes = https
313 313
314 314 Supported arguments:
315 315
316 316 ``prefix``
317 317 Either ``*`` or a URI prefix with or without the scheme part.
318 318 The authentication entry with the longest matching prefix is used
319 319 (where ``*`` matches everything and counts as a match of length
320 320 1). If the prefix doesn't include a scheme, the match is performed
321 321 against the URI with its scheme stripped as well, and the schemes
322 322 argument, q.v., is then subsequently consulted.
323 323
324 324 ``username``
325 325 Optional. Username to authenticate with. If not given, and the
326 326 remote site requires basic or digest authentication, the user will
327 327 be prompted for it. Environment variables are expanded in the
328 328 username letting you do ``foo.username = $USER``. If the URI
329 329 includes a username, only ``[auth]`` entries with a matching
330 330 username or without a username will be considered.
331 331
332 332 ``password``
333 333 Optional. Password to authenticate with. If not given, and the
334 334 remote site requires basic or digest authentication, the user
335 335 will be prompted for it.
336 336
337 337 ``key``
338 338 Optional. PEM encoded client certificate key file. Environment
339 339 variables are expanded in the filename.
340 340
341 341 ``cert``
342 342 Optional. PEM encoded client certificate chain file. Environment
343 343 variables are expanded in the filename.
344 344
345 345 ``schemes``
346 346 Optional. Space separated list of URI schemes to use this
347 347 authentication entry with. Only used if the prefix doesn't include
348 348 a scheme. Supported schemes are http and https. They will match
349 349 static-http and static-https respectively, as well.
350 350 Default: https.
351 351
352 352 If no suitable authentication entry is found, the user is prompted
353 353 for credentials as usual if required by the remote.
354 354
355 355
356 356 ``committemplate``
357 357 ------------------
358 358
359 359 ``changeset`` configuration in this section is used as the template to
360 360 customize the text shown in the editor when committing.
361 361
362 362 In addition to pre-defined template keywords, commit log specific one
363 363 below can be used for customization:
364 364
365 365 ``extramsg``
366 366 String: Extra message (typically 'Leave message empty to abort
367 367 commit.'). This may be changed by some commands or extensions.
368 368
369 369 For example, the template configuration below shows as same text as
370 370 one shown by default::
371 371
372 372 [committemplate]
373 373 changeset = {desc}\n\n
374 374 HG: Enter commit message. Lines beginning with 'HG:' are removed.
375 375 HG: {extramsg}
376 376 HG: --
377 377 HG: user: {author}\n{ifeq(p2rev, "-1", "",
378 378 "HG: branch merge\n")
379 379 }HG: branch '{branch}'\n{if(currentbookmark,
380 380 "HG: bookmark '{currentbookmark}'\n") }{subrepos %
381 381 "HG: subrepo {subrepo}\n" }{file_adds %
382 382 "HG: added {file}\n" }{file_mods %
383 383 "HG: changed {file}\n" }{file_dels %
384 384 "HG: removed {file}\n" }{if(files, "",
385 385 "HG: no files changed\n")}
386 386
387 387 .. note::
388 388
389 389 For some problematic encodings (see :hg:`help win32mbcs` for
390 390 detail), this customization should be configured carefully, to
391 391 avoid showing broken characters.
392 392
393 393 For example, if multibyte character ending with backslash (0x5c) is
394 394 followed by ASCII character 'n' in the customized template,
395 395 sequence of backslash and 'n' is treated as line-feed unexpectedly
396 396 (and multibyte character is broken, too).
397 397
398 398 Customized template is used for commands below (``--edit`` may be
399 399 required):
400 400
401 401 - :hg:`backout`
402 402 - :hg:`commit`
403 403 - :hg:`fetch` (for merge commit only)
404 404 - :hg:`graft`
405 405 - :hg:`histedit`
406 406 - :hg:`import`
407 407 - :hg:`qfold`, :hg:`qnew` and :hg:`qrefresh`
408 408 - :hg:`rebase`
409 409 - :hg:`shelve`
410 410 - :hg:`sign`
411 411 - :hg:`tag`
412 412 - :hg:`transplant`
413 413
414 414 Configuring items below instead of ``changeset`` allows showing
415 415 customized message only for specific actions, or showing different
416 416 messages for each action.
417 417
418 418 - ``changeset.backout`` for :hg:`backout`
419 419 - ``changeset.commit.amend.merge`` for :hg:`commit --amend` on merges
420 420 - ``changeset.commit.amend.normal`` for :hg:`commit --amend` on other
421 421 - ``changeset.commit.normal.merge`` for :hg:`commit` on merges
422 422 - ``changeset.commit.normal.normal`` for :hg:`commit` on other
423 423 - ``changeset.fetch`` for :hg:`fetch` (impling merge commit)
424 424 - ``changeset.gpg.sign`` for :hg:`sign`
425 425 - ``changeset.graft`` for :hg:`graft`
426 426 - ``changeset.histedit.edit`` for ``edit`` of :hg:`histedit`
427 427 - ``changeset.histedit.fold`` for ``fold`` of :hg:`histedit`
428 428 - ``changeset.histedit.mess`` for ``mess`` of :hg:`histedit`
429 429 - ``changeset.histedit.pick`` for ``pick`` of :hg:`histedit`
430 430 - ``changeset.import.bypass`` for :hg:`import --bypass`
431 431 - ``changeset.import.normal.merge`` for :hg:`import` on merges
432 432 - ``changeset.import.normal.normal`` for :hg:`import` on other
433 433 - ``changeset.mq.qnew`` for :hg:`qnew`
434 434 - ``changeset.mq.qfold`` for :hg:`qfold`
435 435 - ``changeset.mq.qrefresh`` for :hg:`qrefresh`
436 436 - ``changeset.rebase.collapse`` for :hg:`rebase --collapse`
437 437 - ``changeset.rebase.merge`` for :hg:`rebase` on merges
438 438 - ``changeset.rebase.normal`` for :hg:`rebase` on other
439 439 - ``changeset.shelve.shelve`` for :hg:`shelve`
440 440 - ``changeset.tag.add`` for :hg:`tag` without ``--remove``
441 441 - ``changeset.tag.remove`` for :hg:`tag --remove`
442 442 - ``changeset.transplant.merge`` for :hg:`transplant` on merges
443 443 - ``changeset.transplant.normal`` for :hg:`transplant` on other
444 444
445 445 These dot-separated lists of names are treated as hierarchical ones.
446 446 For example, ``changeset.tag.remove`` customizes the commit message
447 447 only for :hg:`tag --remove`, but ``changeset.tag`` customizes the
448 448 commit message for :hg:`tag` regardless of ``--remove`` option.
449 449
450 450 At the external editor invocation for committing, corresponding
451 451 dot-separated list of names without ``changeset.`` prefix
452 452 (e.g. ``commit.normal.normal``) is in ``HGEDITFORM`` environment variable.
453 453
454 454 In this section, items other than ``changeset`` can be referred from
455 455 others. For example, the configuration to list committed files up
456 456 below can be referred as ``{listupfiles}``::
457 457
458 458 [committemplate]
459 459 listupfiles = {file_adds %
460 460 "HG: added {file}\n" }{file_mods %
461 461 "HG: changed {file}\n" }{file_dels %
462 462 "HG: removed {file}\n" }{if(files, "",
463 463 "HG: no files changed\n")}
464 464
465 465 ``decode/encode``
466 466 -----------------
467 467
468 468 Filters for transforming files on checkout/checkin. This would
469 469 typically be used for newline processing or other
470 470 localization/canonicalization of files.
471 471
472 472 Filters consist of a filter pattern followed by a filter command.
473 473 Filter patterns are globs by default, rooted at the repository root.
474 474 For example, to match any file ending in ``.txt`` in the root
475 475 directory only, use the pattern ``*.txt``. To match any file ending
476 476 in ``.c`` anywhere in the repository, use the pattern ``**.c``.
477 477 For each file only the first matching filter applies.
478 478
479 479 The filter command can start with a specifier, either ``pipe:`` or
480 480 ``tempfile:``. If no specifier is given, ``pipe:`` is used by default.
481 481
482 482 A ``pipe:`` command must accept data on stdin and return the transformed
483 483 data on stdout.
484 484
485 485 Pipe example::
486 486
487 487 [encode]
488 488 # uncompress gzip files on checkin to improve delta compression
489 489 # note: not necessarily a good idea, just an example
490 490 *.gz = pipe: gunzip
491 491
492 492 [decode]
493 493 # recompress gzip files when writing them to the working dir (we
494 494 # can safely omit "pipe:", because it's the default)
495 495 *.gz = gzip
496 496
497 497 A ``tempfile:`` command is a template. The string ``INFILE`` is replaced
498 498 with the name of a temporary file that contains the data to be
499 499 filtered by the command. The string ``OUTFILE`` is replaced with the name
500 500 of an empty temporary file, where the filtered data must be written by
501 501 the command.
502 502
503 503 .. note::
504 504
505 505 The tempfile mechanism is recommended for Windows systems,
506 506 where the standard shell I/O redirection operators often have
507 507 strange effects and may corrupt the contents of your files.
508 508
509 509 This filter mechanism is used internally by the ``eol`` extension to
510 510 translate line ending characters between Windows (CRLF) and Unix (LF)
511 511 format. We suggest you use the ``eol`` extension for convenience.
512 512
513 513
514 514 ``defaults``
515 515 ------------
516 516
517 517 (defaults are deprecated. Don't use them. Use aliases instead)
518 518
519 519 Use the ``[defaults]`` section to define command defaults, i.e. the
520 520 default options/arguments to pass to the specified commands.
521 521
522 522 The following example makes :hg:`log` run in verbose mode, and
523 523 :hg:`status` show only the modified files, by default::
524 524
525 525 [defaults]
526 526 log = -v
527 527 status = -m
528 528
529 529 The actual commands, instead of their aliases, must be used when
530 530 defining command defaults. The command defaults will also be applied
531 531 to the aliases of the commands defined.
532 532
533 533
534 534 ``diff``
535 535 --------
536 536
537 537 Settings used when displaying diffs. Everything except for ``unified``
538 538 is a Boolean and defaults to False. See ``annotate`` section for
539 539 related options for the annotate command.
540 540
541 541 ``git``
542 542 Use git extended diff format.
543 543
544 544 ``nobinary``
545 545 Omit git binary patches.
546 546
547 547 ``nodates``
548 548 Don't include dates in diff headers.
549 549
550 550 ``noprefix``
551 551 Omit 'a/' and 'b/' prefixes from filenames. Ignored in plain mode.
552 552
553 553 ``showfunc``
554 554 Show which function each change is in.
555 555
556 556 ``ignorews``
557 557 Ignore white space when comparing lines.
558 558
559 559 ``ignorewsamount``
560 560 Ignore changes in the amount of white space.
561 561
562 562 ``ignoreblanklines``
563 563 Ignore changes whose lines are all blank.
564 564
565 565 ``unified``
566 566 Number of lines of context to show.
567 567
568 568 ``email``
569 569 ---------
570 570
571 571 Settings for extensions that send email messages.
572 572
573 573 ``from``
574 574 Optional. Email address to use in "From" header and SMTP envelope
575 575 of outgoing messages.
576 576
577 577 ``to``
578 578 Optional. Comma-separated list of recipients' email addresses.
579 579
580 580 ``cc``
581 581 Optional. Comma-separated list of carbon copy recipients'
582 582 email addresses.
583 583
584 584 ``bcc``
585 585 Optional. Comma-separated list of blind carbon copy recipients'
586 586 email addresses.
587 587
588 588 ``method``
589 589 Optional. Method to use to send email messages. If value is ``smtp``
590 590 (default), use SMTP (see the ``[smtp]`` section for configuration).
591 591 Otherwise, use as name of program to run that acts like sendmail
592 592 (takes ``-f`` option for sender, list of recipients on command line,
593 593 message on stdin). Normally, setting this to ``sendmail`` or
594 594 ``/usr/sbin/sendmail`` is enough to use sendmail to send messages.
595 595
596 596 ``charsets``
597 597 Optional. Comma-separated list of character sets considered
598 598 convenient for recipients. Addresses, headers, and parts not
599 599 containing patches of outgoing messages will be encoded in the
600 600 first character set to which conversion from local encoding
601 601 (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
602 602 conversion fails, the text in question is sent as is. Defaults to
603 603 empty (explicit) list.
604 604
605 605 Order of outgoing email character sets:
606 606
607 607 1. ``us-ascii``: always first, regardless of settings
608 608 2. ``email.charsets``: in order given by user
609 609 3. ``ui.fallbackencoding``: if not in email.charsets
610 610 4. ``$HGENCODING``: if not in email.charsets
611 611 5. ``utf-8``: always last, regardless of settings
612 612
613 613 Email example::
614 614
615 615 [email]
616 616 from = Joseph User <joe.user@example.com>
617 617 method = /usr/sbin/sendmail
618 618 # charsets for western Europeans
619 619 # us-ascii, utf-8 omitted, as they are tried first and last
620 620 charsets = iso-8859-1, iso-8859-15, windows-1252
621 621
622 622
623 623 ``extensions``
624 624 --------------
625 625
626 626 Mercurial has an extension mechanism for adding new features. To
627 627 enable an extension, create an entry for it in this section.
628 628
629 629 If you know that the extension is already in Python's search path,
630 630 you can give the name of the module, followed by ``=``, with nothing
631 631 after the ``=``.
632 632
633 633 Otherwise, give a name that you choose, followed by ``=``, followed by
634 634 the path to the ``.py`` file (including the file name extension) that
635 635 defines the extension.
636 636
637 637 To explicitly disable an extension that is enabled in an hgrc of
638 638 broader scope, prepend its path with ``!``, as in ``foo = !/ext/path``
639 639 or ``foo = !`` when path is not supplied.
640 640
641 641 Example for ``~/.hgrc``::
642 642
643 643 [extensions]
644 644 # (the progress extension will get loaded from Mercurial's path)
645 645 progress =
646 646 # (this extension will get loaded from the file specified)
647 647 myfeature = ~/.hgext/myfeature.py
648 648
649 649
650 650 ``format``
651 651 ----------
652 652
653 653 ``usestore``
654 654 Enable or disable the "store" repository format which improves
655 655 compatibility with systems that fold case or otherwise mangle
656 656 filenames. Enabled by default. Disabling this option will allow
657 657 you to store longer filenames in some situations at the expense of
658 658 compatibility and ensures that the on-disk format of newly created
659 659 repositories will be compatible with Mercurial before version 0.9.4.
660 660
661 661 ``usefncache``
662 662 Enable or disable the "fncache" repository format which enhances
663 663 the "store" repository format (which has to be enabled to use
664 664 fncache) to allow longer filenames and avoids using Windows
665 665 reserved names, e.g. "nul". Enabled by default. Disabling this
666 666 option ensures that the on-disk format of newly created
667 667 repositories will be compatible with Mercurial before version 1.1.
668 668
669 669 ``dotencode``
670 670 Enable or disable the "dotencode" repository format which enhances
671 671 the "fncache" repository format (which has to be enabled to use
672 672 dotencode) to avoid issues with filenames starting with ._ on
673 673 Mac OS X and spaces on Windows. Enabled by default. Disabling this
674 674 option ensures that the on-disk format of newly created
675 675 repositories will be compatible with Mercurial before version 1.7.
676 676
677 677 ``graph``
678 678 ---------
679 679
680 680 Web graph view configuration. This section let you change graph
681 681 elements display properties by branches, for instance to make the
682 682 ``default`` branch stand out.
683 683
684 684 Each line has the following format::
685 685
686 686 <branch>.<argument> = <value>
687 687
688 688 where ``<branch>`` is the name of the branch being
689 689 customized. Example::
690 690
691 691 [graph]
692 692 # 2px width
693 693 default.width = 2
694 694 # red color
695 695 default.color = FF0000
696 696
697 697 Supported arguments:
698 698
699 699 ``width``
700 700 Set branch edges width in pixels.
701 701
702 702 ``color``
703 703 Set branch edges color in hexadecimal RGB notation.
704 704
705 705 ``hooks``
706 706 ---------
707 707
708 708 Commands or Python functions that get automatically executed by
709 709 various actions such as starting or finishing a commit. Multiple
710 710 hooks can be run for the same action by appending a suffix to the
711 711 action. Overriding a site-wide hook can be done by changing its
712 712 value or setting it to an empty string. Hooks can be prioritized
713 713 by adding a prefix of ``priority`` to the hook name on a new line
714 714 and setting the priority. The default priority is 0 if
715 715 not specified.
716 716
717 717 Example ``.hg/hgrc``::
718 718
719 719 [hooks]
720 720 # update working directory after adding changesets
721 721 changegroup.update = hg update
722 722 # do not use the site-wide hook
723 723 incoming =
724 724 incoming.email = /my/email/hook
725 725 incoming.autobuild = /my/build/hook
726 726 # force autobuild hook to run before other incoming hooks
727 727 priority.incoming.autobuild = 1
728 728
729 729 Most hooks are run with environment variables set that give useful
730 730 additional information. For each hook below, the environment
731 731 variables it is passed are listed with names of the form ``$HG_foo``.
732 732
733 733 ``changegroup``
734 734 Run after a changegroup has been added via push, pull or unbundle.
735 735 ID of the first new changeset is in ``$HG_NODE``. URL from which
736 736 changes came is in ``$HG_URL``.
737 737
738 738 ``commit``
739 739 Run after a changeset has been created in the local repository. ID
740 740 of the newly created changeset is in ``$HG_NODE``. Parent changeset
741 741 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
742 742
743 743 ``incoming``
744 744 Run after a changeset has been pulled, pushed, or unbundled into
745 745 the local repository. The ID of the newly arrived changeset is in
746 746 ``$HG_NODE``. URL that was source of changes came is in ``$HG_URL``.
747 747
748 748 ``outgoing``
749 749 Run after sending changes from local repository to another. ID of
750 750 first changeset sent is in ``$HG_NODE``. Source of operation is in
751 751 ``$HG_SOURCE``; see "preoutgoing" hook for description.
752 752
753 753 ``post-<command>``
754 754 Run after successful invocations of the associated command. The
755 755 contents of the command line are passed as ``$HG_ARGS`` and the result
756 756 code in ``$HG_RESULT``. Parsed command line arguments are passed as
757 757 ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
758 758 the python data internally passed to <command>. ``$HG_OPTS`` is a
759 759 dictionary of options (with unspecified options set to their defaults).
760 760 ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
761 761
762 762 ``pre-<command>``
763 763 Run before executing the associated command. The contents of the
764 764 command line are passed as ``$HG_ARGS``. Parsed command line arguments
765 765 are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
766 766 representations of the data internally passed to <command>. ``$HG_OPTS``
767 767 is a dictionary of options (with unspecified options set to their
768 768 defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
769 769 failure, the command doesn't execute and Mercurial returns the failure
770 770 code.
771 771
772 772 ``prechangegroup``
773 773 Run before a changegroup is added via push, pull or unbundle. Exit
774 774 status 0 allows the changegroup to proceed. Non-zero status will
775 775 cause the push, pull or unbundle to fail. URL from which changes
776 776 will come is in ``$HG_URL``.
777 777
778 778 ``precommit``
779 779 Run before starting a local commit. Exit status 0 allows the
780 780 commit to proceed. Non-zero status will cause the commit to fail.
781 781 Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
782 782
783 783 ``prelistkeys``
784 784 Run before listing pushkeys (like bookmarks) in the
785 785 repository. Non-zero status will cause failure. The key namespace is
786 786 in ``$HG_NAMESPACE``.
787 787
788 788 ``preoutgoing``
789 789 Run before collecting changes to send from the local repository to
790 790 another. Non-zero status will cause failure. This lets you prevent
791 791 pull over HTTP or SSH. Also prevents against local pull, push
792 792 (outbound) or bundle commands, but not effective, since you can
793 793 just copy files instead then. Source of operation is in
794 794 ``$HG_SOURCE``. If "serve", operation is happening on behalf of remote
795 795 SSH or HTTP repository. If "push", "pull" or "bundle", operation
796 796 is happening on behalf of repository on same system.
797 797
798 798 ``prepushkey``
799 799 Run before a pushkey (like a bookmark) is added to the
800 800 repository. Non-zero status will cause the key to be rejected. The
801 801 key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,
802 802 the old value (if any) is in ``$HG_OLD``, and the new value is in
803 803 ``$HG_NEW``.
804 804
805 805 ``pretag``
806 806 Run before creating a tag. Exit status 0 allows the tag to be
807 807 created. Non-zero status will cause the tag to fail. ID of
808 808 changeset to tag is in ``$HG_NODE``. Name of tag is in ``$HG_TAG``. Tag is
809 809 local if ``$HG_LOCAL=1``, in repository if ``$HG_LOCAL=0``.
810 810
811 811 ``pretxnchangegroup``
812 812 Run after a changegroup has been added via push, pull or unbundle,
813 813 but before the transaction has been committed. Changegroup is
814 814 visible to hook program. This lets you validate incoming changes
815 815 before accepting them. Passed the ID of the first new changeset in
816 816 ``$HG_NODE``. Exit status 0 allows the transaction to commit. Non-zero
817 817 status will cause the transaction to be rolled back and the push,
818 818 pull or unbundle will fail. URL that was source of changes is in
819 819 ``$HG_URL``.
820 820
821 821 ``pretxncommit``
822 822 Run after a changeset has been created but the transaction not yet
823 823 committed. Changeset is visible to hook program. This lets you
824 824 validate commit message and changes. Exit status 0 allows the
825 825 commit to proceed. Non-zero status will cause the transaction to
826 826 be rolled back. ID of changeset is in ``$HG_NODE``. Parent changeset
827 827 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
828 828
829 829 ``preupdate``
830 830 Run before updating the working directory. Exit status 0 allows
831 831 the update to proceed. Non-zero status will prevent the update.
832 832 Changeset ID of first new parent is in ``$HG_PARENT1``. If merge, ID
833 833 of second new parent is in ``$HG_PARENT2``.
834 834
835 835 ``listkeys``
836 836 Run after listing pushkeys (like bookmarks) in the repository. The
837 837 key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a
838 838 dictionary containing the keys and values.
839 839
840 840 ``pushkey``
841 841 Run after a pushkey (like a bookmark) is added to the
842 842 repository. The key namespace is in ``$HG_NAMESPACE``, the key is in
843 843 ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new
844 844 value is in ``$HG_NEW``.
845 845
846 846 ``tag``
847 847 Run after a tag is created. ID of tagged changeset is in ``$HG_NODE``.
848 848 Name of tag is in ``$HG_TAG``. Tag is local if ``$HG_LOCAL=1``, in
849 849 repository if ``$HG_LOCAL=0``.
850 850
851 851 ``update``
852 852 Run after updating the working directory. Changeset ID of first
853 853 new parent is in ``$HG_PARENT1``. If merge, ID of second new parent is
854 854 in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
855 855 update failed (e.g. because conflicts not resolved), ``$HG_ERROR=1``.
856 856
857 857 .. note::
858 858
859 859 It is generally better to use standard hooks rather than the
860 860 generic pre- and post- command hooks as they are guaranteed to be
861 861 called in the appropriate contexts for influencing transactions.
862 862 Also, hooks like "commit" will be called in all contexts that
863 863 generate a commit (e.g. tag) and not just the commit command.
864 864
865 865 .. note::
866 866
867 867 Environment variables with empty values may not be passed to
868 868 hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
869 869 will have an empty value under Unix-like platforms for non-merge
870 870 changesets, while it will not be available at all under Windows.
871 871
872 872 The syntax for Python hooks is as follows::
873 873
874 874 hookname = python:modulename.submodule.callable
875 875 hookname = python:/path/to/python/module.py:callable
876 876
877 877 Python hooks are run within the Mercurial process. Each hook is
878 878 called with at least three keyword arguments: a ui object (keyword
879 879 ``ui``), a repository object (keyword ``repo``), and a ``hooktype``
880 880 keyword that tells what kind of hook is used. Arguments listed as
881 881 environment variables above are passed as keyword arguments, with no
882 882 ``HG_`` prefix, and names in lower case.
883 883
884 884 If a Python hook returns a "true" value or raises an exception, this
885 885 is treated as a failure.
886 886
887 887
888 888 ``hostfingerprints``
889 889 --------------------
890 890
891 891 Fingerprints of the certificates of known HTTPS servers.
892 892 A HTTPS connection to a server with a fingerprint configured here will
893 893 only succeed if the servers certificate matches the fingerprint.
894 894 This is very similar to how ssh known hosts works.
895 895 The fingerprint is the SHA-1 hash value of the DER encoded certificate.
896 896 The CA chain and web.cacerts is not used for servers with a fingerprint.
897 897
898 898 For example::
899 899
900 900 [hostfingerprints]
901 901 hg.intevation.org = fa:1f:d9:48:f1:e7:74:30:38:8d:d8:58:b6:94:b8:58:28:7d:8b:d0
902 902
903 903 This feature is only supported when using Python 2.6 or later.
904 904
905 905
906 906 ``http_proxy``
907 907 --------------
908 908
909 909 Used to access web-based Mercurial repositories through a HTTP
910 910 proxy.
911 911
912 912 ``host``
913 913 Host name and (optional) port of the proxy server, for example
914 914 "myproxy:8000".
915 915
916 916 ``no``
917 917 Optional. Comma-separated list of host names that should bypass
918 918 the proxy.
919 919
920 920 ``passwd``
921 921 Optional. Password to authenticate with at the proxy server.
922 922
923 923 ``user``
924 924 Optional. User name to authenticate with at the proxy server.
925 925
926 926 ``always``
927 927 Optional. Always use the proxy, even for localhost and any entries
928 928 in ``http_proxy.no``. True or False. Default: False.
929 929
930 930 ``merge-patterns``
931 931 ------------------
932 932
933 933 This section specifies merge tools to associate with particular file
934 934 patterns. Tools matched here will take precedence over the default
935 935 merge tool. Patterns are globs by default, rooted at the repository
936 936 root.
937 937
938 938 Example::
939 939
940 940 [merge-patterns]
941 941 **.c = kdiff3
942 942 **.jpg = myimgmerge
943 943
944 944 ``merge-tools``
945 945 ---------------
946 946
947 947 This section configures external merge tools to use for file-level
948 948 merges. This section has likely been preconfigured at install time.
949 949 Use :hg:`config merge-tools` to check the existing configuration.
950 950 Also see :hg:`help merge-tools` for more details.
951 951
952 952 Example ``~/.hgrc``::
953 953
954 954 [merge-tools]
955 955 # Override stock tool location
956 956 kdiff3.executable = ~/bin/kdiff3
957 957 # Specify command line
958 958 kdiff3.args = $base $local $other -o $output
959 959 # Give higher priority
960 960 kdiff3.priority = 1
961 961
962 962 # Changing the priority of preconfigured tool
963 963 vimdiff.priority = 0
964 964
965 965 # Define new tool
966 966 myHtmlTool.args = -m $local $other $base $output
967 967 myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
968 968 myHtmlTool.priority = 1
969 969
970 970 Supported arguments:
971 971
972 972 ``priority``
973 973 The priority in which to evaluate this tool.
974 974 Default: 0.
975 975
976 976 ``executable``
977 977 Either just the name of the executable or its pathname. On Windows,
978 978 the path can use environment variables with ${ProgramFiles} syntax.
979 979 Default: the tool name.
980 980
981 981 ``args``
982 982 The arguments to pass to the tool executable. You can refer to the
983 983 files being merged as well as the output file through these
984 984 variables: ``$base``, ``$local``, ``$other``, ``$output``. The meaning
985 985 of ``$local`` and ``$other`` can vary depending on which action is being
986 986 performed. During and update or merge, ``$local`` represents the original
987 987 state of the file, while ``$other`` represents the commit you are updating
988 988 to or the commit you are merging with. During a rebase ``$local``
989 989 represents the destination of the rebase, and ``$other`` represents the
990 990 commit being rebased.
991 991 Default: ``$local $base $other``
992 992
993 993 ``premerge``
994 994 Attempt to run internal non-interactive 3-way merge tool before
995 995 launching external tool. Options are ``true``, ``false``, ``keep`` or
996 996 ``keep-merge3``. The ``keep`` option will leave markers in the file if the
997 997 premerge fails. The ``keep-merge3`` will do the same but include information
998 998 about the base of the merge in the marker (see internal :merge3 in
999 999 :hg:`help merge-tools`).
1000 1000 Default: True
1001 1001
1002 1002 ``binary``
1003 1003 This tool can merge binary files. Defaults to False, unless tool
1004 1004 was selected by file pattern match.
1005 1005
1006 1006 ``symlink``
1007 1007 This tool can merge symlinks. Defaults to False, even if tool was
1008 1008 selected by file pattern match.
1009 1009
1010 1010 ``check``
1011 1011 A list of merge success-checking options:
1012 1012
1013 1013 ``changed``
1014 1014 Ask whether merge was successful when the merged file shows no changes.
1015 1015 ``conflicts``
1016 1016 Check whether there are conflicts even though the tool reported success.
1017 1017 ``prompt``
1018 1018 Always prompt for merge success, regardless of success reported by tool.
1019 1019
1020 1020 ``fixeol``
1021 1021 Attempt to fix up EOL changes caused by the merge tool.
1022 1022 Default: False
1023 1023
1024 1024 ``gui``
1025 1025 This tool requires a graphical interface to run. Default: False
1026 1026
1027 1027 ``regkey``
1028 1028 Windows registry key which describes install location of this
1029 1029 tool. Mercurial will search for this key first under
1030 1030 ``HKEY_CURRENT_USER`` and then under ``HKEY_LOCAL_MACHINE``.
1031 1031 Default: None
1032 1032
1033 1033 ``regkeyalt``
1034 1034 An alternate Windows registry key to try if the first key is not
1035 1035 found. The alternate key uses the same ``regname`` and ``regappend``
1036 1036 semantics of the primary key. The most common use for this key
1037 1037 is to search for 32bit applications on 64bit operating systems.
1038 1038 Default: None
1039 1039
1040 1040 ``regname``
1041 1041 Name of value to read from specified registry key. Defaults to the
1042 1042 unnamed (default) value.
1043 1043
1044 1044 ``regappend``
1045 1045 String to append to the value read from the registry, typically
1046 1046 the executable name of the tool.
1047 1047 Default: None
1048 1048
1049 1049
1050 1050 ``patch``
1051 1051 ---------
1052 1052
1053 1053 Settings used when applying patches, for instance through the 'import'
1054 1054 command or with Mercurial Queues extension.
1055 1055
1056 1056 ``eol``
1057 1057 When set to 'strict' patch content and patched files end of lines
1058 1058 are preserved. When set to ``lf`` or ``crlf``, both files end of
1059 1059 lines are ignored when patching and the result line endings are
1060 1060 normalized to either LF (Unix) or CRLF (Windows). When set to
1061 1061 ``auto``, end of lines are again ignored while patching but line
1062 1062 endings in patched files are normalized to their original setting
1063 1063 on a per-file basis. If target file does not exist or has no end
1064 1064 of line, patch line endings are preserved.
1065 1065 Default: strict.
1066 1066
1067 1067
1068 1068 ``paths``
1069 1069 ---------
1070 1070
1071 1071 Assigns symbolic names to repositories. The left side is the
1072 1072 symbolic name, and the right gives the directory or URL that is the
1073 1073 location of the repository. Default paths can be declared by setting
1074 1074 the following entries.
1075 1075
1076 1076 ``default``
1077 1077 Directory or URL to use when pulling if no source is specified.
1078 1078 Default is set to repository from which the current repository was
1079 1079 cloned.
1080 1080
1081 1081 ``default-push``
1082 1082 Optional. Directory or URL to use when pushing if no destination
1083 1083 is specified.
1084 1084
1085 1085 Custom paths can be defined by assigning the path to a name that later can be
1086 1086 used from the command line. Example::
1087 1087
1088 1088 [paths]
1089 1089 my_path = http://example.com/path
1090 1090
1091 1091 To push to the path defined in ``my_path`` run the command::
1092 1092
1093 1093 hg push my_path
1094 1094
1095 1095
1096 1096 ``phases``
1097 1097 ----------
1098 1098
1099 1099 Specifies default handling of phases. See :hg:`help phases` for more
1100 1100 information about working with phases.
1101 1101
1102 1102 ``publish``
1103 1103 Controls draft phase behavior when working as a server. When true,
1104 1104 pushed changesets are set to public in both client and server and
1105 1105 pulled or cloned changesets are set to public in the client.
1106 1106 Default: True
1107 1107
1108 1108 ``new-commit``
1109 1109 Phase of newly-created commits.
1110 1110 Default: draft
1111 1111
1112 1112 ``checksubrepos``
1113 1113 Check the phase of the current revision of each subrepository. Allowed
1114 1114 values are "ignore", "follow" and "abort". For settings other than
1115 1115 "ignore", the phase of the current revision of each subrepository is
1116 1116 checked before committing the parent repository. If any of those phases is
1117 1117 greater than the phase of the parent repository (e.g. if a subrepo is in a
1118 1118 "secret" phase while the parent repo is in "draft" phase), the commit is
1119 1119 either aborted (if checksubrepos is set to "abort") or the higher phase is
1120 1120 used for the parent repository commit (if set to "follow").
1121 1121 Default: "follow"
1122 1122
1123 1123
1124 1124 ``profiling``
1125 1125 -------------
1126 1126
1127 1127 Specifies profiling type, format, and file output. Two profilers are
1128 1128 supported: an instrumenting profiler (named ``ls``), and a sampling
1129 1129 profiler (named ``stat``).
1130 1130
1131 1131 In this section description, 'profiling data' stands for the raw data
1132 1132 collected during profiling, while 'profiling report' stands for a
1133 1133 statistical text report generated from the profiling data. The
1134 1134 profiling is done using lsprof.
1135 1135
1136 1136 ``type``
1137 1137 The type of profiler to use.
1138 1138 Default: ls.
1139 1139
1140 1140 ``ls``
1141 1141 Use Python's built-in instrumenting profiler. This profiler
1142 1142 works on all platforms, but each line number it reports is the
1143 1143 first line of a function. This restriction makes it difficult to
1144 1144 identify the expensive parts of a non-trivial function.
1145 1145 ``stat``
1146 1146 Use a third-party statistical profiler, statprof. This profiler
1147 1147 currently runs only on Unix systems, and is most useful for
1148 1148 profiling commands that run for longer than about 0.1 seconds.
1149 1149
1150 1150 ``format``
1151 1151 Profiling format. Specific to the ``ls`` instrumenting profiler.
1152 1152 Default: text.
1153 1153
1154 1154 ``text``
1155 1155 Generate a profiling report. When saving to a file, it should be
1156 1156 noted that only the report is saved, and the profiling data is
1157 1157 not kept.
1158 1158 ``kcachegrind``
1159 1159 Format profiling data for kcachegrind use: when saving to a
1160 1160 file, the generated file can directly be loaded into
1161 1161 kcachegrind.
1162 1162
1163 1163 ``frequency``
1164 1164 Sampling frequency. Specific to the ``stat`` sampling profiler.
1165 1165 Default: 1000.
1166 1166
1167 1167 ``output``
1168 1168 File path where profiling data or report should be saved. If the
1169 1169 file exists, it is replaced. Default: None, data is printed on
1170 1170 stderr
1171 1171
1172 1172 ``sort``
1173 1173 Sort field. Specific to the ``ls`` instrumenting profiler.
1174 1174 One of ``callcount``, ``reccallcount``, ``totaltime`` and
1175 1175 ``inlinetime``.
1176 1176 Default: inlinetime.
1177 1177
1178 1178 ``limit``
1179 1179 Number of lines to show. Specific to the ``ls`` instrumenting profiler.
1180 1180 Default: 30.
1181 1181
1182 1182 ``nested``
1183 1183 Show at most this number of lines of drill-down info after each main entry.
1184 1184 This can help explain the difference between Total and Inline.
1185 1185 Specific to the ``ls`` instrumenting profiler.
1186 1186 Default: 5.
1187 1187
1188 1188 ``revsetalias``
1189 1189 ---------------
1190 1190
1191 1191 Alias definitions for revsets. See :hg:`help revsets` for details.
1192 1192
1193 1193 ``server``
1194 1194 ----------
1195 1195
1196 1196 Controls generic server settings.
1197 1197
1198 1198 ``uncompressed``
1199 1199 Whether to allow clients to clone a repository using the
1200 1200 uncompressed streaming protocol. This transfers about 40% more
1201 1201 data than a regular clone, but uses less memory and CPU on both
1202 1202 server and client. Over a LAN (100 Mbps or better) or a very fast
1203 1203 WAN, an uncompressed streaming clone is a lot faster (~10x) than a
1204 1204 regular clone. Over most WAN connections (anything slower than
1205 1205 about 6 Mbps), uncompressed streaming is slower, because of the
1206 1206 extra data transfer overhead. This mode will also temporarily hold
1207 1207 the write lock while determining what data to transfer.
1208 1208 Default is True.
1209 1209
1210 1210 ``preferuncompressed``
1211 1211 When set, clients will try to use the uncompressed streaming
1212 1212 protocol. Default is False.
1213 1213
1214 1214 ``validate``
1215 1215 Whether to validate the completeness of pushed changesets by
1216 1216 checking that all new file revisions specified in manifests are
1217 1217 present. Default is False.
1218 1218
1219 1219 ``smtp``
1220 1220 --------
1221 1221
1222 1222 Configuration for extensions that need to send email messages.
1223 1223
1224 1224 ``host``
1225 1225 Host name of mail server, e.g. "mail.example.com".
1226 1226
1227 1227 ``port``
1228 1228 Optional. Port to connect to on mail server. Default: 465 (if
1229 1229 ``tls`` is smtps) or 25 (otherwise).
1230 1230
1231 1231 ``tls``
1232 1232 Optional. Method to enable TLS when connecting to mail server: starttls,
1233 1233 smtps or none. Default: none.
1234 1234
1235 1235 ``verifycert``
1236 1236 Optional. Verification for the certificate of mail server, when
1237 1237 ``tls`` is starttls or smtps. "strict", "loose" or False. For
1238 1238 "strict" or "loose", the certificate is verified as same as the
1239 1239 verification for HTTPS connections (see ``[hostfingerprints]`` and
1240 1240 ``[web] cacerts`` also). For "strict", sending email is also
1241 1241 aborted, if there is no configuration for mail server in
1242 1242 ``[hostfingerprints]`` and ``[web] cacerts``. --insecure for
1243 1243 :hg:`email` overwrites this as "loose". Default: "strict".
1244 1244
1245 1245 ``username``
1246 1246 Optional. User name for authenticating with the SMTP server.
1247 1247 Default: none.
1248 1248
1249 1249 ``password``
1250 1250 Optional. Password for authenticating with the SMTP server. If not
1251 1251 specified, interactive sessions will prompt the user for a
1252 1252 password; non-interactive sessions will fail. Default: none.
1253 1253
1254 1254 ``local_hostname``
1255 1255 Optional. It's the hostname that the sender can use to identify
1256 1256 itself to the MTA.
1257 1257
1258 1258
1259 1259 ``subpaths``
1260 1260 ------------
1261 1261
1262 1262 Subrepository source URLs can go stale if a remote server changes name
1263 1263 or becomes temporarily unavailable. This section lets you define
1264 1264 rewrite rules of the form::
1265 1265
1266 1266 <pattern> = <replacement>
1267 1267
1268 1268 where ``pattern`` is a regular expression matching a subrepository
1269 1269 source URL and ``replacement`` is the replacement string used to
1270 1270 rewrite it. Groups can be matched in ``pattern`` and referenced in
1271 1271 ``replacements``. For instance::
1272 1272
1273 1273 http://server/(.*)-hg/ = http://hg.server/\1/
1274 1274
1275 1275 rewrites ``http://server/foo-hg/`` into ``http://hg.server/foo/``.
1276 1276
1277 1277 Relative subrepository paths are first made absolute, and the
1278 1278 rewrite rules are then applied on the full (absolute) path. The rules
1279 1279 are applied in definition order.
1280 1280
1281 1281 ``trusted``
1282 1282 -----------
1283 1283
1284 1284 Mercurial will not use the settings in the
1285 1285 ``.hg/hgrc`` file from a repository if it doesn't belong to a trusted
1286 1286 user or to a trusted group, as various hgrc features allow arbitrary
1287 1287 commands to be run. This issue is often encountered when configuring
1288 1288 hooks or extensions for shared repositories or servers. However,
1289 1289 the web interface will use some safe settings from the ``[web]``
1290 1290 section.
1291 1291
1292 1292 This section specifies what users and groups are trusted. The
1293 1293 current user is always trusted. To trust everybody, list a user or a
1294 1294 group with name ``*``. These settings must be placed in an
1295 1295 *already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
1296 1296 user or service running Mercurial.
1297 1297
1298 1298 ``users``
1299 1299 Comma-separated list of trusted users.
1300 1300
1301 1301 ``groups``
1302 1302 Comma-separated list of trusted groups.
1303 1303
1304 1304
1305 1305 ``ui``
1306 1306 ------
1307 1307
1308 1308 User interface controls.
1309 1309
1310 1310 ``archivemeta``
1311 1311 Whether to include the .hg_archival.txt file containing meta data
1312 1312 (hashes for the repository base and for tip) in archives created
1313 1313 by the :hg:`archive` command or downloaded via hgweb.
1314 1314 Default is True.
1315 1315
1316 1316 ``askusername``
1317 1317 Whether to prompt for a username when committing. If True, and
1318 1318 neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
1319 1319 be prompted to enter a username. If no username is entered, the
1320 1320 default ``USER@HOST`` is used instead.
1321 1321 Default is False.
1322 1322
1323 1323 ``commitsubrepos``
1324 1324 Whether to commit modified subrepositories when committing the
1325 1325 parent repository. If False and one subrepository has uncommitted
1326 1326 changes, abort the commit.
1327 1327 Default is False.
1328 1328
1329 1329 ``debug``
1330 1330 Print debugging information. True or False. Default is False.
1331 1331
1332 1332 ``editor``
1333 1333 The editor to use during a commit. Default is ``$EDITOR`` or ``vi``.
1334 1334
1335 1335 ``fallbackencoding``
1336 1336 Encoding to try if it's not possible to decode the changelog using
1337 1337 UTF-8. Default is ISO-8859-1.
1338 1338
1339 1339 ``ignore``
1340 1340 A file to read per-user ignore patterns from. This file should be
1341 in the same format as a repository-wide .hgignore file. This
1342 option supports hook syntax, so if you want to specify multiple
1343 ignore files, you can do so by setting something like
1344 ``ignore.other = ~/.hgignore2``. For details of the ignore file
1345 format, see the ``hgignore(5)`` man page.
1341 in the same format as a repository-wide .hgignore file. Filenames
1342 are relative to the repository root. This option supports hook syntax,
1343 so if you want to specify multiple ignore files, you can do so by
1344 setting something like ``ignore.other = ~/.hgignore2``. For details
1345 of the ignore file format, see the ``hgignore(5)`` man page.
1346 1346
1347 1347 ``interactive``
1348 1348 Allow to prompt the user. True or False. Default is True.
1349 1349
1350 1350 ``logtemplate``
1351 1351 Template string for commands that print changesets.
1352 1352
1353 1353 ``merge``
1354 1354 The conflict resolution program to use during a manual merge.
1355 1355 For more information on merge tools see :hg:`help merge-tools`.
1356 1356 For configuring merge tools see the ``[merge-tools]`` section.
1357 1357
1358 1358 ``mergemarkers``
1359 1359 Sets the merge conflict marker label styling. The ``detailed``
1360 1360 style uses the ``mergemarkertemplate`` setting to style the labels.
1361 1361 The ``basic`` style just uses 'local' and 'other' as the marker label.
1362 1362 One of ``basic`` or ``detailed``.
1363 1363 Default is ``basic``.
1364 1364
1365 1365 ``mergemarkertemplate``
1366 1366 The template used to print the commit description next to each conflict
1367 1367 marker during merge conflicts. See :hg:`help templates` for the template
1368 1368 format.
1369 1369 Defaults to showing the hash, tags, branches, bookmarks, author, and
1370 1370 the first line of the commit description.
1371 1371 You have to pay attention to encodings of managed files, if you
1372 1372 use non-ASCII characters in tags, branches, bookmarks, author
1373 1373 and/or commit descriptions. At template expansion, non-ASCII
1374 1374 characters use the encoding specified by ``--encoding`` global
1375 1375 option, ``HGENCODING`` or other locale setting environment
1376 1376 variables. The difference of encoding between merged file and
1377 1377 conflict markers causes serious problem.
1378 1378
1379 1379 ``portablefilenames``
1380 1380 Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
1381 1381 Default is ``warn``.
1382 1382 If set to ``warn`` (or ``true``), a warning message is printed on POSIX
1383 1383 platforms, if a file with a non-portable filename is added (e.g. a file
1384 1384 with a name that can't be created on Windows because it contains reserved
1385 1385 parts like ``AUX``, reserved characters like ``:``, or would cause a case
1386 1386 collision with an existing file).
1387 1387 If set to ``ignore`` (or ``false``), no warning is printed.
1388 1388 If set to ``abort``, the command is aborted.
1389 1389 On Windows, this configuration option is ignored and the command aborted.
1390 1390
1391 1391 ``quiet``
1392 1392 Reduce the amount of output printed. True or False. Default is False.
1393 1393
1394 1394 ``remotecmd``
1395 1395 remote command to use for clone/push/pull operations. Default is ``hg``.
1396 1396
1397 1397 ``reportoldssl``
1398 1398 Warn if an SSL certificate is unable to be used due to using Python
1399 1399 2.5 or earlier. True or False. Default is True.
1400 1400
1401 1401 ``report_untrusted``
1402 1402 Warn if a ``.hg/hgrc`` file is ignored due to not being owned by a
1403 1403 trusted user or group. True or False. Default is True.
1404 1404
1405 1405 ``slash``
1406 1406 Display paths using a slash (``/``) as the path separator. This
1407 1407 only makes a difference on systems where the default path
1408 1408 separator is not the slash character (e.g. Windows uses the
1409 1409 backslash character (``\``)).
1410 1410 Default is False.
1411 1411
1412 1412 ``ssh``
1413 1413 command to use for SSH connections. Default is ``ssh``.
1414 1414
1415 1415 ``strict``
1416 1416 Require exact command names, instead of allowing unambiguous
1417 1417 abbreviations. True or False. Default is False.
1418 1418
1419 1419 ``style``
1420 1420 Name of style to use for command output.
1421 1421
1422 1422 ``timeout``
1423 1423 The timeout used when a lock is held (in seconds), a negative value
1424 1424 means no timeout. Default is 600.
1425 1425
1426 1426 ``traceback``
1427 1427 Mercurial always prints a traceback when an unknown exception
1428 1428 occurs. Setting this to True will make Mercurial print a traceback
1429 1429 on all exceptions, even those recognized by Mercurial (such as
1430 1430 IOError or MemoryError). Default is False.
1431 1431
1432 1432 ``username``
1433 1433 The committer of a changeset created when running "commit".
1434 1434 Typically a person's name and email address, e.g. ``Fred Widget
1435 1435 <fred@example.com>``. Default is ``$EMAIL`` or ``username@hostname``. If
1436 1436 the username in hgrc is empty, it has to be specified manually or
1437 1437 in a different hgrc file (e.g. ``$HOME/.hgrc``, if the admin set
1438 1438 ``username =`` in the system hgrc). Environment variables in the
1439 1439 username are expanded.
1440 1440
1441 1441 ``verbose``
1442 1442 Increase the amount of output printed. True or False. Default is False.
1443 1443
1444 1444
1445 1445 ``web``
1446 1446 -------
1447 1447
1448 1448 Web interface configuration. The settings in this section apply to
1449 1449 both the builtin webserver (started by :hg:`serve`) and the script you
1450 1450 run through a webserver (``hgweb.cgi`` and the derivatives for FastCGI
1451 1451 and WSGI).
1452 1452
1453 1453 The Mercurial webserver does no authentication (it does not prompt for
1454 1454 usernames and passwords to validate *who* users are), but it does do
1455 1455 authorization (it grants or denies access for *authenticated users*
1456 1456 based on settings in this section). You must either configure your
1457 1457 webserver to do authentication for you, or disable the authorization
1458 1458 checks.
1459 1459
1460 1460 For a quick setup in a trusted environment, e.g., a private LAN, where
1461 1461 you want it to accept pushes from anybody, you can use the following
1462 1462 command line::
1463 1463
1464 1464 $ hg --config web.allow_push=* --config web.push_ssl=False serve
1465 1465
1466 1466 Note that this will allow anybody to push anything to the server and
1467 1467 that this should not be used for public servers.
1468 1468
1469 1469 The full set of options is:
1470 1470
1471 1471 ``accesslog``
1472 1472 Where to output the access log. Default is stdout.
1473 1473
1474 1474 ``address``
1475 1475 Interface address to bind to. Default is all.
1476 1476
1477 1477 ``allow_archive``
1478 1478 List of archive format (bz2, gz, zip) allowed for downloading.
1479 1479 Default is empty.
1480 1480
1481 1481 ``allowbz2``
1482 1482 (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
1483 1483 revisions.
1484 1484 Default is False.
1485 1485
1486 1486 ``allowgz``
1487 1487 (DEPRECATED) Whether to allow .tar.gz downloading of repository
1488 1488 revisions.
1489 1489 Default is False.
1490 1490
1491 1491 ``allowpull``
1492 1492 Whether to allow pulling from the repository. Default is True.
1493 1493
1494 1494 ``allow_push``
1495 1495 Whether to allow pushing to the repository. If empty or not set,
1496 1496 push is not allowed. If the special value ``*``, any remote user can
1497 1497 push, including unauthenticated users. Otherwise, the remote user
1498 1498 must have been authenticated, and the authenticated user name must
1499 1499 be present in this list. The contents of the allow_push list are
1500 1500 examined after the deny_push list.
1501 1501
1502 1502 ``allow_read``
1503 1503 If the user has not already been denied repository access due to
1504 1504 the contents of deny_read, this list determines whether to grant
1505 1505 repository access to the user. If this list is not empty, and the
1506 1506 user is unauthenticated or not present in the list, then access is
1507 1507 denied for the user. If the list is empty or not set, then access
1508 1508 is permitted to all users by default. Setting allow_read to the
1509 1509 special value ``*`` is equivalent to it not being set (i.e. access
1510 1510 is permitted to all users). The contents of the allow_read list are
1511 1511 examined after the deny_read list.
1512 1512
1513 1513 ``allowzip``
1514 1514 (DEPRECATED) Whether to allow .zip downloading of repository
1515 1515 revisions. Default is False. This feature creates temporary files.
1516 1516
1517 1517 ``archivesubrepos``
1518 1518 Whether to recurse into subrepositories when archiving. Default is
1519 1519 False.
1520 1520
1521 1521 ``baseurl``
1522 1522 Base URL to use when publishing URLs in other locations, so
1523 1523 third-party tools like email notification hooks can construct
1524 1524 URLs. Example: ``http://hgserver/repos/``.
1525 1525
1526 1526 ``cacerts``
1527 1527 Path to file containing a list of PEM encoded certificate
1528 1528 authority certificates. Environment variables and ``~user``
1529 1529 constructs are expanded in the filename. If specified on the
1530 1530 client, then it will verify the identity of remote HTTPS servers
1531 1531 with these certificates.
1532 1532
1533 1533 This feature is only supported when using Python 2.6 or later. If you wish
1534 1534 to use it with earlier versions of Python, install the backported
1535 1535 version of the ssl library that is available from
1536 1536 ``http://pypi.python.org``.
1537 1537
1538 1538 To disable SSL verification temporarily, specify ``--insecure`` from
1539 1539 command line.
1540 1540
1541 1541 You can use OpenSSL's CA certificate file if your platform has
1542 1542 one. On most Linux systems this will be
1543 1543 ``/etc/ssl/certs/ca-certificates.crt``. Otherwise you will have to
1544 1544 generate this file manually. The form must be as follows::
1545 1545
1546 1546 -----BEGIN CERTIFICATE-----
1547 1547 ... (certificate in base64 PEM encoding) ...
1548 1548 -----END CERTIFICATE-----
1549 1549 -----BEGIN CERTIFICATE-----
1550 1550 ... (certificate in base64 PEM encoding) ...
1551 1551 -----END CERTIFICATE-----
1552 1552
1553 1553 ``cache``
1554 1554 Whether to support caching in hgweb. Defaults to True.
1555 1555
1556 1556 ``collapse``
1557 1557 With ``descend`` enabled, repositories in subdirectories are shown at
1558 1558 a single level alongside repositories in the current path. With
1559 1559 ``collapse`` also enabled, repositories residing at a deeper level than
1560 1560 the current path are grouped behind navigable directory entries that
1561 1561 lead to the locations of these repositories. In effect, this setting
1562 1562 collapses each collection of repositories found within a subdirectory
1563 1563 into a single entry for that subdirectory. Default is False.
1564 1564
1565 1565 ``comparisoncontext``
1566 1566 Number of lines of context to show in side-by-side file comparison. If
1567 1567 negative or the value ``full``, whole files are shown. Default is 5.
1568 1568 This setting can be overridden by a ``context`` request parameter to the
1569 1569 ``comparison`` command, taking the same values.
1570 1570
1571 1571 ``contact``
1572 1572 Name or email address of the person in charge of the repository.
1573 1573 Defaults to ui.username or ``$EMAIL`` or "unknown" if unset or empty.
1574 1574
1575 1575 ``deny_push``
1576 1576 Whether to deny pushing to the repository. If empty or not set,
1577 1577 push is not denied. If the special value ``*``, all remote users are
1578 1578 denied push. Otherwise, unauthenticated users are all denied, and
1579 1579 any authenticated user name present in this list is also denied. The
1580 1580 contents of the deny_push list are examined before the allow_push list.
1581 1581
1582 1582 ``deny_read``
1583 1583 Whether to deny reading/viewing of the repository. If this list is
1584 1584 not empty, unauthenticated users are all denied, and any
1585 1585 authenticated user name present in this list is also denied access to
1586 1586 the repository. If set to the special value ``*``, all remote users
1587 1587 are denied access (rarely needed ;). If deny_read is empty or not set,
1588 1588 the determination of repository access depends on the presence and
1589 1589 content of the allow_read list (see description). If both
1590 1590 deny_read and allow_read are empty or not set, then access is
1591 1591 permitted to all users by default. If the repository is being
1592 1592 served via hgwebdir, denied users will not be able to see it in
1593 1593 the list of repositories. The contents of the deny_read list have
1594 1594 priority over (are examined before) the contents of the allow_read
1595 1595 list.
1596 1596
1597 1597 ``descend``
1598 1598 hgwebdir indexes will not descend into subdirectories. Only repositories
1599 1599 directly in the current path will be shown (other repositories are still
1600 1600 available from the index corresponding to their containing path).
1601 1601
1602 1602 ``description``
1603 1603 Textual description of the repository's purpose or contents.
1604 1604 Default is "unknown".
1605 1605
1606 1606 ``encoding``
1607 1607 Character encoding name. Default is the current locale charset.
1608 1608 Example: "UTF-8"
1609 1609
1610 1610 ``errorlog``
1611 1611 Where to output the error log. Default is stderr.
1612 1612
1613 1613 ``guessmime``
1614 1614 Control MIME types for raw download of file content.
1615 1615 Set to True to let hgweb guess the content type from the file
1616 1616 extension. This will serve HTML files as ``text/html`` and might
1617 1617 allow cross-site scripting attacks when serving untrusted
1618 1618 repositories. Default is False.
1619 1619
1620 1620 ``hidden``
1621 1621 Whether to hide the repository in the hgwebdir index.
1622 1622 Default is False.
1623 1623
1624 1624 ``ipv6``
1625 1625 Whether to use IPv6. Default is False.
1626 1626
1627 1627 ``logoimg``
1628 1628 File name of the logo image that some templates display on each page.
1629 1629 The file name is relative to ``staticurl``. That is, the full path to
1630 1630 the logo image is "staticurl/logoimg".
1631 1631 If unset, ``hglogo.png`` will be used.
1632 1632
1633 1633 ``logourl``
1634 1634 Base URL to use for logos. If unset, ``http://mercurial.selenic.com/``
1635 1635 will be used.
1636 1636
1637 1637 ``maxchanges``
1638 1638 Maximum number of changes to list on the changelog. Default is 10.
1639 1639
1640 1640 ``maxfiles``
1641 1641 Maximum number of files to list per changeset. Default is 10.
1642 1642
1643 1643 ``maxshortchanges``
1644 1644 Maximum number of changes to list on the shortlog, graph or filelog
1645 1645 pages. Default is 60.
1646 1646
1647 1647 ``name``
1648 1648 Repository name to use in the web interface. Default is current
1649 1649 working directory.
1650 1650
1651 1651 ``port``
1652 1652 Port to listen on. Default is 8000.
1653 1653
1654 1654 ``prefix``
1655 1655 Prefix path to serve from. Default is '' (server root).
1656 1656
1657 1657 ``push_ssl``
1658 1658 Whether to require that inbound pushes be transported over SSL to
1659 1659 prevent password sniffing. Default is True.
1660 1660
1661 1661 ``staticurl``
1662 1662 Base URL to use for static files. If unset, static files (e.g. the
1663 1663 hgicon.png favicon) will be served by the CGI script itself. Use
1664 1664 this setting to serve them directly with the HTTP server.
1665 1665 Example: ``http://hgserver/static/``.
1666 1666
1667 1667 ``stripes``
1668 1668 How many lines a "zebra stripe" should span in multi-line output.
1669 1669 Default is 1; set to 0 to disable.
1670 1670
1671 1671 ``style``
1672 1672 Which template map style to use. The available options are the names of
1673 1673 subdirectories in the HTML templates path. Default is ``paper``.
1674 1674 Example: ``monoblue``
1675 1675
1676 1676 ``templates``
1677 1677 Where to find the HTML templates. The default path to the HTML templates
1678 1678 can be obtained from ``hg debuginstall``.
1679 1679
1680 1680 ``websub``
1681 1681 ----------
1682 1682
1683 1683 Web substitution filter definition. You can use this section to
1684 1684 define a set of regular expression substitution patterns which
1685 1685 let you automatically modify the hgweb server output.
1686 1686
1687 1687 The default hgweb templates only apply these substitution patterns
1688 1688 on the revision description fields. You can apply them anywhere
1689 1689 you want when you create your own templates by adding calls to the
1690 1690 "websub" filter (usually after calling the "escape" filter).
1691 1691
1692 1692 This can be used, for example, to convert issue references to links
1693 1693 to your issue tracker, or to convert "markdown-like" syntax into
1694 1694 HTML (see the examples below).
1695 1695
1696 1696 Each entry in this section names a substitution filter.
1697 1697 The value of each entry defines the substitution expression itself.
1698 1698 The websub expressions follow the old interhg extension syntax,
1699 1699 which in turn imitates the Unix sed replacement syntax::
1700 1700
1701 1701 patternname = s/SEARCH_REGEX/REPLACE_EXPRESSION/[i]
1702 1702
1703 1703 You can use any separator other than "/". The final "i" is optional
1704 1704 and indicates that the search must be case insensitive.
1705 1705
1706 1706 Examples::
1707 1707
1708 1708 [websub]
1709 1709 issues = s|issue(\d+)|<a href="http://bts.example.org/issue\1">issue\1</a>|i
1710 1710 italic = s/\b_(\S+)_\b/<i>\1<\/i>/
1711 1711 bold = s/\*\b(\S+)\b\*/<b>\1<\/b>/
1712 1712
1713 1713 ``worker``
1714 1714 ----------
1715 1715
1716 1716 Parallel master/worker configuration. We currently perform working
1717 1717 directory updates in parallel on Unix-like systems, which greatly
1718 1718 helps performance.
1719 1719
1720 1720 ``numcpus``
1721 1721 Number of CPUs to use for parallel operations. Default is 4 or the
1722 1722 number of CPUs on the system, whichever is larger. A zero or
1723 1723 negative value is treated as ``use the default``.
@@ -1,159 +1,169 b''
1 1 $ hg init
2 2
3 3 Issue562: .hgignore requires newline at end:
4 4
5 5 $ touch foo
6 6 $ touch bar
7 7 $ touch baz
8 8 $ cat > makeignore.py <<EOF
9 9 > f = open(".hgignore", "w")
10 10 > f.write("ignore\n")
11 11 > f.write("foo\n")
12 12 > # No EOL here
13 13 > f.write("bar")
14 14 > f.close()
15 15 > EOF
16 16
17 17 $ python makeignore.py
18 18
19 19 Should display baz only:
20 20
21 21 $ hg status
22 22 ? baz
23 23
24 24 $ rm foo bar baz .hgignore makeignore.py
25 25
26 26 $ touch a.o
27 27 $ touch a.c
28 28 $ touch syntax
29 29 $ mkdir dir
30 30 $ touch dir/a.o
31 31 $ touch dir/b.o
32 32 $ touch dir/c.o
33 33
34 34 $ hg add dir/a.o
35 35 $ hg commit -m 0
36 36 $ hg add dir/b.o
37 37
38 38 $ hg status
39 39 A dir/b.o
40 40 ? a.c
41 41 ? a.o
42 42 ? dir/c.o
43 43 ? syntax
44 44
45 45 $ echo "*.o" > .hgignore
46 46 $ hg status
47 47 abort: $TESTTMP/.hgignore: invalid pattern (relre): *.o (glob)
48 48 [255]
49 49
50 50 $ echo ".*\.o" > .hgignore
51 51 $ hg status
52 52 A dir/b.o
53 53 ? .hgignore
54 54 ? a.c
55 55 ? syntax
56 56
57 57 Check it does not ignore the current directory '.':
58 58
59 59 $ echo "^\." > .hgignore
60 60 $ hg status
61 61 A dir/b.o
62 62 ? a.c
63 63 ? a.o
64 64 ? dir/c.o
65 65 ? syntax
66 66
67 67 Test that patterns from ui.ignore options are read:
68 68
69 69 $ echo > .hgignore
70 70 $ cat >> $HGRCPATH << EOF
71 71 > [ui]
72 72 > ignore.other = $TESTTMP/.hg/testhgignore
73 73 > EOF
74 74 $ echo "glob:**.o" > .hg/testhgignore
75 75 $ hg status
76 76 A dir/b.o
77 77 ? .hgignore
78 78 ? a.c
79 79 ? syntax
80 80
81 81 empty out testhgignore
82 82 $ echo > .hg/testhgignore
83 $ echo "glob:*.o" > .hgignore
83
84 Test relative ignore path (issue4473):
85
86 $ cat >> $HGRCPATH << EOF
87 > [ui]
88 > ignore.relative = .hg/testhgignorerel
89 > EOF
90 $ echo "glob:*.o" > .hg/testhgignorerel
91 $ cd dir
84 92 $ hg status
85 93 A dir/b.o
86 94 ? .hgignore
87 95 ? a.c
88 96 ? syntax
89 97
98 $ cd ..
99 $ echo > .hg/testhgignorerel
90 100 $ echo "syntax: glob" > .hgignore
91 101 $ echo "re:.*\.o" >> .hgignore
92 102 $ hg status
93 103 A dir/b.o
94 104 ? .hgignore
95 105 ? a.c
96 106 ? syntax
97 107
98 108 $ echo "syntax: invalid" > .hgignore
99 109 $ hg status
100 110 $TESTTMP/.hgignore: ignoring invalid syntax 'invalid' (glob)
101 111 A dir/b.o
102 112 ? .hgignore
103 113 ? a.c
104 114 ? a.o
105 115 ? dir/c.o
106 116 ? syntax
107 117
108 118 $ echo "syntax: glob" > .hgignore
109 119 $ echo "*.o" >> .hgignore
110 120 $ hg status
111 121 A dir/b.o
112 122 ? .hgignore
113 123 ? a.c
114 124 ? syntax
115 125
116 126 $ echo "relglob:syntax*" > .hgignore
117 127 $ hg status
118 128 A dir/b.o
119 129 ? .hgignore
120 130 ? a.c
121 131 ? a.o
122 132 ? dir/c.o
123 133
124 134 $ echo "relglob:*" > .hgignore
125 135 $ hg status
126 136 A dir/b.o
127 137
128 138 $ cd dir
129 139 $ hg status .
130 140 A b.o
131 141
132 142 $ hg debugignore
133 143 (?:(?:|.*/)[^/]*(?:/|$))
134 144
135 145 $ cd ..
136 146
137 147 Check patterns that match only the directory
138 148
139 149 $ echo "^dir\$" > .hgignore
140 150 $ hg status
141 151 A dir/b.o
142 152 ? .hgignore
143 153 ? a.c
144 154 ? a.o
145 155 ? syntax
146 156
147 157 Check recursive glob pattern matches no directories (dir/**/c.o matches dir/c.o)
148 158
149 159 $ echo "syntax: glob" > .hgignore
150 160 $ echo "dir/**/c.o" >> .hgignore
151 161 $ touch dir/c.o
152 162 $ mkdir dir/subdir
153 163 $ touch dir/subdir/c.o
154 164 $ hg status
155 165 A dir/b.o
156 166 ? .hgignore
157 167 ? a.c
158 168 ? a.o
159 169 ? syntax
General Comments 0
You need to be logged in to leave comments. Login now