##// END OF EJS Templates
help: rewrite parsing of help topic to not drop section name with dots...
Yuya Nishihara -
r39375:d30867a7 default
parent child Browse files
Show More
@@ -1,690 +1,688 b''
1 1 # help.py - help data for mercurial
2 2 #
3 3 # Copyright 2006 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 __future__ import absolute_import
9 9
10 10 import itertools
11 11 import os
12 12 import textwrap
13 13
14 14 from .i18n import (
15 15 _,
16 16 gettext,
17 17 )
18 18 from . import (
19 19 cmdutil,
20 20 encoding,
21 21 error,
22 22 extensions,
23 23 fancyopts,
24 24 filemerge,
25 25 fileset,
26 26 minirst,
27 27 pycompat,
28 28 revset,
29 29 templatefilters,
30 30 templatefuncs,
31 31 templatekw,
32 32 util,
33 33 )
34 34 from .hgweb import (
35 35 webcommands,
36 36 )
37 37
38 38 _exclkeywords = {
39 39 "(ADVANCED)",
40 40 "(DEPRECATED)",
41 41 "(EXPERIMENTAL)",
42 42 # i18n: "(ADVANCED)" is a keyword, must be translated consistently
43 43 _("(ADVANCED)"),
44 44 # i18n: "(DEPRECATED)" is a keyword, must be translated consistently
45 45 _("(DEPRECATED)"),
46 46 # i18n: "(EXPERIMENTAL)" is a keyword, must be translated consistently
47 47 _("(EXPERIMENTAL)"),
48 48 }
49 49
50 50 def listexts(header, exts, indent=1, showdeprecated=False):
51 51 '''return a text listing of the given extensions'''
52 52 rst = []
53 53 if exts:
54 54 for name, desc in sorted(exts.iteritems()):
55 55 if not showdeprecated and any(w in desc for w in _exclkeywords):
56 56 continue
57 57 rst.append('%s:%s: %s\n' % (' ' * indent, name, desc))
58 58 if rst:
59 59 rst.insert(0, '\n%s\n\n' % header)
60 60 return rst
61 61
62 62 def extshelp(ui):
63 63 rst = loaddoc('extensions')(ui).splitlines(True)
64 64 rst.extend(listexts(
65 65 _('enabled extensions:'), extensions.enabled(), showdeprecated=True))
66 66 rst.extend(listexts(_('disabled extensions:'), extensions.disabled(),
67 67 showdeprecated=ui.verbose))
68 68 doc = ''.join(rst)
69 69 return doc
70 70
71 71 def optrst(header, options, verbose):
72 72 data = []
73 73 multioccur = False
74 74 for option in options:
75 75 if len(option) == 5:
76 76 shortopt, longopt, default, desc, optlabel = option
77 77 else:
78 78 shortopt, longopt, default, desc = option
79 79 optlabel = _("VALUE") # default label
80 80
81 81 if not verbose and any(w in desc for w in _exclkeywords):
82 82 continue
83 83
84 84 so = ''
85 85 if shortopt:
86 86 so = '-' + shortopt
87 87 lo = '--' + longopt
88 88
89 89 if isinstance(default, fancyopts.customopt):
90 90 default = default.getdefaultvalue()
91 91 if default and not callable(default):
92 92 # default is of unknown type, and in Python 2 we abused
93 93 # the %s-shows-repr property to handle integers etc. To
94 94 # match that behavior on Python 3, we do str(default) and
95 95 # then convert it to bytes.
96 96 desc += _(" (default: %s)") % pycompat.bytestr(default)
97 97
98 98 if isinstance(default, list):
99 99 lo += " %s [+]" % optlabel
100 100 multioccur = True
101 101 elif (default is not None) and not isinstance(default, bool):
102 102 lo += " %s" % optlabel
103 103
104 104 data.append((so, lo, desc))
105 105
106 106 if multioccur:
107 107 header += (_(" ([+] can be repeated)"))
108 108
109 109 rst = ['\n%s:\n\n' % header]
110 110 rst.extend(minirst.maketable(data, 1))
111 111
112 112 return ''.join(rst)
113 113
114 114 def indicateomitted(rst, omitted, notomitted=None):
115 115 rst.append('\n\n.. container:: omitted\n\n %s\n\n' % omitted)
116 116 if notomitted:
117 117 rst.append('\n\n.. container:: notomitted\n\n %s\n\n' % notomitted)
118 118
119 119 def filtercmd(ui, cmd, kw, doc):
120 120 if not ui.debugflag and cmd.startswith("debug") and kw != "debug":
121 121 return True
122 122 if not ui.verbose and doc and any(w in doc for w in _exclkeywords):
123 123 return True
124 124 return False
125 125
126 126 def topicmatch(ui, commands, kw):
127 127 """Return help topics matching kw.
128 128
129 129 Returns {'section': [(name, summary), ...], ...} where section is
130 130 one of topics, commands, extensions, or extensioncommands.
131 131 """
132 132 kw = encoding.lower(kw)
133 133 def lowercontains(container):
134 134 return kw in encoding.lower(container) # translated in helptable
135 135 results = {'topics': [],
136 136 'commands': [],
137 137 'extensions': [],
138 138 'extensioncommands': [],
139 139 }
140 140 for names, header, doc in helptable:
141 141 # Old extensions may use a str as doc.
142 142 if (sum(map(lowercontains, names))
143 143 or lowercontains(header)
144 144 or (callable(doc) and lowercontains(doc(ui)))):
145 145 results['topics'].append((names[0], header))
146 146 for cmd, entry in commands.table.iteritems():
147 147 if len(entry) == 3:
148 148 summary = entry[2]
149 149 else:
150 150 summary = ''
151 151 # translate docs *before* searching there
152 152 docs = _(pycompat.getdoc(entry[0])) or ''
153 153 if kw in cmd or lowercontains(summary) or lowercontains(docs):
154 154 doclines = docs.splitlines()
155 155 if doclines:
156 156 summary = doclines[0]
157 157 cmdname = cmdutil.parsealiases(cmd)[0]
158 158 if filtercmd(ui, cmdname, kw, docs):
159 159 continue
160 160 results['commands'].append((cmdname, summary))
161 161 for name, docs in itertools.chain(
162 162 extensions.enabled(False).iteritems(),
163 163 extensions.disabled().iteritems()):
164 164 if not docs:
165 165 continue
166 166 name = name.rpartition('.')[-1]
167 167 if lowercontains(name) or lowercontains(docs):
168 168 # extension docs are already translated
169 169 results['extensions'].append((name, docs.splitlines()[0]))
170 170 try:
171 171 mod = extensions.load(ui, name, '')
172 172 except ImportError:
173 173 # debug message would be printed in extensions.load()
174 174 continue
175 175 for cmd, entry in getattr(mod, 'cmdtable', {}).iteritems():
176 176 if kw in cmd or (len(entry) > 2 and lowercontains(entry[2])):
177 177 cmdname = cmdutil.parsealiases(cmd)[0]
178 178 cmddoc = pycompat.getdoc(entry[0])
179 179 if cmddoc:
180 180 cmddoc = gettext(cmddoc).splitlines()[0]
181 181 else:
182 182 cmddoc = _('(no help text available)')
183 183 if filtercmd(ui, cmdname, kw, cmddoc):
184 184 continue
185 185 results['extensioncommands'].append((cmdname, cmddoc))
186 186 return results
187 187
188 188 def loaddoc(topic, subdir=None):
189 189 """Return a delayed loader for help/topic.txt."""
190 190
191 191 def loader(ui):
192 192 docdir = os.path.join(util.datapath, 'help')
193 193 if subdir:
194 194 docdir = os.path.join(docdir, subdir)
195 195 path = os.path.join(docdir, topic + ".txt")
196 196 doc = gettext(util.readfile(path))
197 197 for rewriter in helphooks.get(topic, []):
198 198 doc = rewriter(ui, topic, doc)
199 199 return doc
200 200
201 201 return loader
202 202
203 203 internalstable = sorted([
204 204 (['bundle2'], _('Bundle2'),
205 205 loaddoc('bundle2', subdir='internals')),
206 206 (['bundles'], _('Bundles'),
207 207 loaddoc('bundles', subdir='internals')),
208 208 (['censor'], _('Censor'),
209 209 loaddoc('censor', subdir='internals')),
210 210 (['changegroups'], _('Changegroups'),
211 211 loaddoc('changegroups', subdir='internals')),
212 212 (['config'], _('Config Registrar'),
213 213 loaddoc('config', subdir='internals')),
214 214 (['requirements'], _('Repository Requirements'),
215 215 loaddoc('requirements', subdir='internals')),
216 216 (['revlogs'], _('Revision Logs'),
217 217 loaddoc('revlogs', subdir='internals')),
218 218 (['wireprotocol'], _('Wire Protocol'),
219 219 loaddoc('wireprotocol', subdir='internals')),
220 220 ])
221 221
222 222 def internalshelp(ui):
223 223 """Generate the index for the "internals" topic."""
224 224 lines = ['To access a subtopic, use "hg help internals.{subtopic-name}"\n',
225 225 '\n']
226 226 for names, header, doc in internalstable:
227 227 lines.append(' :%s: %s\n' % (names[0], header))
228 228
229 229 return ''.join(lines)
230 230
231 231 helptable = sorted([
232 232 (['bundlespec'], _("Bundle File Formats"), loaddoc('bundlespec')),
233 233 (['color'], _("Colorizing Outputs"), loaddoc('color')),
234 234 (["config", "hgrc"], _("Configuration Files"), loaddoc('config')),
235 235 (['deprecated'], _("Deprecated Features"), loaddoc('deprecated')),
236 236 (["dates"], _("Date Formats"), loaddoc('dates')),
237 237 (["flags"], _("Command-line flags"), loaddoc('flags')),
238 238 (["patterns"], _("File Name Patterns"), loaddoc('patterns')),
239 239 (['environment', 'env'], _('Environment Variables'),
240 240 loaddoc('environment')),
241 241 (['revisions', 'revs', 'revsets', 'revset', 'multirevs', 'mrevs'],
242 242 _('Specifying Revisions'), loaddoc('revisions')),
243 243 (['filesets', 'fileset'], _("Specifying File Sets"), loaddoc('filesets')),
244 244 (['diffs'], _('Diff Formats'), loaddoc('diffs')),
245 245 (['merge-tools', 'mergetools', 'mergetool'], _('Merge Tools'),
246 246 loaddoc('merge-tools')),
247 247 (['templating', 'templates', 'template', 'style'], _('Template Usage'),
248 248 loaddoc('templates')),
249 249 (['urls'], _('URL Paths'), loaddoc('urls')),
250 250 (["extensions"], _("Using Additional Features"), extshelp),
251 251 (["subrepos", "subrepo"], _("Subrepositories"), loaddoc('subrepos')),
252 252 (["hgweb"], _("Configuring hgweb"), loaddoc('hgweb')),
253 253 (["glossary"], _("Glossary"), loaddoc('glossary')),
254 254 (["hgignore", "ignore"], _("Syntax for Mercurial Ignore Files"),
255 255 loaddoc('hgignore')),
256 256 (["phases"], _("Working with Phases"), loaddoc('phases')),
257 257 (['scripting'], _('Using Mercurial from scripts and automation'),
258 258 loaddoc('scripting')),
259 259 (['internals'], _("Technical implementation topics"),
260 260 internalshelp),
261 261 (['pager'], _("Pager Support"), loaddoc('pager')),
262 262 ])
263 263
264 264 # Maps topics with sub-topics to a list of their sub-topics.
265 265 subtopics = {
266 266 'internals': internalstable,
267 267 }
268 268
269 269 # Map topics to lists of callable taking the current topic help and
270 270 # returning the updated version
271 271 helphooks = {}
272 272
273 273 def addtopichook(topic, rewriter):
274 274 helphooks.setdefault(topic, []).append(rewriter)
275 275
276 276 def makeitemsdoc(ui, topic, doc, marker, items, dedent=False):
277 277 """Extract docstring from the items key to function mapping, build a
278 278 single documentation block and use it to overwrite the marker in doc.
279 279 """
280 280 entries = []
281 281 for name in sorted(items):
282 282 text = (pycompat.getdoc(items[name]) or '').rstrip()
283 283 if (not text
284 284 or not ui.verbose and any(w in text for w in _exclkeywords)):
285 285 continue
286 286 text = gettext(text)
287 287 if dedent:
288 288 # Abuse latin1 to use textwrap.dedent() on bytes.
289 289 text = textwrap.dedent(text.decode('latin1')).encode('latin1')
290 290 lines = text.splitlines()
291 291 doclines = [(lines[0])]
292 292 for l in lines[1:]:
293 293 # Stop once we find some Python doctest
294 294 if l.strip().startswith('>>>'):
295 295 break
296 296 if dedent:
297 297 doclines.append(l.rstrip())
298 298 else:
299 299 doclines.append(' ' + l.strip())
300 300 entries.append('\n'.join(doclines))
301 301 entries = '\n\n'.join(entries)
302 302 return doc.replace(marker, entries)
303 303
304 304 def addtopicsymbols(topic, marker, symbols, dedent=False):
305 305 def add(ui, topic, doc):
306 306 return makeitemsdoc(ui, topic, doc, marker, symbols, dedent=dedent)
307 307 addtopichook(topic, add)
308 308
309 309 addtopicsymbols('bundlespec', '.. bundlecompressionmarker',
310 310 util.bundlecompressiontopics())
311 311 addtopicsymbols('filesets', '.. predicatesmarker', fileset.symbols)
312 312 addtopicsymbols('merge-tools', '.. internaltoolsmarker',
313 313 filemerge.internalsdoc)
314 314 addtopicsymbols('revisions', '.. predicatesmarker', revset.symbols)
315 315 addtopicsymbols('templates', '.. keywordsmarker', templatekw.keywords)
316 316 addtopicsymbols('templates', '.. filtersmarker', templatefilters.filters)
317 317 addtopicsymbols('templates', '.. functionsmarker', templatefuncs.funcs)
318 318 addtopicsymbols('hgweb', '.. webcommandsmarker', webcommands.commands,
319 319 dedent=True)
320 320
321 321 def help_(ui, commands, name, unknowncmd=False, full=True, subtopic=None,
322 322 **opts):
323 323 '''
324 324 Generate the help for 'name' as unformatted restructured text. If
325 325 'name' is None, describe the commands available.
326 326 '''
327 327
328 328 opts = pycompat.byteskwargs(opts)
329 329
330 330 def helpcmd(name, subtopic=None):
331 331 try:
332 332 aliases, entry = cmdutil.findcmd(name, commands.table,
333 333 strict=unknowncmd)
334 334 except error.AmbiguousCommand as inst:
335 335 # py3k fix: except vars can't be used outside the scope of the
336 336 # except block, nor can be used inside a lambda. python issue4617
337 337 prefix = inst.args[0]
338 338 select = lambda c: cmdutil.parsealiases(c)[0].startswith(prefix)
339 339 rst = helplist(select)
340 340 return rst
341 341
342 342 rst = []
343 343
344 344 # check if it's an invalid alias and display its error if it is
345 345 if getattr(entry[0], 'badalias', None):
346 346 rst.append(entry[0].badalias + '\n')
347 347 if entry[0].unknowncmd:
348 348 try:
349 349 rst.extend(helpextcmd(entry[0].cmdname))
350 350 except error.UnknownCommand:
351 351 pass
352 352 return rst
353 353
354 354 # synopsis
355 355 if len(entry) > 2:
356 356 if entry[2].startswith('hg'):
357 357 rst.append("%s\n" % entry[2])
358 358 else:
359 359 rst.append('hg %s %s\n' % (aliases[0], entry[2]))
360 360 else:
361 361 rst.append('hg %s\n' % aliases[0])
362 362 # aliases
363 363 if full and not ui.quiet and len(aliases) > 1:
364 364 rst.append(_("\naliases: %s\n") % ', '.join(aliases[1:]))
365 365 rst.append('\n')
366 366
367 367 # description
368 368 doc = gettext(pycompat.getdoc(entry[0]))
369 369 if not doc:
370 370 doc = _("(no help text available)")
371 371 if util.safehasattr(entry[0], 'definition'): # aliased command
372 372 source = entry[0].source
373 373 if entry[0].definition.startswith('!'): # shell alias
374 374 doc = (_('shell alias for: %s\n\n%s\n\ndefined by: %s\n') %
375 375 (entry[0].definition[1:], doc, source))
376 376 else:
377 377 doc = (_('alias for: hg %s\n\n%s\n\ndefined by: %s\n') %
378 378 (entry[0].definition, doc, source))
379 379 doc = doc.splitlines(True)
380 380 if ui.quiet or not full:
381 381 rst.append(doc[0])
382 382 else:
383 383 rst.extend(doc)
384 384 rst.append('\n')
385 385
386 386 # check if this command shadows a non-trivial (multi-line)
387 387 # extension help text
388 388 try:
389 389 mod = extensions.find(name)
390 390 doc = gettext(pycompat.getdoc(mod)) or ''
391 391 if '\n' in doc.strip():
392 392 msg = _("(use 'hg help -e %s' to show help for "
393 393 "the %s extension)") % (name, name)
394 394 rst.append('\n%s\n' % msg)
395 395 except KeyError:
396 396 pass
397 397
398 398 # options
399 399 if not ui.quiet and entry[1]:
400 400 rst.append(optrst(_("options"), entry[1], ui.verbose))
401 401
402 402 if ui.verbose:
403 403 rst.append(optrst(_("global options"),
404 404 commands.globalopts, ui.verbose))
405 405
406 406 if not ui.verbose:
407 407 if not full:
408 408 rst.append(_("\n(use 'hg %s -h' to show more help)\n")
409 409 % name)
410 410 elif not ui.quiet:
411 411 rst.append(_('\n(some details hidden, use --verbose '
412 412 'to show complete help)'))
413 413
414 414 return rst
415 415
416 416
417 417 def helplist(select=None, **opts):
418 418 # list of commands
419 419 if name == "shortlist":
420 420 header = _('basic commands:\n\n')
421 421 elif name == "debug":
422 422 header = _('debug commands (internal and unsupported):\n\n')
423 423 else:
424 424 header = _('list of commands:\n\n')
425 425
426 426 h = {}
427 427 cmds = {}
428 428 for c, e in commands.table.iteritems():
429 429 fs = cmdutil.parsealiases(c)
430 430 f = fs[0]
431 431 p = ''
432 432 if c.startswith("^"):
433 433 p = '^'
434 434 if select and not select(p + f):
435 435 continue
436 436 if (not select and name != 'shortlist' and
437 437 e[0].__module__ != commands.__name__):
438 438 continue
439 439 if name == "shortlist" and not p:
440 440 continue
441 441 doc = pycompat.getdoc(e[0])
442 442 if filtercmd(ui, f, name, doc):
443 443 continue
444 444 doc = gettext(doc)
445 445 if not doc:
446 446 doc = _("(no help text available)")
447 447 h[f] = doc.splitlines()[0].rstrip()
448 448 cmds[f] = '|'.join(fs)
449 449
450 450 rst = []
451 451 if not h:
452 452 if not ui.quiet:
453 453 rst.append(_('no commands defined\n'))
454 454 return rst
455 455
456 456 if not ui.quiet:
457 457 rst.append(header)
458 458 fns = sorted(h)
459 459 for f in fns:
460 460 if ui.verbose:
461 461 commacmds = cmds[f].replace("|",", ")
462 462 rst.append(" :%s: %s\n" % (commacmds, h[f]))
463 463 else:
464 464 rst.append(' :%s: %s\n' % (f, h[f]))
465 465
466 466 ex = opts.get
467 467 anyopts = (ex(r'keyword') or not (ex(r'command') or ex(r'extension')))
468 468 if not name and anyopts:
469 469 exts = listexts(_('enabled extensions:'), extensions.enabled())
470 470 if exts:
471 471 rst.append('\n')
472 472 rst.extend(exts)
473 473
474 474 rst.append(_("\nadditional help topics:\n\n"))
475 475 topics = []
476 476 for names, header, doc in helptable:
477 477 topics.append((names[0], header))
478 478 for t, desc in topics:
479 479 rst.append(" :%s: %s\n" % (t, desc))
480 480
481 481 if ui.quiet:
482 482 pass
483 483 elif ui.verbose:
484 484 rst.append('\n%s\n' % optrst(_("global options"),
485 485 commands.globalopts, ui.verbose))
486 486 if name == 'shortlist':
487 487 rst.append(_("\n(use 'hg help' for the full list "
488 488 "of commands)\n"))
489 489 else:
490 490 if name == 'shortlist':
491 491 rst.append(_("\n(use 'hg help' for the full list of commands "
492 492 "or 'hg -v' for details)\n"))
493 493 elif name and not full:
494 494 rst.append(_("\n(use 'hg help %s' to show the full help "
495 495 "text)\n") % name)
496 496 elif name and cmds and name in cmds.keys():
497 497 rst.append(_("\n(use 'hg help -v -e %s' to show built-in "
498 498 "aliases and global options)\n") % name)
499 499 else:
500 500 rst.append(_("\n(use 'hg help -v%s' to show built-in aliases "
501 501 "and global options)\n")
502 502 % (name and " " + name or ""))
503 503 return rst
504 504
505 505 def helptopic(name, subtopic=None):
506 506 # Look for sub-topic entry first.
507 507 header, doc = None, None
508 508 if subtopic and name in subtopics:
509 509 for names, header, doc in subtopics[name]:
510 510 if subtopic in names:
511 511 break
512 512
513 513 if not header:
514 514 for names, header, doc in helptable:
515 515 if name in names:
516 516 break
517 517 else:
518 518 raise error.UnknownCommand(name)
519 519
520 520 rst = [minirst.section(header)]
521 521
522 522 # description
523 523 if not doc:
524 524 rst.append(" %s\n" % _("(no help text available)"))
525 525 if callable(doc):
526 526 rst += [" %s\n" % l for l in doc(ui).splitlines()]
527 527
528 528 if not ui.verbose:
529 529 omitted = _('(some details hidden, use --verbose'
530 530 ' to show complete help)')
531 531 indicateomitted(rst, omitted)
532 532
533 533 try:
534 534 cmdutil.findcmd(name, commands.table)
535 535 rst.append(_("\nuse 'hg help -c %s' to see help for "
536 536 "the %s command\n") % (name, name))
537 537 except error.UnknownCommand:
538 538 pass
539 539 return rst
540 540
541 541 def helpext(name, subtopic=None):
542 542 try:
543 543 mod = extensions.find(name)
544 544 doc = gettext(pycompat.getdoc(mod)) or _('no help text available')
545 545 except KeyError:
546 546 mod = None
547 547 doc = extensions.disabledext(name)
548 548 if not doc:
549 549 raise error.UnknownCommand(name)
550 550
551 551 if '\n' not in doc:
552 552 head, tail = doc, ""
553 553 else:
554 554 head, tail = doc.split('\n', 1)
555 555 rst = [_('%s extension - %s\n\n') % (name.rpartition('.')[-1], head)]
556 556 if tail:
557 557 rst.extend(tail.splitlines(True))
558 558 rst.append('\n')
559 559
560 560 if not ui.verbose:
561 561 omitted = _('(some details hidden, use --verbose'
562 562 ' to show complete help)')
563 563 indicateomitted(rst, omitted)
564 564
565 565 if mod:
566 566 try:
567 567 ct = mod.cmdtable
568 568 except AttributeError:
569 569 ct = {}
570 570 modcmds = set([c.partition('|')[0] for c in ct])
571 571 rst.extend(helplist(modcmds.__contains__))
572 572 else:
573 573 rst.append(_("(use 'hg help extensions' for information on enabling"
574 574 " extensions)\n"))
575 575 return rst
576 576
577 577 def helpextcmd(name, subtopic=None):
578 578 cmd, ext, doc = extensions.disabledcmd(ui, name,
579 579 ui.configbool('ui', 'strict'))
580 580 doc = doc.splitlines()[0]
581 581
582 582 rst = listexts(_("'%s' is provided by the following "
583 583 "extension:") % cmd, {ext: doc}, indent=4,
584 584 showdeprecated=True)
585 585 rst.append('\n')
586 586 rst.append(_("(use 'hg help extensions' for information on enabling "
587 587 "extensions)\n"))
588 588 return rst
589 589
590 590
591 591 rst = []
592 592 kw = opts.get('keyword')
593 593 if kw or name is None and any(opts[o] for o in opts):
594 594 matches = topicmatch(ui, commands, name or '')
595 595 helpareas = []
596 596 if opts.get('extension'):
597 597 helpareas += [('extensions', _('Extensions'))]
598 598 if opts.get('command'):
599 599 helpareas += [('commands', _('Commands'))]
600 600 if not helpareas:
601 601 helpareas = [('topics', _('Topics')),
602 602 ('commands', _('Commands')),
603 603 ('extensions', _('Extensions')),
604 604 ('extensioncommands', _('Extension Commands'))]
605 605 for t, title in helpareas:
606 606 if matches[t]:
607 607 rst.append('%s:\n\n' % title)
608 608 rst.extend(minirst.maketable(sorted(matches[t]), 1))
609 609 rst.append('\n')
610 610 if not rst:
611 611 msg = _('no matches')
612 612 hint = _("try 'hg help' for a list of topics")
613 613 raise error.Abort(msg, hint=hint)
614 614 elif name and name != 'shortlist':
615 615 queries = []
616 616 if unknowncmd:
617 617 queries += [helpextcmd]
618 618 if opts.get('extension'):
619 619 queries += [helpext]
620 620 if opts.get('command'):
621 621 queries += [helpcmd]
622 622 if not queries:
623 623 queries = (helptopic, helpcmd, helpext, helpextcmd)
624 624 for f in queries:
625 625 try:
626 626 rst = f(name, subtopic)
627 627 break
628 628 except error.UnknownCommand:
629 629 pass
630 630 else:
631 631 if unknowncmd:
632 632 raise error.UnknownCommand(name)
633 633 else:
634 634 msg = _('no such help topic: %s') % name
635 635 hint = _("try 'hg help --keyword %s'") % name
636 636 raise error.Abort(msg, hint=hint)
637 637 else:
638 638 # program name
639 639 if not ui.quiet:
640 640 rst = [_("Mercurial Distributed SCM\n"), '\n']
641 641 rst.extend(helplist(None, **pycompat.strkwargs(opts)))
642 642
643 643 return ''.join(rst)
644 644
645 def formattedhelp(ui, commands, name, keep=None, unknowncmd=False, full=True,
646 **opts):
645 def formattedhelp(ui, commands, fullname, keep=None, unknowncmd=False,
646 full=True, **opts):
647 647 """get help for a given topic (as a dotted name) as rendered rst
648 648
649 649 Either returns the rendered help text or raises an exception.
650 650 """
651 651 if keep is None:
652 652 keep = []
653 653 else:
654 654 keep = list(keep) # make a copy so we can mutate this later
655 fullname = name
656 section = None
657 subtopic = None
658 if name and '.' in name:
659 name, remaining = name.split('.', 1)
660 remaining = encoding.lower(remaining)
661 if '.' in remaining:
662 subtopic, section = remaining.split('.', 1)
663 else:
664 if name in subtopics:
665 subtopic = remaining
666 else:
667 section = remaining
655
656 # <fullname> := <name>[.<subtopic][.<section>]
657 name = subtopic = section = None
658 if fullname is not None:
659 nameparts = fullname.split('.')
660 name = nameparts.pop(0)
661 if nameparts and name in subtopics:
662 subtopic = nameparts.pop(0)
663 if nameparts:
664 section = encoding.lower('.'.join(nameparts))
665
668 666 textwidth = ui.configint('ui', 'textwidth')
669 667 termwidth = ui.termwidth() - 2
670 668 if textwidth <= 0 or termwidth < textwidth:
671 669 textwidth = termwidth
672 670 text = help_(ui, commands, name,
673 671 subtopic=subtopic, unknowncmd=unknowncmd, full=full, **opts)
674 672
675 673 blocks, pruned = minirst.parse(text, keep=keep)
676 674 if 'verbose' in pruned:
677 675 keep.append('omitted')
678 676 else:
679 677 keep.append('notomitted')
680 678 blocks, pruned = minirst.parse(text, keep=keep)
681 679 if section:
682 680 blocks = minirst.filtersections(blocks, section)
683 681
684 682 # We could have been given a weird ".foo" section without a name
685 683 # to look for, or we could have simply failed to found "foo.bar"
686 684 # because bar isn't a section of foo
687 685 if section and not (blocks and name):
688 686 raise error.Abort(_("help section not found: %s") % fullname)
689 687
690 688 return minirst.formatplain(blocks, textwidth)
@@ -1,3698 +1,3664 b''
1 1 Short help:
2 2
3 3 $ hg
4 4 Mercurial Distributed SCM
5 5
6 6 basic commands:
7 7
8 8 add add the specified files on the next commit
9 9 annotate show changeset information by line for each file
10 10 clone make a copy of an existing repository
11 11 commit commit the specified files or all outstanding changes
12 12 diff diff repository (or selected files)
13 13 export dump the header and diffs for one or more changesets
14 14 forget forget the specified files on the next commit
15 15 init create a new repository in the given directory
16 16 log show revision history of entire repository or files
17 17 merge merge another revision into working directory
18 18 pull pull changes from the specified source
19 19 push push changes to the specified destination
20 20 remove remove the specified files on the next commit
21 21 serve start stand-alone webserver
22 22 status show changed files in the working directory
23 23 summary summarize working directory state
24 24 update update working directory (or switch revisions)
25 25
26 26 (use 'hg help' for the full list of commands or 'hg -v' for details)
27 27
28 28 $ hg -q
29 29 add add the specified files on the next commit
30 30 annotate show changeset information by line for each file
31 31 clone make a copy of an existing repository
32 32 commit commit the specified files or all outstanding changes
33 33 diff diff repository (or selected files)
34 34 export dump the header and diffs for one or more changesets
35 35 forget forget the specified files on the next commit
36 36 init create a new repository in the given directory
37 37 log show revision history of entire repository or files
38 38 merge merge another revision into working directory
39 39 pull pull changes from the specified source
40 40 push push changes to the specified destination
41 41 remove remove the specified files on the next commit
42 42 serve start stand-alone webserver
43 43 status show changed files in the working directory
44 44 summary summarize working directory state
45 45 update update working directory (or switch revisions)
46 46
47 47 Extra extensions will be printed in help output in a non-reliable order since
48 48 the extension is unknown.
49 49 #if no-extraextensions
50 50
51 51 $ hg help
52 52 Mercurial Distributed SCM
53 53
54 54 list of commands:
55 55
56 56 add add the specified files on the next commit
57 57 addremove add all new files, delete all missing files
58 58 annotate show changeset information by line for each file
59 59 archive create an unversioned archive of a repository revision
60 60 backout reverse effect of earlier changeset
61 61 bisect subdivision search of changesets
62 62 bookmarks create a new bookmark or list existing bookmarks
63 63 branch set or show the current branch name
64 64 branches list repository named branches
65 65 bundle create a bundle file
66 66 cat output the current or given revision of files
67 67 clone make a copy of an existing repository
68 68 commit commit the specified files or all outstanding changes
69 69 config show combined config settings from all hgrc files
70 70 copy mark files as copied for the next commit
71 71 diff diff repository (or selected files)
72 72 export dump the header and diffs for one or more changesets
73 73 files list tracked files
74 74 forget forget the specified files on the next commit
75 75 graft copy changes from other branches onto the current branch
76 76 grep search revision history for a pattern in specified files
77 77 heads show branch heads
78 78 help show help for a given topic or a help overview
79 79 identify identify the working directory or specified revision
80 80 import import an ordered set of patches
81 81 incoming show new changesets found in source
82 82 init create a new repository in the given directory
83 83 log show revision history of entire repository or files
84 84 manifest output the current or given revision of the project manifest
85 85 merge merge another revision into working directory
86 86 outgoing show changesets not found in the destination
87 87 paths show aliases for remote repositories
88 88 phase set or show the current phase name
89 89 pull pull changes from the specified source
90 90 push push changes to the specified destination
91 91 recover roll back an interrupted transaction
92 92 remove remove the specified files on the next commit
93 93 rename rename files; equivalent of copy + remove
94 94 resolve redo merges or set/view the merge status of files
95 95 revert restore files to their checkout state
96 96 root print the root (top) of the current working directory
97 97 serve start stand-alone webserver
98 98 status show changed files in the working directory
99 99 summary summarize working directory state
100 100 tag add one or more tags for the current or given revision
101 101 tags list repository tags
102 102 unbundle apply one or more bundle files
103 103 update update working directory (or switch revisions)
104 104 verify verify the integrity of the repository
105 105 version output version and copyright information
106 106
107 107 additional help topics:
108 108
109 109 bundlespec Bundle File Formats
110 110 color Colorizing Outputs
111 111 config Configuration Files
112 112 dates Date Formats
113 113 deprecated Deprecated Features
114 114 diffs Diff Formats
115 115 environment Environment Variables
116 116 extensions Using Additional Features
117 117 filesets Specifying File Sets
118 118 flags Command-line flags
119 119 glossary Glossary
120 120 hgignore Syntax for Mercurial Ignore Files
121 121 hgweb Configuring hgweb
122 122 internals Technical implementation topics
123 123 merge-tools Merge Tools
124 124 pager Pager Support
125 125 patterns File Name Patterns
126 126 phases Working with Phases
127 127 revisions Specifying Revisions
128 128 scripting Using Mercurial from scripts and automation
129 129 subrepos Subrepositories
130 130 templating Template Usage
131 131 urls URL Paths
132 132
133 133 (use 'hg help -v' to show built-in aliases and global options)
134 134
135 135 $ hg -q help
136 136 add add the specified files on the next commit
137 137 addremove add all new files, delete all missing files
138 138 annotate show changeset information by line for each file
139 139 archive create an unversioned archive of a repository revision
140 140 backout reverse effect of earlier changeset
141 141 bisect subdivision search of changesets
142 142 bookmarks create a new bookmark or list existing bookmarks
143 143 branch set or show the current branch name
144 144 branches list repository named branches
145 145 bundle create a bundle file
146 146 cat output the current or given revision of files
147 147 clone make a copy of an existing repository
148 148 commit commit the specified files or all outstanding changes
149 149 config show combined config settings from all hgrc files
150 150 copy mark files as copied for the next commit
151 151 diff diff repository (or selected files)
152 152 export dump the header and diffs for one or more changesets
153 153 files list tracked files
154 154 forget forget the specified files on the next commit
155 155 graft copy changes from other branches onto the current branch
156 156 grep search revision history for a pattern in specified files
157 157 heads show branch heads
158 158 help show help for a given topic or a help overview
159 159 identify identify the working directory or specified revision
160 160 import import an ordered set of patches
161 161 incoming show new changesets found in source
162 162 init create a new repository in the given directory
163 163 log show revision history of entire repository or files
164 164 manifest output the current or given revision of the project manifest
165 165 merge merge another revision into working directory
166 166 outgoing show changesets not found in the destination
167 167 paths show aliases for remote repositories
168 168 phase set or show the current phase name
169 169 pull pull changes from the specified source
170 170 push push changes to the specified destination
171 171 recover roll back an interrupted transaction
172 172 remove remove the specified files on the next commit
173 173 rename rename files; equivalent of copy + remove
174 174 resolve redo merges or set/view the merge status of files
175 175 revert restore files to their checkout state
176 176 root print the root (top) of the current working directory
177 177 serve start stand-alone webserver
178 178 status show changed files in the working directory
179 179 summary summarize working directory state
180 180 tag add one or more tags for the current or given revision
181 181 tags list repository tags
182 182 unbundle apply one or more bundle files
183 183 update update working directory (or switch revisions)
184 184 verify verify the integrity of the repository
185 185 version output version and copyright information
186 186
187 187 additional help topics:
188 188
189 189 bundlespec Bundle File Formats
190 190 color Colorizing Outputs
191 191 config Configuration Files
192 192 dates Date Formats
193 193 deprecated Deprecated Features
194 194 diffs Diff Formats
195 195 environment Environment Variables
196 196 extensions Using Additional Features
197 197 filesets Specifying File Sets
198 198 flags Command-line flags
199 199 glossary Glossary
200 200 hgignore Syntax for Mercurial Ignore Files
201 201 hgweb Configuring hgweb
202 202 internals Technical implementation topics
203 203 merge-tools Merge Tools
204 204 pager Pager Support
205 205 patterns File Name Patterns
206 206 phases Working with Phases
207 207 revisions Specifying Revisions
208 208 scripting Using Mercurial from scripts and automation
209 209 subrepos Subrepositories
210 210 templating Template Usage
211 211 urls URL Paths
212 212
213 213 Test extension help:
214 214 $ hg help extensions --config extensions.rebase= --config extensions.children=
215 215 Using Additional Features
216 216 """""""""""""""""""""""""
217 217
218 218 Mercurial has the ability to add new features through the use of
219 219 extensions. Extensions may add new commands, add options to existing
220 220 commands, change the default behavior of commands, or implement hooks.
221 221
222 222 To enable the "foo" extension, either shipped with Mercurial or in the
223 223 Python search path, create an entry for it in your configuration file,
224 224 like this:
225 225
226 226 [extensions]
227 227 foo =
228 228
229 229 You may also specify the full path to an extension:
230 230
231 231 [extensions]
232 232 myfeature = ~/.hgext/myfeature.py
233 233
234 234 See 'hg help config' for more information on configuration files.
235 235
236 236 Extensions are not loaded by default for a variety of reasons: they can
237 237 increase startup overhead; they may be meant for advanced usage only; they
238 238 may provide potentially dangerous abilities (such as letting you destroy
239 239 or modify history); they might not be ready for prime time; or they may
240 240 alter some usual behaviors of stock Mercurial. It is thus up to the user
241 241 to activate extensions as needed.
242 242
243 243 To explicitly disable an extension enabled in a configuration file of
244 244 broader scope, prepend its path with !:
245 245
246 246 [extensions]
247 247 # disabling extension bar residing in /path/to/extension/bar.py
248 248 bar = !/path/to/extension/bar.py
249 249 # ditto, but no path was supplied for extension baz
250 250 baz = !
251 251
252 252 enabled extensions:
253 253
254 254 children command to display child changesets (DEPRECATED)
255 255 rebase command to move sets of revisions to a different ancestor
256 256
257 257 disabled extensions:
258 258
259 259 acl hooks for controlling repository access
260 260 blackbox log repository events to a blackbox for debugging
261 261 bugzilla hooks for integrating with the Bugzilla bug tracker
262 262 censor erase file content at a given revision
263 263 churn command to display statistics about repository history
264 264 clonebundles advertise pre-generated bundles to seed clones
265 265 convert import revisions from foreign VCS repositories into
266 266 Mercurial
267 267 eol automatically manage newlines in repository files
268 268 extdiff command to allow external programs to compare revisions
269 269 factotum http authentication with factotum
270 270 githelp try mapping git commands to Mercurial commands
271 271 gpg commands to sign and verify changesets
272 272 hgk browse the repository in a graphical way
273 273 highlight syntax highlighting for hgweb (requires Pygments)
274 274 histedit interactive history editing
275 275 keyword expand keywords in tracked files
276 276 largefiles track large binary files
277 277 mq manage a stack of patches
278 278 notify hooks for sending email push notifications
279 279 patchbomb command to send changesets as (a series of) patch emails
280 280 purge command to delete untracked files from the working
281 281 directory
282 282 relink recreates hardlinks between repository clones
283 283 schemes extend schemes with shortcuts to repository swarms
284 284 share share a common history between several working directories
285 285 shelve save and restore changes to the working directory
286 286 strip strip changesets and their descendants from history
287 287 transplant command to transplant changesets from another branch
288 288 win32mbcs allow the use of MBCS paths with problematic encodings
289 289 zeroconf discover and advertise repositories on the local network
290 290
291 291 #endif
292 292
293 293 Verify that deprecated extensions are included if --verbose:
294 294
295 295 $ hg -v help extensions | grep children
296 296 children command to display child changesets (DEPRECATED)
297 297
298 298 Verify that extension keywords appear in help templates
299 299
300 300 $ hg help --config extensions.transplant= templating|grep transplant > /dev/null
301 301
302 302 Test short command list with verbose option
303 303
304 304 $ hg -v help shortlist
305 305 Mercurial Distributed SCM
306 306
307 307 basic commands:
308 308
309 309 add add the specified files on the next commit
310 310 annotate, blame
311 311 show changeset information by line for each file
312 312 clone make a copy of an existing repository
313 313 commit, ci commit the specified files or all outstanding changes
314 314 diff diff repository (or selected files)
315 315 export dump the header and diffs for one or more changesets
316 316 forget forget the specified files on the next commit
317 317 init create a new repository in the given directory
318 318 log, history show revision history of entire repository or files
319 319 merge merge another revision into working directory
320 320 pull pull changes from the specified source
321 321 push push changes to the specified destination
322 322 remove, rm remove the specified files on the next commit
323 323 serve start stand-alone webserver
324 324 status, st show changed files in the working directory
325 325 summary, sum summarize working directory state
326 326 update, up, checkout, co
327 327 update working directory (or switch revisions)
328 328
329 329 global options ([+] can be repeated):
330 330
331 331 -R --repository REPO repository root directory or name of overlay bundle
332 332 file
333 333 --cwd DIR change working directory
334 334 -y --noninteractive do not prompt, automatically pick the first choice for
335 335 all prompts
336 336 -q --quiet suppress output
337 337 -v --verbose enable additional output
338 338 --color TYPE when to colorize (boolean, always, auto, never, or
339 339 debug)
340 340 --config CONFIG [+] set/override config option (use 'section.name=value')
341 341 --debug enable debugging output
342 342 --debugger start debugger
343 343 --encoding ENCODE set the charset encoding (default: ascii)
344 344 --encodingmode MODE set the charset encoding mode (default: strict)
345 345 --traceback always print a traceback on exception
346 346 --time time how long the command takes
347 347 --profile print command execution profile
348 348 --version output version information and exit
349 349 -h --help display help and exit
350 350 --hidden consider hidden changesets
351 351 --pager TYPE when to paginate (boolean, always, auto, or never)
352 352 (default: auto)
353 353
354 354 (use 'hg help' for the full list of commands)
355 355
356 356 $ hg add -h
357 357 hg add [OPTION]... [FILE]...
358 358
359 359 add the specified files on the next commit
360 360
361 361 Schedule files to be version controlled and added to the repository.
362 362
363 363 The files will be added to the repository at the next commit. To undo an
364 364 add before that, see 'hg forget'.
365 365
366 366 If no names are given, add all files to the repository (except files
367 367 matching ".hgignore").
368 368
369 369 Returns 0 if all files are successfully added.
370 370
371 371 options ([+] can be repeated):
372 372
373 373 -I --include PATTERN [+] include names matching the given patterns
374 374 -X --exclude PATTERN [+] exclude names matching the given patterns
375 375 -S --subrepos recurse into subrepositories
376 376 -n --dry-run do not perform actions, just print output
377 377
378 378 (some details hidden, use --verbose to show complete help)
379 379
380 380 Verbose help for add
381 381
382 382 $ hg add -hv
383 383 hg add [OPTION]... [FILE]...
384 384
385 385 add the specified files on the next commit
386 386
387 387 Schedule files to be version controlled and added to the repository.
388 388
389 389 The files will be added to the repository at the next commit. To undo an
390 390 add before that, see 'hg forget'.
391 391
392 392 If no names are given, add all files to the repository (except files
393 393 matching ".hgignore").
394 394
395 395 Examples:
396 396
397 397 - New (unknown) files are added automatically by 'hg add':
398 398
399 399 $ ls
400 400 foo.c
401 401 $ hg status
402 402 ? foo.c
403 403 $ hg add
404 404 adding foo.c
405 405 $ hg status
406 406 A foo.c
407 407
408 408 - Specific files to be added can be specified:
409 409
410 410 $ ls
411 411 bar.c foo.c
412 412 $ hg status
413 413 ? bar.c
414 414 ? foo.c
415 415 $ hg add bar.c
416 416 $ hg status
417 417 A bar.c
418 418 ? foo.c
419 419
420 420 Returns 0 if all files are successfully added.
421 421
422 422 options ([+] can be repeated):
423 423
424 424 -I --include PATTERN [+] include names matching the given patterns
425 425 -X --exclude PATTERN [+] exclude names matching the given patterns
426 426 -S --subrepos recurse into subrepositories
427 427 -n --dry-run do not perform actions, just print output
428 428
429 429 global options ([+] can be repeated):
430 430
431 431 -R --repository REPO repository root directory or name of overlay bundle
432 432 file
433 433 --cwd DIR change working directory
434 434 -y --noninteractive do not prompt, automatically pick the first choice for
435 435 all prompts
436 436 -q --quiet suppress output
437 437 -v --verbose enable additional output
438 438 --color TYPE when to colorize (boolean, always, auto, never, or
439 439 debug)
440 440 --config CONFIG [+] set/override config option (use 'section.name=value')
441 441 --debug enable debugging output
442 442 --debugger start debugger
443 443 --encoding ENCODE set the charset encoding (default: ascii)
444 444 --encodingmode MODE set the charset encoding mode (default: strict)
445 445 --traceback always print a traceback on exception
446 446 --time time how long the command takes
447 447 --profile print command execution profile
448 448 --version output version information and exit
449 449 -h --help display help and exit
450 450 --hidden consider hidden changesets
451 451 --pager TYPE when to paginate (boolean, always, auto, or never)
452 452 (default: auto)
453 453
454 454 Test the textwidth config option
455 455
456 456 $ hg root -h --config ui.textwidth=50
457 457 hg root
458 458
459 459 print the root (top) of the current working
460 460 directory
461 461
462 462 Print the root directory of the current
463 463 repository.
464 464
465 465 Returns 0 on success.
466 466
467 467 (some details hidden, use --verbose to show
468 468 complete help)
469 469
470 470 Test help option with version option
471 471
472 472 $ hg add -h --version
473 473 Mercurial Distributed SCM (version *) (glob)
474 474 (see https://mercurial-scm.org for more information)
475 475
476 476 Copyright (C) 2005-* Matt Mackall and others (glob)
477 477 This is free software; see the source for copying conditions. There is NO
478 478 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
479 479
480 480 $ hg add --skjdfks
481 481 hg add: option --skjdfks not recognized
482 482 hg add [OPTION]... [FILE]...
483 483
484 484 add the specified files on the next commit
485 485
486 486 options ([+] can be repeated):
487 487
488 488 -I --include PATTERN [+] include names matching the given patterns
489 489 -X --exclude PATTERN [+] exclude names matching the given patterns
490 490 -S --subrepos recurse into subrepositories
491 491 -n --dry-run do not perform actions, just print output
492 492
493 493 (use 'hg add -h' to show more help)
494 494 [255]
495 495
496 496 Test ambiguous command help
497 497
498 498 $ hg help ad
499 499 list of commands:
500 500
501 501 add add the specified files on the next commit
502 502 addremove add all new files, delete all missing files
503 503
504 504 (use 'hg help -v ad' to show built-in aliases and global options)
505 505
506 506 Test command without options
507 507
508 508 $ hg help verify
509 509 hg verify
510 510
511 511 verify the integrity of the repository
512 512
513 513 Verify the integrity of the current repository.
514 514
515 515 This will perform an extensive check of the repository's integrity,
516 516 validating the hashes and checksums of each entry in the changelog,
517 517 manifest, and tracked files, as well as the integrity of their crosslinks
518 518 and indices.
519 519
520 520 Please see https://mercurial-scm.org/wiki/RepositoryCorruption for more
521 521 information about recovery from corruption of the repository.
522 522
523 523 Returns 0 on success, 1 if errors are encountered.
524 524
525 525 (some details hidden, use --verbose to show complete help)
526 526
527 527 $ hg help diff
528 528 hg diff [OPTION]... ([-c REV] | [-r REV1 [-r REV2]]) [FILE]...
529 529
530 530 diff repository (or selected files)
531 531
532 532 Show differences between revisions for the specified files.
533 533
534 534 Differences between files are shown using the unified diff format.
535 535
536 536 Note:
537 537 'hg diff' may generate unexpected results for merges, as it will
538 538 default to comparing against the working directory's first parent
539 539 changeset if no revisions are specified.
540 540
541 541 When two revision arguments are given, then changes are shown between
542 542 those revisions. If only one revision is specified then that revision is
543 543 compared to the working directory, and, when no revisions are specified,
544 544 the working directory files are compared to its first parent.
545 545
546 546 Alternatively you can specify -c/--change with a revision to see the
547 547 changes in that changeset relative to its first parent.
548 548
549 549 Without the -a/--text option, diff will avoid generating diffs of files it
550 550 detects as binary. With -a, diff will generate a diff anyway, probably
551 551 with undesirable results.
552 552
553 553 Use the -g/--git option to generate diffs in the git extended diff format.
554 554 For more information, read 'hg help diffs'.
555 555
556 556 Returns 0 on success.
557 557
558 558 options ([+] can be repeated):
559 559
560 560 -r --rev REV [+] revision
561 561 -c --change REV change made by revision
562 562 -a --text treat all files as text
563 563 -g --git use git extended diff format
564 564 --binary generate binary diffs in git mode (default)
565 565 --nodates omit dates from diff headers
566 566 --noprefix omit a/ and b/ prefixes from filenames
567 567 -p --show-function show which function each change is in
568 568 --reverse produce a diff that undoes the changes
569 569 -w --ignore-all-space ignore white space when comparing lines
570 570 -b --ignore-space-change ignore changes in the amount of white space
571 571 -B --ignore-blank-lines ignore changes whose lines are all blank
572 572 -Z --ignore-space-at-eol ignore changes in whitespace at EOL
573 573 -U --unified NUM number of lines of context to show
574 574 --stat output diffstat-style summary of changes
575 575 --root DIR produce diffs relative to subdirectory
576 576 -I --include PATTERN [+] include names matching the given patterns
577 577 -X --exclude PATTERN [+] exclude names matching the given patterns
578 578 -S --subrepos recurse into subrepositories
579 579
580 580 (some details hidden, use --verbose to show complete help)
581 581
582 582 $ hg help status
583 583 hg status [OPTION]... [FILE]...
584 584
585 585 aliases: st
586 586
587 587 show changed files in the working directory
588 588
589 589 Show status of files in the repository. If names are given, only files
590 590 that match are shown. Files that are clean or ignored or the source of a
591 591 copy/move operation, are not listed unless -c/--clean, -i/--ignored,
592 592 -C/--copies or -A/--all are given. Unless options described with "show
593 593 only ..." are given, the options -mardu are used.
594 594
595 595 Option -q/--quiet hides untracked (unknown and ignored) files unless
596 596 explicitly requested with -u/--unknown or -i/--ignored.
597 597
598 598 Note:
599 599 'hg status' may appear to disagree with diff if permissions have
600 600 changed or a merge has occurred. The standard diff format does not
601 601 report permission changes and diff only reports changes relative to one
602 602 merge parent.
603 603
604 604 If one revision is given, it is used as the base revision. If two
605 605 revisions are given, the differences between them are shown. The --change
606 606 option can also be used as a shortcut to list the changed files of a
607 607 revision from its first parent.
608 608
609 609 The codes used to show the status of files are:
610 610
611 611 M = modified
612 612 A = added
613 613 R = removed
614 614 C = clean
615 615 ! = missing (deleted by non-hg command, but still tracked)
616 616 ? = not tracked
617 617 I = ignored
618 618 = origin of the previous file (with --copies)
619 619
620 620 Returns 0 on success.
621 621
622 622 options ([+] can be repeated):
623 623
624 624 -A --all show status of all files
625 625 -m --modified show only modified files
626 626 -a --added show only added files
627 627 -r --removed show only removed files
628 628 -d --deleted show only deleted (but tracked) files
629 629 -c --clean show only files without changes
630 630 -u --unknown show only unknown (not tracked) files
631 631 -i --ignored show only ignored files
632 632 -n --no-status hide status prefix
633 633 -C --copies show source of copied files
634 634 -0 --print0 end filenames with NUL, for use with xargs
635 635 --rev REV [+] show difference from revision
636 636 --change REV list the changed files of a revision
637 637 -I --include PATTERN [+] include names matching the given patterns
638 638 -X --exclude PATTERN [+] exclude names matching the given patterns
639 639 -S --subrepos recurse into subrepositories
640 640
641 641 (some details hidden, use --verbose to show complete help)
642 642
643 643 $ hg -q help status
644 644 hg status [OPTION]... [FILE]...
645 645
646 646 show changed files in the working directory
647 647
648 648 $ hg help foo
649 649 abort: no such help topic: foo
650 650 (try 'hg help --keyword foo')
651 651 [255]
652 652
653 653 $ hg skjdfks
654 654 hg: unknown command 'skjdfks'
655 655 (use 'hg help' for a list of commands)
656 656 [255]
657 657
658 658 Typoed command gives suggestion
659 659 $ hg puls
660 660 hg: unknown command 'puls'
661 661 (did you mean one of pull, push?)
662 662 [255]
663 663
664 664 Not enabled extension gets suggested
665 665
666 666 $ hg rebase
667 667 hg: unknown command 'rebase'
668 668 'rebase' is provided by the following extension:
669 669
670 670 rebase command to move sets of revisions to a different ancestor
671 671
672 672 (use 'hg help extensions' for information on enabling extensions)
673 673 [255]
674 674
675 675 Disabled extension gets suggested
676 676 $ hg --config extensions.rebase=! rebase
677 677 hg: unknown command 'rebase'
678 678 'rebase' is provided by the following extension:
679 679
680 680 rebase command to move sets of revisions to a different ancestor
681 681
682 682 (use 'hg help extensions' for information on enabling extensions)
683 683 [255]
684 684
685 685 Make sure that we don't run afoul of the help system thinking that
686 686 this is a section and erroring out weirdly.
687 687
688 688 $ hg .log
689 689 hg: unknown command '.log'
690 690 (did you mean log?)
691 691 [255]
692 692
693 693 $ hg log.
694 694 hg: unknown command 'log.'
695 695 (did you mean log?)
696 696 [255]
697 697 $ hg pu.lh
698 698 hg: unknown command 'pu.lh'
699 699 (did you mean one of pull, push?)
700 700 [255]
701 701
702 702 $ cat > helpext.py <<EOF
703 703 > import os
704 704 > from mercurial import commands, fancyopts, registrar
705 705 >
706 706 > def func(arg):
707 707 > return '%sfoo' % arg
708 708 > class customopt(fancyopts.customopt):
709 709 > def newstate(self, oldstate, newparam, abort):
710 710 > return '%sbar' % oldstate
711 711 > cmdtable = {}
712 712 > command = registrar.command(cmdtable)
713 713 >
714 714 > @command(b'nohelp',
715 715 > [(b'', b'longdesc', 3, b'x'*67),
716 716 > (b'n', b'', None, b'normal desc'),
717 717 > (b'', b'newline', b'', b'line1\nline2'),
718 718 > (b'', b'callableopt', func, b'adds foo'),
719 719 > (b'', b'customopt', customopt(''), b'adds bar'),
720 720 > (b'', b'customopt-withdefault', customopt('foo'), b'adds bar')],
721 721 > b'hg nohelp',
722 722 > norepo=True)
723 723 > @command(b'debugoptADV', [(b'', b'aopt', None, b'option is (ADVANCED)')])
724 724 > @command(b'debugoptDEP', [(b'', b'dopt', None, b'option is (DEPRECATED)')])
725 725 > @command(b'debugoptEXP', [(b'', b'eopt', None, b'option is (EXPERIMENTAL)')])
726 726 > def nohelp(ui, *args, **kwargs):
727 727 > pass
728 728 >
729 729 > def uisetup(ui):
730 730 > ui.setconfig(b'alias', b'shellalias', b'!echo hi', b'helpext')
731 731 > ui.setconfig(b'alias', b'hgalias', b'summary', b'helpext')
732 732 >
733 733 > EOF
734 734 $ echo '[extensions]' >> $HGRCPATH
735 735 $ echo "helpext = `pwd`/helpext.py" >> $HGRCPATH
736 736
737 737 Test for aliases
738 738
739 739 $ hg help hgalias
740 740 hg hgalias [--remote]
741 741
742 742 alias for: hg summary
743 743
744 744 summarize working directory state
745 745
746 746 This generates a brief summary of the working directory state, including
747 747 parents, branch, commit status, phase and available updates.
748 748
749 749 With the --remote option, this will check the default paths for incoming
750 750 and outgoing changes. This can be time-consuming.
751 751
752 752 Returns 0 on success.
753 753
754 754 defined by: helpext
755 755
756 756 options:
757 757
758 758 --remote check for push and pull
759 759
760 760 (some details hidden, use --verbose to show complete help)
761 761
762 762 $ hg help shellalias
763 763 hg shellalias
764 764
765 765 shell alias for: echo hi
766 766
767 767 (no help text available)
768 768
769 769 defined by: helpext
770 770
771 771 (some details hidden, use --verbose to show complete help)
772 772
773 773 Test command with no help text
774 774
775 775 $ hg help nohelp
776 776 hg nohelp
777 777
778 778 (no help text available)
779 779
780 780 options:
781 781
782 782 --longdesc VALUE
783 783 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
784 784 xxxxxxxxxxxxxxxxxxxxxxx (default: 3)
785 785 -n -- normal desc
786 786 --newline VALUE line1 line2
787 787 --callableopt VALUE adds foo
788 788 --customopt VALUE adds bar
789 789 --customopt-withdefault VALUE adds bar (default: foo)
790 790
791 791 (some details hidden, use --verbose to show complete help)
792 792
793 793 $ hg help -k nohelp
794 794 Commands:
795 795
796 796 nohelp hg nohelp
797 797
798 798 Extension Commands:
799 799
800 800 nohelp (no help text available)
801 801
802 802 Test that default list of commands omits extension commands
803 803
804 804 #if no-extraextensions
805 805
806 806 $ hg help
807 807 Mercurial Distributed SCM
808 808
809 809 list of commands:
810 810
811 811 add add the specified files on the next commit
812 812 addremove add all new files, delete all missing files
813 813 annotate show changeset information by line for each file
814 814 archive create an unversioned archive of a repository revision
815 815 backout reverse effect of earlier changeset
816 816 bisect subdivision search of changesets
817 817 bookmarks create a new bookmark or list existing bookmarks
818 818 branch set or show the current branch name
819 819 branches list repository named branches
820 820 bundle create a bundle file
821 821 cat output the current or given revision of files
822 822 clone make a copy of an existing repository
823 823 commit commit the specified files or all outstanding changes
824 824 config show combined config settings from all hgrc files
825 825 copy mark files as copied for the next commit
826 826 diff diff repository (or selected files)
827 827 export dump the header and diffs for one or more changesets
828 828 files list tracked files
829 829 forget forget the specified files on the next commit
830 830 graft copy changes from other branches onto the current branch
831 831 grep search revision history for a pattern in specified files
832 832 heads show branch heads
833 833 help show help for a given topic or a help overview
834 834 identify identify the working directory or specified revision
835 835 import import an ordered set of patches
836 836 incoming show new changesets found in source
837 837 init create a new repository in the given directory
838 838 log show revision history of entire repository or files
839 839 manifest output the current or given revision of the project manifest
840 840 merge merge another revision into working directory
841 841 outgoing show changesets not found in the destination
842 842 paths show aliases for remote repositories
843 843 phase set or show the current phase name
844 844 pull pull changes from the specified source
845 845 push push changes to the specified destination
846 846 recover roll back an interrupted transaction
847 847 remove remove the specified files on the next commit
848 848 rename rename files; equivalent of copy + remove
849 849 resolve redo merges or set/view the merge status of files
850 850 revert restore files to their checkout state
851 851 root print the root (top) of the current working directory
852 852 serve start stand-alone webserver
853 853 status show changed files in the working directory
854 854 summary summarize working directory state
855 855 tag add one or more tags for the current or given revision
856 856 tags list repository tags
857 857 unbundle apply one or more bundle files
858 858 update update working directory (or switch revisions)
859 859 verify verify the integrity of the repository
860 860 version output version and copyright information
861 861
862 862 enabled extensions:
863 863
864 864 helpext (no help text available)
865 865
866 866 additional help topics:
867 867
868 868 bundlespec Bundle File Formats
869 869 color Colorizing Outputs
870 870 config Configuration Files
871 871 dates Date Formats
872 872 deprecated Deprecated Features
873 873 diffs Diff Formats
874 874 environment Environment Variables
875 875 extensions Using Additional Features
876 876 filesets Specifying File Sets
877 877 flags Command-line flags
878 878 glossary Glossary
879 879 hgignore Syntax for Mercurial Ignore Files
880 880 hgweb Configuring hgweb
881 881 internals Technical implementation topics
882 882 merge-tools Merge Tools
883 883 pager Pager Support
884 884 patterns File Name Patterns
885 885 phases Working with Phases
886 886 revisions Specifying Revisions
887 887 scripting Using Mercurial from scripts and automation
888 888 subrepos Subrepositories
889 889 templating Template Usage
890 890 urls URL Paths
891 891
892 892 (use 'hg help -v' to show built-in aliases and global options)
893 893
894 894 #endif
895 895
896 896 Test list of internal help commands
897 897
898 898 $ hg help debug
899 899 debug commands (internal and unsupported):
900 900
901 901 debugancestor
902 902 find the ancestor revision of two revisions in a given index
903 903 debugapplystreamclonebundle
904 904 apply a stream clone bundle file
905 905 debugbuilddag
906 906 builds a repo with a given DAG from scratch in the current
907 907 empty repo
908 908 debugbundle lists the contents of a bundle
909 909 debugcapabilities
910 910 lists the capabilities of a remote peer
911 911 debugcheckstate
912 912 validate the correctness of the current dirstate
913 913 debugcolor show available color, effects or style
914 914 debugcommands
915 915 list all available commands and options
916 916 debugcomplete
917 917 returns the completion list associated with the given command
918 918 debugcreatestreamclonebundle
919 919 create a stream clone bundle file
920 920 debugdag format the changelog or an index DAG as a concise textual
921 921 description
922 922 debugdata dump the contents of a data file revision
923 923 debugdate parse and display a date
924 924 debugdeltachain
925 925 dump information about delta chains in a revlog
926 926 debugdirstate
927 927 show the contents of the current dirstate
928 928 debugdiscovery
929 929 runs the changeset discovery protocol in isolation
930 930 debugdownload
931 931 download a resource using Mercurial logic and config
932 932 debugextensions
933 933 show information about active extensions
934 934 debugfileset parse and apply a fileset specification
935 935 debugformat display format information about the current repository
936 936 debugfsinfo show information detected about current filesystem
937 937 debuggetbundle
938 938 retrieves a bundle from a repo
939 939 debugignore display the combined ignore pattern and information about
940 940 ignored files
941 941 debugindex dump index data for a storage primitive
942 942 debugindexdot
943 943 dump an index DAG as a graphviz dot file
944 944 debuginstall test Mercurial installation
945 945 debugknown test whether node ids are known to a repo
946 946 debuglocks show or modify state of locks
947 947 debugmanifestfulltextcache
948 948 show, clear or amend the contents of the manifest fulltext
949 949 cache
950 950 debugmergestate
951 951 print merge state
952 952 debugnamecomplete
953 953 complete "names" - tags, open branch names, bookmark names
954 954 debugobsolete
955 955 create arbitrary obsolete marker
956 956 debugoptADV (no help text available)
957 957 debugoptDEP (no help text available)
958 958 debugoptEXP (no help text available)
959 959 debugpathcomplete
960 960 complete part or all of a tracked path
961 961 debugpeer establish a connection to a peer repository
962 962 debugpickmergetool
963 963 examine which merge tool is chosen for specified file
964 964 debugpushkey access the pushkey key/value protocol
965 965 debugpvec (no help text available)
966 966 debugrebuilddirstate
967 967 rebuild the dirstate as it would look like for the given
968 968 revision
969 969 debugrebuildfncache
970 970 rebuild the fncache file
971 971 debugrename dump rename information
972 972 debugrevlog show data and statistics about a revlog
973 973 debugrevlogindex
974 974 dump the contents of a revlog index
975 975 debugrevspec parse and apply a revision specification
976 976 debugserve run a server with advanced settings
977 977 debugsetparents
978 978 manually set the parents of the current working directory
979 979 debugssl test a secure connection to a server
980 980 debugsub (no help text available)
981 981 debugsuccessorssets
982 982 show set of successors for revision
983 983 debugtemplate
984 984 parse and apply a template
985 985 debuguigetpass
986 986 show prompt to type password
987 987 debuguiprompt
988 988 show plain prompt
989 989 debugupdatecaches
990 990 warm all known caches in the repository
991 991 debugupgraderepo
992 992 upgrade a repository to use different features
993 993 debugwalk show how files match on given patterns
994 994 debugwhyunstable
995 995 explain instabilities of a changeset
996 996 debugwireargs
997 997 (no help text available)
998 998 debugwireproto
999 999 send wire protocol commands to a server
1000 1000
1001 1001 (use 'hg help -v debug' to show built-in aliases and global options)
1002 1002
1003 1003 internals topic renders index of available sub-topics
1004 1004
1005 1005 $ hg help internals
1006 1006 Technical implementation topics
1007 1007 """""""""""""""""""""""""""""""
1008 1008
1009 1009 To access a subtopic, use "hg help internals.{subtopic-name}"
1010 1010
1011 1011 bundle2 Bundle2
1012 1012 bundles Bundles
1013 1013 censor Censor
1014 1014 changegroups Changegroups
1015 1015 config Config Registrar
1016 1016 requirements Repository Requirements
1017 1017 revlogs Revision Logs
1018 1018 wireprotocol Wire Protocol
1019 1019
1020 1020 sub-topics can be accessed
1021 1021
1022 1022 $ hg help internals.changegroups
1023 1023 Changegroups
1024 1024 """"""""""""
1025 1025
1026 1026 Changegroups are representations of repository revlog data, specifically
1027 1027 the changelog data, root/flat manifest data, treemanifest data, and
1028 1028 filelogs.
1029 1029
1030 1030 There are 3 versions of changegroups: "1", "2", and "3". From a high-
1031 1031 level, versions "1" and "2" are almost exactly the same, with the only
1032 1032 difference being an additional item in the *delta header*. Version "3"
1033 1033 adds support for revlog flags in the *delta header* and optionally
1034 1034 exchanging treemanifests (enabled by setting an option on the
1035 1035 "changegroup" part in the bundle2).
1036 1036
1037 1037 Changegroups when not exchanging treemanifests consist of 3 logical
1038 1038 segments:
1039 1039
1040 1040 +---------------------------------+
1041 1041 | | | |
1042 1042 | changeset | manifest | filelogs |
1043 1043 | | | |
1044 1044 | | | |
1045 1045 +---------------------------------+
1046 1046
1047 1047 When exchanging treemanifests, there are 4 logical segments:
1048 1048
1049 1049 +-------------------------------------------------+
1050 1050 | | | | |
1051 1051 | changeset | root | treemanifests | filelogs |
1052 1052 | | manifest | | |
1053 1053 | | | | |
1054 1054 +-------------------------------------------------+
1055 1055
1056 1056 The principle building block of each segment is a *chunk*. A *chunk* is a
1057 1057 framed piece of data:
1058 1058
1059 1059 +---------------------------------------+
1060 1060 | | |
1061 1061 | length | data |
1062 1062 | (4 bytes) | (<length - 4> bytes) |
1063 1063 | | |
1064 1064 +---------------------------------------+
1065 1065
1066 1066 All integers are big-endian signed integers. Each chunk starts with a
1067 1067 32-bit integer indicating the length of the entire chunk (including the
1068 1068 length field itself).
1069 1069
1070 1070 There is a special case chunk that has a value of 0 for the length
1071 1071 ("0x00000000"). We call this an *empty chunk*.
1072 1072
1073 1073 Delta Groups
1074 1074 ============
1075 1075
1076 1076 A *delta group* expresses the content of a revlog as a series of deltas,
1077 1077 or patches against previous revisions.
1078 1078
1079 1079 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
1080 1080 to signal the end of the delta group:
1081 1081
1082 1082 +------------------------------------------------------------------------+
1083 1083 | | | | | |
1084 1084 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
1085 1085 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
1086 1086 | | | | | |
1087 1087 +------------------------------------------------------------------------+
1088 1088
1089 1089 Each *chunk*'s data consists of the following:
1090 1090
1091 1091 +---------------------------------------+
1092 1092 | | |
1093 1093 | delta header | delta data |
1094 1094 | (various by version) | (various) |
1095 1095 | | |
1096 1096 +---------------------------------------+
1097 1097
1098 1098 The *delta data* is a series of *delta*s that describe a diff from an
1099 1099 existing entry (either that the recipient already has, or previously
1100 1100 specified in the bundle/changegroup).
1101 1101
1102 1102 The *delta header* is different between versions "1", "2", and "3" of the
1103 1103 changegroup format.
1104 1104
1105 1105 Version 1 (headerlen=80):
1106 1106
1107 1107 +------------------------------------------------------+
1108 1108 | | | | |
1109 1109 | node | p1 node | p2 node | link node |
1110 1110 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1111 1111 | | | | |
1112 1112 +------------------------------------------------------+
1113 1113
1114 1114 Version 2 (headerlen=100):
1115 1115
1116 1116 +------------------------------------------------------------------+
1117 1117 | | | | | |
1118 1118 | node | p1 node | p2 node | base node | link node |
1119 1119 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1120 1120 | | | | | |
1121 1121 +------------------------------------------------------------------+
1122 1122
1123 1123 Version 3 (headerlen=102):
1124 1124
1125 1125 +------------------------------------------------------------------------------+
1126 1126 | | | | | | |
1127 1127 | node | p1 node | p2 node | base node | link node | flags |
1128 1128 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
1129 1129 | | | | | | |
1130 1130 +------------------------------------------------------------------------------+
1131 1131
1132 1132 The *delta data* consists of "chunklen - 4 - headerlen" bytes, which
1133 1133 contain a series of *delta*s, densely packed (no separators). These deltas
1134 1134 describe a diff from an existing entry (either that the recipient already
1135 1135 has, or previously specified in the bundle/changegroup). The format is
1136 1136 described more fully in "hg help internals.bdiff", but briefly:
1137 1137
1138 1138 +---------------------------------------------------------------+
1139 1139 | | | | |
1140 1140 | start offset | end offset | new length | content |
1141 1141 | (4 bytes) | (4 bytes) | (4 bytes) | (<new length> bytes) |
1142 1142 | | | | |
1143 1143 +---------------------------------------------------------------+
1144 1144
1145 1145 Please note that the length field in the delta data does *not* include
1146 1146 itself.
1147 1147
1148 1148 In version 1, the delta is always applied against the previous node from
1149 1149 the changegroup or the first parent if this is the first entry in the
1150 1150 changegroup.
1151 1151
1152 1152 In version 2 and up, the delta base node is encoded in the entry in the
1153 1153 changegroup. This allows the delta to be expressed against any parent,
1154 1154 which can result in smaller deltas and more efficient encoding of data.
1155 1155
1156 1156 Changeset Segment
1157 1157 =================
1158 1158
1159 1159 The *changeset segment* consists of a single *delta group* holding
1160 1160 changelog data. The *empty chunk* at the end of the *delta group* denotes
1161 1161 the boundary to the *manifest segment*.
1162 1162
1163 1163 Manifest Segment
1164 1164 ================
1165 1165
1166 1166 The *manifest segment* consists of a single *delta group* holding manifest
1167 1167 data. If treemanifests are in use, it contains only the manifest for the
1168 1168 root directory of the repository. Otherwise, it contains the entire
1169 1169 manifest data. The *empty chunk* at the end of the *delta group* denotes
1170 1170 the boundary to the next segment (either the *treemanifests segment* or
1171 1171 the *filelogs segment*, depending on version and the request options).
1172 1172
1173 1173 Treemanifests Segment
1174 1174 ---------------------
1175 1175
1176 1176 The *treemanifests segment* only exists in changegroup version "3", and
1177 1177 only if the 'treemanifest' param is part of the bundle2 changegroup part
1178 1178 (it is not possible to use changegroup version 3 outside of bundle2).
1179 1179 Aside from the filenames in the *treemanifests segment* containing a
1180 1180 trailing "/" character, it behaves identically to the *filelogs segment*
1181 1181 (see below). The final sub-segment is followed by an *empty chunk*
1182 1182 (logically, a sub-segment with filename size 0). This denotes the boundary
1183 1183 to the *filelogs segment*.
1184 1184
1185 1185 Filelogs Segment
1186 1186 ================
1187 1187
1188 1188 The *filelogs segment* consists of multiple sub-segments, each
1189 1189 corresponding to an individual file whose data is being described:
1190 1190
1191 1191 +--------------------------------------------------+
1192 1192 | | | | | |
1193 1193 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
1194 1194 | | | | | (4 bytes) |
1195 1195 | | | | | |
1196 1196 +--------------------------------------------------+
1197 1197
1198 1198 The final filelog sub-segment is followed by an *empty chunk* (logically,
1199 1199 a sub-segment with filename size 0). This denotes the end of the segment
1200 1200 and of the overall changegroup.
1201 1201
1202 1202 Each filelog sub-segment consists of the following:
1203 1203
1204 1204 +------------------------------------------------------+
1205 1205 | | | |
1206 1206 | filename length | filename | delta group |
1207 1207 | (4 bytes) | (<length - 4> bytes) | (various) |
1208 1208 | | | |
1209 1209 +------------------------------------------------------+
1210 1210
1211 1211 That is, a *chunk* consisting of the filename (not terminated or padded)
1212 1212 followed by N chunks constituting the *delta group* for this file. The
1213 1213 *empty chunk* at the end of each *delta group* denotes the boundary to the
1214 1214 next filelog sub-segment.
1215 1215
1216 1216 Test list of commands with command with no help text
1217 1217
1218 1218 $ hg help helpext
1219 1219 helpext extension - no help text available
1220 1220
1221 1221 list of commands:
1222 1222
1223 1223 nohelp (no help text available)
1224 1224
1225 1225 (use 'hg help -v helpext' to show built-in aliases and global options)
1226 1226
1227 1227
1228 1228 test advanced, deprecated and experimental options are hidden in command help
1229 1229 $ hg help debugoptADV
1230 1230 hg debugoptADV
1231 1231
1232 1232 (no help text available)
1233 1233
1234 1234 options:
1235 1235
1236 1236 (some details hidden, use --verbose to show complete help)
1237 1237 $ hg help debugoptDEP
1238 1238 hg debugoptDEP
1239 1239
1240 1240 (no help text available)
1241 1241
1242 1242 options:
1243 1243
1244 1244 (some details hidden, use --verbose to show complete help)
1245 1245
1246 1246 $ hg help debugoptEXP
1247 1247 hg debugoptEXP
1248 1248
1249 1249 (no help text available)
1250 1250
1251 1251 options:
1252 1252
1253 1253 (some details hidden, use --verbose to show complete help)
1254 1254
1255 1255 test advanced, deprecated and experimental options are shown with -v
1256 1256 $ hg help -v debugoptADV | grep aopt
1257 1257 --aopt option is (ADVANCED)
1258 1258 $ hg help -v debugoptDEP | grep dopt
1259 1259 --dopt option is (DEPRECATED)
1260 1260 $ hg help -v debugoptEXP | grep eopt
1261 1261 --eopt option is (EXPERIMENTAL)
1262 1262
1263 1263 #if gettext
1264 1264 test deprecated option is hidden with translation with untranslated description
1265 1265 (use many globy for not failing on changed transaction)
1266 1266 $ LANGUAGE=sv hg help debugoptDEP
1267 1267 hg debugoptDEP
1268 1268
1269 1269 (*) (glob)
1270 1270
1271 1271 options:
1272 1272
1273 1273 (some details hidden, use --verbose to show complete help)
1274 1274 #endif
1275 1275
1276 1276 Test commands that collide with topics (issue4240)
1277 1277
1278 1278 $ hg config -hq
1279 1279 hg config [-u] [NAME]...
1280 1280
1281 1281 show combined config settings from all hgrc files
1282 1282 $ hg showconfig -hq
1283 1283 hg config [-u] [NAME]...
1284 1284
1285 1285 show combined config settings from all hgrc files
1286 1286
1287 1287 Test a help topic
1288 1288
1289 1289 $ hg help dates
1290 1290 Date Formats
1291 1291 """"""""""""
1292 1292
1293 1293 Some commands allow the user to specify a date, e.g.:
1294 1294
1295 1295 - backout, commit, import, tag: Specify the commit date.
1296 1296 - log, revert, update: Select revision(s) by date.
1297 1297
1298 1298 Many date formats are valid. Here are some examples:
1299 1299
1300 1300 - "Wed Dec 6 13:18:29 2006" (local timezone assumed)
1301 1301 - "Dec 6 13:18 -0600" (year assumed, time offset provided)
1302 1302 - "Dec 6 13:18 UTC" (UTC and GMT are aliases for +0000)
1303 1303 - "Dec 6" (midnight)
1304 1304 - "13:18" (today assumed)
1305 1305 - "3:39" (3:39AM assumed)
1306 1306 - "3:39pm" (15:39)
1307 1307 - "2006-12-06 13:18:29" (ISO 8601 format)
1308 1308 - "2006-12-6 13:18"
1309 1309 - "2006-12-6"
1310 1310 - "12-6"
1311 1311 - "12/6"
1312 1312 - "12/6/6" (Dec 6 2006)
1313 1313 - "today" (midnight)
1314 1314 - "yesterday" (midnight)
1315 1315 - "now" - right now
1316 1316
1317 1317 Lastly, there is Mercurial's internal format:
1318 1318
1319 1319 - "1165411109 0" (Wed Dec 6 13:18:29 2006 UTC)
1320 1320
1321 1321 This is the internal representation format for dates. The first number is
1322 1322 the number of seconds since the epoch (1970-01-01 00:00 UTC). The second
1323 1323 is the offset of the local timezone, in seconds west of UTC (negative if
1324 1324 the timezone is east of UTC).
1325 1325
1326 1326 The log command also accepts date ranges:
1327 1327
1328 1328 - "<DATE" - at or before a given date/time
1329 1329 - ">DATE" - on or after a given date/time
1330 1330 - "DATE to DATE" - a date range, inclusive
1331 1331 - "-DAYS" - within a given number of days of today
1332 1332
1333 1333 Test repeated config section name
1334 1334
1335 1335 $ hg help config.host
1336 1336 "http_proxy.host"
1337 1337 Host name and (optional) port of the proxy server, for example
1338 1338 "myproxy:8000".
1339 1339
1340 1340 "smtp.host"
1341 1341 Host name of mail server, e.g. "mail.example.com".
1342 1342
1343 1343
1344 1344 Test section name with dot
1345 1345
1346 1346 $ hg help config.ui.username
1347 "auth.username"
1348 Optional. Username to authenticate with. If not given, and the remote
1349 site requires basic or digest authentication, the user will be
1350 prompted for it. Environment variables are expanded in the username
1351 letting you do "foo.username = $USER". If the URI includes a username,
1352 only "[auth]" entries with a matching username or without a username
1353 will be considered.
1354
1355 "smtp.username"
1356 Optional. User name for authenticating with the SMTP server. (default:
1357 None)
1358
1359 "ui.username"
1360 The committer of a changeset created when running "commit". Typically
1361 a person's name and email address, e.g. "Fred Widget
1362 <fred@example.com>". Environment variables in the username are
1363 expanded.
1364
1365 (default: "$EMAIL" or "username@hostname". If the username in hgrc is
1366 empty, e.g. if the system admin set "username =" in the system hgrc,
1367 it has to be specified manually or in a different hgrc file)
1368
1347 abort: help section not found: config.ui.username
1348 [255]
1369 1349
1370 1350 $ hg help config.annotate.git
1371 "diff.git"
1372 Use git extended diff format.
1373
1351 abort: help section not found: config.annotate.git
1352 [255]
1374 1353
1375 1354 $ hg help config.update.check
1376 "merge-tools.check"
1377 A list of merge success-checking options:
1378
1379 "changed"
1380 Ask whether merge was successful when the merged file shows no
1381 changes.
1382
1383 "conflicts"
1384 Check whether there are conflicts even though the tool reported
1385 success.
1386
1387 "prompt"
1388 Always prompt for merge success, regardless of success reported by
1389 tool.
1390
1391
1392 $ hg help config.commands.update.check
1393 1355 "commands.update.check"
1394 1356 Determines what level of checking 'hg update' will perform before
1395 1357 moving to a destination revision. Valid values are "abort", "none",
1396 1358 "linear", and "noconflict". "abort" always fails if the working
1397 1359 directory has uncommitted changes. "none" performs no checking, and
1398 1360 may result in a merge with uncommitted changes. "linear" allows any
1399 1361 update as long as it follows a straight line in the revision history,
1400 1362 and may trigger a merge with uncommitted changes. "noconflict" will
1401 1363 allow any update which would not trigger a merge with uncommitted
1402 1364 changes, if any are present. (default: "linear")
1403 1365
1404 1366
1367 $ hg help config.commands.update.check
1368 abort: help section not found: config.commands.update.check
1369 [255]
1370
1405 1371 Unrelated trailing paragraphs shouldn't be included
1406 1372
1407 1373 $ hg help config.extramsg | grep '^$'
1408 1374
1409 1375
1410 1376 Test capitalized section name
1411 1377
1412 1378 $ hg help scripting.HGPLAIN > /dev/null
1413 1379
1414 1380 Help subsection:
1415 1381
1416 1382 $ hg help config.charsets |grep "Email example:" > /dev/null
1417 1383 [1]
1418 1384
1419 1385 Show nested definitions
1420 1386 ("profiling.type"[break]"ls"[break]"stat"[break])
1421 1387
1422 1388 $ hg help config.type | egrep '^$'|wc -l
1423 1389 \s*3 (re)
1424 1390
1425 1391 Separate sections from subsections
1426 1392
1427 1393 $ hg help config.format | egrep '^ ("|-)|^\s*$' | uniq
1428 1394 "format"
1429 1395 --------
1430 1396
1431 1397 "usegeneraldelta"
1432 1398
1433 1399 "dotencode"
1434 1400
1435 1401 "usefncache"
1436 1402
1437 1403 "usestore"
1438 1404
1439 1405 "profiling"
1440 1406 -----------
1441 1407
1442 1408 "format"
1443 1409
1444 1410 "progress"
1445 1411 ----------
1446 1412
1447 1413 "format"
1448 1414
1449 1415
1450 1416 Last item in help config.*:
1451 1417
1452 1418 $ hg help config.`hg help config|grep '^ "'| \
1453 1419 > tail -1|sed 's![ "]*!!g'`| \
1454 1420 > grep 'hg help -c config' > /dev/null
1455 1421 [1]
1456 1422
1457 1423 note to use help -c for general hg help config:
1458 1424
1459 1425 $ hg help config |grep 'hg help -c config' > /dev/null
1460 1426
1461 1427 Test templating help
1462 1428
1463 1429 $ hg help templating | egrep '(desc|diffstat|firstline|nonempty) '
1464 1430 desc String. The text of the changeset description.
1465 1431 diffstat String. Statistics of changes with the following format:
1466 1432 firstline Any text. Returns the first line of text.
1467 1433 nonempty Any text. Returns '(none)' if the string is empty.
1468 1434
1469 1435 Test deprecated items
1470 1436
1471 1437 $ hg help -v templating | grep currentbookmark
1472 1438 currentbookmark
1473 1439 $ hg help templating | (grep currentbookmark || true)
1474 1440
1475 1441 Test help hooks
1476 1442
1477 1443 $ cat > helphook1.py <<EOF
1478 1444 > from mercurial import help
1479 1445 >
1480 1446 > def rewrite(ui, topic, doc):
1481 1447 > return doc + '\nhelphook1\n'
1482 1448 >
1483 1449 > def extsetup(ui):
1484 1450 > help.addtopichook('revisions', rewrite)
1485 1451 > EOF
1486 1452 $ cat > helphook2.py <<EOF
1487 1453 > from mercurial import help
1488 1454 >
1489 1455 > def rewrite(ui, topic, doc):
1490 1456 > return doc + '\nhelphook2\n'
1491 1457 >
1492 1458 > def extsetup(ui):
1493 1459 > help.addtopichook('revisions', rewrite)
1494 1460 > EOF
1495 1461 $ echo '[extensions]' >> $HGRCPATH
1496 1462 $ echo "helphook1 = `pwd`/helphook1.py" >> $HGRCPATH
1497 1463 $ echo "helphook2 = `pwd`/helphook2.py" >> $HGRCPATH
1498 1464 $ hg help revsets | grep helphook
1499 1465 helphook1
1500 1466 helphook2
1501 1467
1502 1468 help -c should only show debug --debug
1503 1469
1504 1470 $ hg help -c --debug|egrep debug|wc -l|egrep '^\s*0\s*$'
1505 1471 [1]
1506 1472
1507 1473 help -c should only show deprecated for -v
1508 1474
1509 1475 $ hg help -c -v|egrep DEPRECATED|wc -l|egrep '^\s*0\s*$'
1510 1476 [1]
1511 1477
1512 1478 Test -s / --system
1513 1479
1514 1480 $ hg help config.files -s windows |grep 'etc/mercurial' | \
1515 1481 > wc -l | sed -e 's/ //g'
1516 1482 0
1517 1483 $ hg help config.files --system unix | grep 'USER' | \
1518 1484 > wc -l | sed -e 's/ //g'
1519 1485 0
1520 1486
1521 1487 Test -e / -c / -k combinations
1522 1488
1523 1489 $ hg help -c|egrep '^[A-Z].*:|^ debug'
1524 1490 Commands:
1525 1491 $ hg help -e|egrep '^[A-Z].*:|^ debug'
1526 1492 Extensions:
1527 1493 $ hg help -k|egrep '^[A-Z].*:|^ debug'
1528 1494 Topics:
1529 1495 Commands:
1530 1496 Extensions:
1531 1497 Extension Commands:
1532 1498 $ hg help -c schemes
1533 1499 abort: no such help topic: schemes
1534 1500 (try 'hg help --keyword schemes')
1535 1501 [255]
1536 1502 $ hg help -e schemes |head -1
1537 1503 schemes extension - extend schemes with shortcuts to repository swarms
1538 1504 $ hg help -c -k dates |egrep '^(Topics|Extensions|Commands):'
1539 1505 Commands:
1540 1506 $ hg help -e -k a |egrep '^(Topics|Extensions|Commands):'
1541 1507 Extensions:
1542 1508 $ hg help -e -c -k date |egrep '^(Topics|Extensions|Commands):'
1543 1509 Extensions:
1544 1510 Commands:
1545 1511 $ hg help -c commit > /dev/null
1546 1512 $ hg help -e -c commit > /dev/null
1547 1513 $ hg help -e commit
1548 1514 abort: no such help topic: commit
1549 1515 (try 'hg help --keyword commit')
1550 1516 [255]
1551 1517
1552 1518 Test keyword search help
1553 1519
1554 1520 $ cat > prefixedname.py <<EOF
1555 1521 > '''matched against word "clone"
1556 1522 > '''
1557 1523 > EOF
1558 1524 $ echo '[extensions]' >> $HGRCPATH
1559 1525 $ echo "dot.dot.prefixedname = `pwd`/prefixedname.py" >> $HGRCPATH
1560 1526 $ hg help -k clone
1561 1527 Topics:
1562 1528
1563 1529 config Configuration Files
1564 1530 extensions Using Additional Features
1565 1531 glossary Glossary
1566 1532 phases Working with Phases
1567 1533 subrepos Subrepositories
1568 1534 urls URL Paths
1569 1535
1570 1536 Commands:
1571 1537
1572 1538 bookmarks create a new bookmark or list existing bookmarks
1573 1539 clone make a copy of an existing repository
1574 1540 paths show aliases for remote repositories
1575 1541 pull pull changes from the specified source
1576 1542 update update working directory (or switch revisions)
1577 1543
1578 1544 Extensions:
1579 1545
1580 1546 clonebundles advertise pre-generated bundles to seed clones
1581 1547 narrow create clones which fetch history data for subset of files
1582 1548 (EXPERIMENTAL)
1583 1549 prefixedname matched against word "clone"
1584 1550 relink recreates hardlinks between repository clones
1585 1551
1586 1552 Extension Commands:
1587 1553
1588 1554 qclone clone main and patch repository at same time
1589 1555
1590 1556 Test unfound topic
1591 1557
1592 1558 $ hg help nonexistingtopicthatwillneverexisteverever
1593 1559 abort: no such help topic: nonexistingtopicthatwillneverexisteverever
1594 1560 (try 'hg help --keyword nonexistingtopicthatwillneverexisteverever')
1595 1561 [255]
1596 1562
1597 1563 Test unfound keyword
1598 1564
1599 1565 $ hg help --keyword nonexistingwordthatwillneverexisteverever
1600 1566 abort: no matches
1601 1567 (try 'hg help' for a list of topics)
1602 1568 [255]
1603 1569
1604 1570 Test omit indicating for help
1605 1571
1606 1572 $ cat > addverboseitems.py <<EOF
1607 1573 > '''extension to test omit indicating.
1608 1574 >
1609 1575 > This paragraph is never omitted (for extension)
1610 1576 >
1611 1577 > .. container:: verbose
1612 1578 >
1613 1579 > This paragraph is omitted,
1614 1580 > if :hg:\`help\` is invoked without \`\`-v\`\` (for extension)
1615 1581 >
1616 1582 > This paragraph is never omitted, too (for extension)
1617 1583 > '''
1618 1584 > from __future__ import absolute_import
1619 1585 > from mercurial import commands, help
1620 1586 > testtopic = """This paragraph is never omitted (for topic).
1621 1587 >
1622 1588 > .. container:: verbose
1623 1589 >
1624 1590 > This paragraph is omitted,
1625 1591 > if :hg:\`help\` is invoked without \`\`-v\`\` (for topic)
1626 1592 >
1627 1593 > This paragraph is never omitted, too (for topic)
1628 1594 > """
1629 1595 > def extsetup(ui):
1630 1596 > help.helptable.append((["topic-containing-verbose"],
1631 1597 > "This is the topic to test omit indicating.",
1632 1598 > lambda ui: testtopic))
1633 1599 > EOF
1634 1600 $ echo '[extensions]' >> $HGRCPATH
1635 1601 $ echo "addverboseitems = `pwd`/addverboseitems.py" >> $HGRCPATH
1636 1602 $ hg help addverboseitems
1637 1603 addverboseitems extension - extension to test omit indicating.
1638 1604
1639 1605 This paragraph is never omitted (for extension)
1640 1606
1641 1607 This paragraph is never omitted, too (for extension)
1642 1608
1643 1609 (some details hidden, use --verbose to show complete help)
1644 1610
1645 1611 no commands defined
1646 1612 $ hg help -v addverboseitems
1647 1613 addverboseitems extension - extension to test omit indicating.
1648 1614
1649 1615 This paragraph is never omitted (for extension)
1650 1616
1651 1617 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1652 1618 extension)
1653 1619
1654 1620 This paragraph is never omitted, too (for extension)
1655 1621
1656 1622 no commands defined
1657 1623 $ hg help topic-containing-verbose
1658 1624 This is the topic to test omit indicating.
1659 1625 """"""""""""""""""""""""""""""""""""""""""
1660 1626
1661 1627 This paragraph is never omitted (for topic).
1662 1628
1663 1629 This paragraph is never omitted, too (for topic)
1664 1630
1665 1631 (some details hidden, use --verbose to show complete help)
1666 1632 $ hg help -v topic-containing-verbose
1667 1633 This is the topic to test omit indicating.
1668 1634 """"""""""""""""""""""""""""""""""""""""""
1669 1635
1670 1636 This paragraph is never omitted (for topic).
1671 1637
1672 1638 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1673 1639 topic)
1674 1640
1675 1641 This paragraph is never omitted, too (for topic)
1676 1642
1677 1643 Test section lookup
1678 1644
1679 1645 $ hg help revset.merge
1680 1646 "merge()"
1681 1647 Changeset is a merge changeset.
1682 1648
1683 1649 $ hg help glossary.dag
1684 1650 DAG
1685 1651 The repository of changesets of a distributed version control system
1686 1652 (DVCS) can be described as a directed acyclic graph (DAG), consisting
1687 1653 of nodes and edges, where nodes correspond to changesets and edges
1688 1654 imply a parent -> child relation. This graph can be visualized by
1689 1655 graphical tools such as 'hg log --graph'. In Mercurial, the DAG is
1690 1656 limited by the requirement for children to have at most two parents.
1691 1657
1692 1658
1693 1659 $ hg help hgrc.paths
1694 1660 "paths"
1695 1661 -------
1696 1662
1697 1663 Assigns symbolic names and behavior to repositories.
1698 1664
1699 1665 Options are symbolic names defining the URL or directory that is the
1700 1666 location of the repository. Example:
1701 1667
1702 1668 [paths]
1703 1669 my_server = https://example.com/my_repo
1704 1670 local_path = /home/me/repo
1705 1671
1706 1672 These symbolic names can be used from the command line. To pull from
1707 1673 "my_server": 'hg pull my_server'. To push to "local_path": 'hg push
1708 1674 local_path'.
1709 1675
1710 1676 Options containing colons (":") denote sub-options that can influence
1711 1677 behavior for that specific path. Example:
1712 1678
1713 1679 [paths]
1714 1680 my_server = https://example.com/my_path
1715 1681 my_server:pushurl = ssh://example.com/my_path
1716 1682
1717 1683 The following sub-options can be defined:
1718 1684
1719 1685 "pushurl"
1720 1686 The URL to use for push operations. If not defined, the location
1721 1687 defined by the path's main entry is used.
1722 1688
1723 1689 "pushrev"
1724 1690 A revset defining which revisions to push by default.
1725 1691
1726 1692 When 'hg push' is executed without a "-r" argument, the revset defined
1727 1693 by this sub-option is evaluated to determine what to push.
1728 1694
1729 1695 For example, a value of "." will push the working directory's revision
1730 1696 by default.
1731 1697
1732 1698 Revsets specifying bookmarks will not result in the bookmark being
1733 1699 pushed.
1734 1700
1735 1701 The following special named paths exist:
1736 1702
1737 1703 "default"
1738 1704 The URL or directory to use when no source or remote is specified.
1739 1705
1740 1706 'hg clone' will automatically define this path to the location the
1741 1707 repository was cloned from.
1742 1708
1743 1709 "default-push"
1744 1710 (deprecated) The URL or directory for the default 'hg push' location.
1745 1711 "default:pushurl" should be used instead.
1746 1712
1747 1713 $ hg help glossary.mcguffin
1748 1714 abort: help section not found: glossary.mcguffin
1749 1715 [255]
1750 1716
1751 1717 $ hg help glossary.mc.guffin
1752 1718 abort: help section not found: glossary.mc.guffin
1753 1719 [255]
1754 1720
1755 1721 $ hg help template.files
1756 1722 files List of strings. All files modified, added, or removed by
1757 1723 this changeset.
1758 1724 files(pattern)
1759 1725 All files of the current changeset matching the pattern. See
1760 1726 'hg help patterns'.
1761 1727
1762 1728 Test section lookup by translated message
1763 1729
1764 1730 str.lower() instead of encoding.lower(str) on translated message might
1765 1731 make message meaningless, because some encoding uses 0x41(A) - 0x5a(Z)
1766 1732 as the second or later byte of multi-byte character.
1767 1733
1768 1734 For example, "\x8bL\x98^" (translation of "record" in ja_JP.cp932)
1769 1735 contains 0x4c (L). str.lower() replaces 0x4c(L) by 0x6c(l) and this
1770 1736 replacement makes message meaningless.
1771 1737
1772 1738 This tests that section lookup by translated string isn't broken by
1773 1739 such str.lower().
1774 1740
1775 1741 $ $PYTHON <<EOF
1776 1742 > def escape(s):
1777 1743 > return ''.join('\u%x' % ord(uc) for uc in s.decode('cp932'))
1778 1744 > # translation of "record" in ja_JP.cp932
1779 1745 > upper = "\x8bL\x98^"
1780 1746 > # str.lower()-ed section name should be treated as different one
1781 1747 > lower = "\x8bl\x98^"
1782 1748 > with open('ambiguous.py', 'w') as fp:
1783 1749 > fp.write("""# ambiguous section names in ja_JP.cp932
1784 1750 > u'''summary of extension
1785 1751 >
1786 1752 > %s
1787 1753 > ----
1788 1754 >
1789 1755 > Upper name should show only this message
1790 1756 >
1791 1757 > %s
1792 1758 > ----
1793 1759 >
1794 1760 > Lower name should show only this message
1795 1761 >
1796 1762 > subsequent section
1797 1763 > ------------------
1798 1764 >
1799 1765 > This should be hidden at 'hg help ambiguous' with section name.
1800 1766 > '''
1801 1767 > """ % (escape(upper), escape(lower)))
1802 1768 > EOF
1803 1769
1804 1770 $ cat >> $HGRCPATH <<EOF
1805 1771 > [extensions]
1806 1772 > ambiguous = ./ambiguous.py
1807 1773 > EOF
1808 1774
1809 1775 $ $PYTHON <<EOF | sh
1810 1776 > upper = "\x8bL\x98^"
1811 1777 > print("hg --encoding cp932 help -e ambiguous.%s" % upper)
1812 1778 > EOF
1813 1779 \x8bL\x98^ (esc)
1814 1780 ----
1815 1781
1816 1782 Upper name should show only this message
1817 1783
1818 1784
1819 1785 $ $PYTHON <<EOF | sh
1820 1786 > lower = "\x8bl\x98^"
1821 1787 > print("hg --encoding cp932 help -e ambiguous.%s" % lower)
1822 1788 > EOF
1823 1789 \x8bl\x98^ (esc)
1824 1790 ----
1825 1791
1826 1792 Lower name should show only this message
1827 1793
1828 1794
1829 1795 $ cat >> $HGRCPATH <<EOF
1830 1796 > [extensions]
1831 1797 > ambiguous = !
1832 1798 > EOF
1833 1799
1834 1800 Show help content of disabled extensions
1835 1801
1836 1802 $ cat >> $HGRCPATH <<EOF
1837 1803 > [extensions]
1838 1804 > ambiguous = !./ambiguous.py
1839 1805 > EOF
1840 1806 $ hg help -e ambiguous
1841 1807 ambiguous extension - (no help text available)
1842 1808
1843 1809 (use 'hg help extensions' for information on enabling extensions)
1844 1810
1845 1811 Test dynamic list of merge tools only shows up once
1846 1812 $ hg help merge-tools
1847 1813 Merge Tools
1848 1814 """""""""""
1849 1815
1850 1816 To merge files Mercurial uses merge tools.
1851 1817
1852 1818 A merge tool combines two different versions of a file into a merged file.
1853 1819 Merge tools are given the two files and the greatest common ancestor of
1854 1820 the two file versions, so they can determine the changes made on both
1855 1821 branches.
1856 1822
1857 1823 Merge tools are used both for 'hg resolve', 'hg merge', 'hg update', 'hg
1858 1824 backout' and in several extensions.
1859 1825
1860 1826 Usually, the merge tool tries to automatically reconcile the files by
1861 1827 combining all non-overlapping changes that occurred separately in the two
1862 1828 different evolutions of the same initial base file. Furthermore, some
1863 1829 interactive merge programs make it easier to manually resolve conflicting
1864 1830 merges, either in a graphical way, or by inserting some conflict markers.
1865 1831 Mercurial does not include any interactive merge programs but relies on
1866 1832 external tools for that.
1867 1833
1868 1834 Available merge tools
1869 1835 =====================
1870 1836
1871 1837 External merge tools and their properties are configured in the merge-
1872 1838 tools configuration section - see hgrc(5) - but they can often just be
1873 1839 named by their executable.
1874 1840
1875 1841 A merge tool is generally usable if its executable can be found on the
1876 1842 system and if it can handle the merge. The executable is found if it is an
1877 1843 absolute or relative executable path or the name of an application in the
1878 1844 executable search path. The tool is assumed to be able to handle the merge
1879 1845 if it can handle symlinks if the file is a symlink, if it can handle
1880 1846 binary files if the file is binary, and if a GUI is available if the tool
1881 1847 requires a GUI.
1882 1848
1883 1849 There are some internal merge tools which can be used. The internal merge
1884 1850 tools are:
1885 1851
1886 1852 ":dump"
1887 1853 Creates three versions of the files to merge, containing the contents of
1888 1854 local, other and base. These files can then be used to perform a merge
1889 1855 manually. If the file to be merged is named "a.txt", these files will
1890 1856 accordingly be named "a.txt.local", "a.txt.other" and "a.txt.base" and
1891 1857 they will be placed in the same directory as "a.txt".
1892 1858
1893 1859 This implies premerge. Therefore, files aren't dumped, if premerge runs
1894 1860 successfully. Use :forcedump to forcibly write files out.
1895 1861
1896 1862 (actual capabilities: binary, symlink)
1897 1863
1898 1864 ":fail"
1899 1865 Rather than attempting to merge files that were modified on both
1900 1866 branches, it marks them as unresolved. The resolve command must be used
1901 1867 to resolve these conflicts.
1902 1868
1903 1869 (actual capabilities: binary, symlink)
1904 1870
1905 1871 ":forcedump"
1906 1872 Creates three versions of the files as same as :dump, but omits
1907 1873 premerge.
1908 1874
1909 1875 (actual capabilities: binary, symlink)
1910 1876
1911 1877 ":local"
1912 1878 Uses the local 'p1()' version of files as the merged version.
1913 1879
1914 1880 (actual capabilities: binary, symlink)
1915 1881
1916 1882 ":merge"
1917 1883 Uses the internal non-interactive simple merge algorithm for merging
1918 1884 files. It will fail if there are any conflicts and leave markers in the
1919 1885 partially merged file. Markers will have two sections, one for each side
1920 1886 of merge.
1921 1887
1922 1888 ":merge-local"
1923 1889 Like :merge, but resolve all conflicts non-interactively in favor of the
1924 1890 local 'p1()' changes.
1925 1891
1926 1892 ":merge-other"
1927 1893 Like :merge, but resolve all conflicts non-interactively in favor of the
1928 1894 other 'p2()' changes.
1929 1895
1930 1896 ":merge3"
1931 1897 Uses the internal non-interactive simple merge algorithm for merging
1932 1898 files. It will fail if there are any conflicts and leave markers in the
1933 1899 partially merged file. Marker will have three sections, one from each
1934 1900 side of the merge and one for the base content.
1935 1901
1936 1902 ":other"
1937 1903 Uses the other 'p2()' version of files as the merged version.
1938 1904
1939 1905 (actual capabilities: binary, symlink)
1940 1906
1941 1907 ":prompt"
1942 1908 Asks the user which of the local 'p1()' or the other 'p2()' version to
1943 1909 keep as the merged version.
1944 1910
1945 1911 (actual capabilities: binary, symlink)
1946 1912
1947 1913 ":tagmerge"
1948 1914 Uses the internal tag merge algorithm (experimental).
1949 1915
1950 1916 ":union"
1951 1917 Uses the internal non-interactive simple merge algorithm for merging
1952 1918 files. It will use both left and right sides for conflict regions. No
1953 1919 markers are inserted.
1954 1920
1955 1921 Internal tools are always available and do not require a GUI but will by
1956 1922 default not handle symlinks or binary files. See next section for detail
1957 1923 about "actual capabilities" described above.
1958 1924
1959 1925 Choosing a merge tool
1960 1926 =====================
1961 1927
1962 1928 Mercurial uses these rules when deciding which merge tool to use:
1963 1929
1964 1930 1. If a tool has been specified with the --tool option to merge or
1965 1931 resolve, it is used. If it is the name of a tool in the merge-tools
1966 1932 configuration, its configuration is used. Otherwise the specified tool
1967 1933 must be executable by the shell.
1968 1934 2. If the "HGMERGE" environment variable is present, its value is used and
1969 1935 must be executable by the shell.
1970 1936 3. If the filename of the file to be merged matches any of the patterns in
1971 1937 the merge-patterns configuration section, the first usable merge tool
1972 1938 corresponding to a matching pattern is used.
1973 1939 4. If ui.merge is set it will be considered next. If the value is not the
1974 1940 name of a configured tool, the specified value is used and must be
1975 1941 executable by the shell. Otherwise the named tool is used if it is
1976 1942 usable.
1977 1943 5. If any usable merge tools are present in the merge-tools configuration
1978 1944 section, the one with the highest priority is used.
1979 1945 6. If a program named "hgmerge" can be found on the system, it is used -
1980 1946 but it will by default not be used for symlinks and binary files.
1981 1947 7. If the file to be merged is not binary and is not a symlink, then
1982 1948 internal ":merge" is used.
1983 1949 8. Otherwise, ":prompt" is used.
1984 1950
1985 1951 For historical reason, Mercurial treats merge tools as below while
1986 1952 examining rules above.
1987 1953
1988 1954 step specified via binary symlink
1989 1955 ----------------------------------
1990 1956 1. --tool o/o o/o
1991 1957 2. HGMERGE o/o o/o
1992 1958 3. merge-patterns o/o(*) x/?(*)
1993 1959 4. ui.merge x/?(*) x/?(*)
1994 1960
1995 1961 Each capability column indicates Mercurial behavior for internal/external
1996 1962 merge tools at examining each rule.
1997 1963
1998 1964 - "o": "assume that a tool has capability"
1999 1965 - "x": "assume that a tool does not have capability"
2000 1966 - "?": "check actual capability of a tool"
2001 1967
2002 1968 If "merge.strict-capability-check" configuration is true, Mercurial checks
2003 1969 capabilities of merge tools strictly in (*) cases above (= each capability
2004 1970 column becomes "?/?"). It is false by default for backward compatibility.
2005 1971
2006 1972 Note:
2007 1973 After selecting a merge program, Mercurial will by default attempt to
2008 1974 merge the files using a simple merge algorithm first. Only if it
2009 1975 doesn't succeed because of conflicting changes will Mercurial actually
2010 1976 execute the merge program. Whether to use the simple merge algorithm
2011 1977 first can be controlled by the premerge setting of the merge tool.
2012 1978 Premerge is enabled by default unless the file is binary or a symlink.
2013 1979
2014 1980 See the merge-tools and ui sections of hgrc(5) for details on the
2015 1981 configuration of merge tools.
2016 1982
2017 1983 Compression engines listed in `hg help bundlespec`
2018 1984
2019 1985 $ hg help bundlespec | grep gzip
2020 1986 "v1" bundles can only use the "gzip", "bzip2", and "none" compression
2021 1987 An algorithm that produces smaller bundles than "gzip".
2022 1988 This engine will likely produce smaller bundles than "gzip" but will be
2023 1989 "gzip"
2024 1990 better compression than "gzip". It also frequently yields better (?)
2025 1991
2026 1992 Test usage of section marks in help documents
2027 1993
2028 1994 $ cd "$TESTDIR"/../doc
2029 1995 $ $PYTHON check-seclevel.py
2030 1996 $ cd $TESTTMP
2031 1997
2032 1998 #if serve
2033 1999
2034 2000 Test the help pages in hgweb.
2035 2001
2036 2002 Dish up an empty repo; serve it cold.
2037 2003
2038 2004 $ hg init "$TESTTMP/test"
2039 2005 $ hg serve -R "$TESTTMP/test" -n test -p $HGPORT -d --pid-file=hg.pid
2040 2006 $ cat hg.pid >> $DAEMON_PIDS
2041 2007
2042 2008 $ get-with-headers.py $LOCALIP:$HGPORT "help"
2043 2009 200 Script output follows
2044 2010
2045 2011 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2046 2012 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2047 2013 <head>
2048 2014 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2049 2015 <meta name="robots" content="index, nofollow" />
2050 2016 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2051 2017 <script type="text/javascript" src="/static/mercurial.js"></script>
2052 2018
2053 2019 <title>Help: Index</title>
2054 2020 </head>
2055 2021 <body>
2056 2022
2057 2023 <div class="container">
2058 2024 <div class="menu">
2059 2025 <div class="logo">
2060 2026 <a href="https://mercurial-scm.org/">
2061 2027 <img src="/static/hglogo.png" alt="mercurial" /></a>
2062 2028 </div>
2063 2029 <ul>
2064 2030 <li><a href="/shortlog">log</a></li>
2065 2031 <li><a href="/graph">graph</a></li>
2066 2032 <li><a href="/tags">tags</a></li>
2067 2033 <li><a href="/bookmarks">bookmarks</a></li>
2068 2034 <li><a href="/branches">branches</a></li>
2069 2035 </ul>
2070 2036 <ul>
2071 2037 <li class="active">help</li>
2072 2038 </ul>
2073 2039 </div>
2074 2040
2075 2041 <div class="main">
2076 2042 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2077 2043
2078 2044 <form class="search" action="/log">
2079 2045
2080 2046 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
2081 2047 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2082 2048 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2083 2049 </form>
2084 2050 <table class="bigtable">
2085 2051 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
2086 2052
2087 2053 <tr><td>
2088 2054 <a href="/help/bundlespec">
2089 2055 bundlespec
2090 2056 </a>
2091 2057 </td><td>
2092 2058 Bundle File Formats
2093 2059 </td></tr>
2094 2060 <tr><td>
2095 2061 <a href="/help/color">
2096 2062 color
2097 2063 </a>
2098 2064 </td><td>
2099 2065 Colorizing Outputs
2100 2066 </td></tr>
2101 2067 <tr><td>
2102 2068 <a href="/help/config">
2103 2069 config
2104 2070 </a>
2105 2071 </td><td>
2106 2072 Configuration Files
2107 2073 </td></tr>
2108 2074 <tr><td>
2109 2075 <a href="/help/dates">
2110 2076 dates
2111 2077 </a>
2112 2078 </td><td>
2113 2079 Date Formats
2114 2080 </td></tr>
2115 2081 <tr><td>
2116 2082 <a href="/help/deprecated">
2117 2083 deprecated
2118 2084 </a>
2119 2085 </td><td>
2120 2086 Deprecated Features
2121 2087 </td></tr>
2122 2088 <tr><td>
2123 2089 <a href="/help/diffs">
2124 2090 diffs
2125 2091 </a>
2126 2092 </td><td>
2127 2093 Diff Formats
2128 2094 </td></tr>
2129 2095 <tr><td>
2130 2096 <a href="/help/environment">
2131 2097 environment
2132 2098 </a>
2133 2099 </td><td>
2134 2100 Environment Variables
2135 2101 </td></tr>
2136 2102 <tr><td>
2137 2103 <a href="/help/extensions">
2138 2104 extensions
2139 2105 </a>
2140 2106 </td><td>
2141 2107 Using Additional Features
2142 2108 </td></tr>
2143 2109 <tr><td>
2144 2110 <a href="/help/filesets">
2145 2111 filesets
2146 2112 </a>
2147 2113 </td><td>
2148 2114 Specifying File Sets
2149 2115 </td></tr>
2150 2116 <tr><td>
2151 2117 <a href="/help/flags">
2152 2118 flags
2153 2119 </a>
2154 2120 </td><td>
2155 2121 Command-line flags
2156 2122 </td></tr>
2157 2123 <tr><td>
2158 2124 <a href="/help/glossary">
2159 2125 glossary
2160 2126 </a>
2161 2127 </td><td>
2162 2128 Glossary
2163 2129 </td></tr>
2164 2130 <tr><td>
2165 2131 <a href="/help/hgignore">
2166 2132 hgignore
2167 2133 </a>
2168 2134 </td><td>
2169 2135 Syntax for Mercurial Ignore Files
2170 2136 </td></tr>
2171 2137 <tr><td>
2172 2138 <a href="/help/hgweb">
2173 2139 hgweb
2174 2140 </a>
2175 2141 </td><td>
2176 2142 Configuring hgweb
2177 2143 </td></tr>
2178 2144 <tr><td>
2179 2145 <a href="/help/internals">
2180 2146 internals
2181 2147 </a>
2182 2148 </td><td>
2183 2149 Technical implementation topics
2184 2150 </td></tr>
2185 2151 <tr><td>
2186 2152 <a href="/help/merge-tools">
2187 2153 merge-tools
2188 2154 </a>
2189 2155 </td><td>
2190 2156 Merge Tools
2191 2157 </td></tr>
2192 2158 <tr><td>
2193 2159 <a href="/help/pager">
2194 2160 pager
2195 2161 </a>
2196 2162 </td><td>
2197 2163 Pager Support
2198 2164 </td></tr>
2199 2165 <tr><td>
2200 2166 <a href="/help/patterns">
2201 2167 patterns
2202 2168 </a>
2203 2169 </td><td>
2204 2170 File Name Patterns
2205 2171 </td></tr>
2206 2172 <tr><td>
2207 2173 <a href="/help/phases">
2208 2174 phases
2209 2175 </a>
2210 2176 </td><td>
2211 2177 Working with Phases
2212 2178 </td></tr>
2213 2179 <tr><td>
2214 2180 <a href="/help/revisions">
2215 2181 revisions
2216 2182 </a>
2217 2183 </td><td>
2218 2184 Specifying Revisions
2219 2185 </td></tr>
2220 2186 <tr><td>
2221 2187 <a href="/help/scripting">
2222 2188 scripting
2223 2189 </a>
2224 2190 </td><td>
2225 2191 Using Mercurial from scripts and automation
2226 2192 </td></tr>
2227 2193 <tr><td>
2228 2194 <a href="/help/subrepos">
2229 2195 subrepos
2230 2196 </a>
2231 2197 </td><td>
2232 2198 Subrepositories
2233 2199 </td></tr>
2234 2200 <tr><td>
2235 2201 <a href="/help/templating">
2236 2202 templating
2237 2203 </a>
2238 2204 </td><td>
2239 2205 Template Usage
2240 2206 </td></tr>
2241 2207 <tr><td>
2242 2208 <a href="/help/urls">
2243 2209 urls
2244 2210 </a>
2245 2211 </td><td>
2246 2212 URL Paths
2247 2213 </td></tr>
2248 2214 <tr><td>
2249 2215 <a href="/help/topic-containing-verbose">
2250 2216 topic-containing-verbose
2251 2217 </a>
2252 2218 </td><td>
2253 2219 This is the topic to test omit indicating.
2254 2220 </td></tr>
2255 2221
2256 2222
2257 2223 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
2258 2224
2259 2225 <tr><td>
2260 2226 <a href="/help/add">
2261 2227 add
2262 2228 </a>
2263 2229 </td><td>
2264 2230 add the specified files on the next commit
2265 2231 </td></tr>
2266 2232 <tr><td>
2267 2233 <a href="/help/annotate">
2268 2234 annotate
2269 2235 </a>
2270 2236 </td><td>
2271 2237 show changeset information by line for each file
2272 2238 </td></tr>
2273 2239 <tr><td>
2274 2240 <a href="/help/clone">
2275 2241 clone
2276 2242 </a>
2277 2243 </td><td>
2278 2244 make a copy of an existing repository
2279 2245 </td></tr>
2280 2246 <tr><td>
2281 2247 <a href="/help/commit">
2282 2248 commit
2283 2249 </a>
2284 2250 </td><td>
2285 2251 commit the specified files or all outstanding changes
2286 2252 </td></tr>
2287 2253 <tr><td>
2288 2254 <a href="/help/diff">
2289 2255 diff
2290 2256 </a>
2291 2257 </td><td>
2292 2258 diff repository (or selected files)
2293 2259 </td></tr>
2294 2260 <tr><td>
2295 2261 <a href="/help/export">
2296 2262 export
2297 2263 </a>
2298 2264 </td><td>
2299 2265 dump the header and diffs for one or more changesets
2300 2266 </td></tr>
2301 2267 <tr><td>
2302 2268 <a href="/help/forget">
2303 2269 forget
2304 2270 </a>
2305 2271 </td><td>
2306 2272 forget the specified files on the next commit
2307 2273 </td></tr>
2308 2274 <tr><td>
2309 2275 <a href="/help/init">
2310 2276 init
2311 2277 </a>
2312 2278 </td><td>
2313 2279 create a new repository in the given directory
2314 2280 </td></tr>
2315 2281 <tr><td>
2316 2282 <a href="/help/log">
2317 2283 log
2318 2284 </a>
2319 2285 </td><td>
2320 2286 show revision history of entire repository or files
2321 2287 </td></tr>
2322 2288 <tr><td>
2323 2289 <a href="/help/merge">
2324 2290 merge
2325 2291 </a>
2326 2292 </td><td>
2327 2293 merge another revision into working directory
2328 2294 </td></tr>
2329 2295 <tr><td>
2330 2296 <a href="/help/pull">
2331 2297 pull
2332 2298 </a>
2333 2299 </td><td>
2334 2300 pull changes from the specified source
2335 2301 </td></tr>
2336 2302 <tr><td>
2337 2303 <a href="/help/push">
2338 2304 push
2339 2305 </a>
2340 2306 </td><td>
2341 2307 push changes to the specified destination
2342 2308 </td></tr>
2343 2309 <tr><td>
2344 2310 <a href="/help/remove">
2345 2311 remove
2346 2312 </a>
2347 2313 </td><td>
2348 2314 remove the specified files on the next commit
2349 2315 </td></tr>
2350 2316 <tr><td>
2351 2317 <a href="/help/serve">
2352 2318 serve
2353 2319 </a>
2354 2320 </td><td>
2355 2321 start stand-alone webserver
2356 2322 </td></tr>
2357 2323 <tr><td>
2358 2324 <a href="/help/status">
2359 2325 status
2360 2326 </a>
2361 2327 </td><td>
2362 2328 show changed files in the working directory
2363 2329 </td></tr>
2364 2330 <tr><td>
2365 2331 <a href="/help/summary">
2366 2332 summary
2367 2333 </a>
2368 2334 </td><td>
2369 2335 summarize working directory state
2370 2336 </td></tr>
2371 2337 <tr><td>
2372 2338 <a href="/help/update">
2373 2339 update
2374 2340 </a>
2375 2341 </td><td>
2376 2342 update working directory (or switch revisions)
2377 2343 </td></tr>
2378 2344
2379 2345
2380 2346
2381 2347 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
2382 2348
2383 2349 <tr><td>
2384 2350 <a href="/help/addremove">
2385 2351 addremove
2386 2352 </a>
2387 2353 </td><td>
2388 2354 add all new files, delete all missing files
2389 2355 </td></tr>
2390 2356 <tr><td>
2391 2357 <a href="/help/archive">
2392 2358 archive
2393 2359 </a>
2394 2360 </td><td>
2395 2361 create an unversioned archive of a repository revision
2396 2362 </td></tr>
2397 2363 <tr><td>
2398 2364 <a href="/help/backout">
2399 2365 backout
2400 2366 </a>
2401 2367 </td><td>
2402 2368 reverse effect of earlier changeset
2403 2369 </td></tr>
2404 2370 <tr><td>
2405 2371 <a href="/help/bisect">
2406 2372 bisect
2407 2373 </a>
2408 2374 </td><td>
2409 2375 subdivision search of changesets
2410 2376 </td></tr>
2411 2377 <tr><td>
2412 2378 <a href="/help/bookmarks">
2413 2379 bookmarks
2414 2380 </a>
2415 2381 </td><td>
2416 2382 create a new bookmark or list existing bookmarks
2417 2383 </td></tr>
2418 2384 <tr><td>
2419 2385 <a href="/help/branch">
2420 2386 branch
2421 2387 </a>
2422 2388 </td><td>
2423 2389 set or show the current branch name
2424 2390 </td></tr>
2425 2391 <tr><td>
2426 2392 <a href="/help/branches">
2427 2393 branches
2428 2394 </a>
2429 2395 </td><td>
2430 2396 list repository named branches
2431 2397 </td></tr>
2432 2398 <tr><td>
2433 2399 <a href="/help/bundle">
2434 2400 bundle
2435 2401 </a>
2436 2402 </td><td>
2437 2403 create a bundle file
2438 2404 </td></tr>
2439 2405 <tr><td>
2440 2406 <a href="/help/cat">
2441 2407 cat
2442 2408 </a>
2443 2409 </td><td>
2444 2410 output the current or given revision of files
2445 2411 </td></tr>
2446 2412 <tr><td>
2447 2413 <a href="/help/config">
2448 2414 config
2449 2415 </a>
2450 2416 </td><td>
2451 2417 show combined config settings from all hgrc files
2452 2418 </td></tr>
2453 2419 <tr><td>
2454 2420 <a href="/help/copy">
2455 2421 copy
2456 2422 </a>
2457 2423 </td><td>
2458 2424 mark files as copied for the next commit
2459 2425 </td></tr>
2460 2426 <tr><td>
2461 2427 <a href="/help/files">
2462 2428 files
2463 2429 </a>
2464 2430 </td><td>
2465 2431 list tracked files
2466 2432 </td></tr>
2467 2433 <tr><td>
2468 2434 <a href="/help/graft">
2469 2435 graft
2470 2436 </a>
2471 2437 </td><td>
2472 2438 copy changes from other branches onto the current branch
2473 2439 </td></tr>
2474 2440 <tr><td>
2475 2441 <a href="/help/grep">
2476 2442 grep
2477 2443 </a>
2478 2444 </td><td>
2479 2445 search revision history for a pattern in specified files
2480 2446 </td></tr>
2481 2447 <tr><td>
2482 2448 <a href="/help/heads">
2483 2449 heads
2484 2450 </a>
2485 2451 </td><td>
2486 2452 show branch heads
2487 2453 </td></tr>
2488 2454 <tr><td>
2489 2455 <a href="/help/help">
2490 2456 help
2491 2457 </a>
2492 2458 </td><td>
2493 2459 show help for a given topic or a help overview
2494 2460 </td></tr>
2495 2461 <tr><td>
2496 2462 <a href="/help/hgalias">
2497 2463 hgalias
2498 2464 </a>
2499 2465 </td><td>
2500 2466 summarize working directory state
2501 2467 </td></tr>
2502 2468 <tr><td>
2503 2469 <a href="/help/identify">
2504 2470 identify
2505 2471 </a>
2506 2472 </td><td>
2507 2473 identify the working directory or specified revision
2508 2474 </td></tr>
2509 2475 <tr><td>
2510 2476 <a href="/help/import">
2511 2477 import
2512 2478 </a>
2513 2479 </td><td>
2514 2480 import an ordered set of patches
2515 2481 </td></tr>
2516 2482 <tr><td>
2517 2483 <a href="/help/incoming">
2518 2484 incoming
2519 2485 </a>
2520 2486 </td><td>
2521 2487 show new changesets found in source
2522 2488 </td></tr>
2523 2489 <tr><td>
2524 2490 <a href="/help/manifest">
2525 2491 manifest
2526 2492 </a>
2527 2493 </td><td>
2528 2494 output the current or given revision of the project manifest
2529 2495 </td></tr>
2530 2496 <tr><td>
2531 2497 <a href="/help/nohelp">
2532 2498 nohelp
2533 2499 </a>
2534 2500 </td><td>
2535 2501 (no help text available)
2536 2502 </td></tr>
2537 2503 <tr><td>
2538 2504 <a href="/help/outgoing">
2539 2505 outgoing
2540 2506 </a>
2541 2507 </td><td>
2542 2508 show changesets not found in the destination
2543 2509 </td></tr>
2544 2510 <tr><td>
2545 2511 <a href="/help/paths">
2546 2512 paths
2547 2513 </a>
2548 2514 </td><td>
2549 2515 show aliases for remote repositories
2550 2516 </td></tr>
2551 2517 <tr><td>
2552 2518 <a href="/help/phase">
2553 2519 phase
2554 2520 </a>
2555 2521 </td><td>
2556 2522 set or show the current phase name
2557 2523 </td></tr>
2558 2524 <tr><td>
2559 2525 <a href="/help/recover">
2560 2526 recover
2561 2527 </a>
2562 2528 </td><td>
2563 2529 roll back an interrupted transaction
2564 2530 </td></tr>
2565 2531 <tr><td>
2566 2532 <a href="/help/rename">
2567 2533 rename
2568 2534 </a>
2569 2535 </td><td>
2570 2536 rename files; equivalent of copy + remove
2571 2537 </td></tr>
2572 2538 <tr><td>
2573 2539 <a href="/help/resolve">
2574 2540 resolve
2575 2541 </a>
2576 2542 </td><td>
2577 2543 redo merges or set/view the merge status of files
2578 2544 </td></tr>
2579 2545 <tr><td>
2580 2546 <a href="/help/revert">
2581 2547 revert
2582 2548 </a>
2583 2549 </td><td>
2584 2550 restore files to their checkout state
2585 2551 </td></tr>
2586 2552 <tr><td>
2587 2553 <a href="/help/root">
2588 2554 root
2589 2555 </a>
2590 2556 </td><td>
2591 2557 print the root (top) of the current working directory
2592 2558 </td></tr>
2593 2559 <tr><td>
2594 2560 <a href="/help/shellalias">
2595 2561 shellalias
2596 2562 </a>
2597 2563 </td><td>
2598 2564 (no help text available)
2599 2565 </td></tr>
2600 2566 <tr><td>
2601 2567 <a href="/help/tag">
2602 2568 tag
2603 2569 </a>
2604 2570 </td><td>
2605 2571 add one or more tags for the current or given revision
2606 2572 </td></tr>
2607 2573 <tr><td>
2608 2574 <a href="/help/tags">
2609 2575 tags
2610 2576 </a>
2611 2577 </td><td>
2612 2578 list repository tags
2613 2579 </td></tr>
2614 2580 <tr><td>
2615 2581 <a href="/help/unbundle">
2616 2582 unbundle
2617 2583 </a>
2618 2584 </td><td>
2619 2585 apply one or more bundle files
2620 2586 </td></tr>
2621 2587 <tr><td>
2622 2588 <a href="/help/verify">
2623 2589 verify
2624 2590 </a>
2625 2591 </td><td>
2626 2592 verify the integrity of the repository
2627 2593 </td></tr>
2628 2594 <tr><td>
2629 2595 <a href="/help/version">
2630 2596 version
2631 2597 </a>
2632 2598 </td><td>
2633 2599 output version and copyright information
2634 2600 </td></tr>
2635 2601
2636 2602
2637 2603 </table>
2638 2604 </div>
2639 2605 </div>
2640 2606
2641 2607
2642 2608
2643 2609 </body>
2644 2610 </html>
2645 2611
2646 2612
2647 2613 $ get-with-headers.py $LOCALIP:$HGPORT "help/add"
2648 2614 200 Script output follows
2649 2615
2650 2616 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2651 2617 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2652 2618 <head>
2653 2619 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2654 2620 <meta name="robots" content="index, nofollow" />
2655 2621 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2656 2622 <script type="text/javascript" src="/static/mercurial.js"></script>
2657 2623
2658 2624 <title>Help: add</title>
2659 2625 </head>
2660 2626 <body>
2661 2627
2662 2628 <div class="container">
2663 2629 <div class="menu">
2664 2630 <div class="logo">
2665 2631 <a href="https://mercurial-scm.org/">
2666 2632 <img src="/static/hglogo.png" alt="mercurial" /></a>
2667 2633 </div>
2668 2634 <ul>
2669 2635 <li><a href="/shortlog">log</a></li>
2670 2636 <li><a href="/graph">graph</a></li>
2671 2637 <li><a href="/tags">tags</a></li>
2672 2638 <li><a href="/bookmarks">bookmarks</a></li>
2673 2639 <li><a href="/branches">branches</a></li>
2674 2640 </ul>
2675 2641 <ul>
2676 2642 <li class="active"><a href="/help">help</a></li>
2677 2643 </ul>
2678 2644 </div>
2679 2645
2680 2646 <div class="main">
2681 2647 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2682 2648 <h3>Help: add</h3>
2683 2649
2684 2650 <form class="search" action="/log">
2685 2651
2686 2652 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
2687 2653 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2688 2654 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2689 2655 </form>
2690 2656 <div id="doc">
2691 2657 <p>
2692 2658 hg add [OPTION]... [FILE]...
2693 2659 </p>
2694 2660 <p>
2695 2661 add the specified files on the next commit
2696 2662 </p>
2697 2663 <p>
2698 2664 Schedule files to be version controlled and added to the
2699 2665 repository.
2700 2666 </p>
2701 2667 <p>
2702 2668 The files will be added to the repository at the next commit. To
2703 2669 undo an add before that, see 'hg forget'.
2704 2670 </p>
2705 2671 <p>
2706 2672 If no names are given, add all files to the repository (except
2707 2673 files matching &quot;.hgignore&quot;).
2708 2674 </p>
2709 2675 <p>
2710 2676 Examples:
2711 2677 </p>
2712 2678 <ul>
2713 2679 <li> New (unknown) files are added automatically by 'hg add':
2714 2680 <pre>
2715 2681 \$ ls (re)
2716 2682 foo.c
2717 2683 \$ hg status (re)
2718 2684 ? foo.c
2719 2685 \$ hg add (re)
2720 2686 adding foo.c
2721 2687 \$ hg status (re)
2722 2688 A foo.c
2723 2689 </pre>
2724 2690 <li> Specific files to be added can be specified:
2725 2691 <pre>
2726 2692 \$ ls (re)
2727 2693 bar.c foo.c
2728 2694 \$ hg status (re)
2729 2695 ? bar.c
2730 2696 ? foo.c
2731 2697 \$ hg add bar.c (re)
2732 2698 \$ hg status (re)
2733 2699 A bar.c
2734 2700 ? foo.c
2735 2701 </pre>
2736 2702 </ul>
2737 2703 <p>
2738 2704 Returns 0 if all files are successfully added.
2739 2705 </p>
2740 2706 <p>
2741 2707 options ([+] can be repeated):
2742 2708 </p>
2743 2709 <table>
2744 2710 <tr><td>-I</td>
2745 2711 <td>--include PATTERN [+]</td>
2746 2712 <td>include names matching the given patterns</td></tr>
2747 2713 <tr><td>-X</td>
2748 2714 <td>--exclude PATTERN [+]</td>
2749 2715 <td>exclude names matching the given patterns</td></tr>
2750 2716 <tr><td>-S</td>
2751 2717 <td>--subrepos</td>
2752 2718 <td>recurse into subrepositories</td></tr>
2753 2719 <tr><td>-n</td>
2754 2720 <td>--dry-run</td>
2755 2721 <td>do not perform actions, just print output</td></tr>
2756 2722 </table>
2757 2723 <p>
2758 2724 global options ([+] can be repeated):
2759 2725 </p>
2760 2726 <table>
2761 2727 <tr><td>-R</td>
2762 2728 <td>--repository REPO</td>
2763 2729 <td>repository root directory or name of overlay bundle file</td></tr>
2764 2730 <tr><td></td>
2765 2731 <td>--cwd DIR</td>
2766 2732 <td>change working directory</td></tr>
2767 2733 <tr><td>-y</td>
2768 2734 <td>--noninteractive</td>
2769 2735 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
2770 2736 <tr><td>-q</td>
2771 2737 <td>--quiet</td>
2772 2738 <td>suppress output</td></tr>
2773 2739 <tr><td>-v</td>
2774 2740 <td>--verbose</td>
2775 2741 <td>enable additional output</td></tr>
2776 2742 <tr><td></td>
2777 2743 <td>--color TYPE</td>
2778 2744 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
2779 2745 <tr><td></td>
2780 2746 <td>--config CONFIG [+]</td>
2781 2747 <td>set/override config option (use 'section.name=value')</td></tr>
2782 2748 <tr><td></td>
2783 2749 <td>--debug</td>
2784 2750 <td>enable debugging output</td></tr>
2785 2751 <tr><td></td>
2786 2752 <td>--debugger</td>
2787 2753 <td>start debugger</td></tr>
2788 2754 <tr><td></td>
2789 2755 <td>--encoding ENCODE</td>
2790 2756 <td>set the charset encoding (default: ascii)</td></tr>
2791 2757 <tr><td></td>
2792 2758 <td>--encodingmode MODE</td>
2793 2759 <td>set the charset encoding mode (default: strict)</td></tr>
2794 2760 <tr><td></td>
2795 2761 <td>--traceback</td>
2796 2762 <td>always print a traceback on exception</td></tr>
2797 2763 <tr><td></td>
2798 2764 <td>--time</td>
2799 2765 <td>time how long the command takes</td></tr>
2800 2766 <tr><td></td>
2801 2767 <td>--profile</td>
2802 2768 <td>print command execution profile</td></tr>
2803 2769 <tr><td></td>
2804 2770 <td>--version</td>
2805 2771 <td>output version information and exit</td></tr>
2806 2772 <tr><td>-h</td>
2807 2773 <td>--help</td>
2808 2774 <td>display help and exit</td></tr>
2809 2775 <tr><td></td>
2810 2776 <td>--hidden</td>
2811 2777 <td>consider hidden changesets</td></tr>
2812 2778 <tr><td></td>
2813 2779 <td>--pager TYPE</td>
2814 2780 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
2815 2781 </table>
2816 2782
2817 2783 </div>
2818 2784 </div>
2819 2785 </div>
2820 2786
2821 2787
2822 2788
2823 2789 </body>
2824 2790 </html>
2825 2791
2826 2792
2827 2793 $ get-with-headers.py $LOCALIP:$HGPORT "help/remove"
2828 2794 200 Script output follows
2829 2795
2830 2796 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2831 2797 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2832 2798 <head>
2833 2799 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2834 2800 <meta name="robots" content="index, nofollow" />
2835 2801 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2836 2802 <script type="text/javascript" src="/static/mercurial.js"></script>
2837 2803
2838 2804 <title>Help: remove</title>
2839 2805 </head>
2840 2806 <body>
2841 2807
2842 2808 <div class="container">
2843 2809 <div class="menu">
2844 2810 <div class="logo">
2845 2811 <a href="https://mercurial-scm.org/">
2846 2812 <img src="/static/hglogo.png" alt="mercurial" /></a>
2847 2813 </div>
2848 2814 <ul>
2849 2815 <li><a href="/shortlog">log</a></li>
2850 2816 <li><a href="/graph">graph</a></li>
2851 2817 <li><a href="/tags">tags</a></li>
2852 2818 <li><a href="/bookmarks">bookmarks</a></li>
2853 2819 <li><a href="/branches">branches</a></li>
2854 2820 </ul>
2855 2821 <ul>
2856 2822 <li class="active"><a href="/help">help</a></li>
2857 2823 </ul>
2858 2824 </div>
2859 2825
2860 2826 <div class="main">
2861 2827 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2862 2828 <h3>Help: remove</h3>
2863 2829
2864 2830 <form class="search" action="/log">
2865 2831
2866 2832 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
2867 2833 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2868 2834 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2869 2835 </form>
2870 2836 <div id="doc">
2871 2837 <p>
2872 2838 hg remove [OPTION]... FILE...
2873 2839 </p>
2874 2840 <p>
2875 2841 aliases: rm
2876 2842 </p>
2877 2843 <p>
2878 2844 remove the specified files on the next commit
2879 2845 </p>
2880 2846 <p>
2881 2847 Schedule the indicated files for removal from the current branch.
2882 2848 </p>
2883 2849 <p>
2884 2850 This command schedules the files to be removed at the next commit.
2885 2851 To undo a remove before that, see 'hg revert'. To undo added
2886 2852 files, see 'hg forget'.
2887 2853 </p>
2888 2854 <p>
2889 2855 -A/--after can be used to remove only files that have already
2890 2856 been deleted, -f/--force can be used to force deletion, and -Af
2891 2857 can be used to remove files from the next revision without
2892 2858 deleting them from the working directory.
2893 2859 </p>
2894 2860 <p>
2895 2861 The following table details the behavior of remove for different
2896 2862 file states (columns) and option combinations (rows). The file
2897 2863 states are Added [A], Clean [C], Modified [M] and Missing [!]
2898 2864 (as reported by 'hg status'). The actions are Warn, Remove
2899 2865 (from branch) and Delete (from disk):
2900 2866 </p>
2901 2867 <table>
2902 2868 <tr><td>opt/state</td>
2903 2869 <td>A</td>
2904 2870 <td>C</td>
2905 2871 <td>M</td>
2906 2872 <td>!</td></tr>
2907 2873 <tr><td>none</td>
2908 2874 <td>W</td>
2909 2875 <td>RD</td>
2910 2876 <td>W</td>
2911 2877 <td>R</td></tr>
2912 2878 <tr><td>-f</td>
2913 2879 <td>R</td>
2914 2880 <td>RD</td>
2915 2881 <td>RD</td>
2916 2882 <td>R</td></tr>
2917 2883 <tr><td>-A</td>
2918 2884 <td>W</td>
2919 2885 <td>W</td>
2920 2886 <td>W</td>
2921 2887 <td>R</td></tr>
2922 2888 <tr><td>-Af</td>
2923 2889 <td>R</td>
2924 2890 <td>R</td>
2925 2891 <td>R</td>
2926 2892 <td>R</td></tr>
2927 2893 </table>
2928 2894 <p>
2929 2895 <b>Note:</b>
2930 2896 </p>
2931 2897 <p>
2932 2898 'hg remove' never deletes files in Added [A] state from the
2933 2899 working directory, not even if &quot;--force&quot; is specified.
2934 2900 </p>
2935 2901 <p>
2936 2902 Returns 0 on success, 1 if any warnings encountered.
2937 2903 </p>
2938 2904 <p>
2939 2905 options ([+] can be repeated):
2940 2906 </p>
2941 2907 <table>
2942 2908 <tr><td>-A</td>
2943 2909 <td>--after</td>
2944 2910 <td>record delete for missing files</td></tr>
2945 2911 <tr><td>-f</td>
2946 2912 <td>--force</td>
2947 2913 <td>forget added files, delete modified files</td></tr>
2948 2914 <tr><td>-S</td>
2949 2915 <td>--subrepos</td>
2950 2916 <td>recurse into subrepositories</td></tr>
2951 2917 <tr><td>-I</td>
2952 2918 <td>--include PATTERN [+]</td>
2953 2919 <td>include names matching the given patterns</td></tr>
2954 2920 <tr><td>-X</td>
2955 2921 <td>--exclude PATTERN [+]</td>
2956 2922 <td>exclude names matching the given patterns</td></tr>
2957 2923 <tr><td>-n</td>
2958 2924 <td>--dry-run</td>
2959 2925 <td>do not perform actions, just print output</td></tr>
2960 2926 </table>
2961 2927 <p>
2962 2928 global options ([+] can be repeated):
2963 2929 </p>
2964 2930 <table>
2965 2931 <tr><td>-R</td>
2966 2932 <td>--repository REPO</td>
2967 2933 <td>repository root directory or name of overlay bundle file</td></tr>
2968 2934 <tr><td></td>
2969 2935 <td>--cwd DIR</td>
2970 2936 <td>change working directory</td></tr>
2971 2937 <tr><td>-y</td>
2972 2938 <td>--noninteractive</td>
2973 2939 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
2974 2940 <tr><td>-q</td>
2975 2941 <td>--quiet</td>
2976 2942 <td>suppress output</td></tr>
2977 2943 <tr><td>-v</td>
2978 2944 <td>--verbose</td>
2979 2945 <td>enable additional output</td></tr>
2980 2946 <tr><td></td>
2981 2947 <td>--color TYPE</td>
2982 2948 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
2983 2949 <tr><td></td>
2984 2950 <td>--config CONFIG [+]</td>
2985 2951 <td>set/override config option (use 'section.name=value')</td></tr>
2986 2952 <tr><td></td>
2987 2953 <td>--debug</td>
2988 2954 <td>enable debugging output</td></tr>
2989 2955 <tr><td></td>
2990 2956 <td>--debugger</td>
2991 2957 <td>start debugger</td></tr>
2992 2958 <tr><td></td>
2993 2959 <td>--encoding ENCODE</td>
2994 2960 <td>set the charset encoding (default: ascii)</td></tr>
2995 2961 <tr><td></td>
2996 2962 <td>--encodingmode MODE</td>
2997 2963 <td>set the charset encoding mode (default: strict)</td></tr>
2998 2964 <tr><td></td>
2999 2965 <td>--traceback</td>
3000 2966 <td>always print a traceback on exception</td></tr>
3001 2967 <tr><td></td>
3002 2968 <td>--time</td>
3003 2969 <td>time how long the command takes</td></tr>
3004 2970 <tr><td></td>
3005 2971 <td>--profile</td>
3006 2972 <td>print command execution profile</td></tr>
3007 2973 <tr><td></td>
3008 2974 <td>--version</td>
3009 2975 <td>output version information and exit</td></tr>
3010 2976 <tr><td>-h</td>
3011 2977 <td>--help</td>
3012 2978 <td>display help and exit</td></tr>
3013 2979 <tr><td></td>
3014 2980 <td>--hidden</td>
3015 2981 <td>consider hidden changesets</td></tr>
3016 2982 <tr><td></td>
3017 2983 <td>--pager TYPE</td>
3018 2984 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
3019 2985 </table>
3020 2986
3021 2987 </div>
3022 2988 </div>
3023 2989 </div>
3024 2990
3025 2991
3026 2992
3027 2993 </body>
3028 2994 </html>
3029 2995
3030 2996
3031 2997 $ get-with-headers.py $LOCALIP:$HGPORT "help/dates"
3032 2998 200 Script output follows
3033 2999
3034 3000 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3035 3001 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3036 3002 <head>
3037 3003 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3038 3004 <meta name="robots" content="index, nofollow" />
3039 3005 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3040 3006 <script type="text/javascript" src="/static/mercurial.js"></script>
3041 3007
3042 3008 <title>Help: dates</title>
3043 3009 </head>
3044 3010 <body>
3045 3011
3046 3012 <div class="container">
3047 3013 <div class="menu">
3048 3014 <div class="logo">
3049 3015 <a href="https://mercurial-scm.org/">
3050 3016 <img src="/static/hglogo.png" alt="mercurial" /></a>
3051 3017 </div>
3052 3018 <ul>
3053 3019 <li><a href="/shortlog">log</a></li>
3054 3020 <li><a href="/graph">graph</a></li>
3055 3021 <li><a href="/tags">tags</a></li>
3056 3022 <li><a href="/bookmarks">bookmarks</a></li>
3057 3023 <li><a href="/branches">branches</a></li>
3058 3024 </ul>
3059 3025 <ul>
3060 3026 <li class="active"><a href="/help">help</a></li>
3061 3027 </ul>
3062 3028 </div>
3063 3029
3064 3030 <div class="main">
3065 3031 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3066 3032 <h3>Help: dates</h3>
3067 3033
3068 3034 <form class="search" action="/log">
3069 3035
3070 3036 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3071 3037 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3072 3038 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3073 3039 </form>
3074 3040 <div id="doc">
3075 3041 <h1>Date Formats</h1>
3076 3042 <p>
3077 3043 Some commands allow the user to specify a date, e.g.:
3078 3044 </p>
3079 3045 <ul>
3080 3046 <li> backout, commit, import, tag: Specify the commit date.
3081 3047 <li> log, revert, update: Select revision(s) by date.
3082 3048 </ul>
3083 3049 <p>
3084 3050 Many date formats are valid. Here are some examples:
3085 3051 </p>
3086 3052 <ul>
3087 3053 <li> &quot;Wed Dec 6 13:18:29 2006&quot; (local timezone assumed)
3088 3054 <li> &quot;Dec 6 13:18 -0600&quot; (year assumed, time offset provided)
3089 3055 <li> &quot;Dec 6 13:18 UTC&quot; (UTC and GMT are aliases for +0000)
3090 3056 <li> &quot;Dec 6&quot; (midnight)
3091 3057 <li> &quot;13:18&quot; (today assumed)
3092 3058 <li> &quot;3:39&quot; (3:39AM assumed)
3093 3059 <li> &quot;3:39pm&quot; (15:39)
3094 3060 <li> &quot;2006-12-06 13:18:29&quot; (ISO 8601 format)
3095 3061 <li> &quot;2006-12-6 13:18&quot;
3096 3062 <li> &quot;2006-12-6&quot;
3097 3063 <li> &quot;12-6&quot;
3098 3064 <li> &quot;12/6&quot;
3099 3065 <li> &quot;12/6/6&quot; (Dec 6 2006)
3100 3066 <li> &quot;today&quot; (midnight)
3101 3067 <li> &quot;yesterday&quot; (midnight)
3102 3068 <li> &quot;now&quot; - right now
3103 3069 </ul>
3104 3070 <p>
3105 3071 Lastly, there is Mercurial's internal format:
3106 3072 </p>
3107 3073 <ul>
3108 3074 <li> &quot;1165411109 0&quot; (Wed Dec 6 13:18:29 2006 UTC)
3109 3075 </ul>
3110 3076 <p>
3111 3077 This is the internal representation format for dates. The first number
3112 3078 is the number of seconds since the epoch (1970-01-01 00:00 UTC). The
3113 3079 second is the offset of the local timezone, in seconds west of UTC
3114 3080 (negative if the timezone is east of UTC).
3115 3081 </p>
3116 3082 <p>
3117 3083 The log command also accepts date ranges:
3118 3084 </p>
3119 3085 <ul>
3120 3086 <li> &quot;&lt;DATE&quot; - at or before a given date/time
3121 3087 <li> &quot;&gt;DATE&quot; - on or after a given date/time
3122 3088 <li> &quot;DATE to DATE&quot; - a date range, inclusive
3123 3089 <li> &quot;-DAYS&quot; - within a given number of days of today
3124 3090 </ul>
3125 3091
3126 3092 </div>
3127 3093 </div>
3128 3094 </div>
3129 3095
3130 3096
3131 3097
3132 3098 </body>
3133 3099 </html>
3134 3100
3135 3101
3136 3102 $ get-with-headers.py $LOCALIP:$HGPORT "help/pager"
3137 3103 200 Script output follows
3138 3104
3139 3105 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3140 3106 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3141 3107 <head>
3142 3108 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3143 3109 <meta name="robots" content="index, nofollow" />
3144 3110 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3145 3111 <script type="text/javascript" src="/static/mercurial.js"></script>
3146 3112
3147 3113 <title>Help: pager</title>
3148 3114 </head>
3149 3115 <body>
3150 3116
3151 3117 <div class="container">
3152 3118 <div class="menu">
3153 3119 <div class="logo">
3154 3120 <a href="https://mercurial-scm.org/">
3155 3121 <img src="/static/hglogo.png" alt="mercurial" /></a>
3156 3122 </div>
3157 3123 <ul>
3158 3124 <li><a href="/shortlog">log</a></li>
3159 3125 <li><a href="/graph">graph</a></li>
3160 3126 <li><a href="/tags">tags</a></li>
3161 3127 <li><a href="/bookmarks">bookmarks</a></li>
3162 3128 <li><a href="/branches">branches</a></li>
3163 3129 </ul>
3164 3130 <ul>
3165 3131 <li class="active"><a href="/help">help</a></li>
3166 3132 </ul>
3167 3133 </div>
3168 3134
3169 3135 <div class="main">
3170 3136 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3171 3137 <h3>Help: pager</h3>
3172 3138
3173 3139 <form class="search" action="/log">
3174 3140
3175 3141 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3176 3142 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3177 3143 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3178 3144 </form>
3179 3145 <div id="doc">
3180 3146 <h1>Pager Support</h1>
3181 3147 <p>
3182 3148 Some Mercurial commands can produce a lot of output, and Mercurial will
3183 3149 attempt to use a pager to make those commands more pleasant.
3184 3150 </p>
3185 3151 <p>
3186 3152 To set the pager that should be used, set the application variable:
3187 3153 </p>
3188 3154 <pre>
3189 3155 [pager]
3190 3156 pager = less -FRX
3191 3157 </pre>
3192 3158 <p>
3193 3159 If no pager is set in the user or repository configuration, Mercurial uses the
3194 3160 environment variable $PAGER. If $PAGER is not set, pager.pager from the default
3195 3161 or system configuration is used. If none of these are set, a default pager will
3196 3162 be used, typically 'less' on Unix and 'more' on Windows.
3197 3163 </p>
3198 3164 <p>
3199 3165 You can disable the pager for certain commands by adding them to the
3200 3166 pager.ignore list:
3201 3167 </p>
3202 3168 <pre>
3203 3169 [pager]
3204 3170 ignore = version, help, update
3205 3171 </pre>
3206 3172 <p>
3207 3173 To ignore global commands like 'hg version' or 'hg help', you have
3208 3174 to specify them in your user configuration file.
3209 3175 </p>
3210 3176 <p>
3211 3177 To control whether the pager is used at all for an individual command,
3212 3178 you can use --pager=&lt;value&gt;:
3213 3179 </p>
3214 3180 <ul>
3215 3181 <li> use as needed: 'auto'.
3216 3182 <li> require the pager: 'yes' or 'on'.
3217 3183 <li> suppress the pager: 'no' or 'off' (any unrecognized value will also work).
3218 3184 </ul>
3219 3185 <p>
3220 3186 To globally turn off all attempts to use a pager, set:
3221 3187 </p>
3222 3188 <pre>
3223 3189 [ui]
3224 3190 paginate = never
3225 3191 </pre>
3226 3192 <p>
3227 3193 which will prevent the pager from running.
3228 3194 </p>
3229 3195
3230 3196 </div>
3231 3197 </div>
3232 3198 </div>
3233 3199
3234 3200
3235 3201
3236 3202 </body>
3237 3203 </html>
3238 3204
3239 3205
3240 3206 Sub-topic indexes rendered properly
3241 3207
3242 3208 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals"
3243 3209 200 Script output follows
3244 3210
3245 3211 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3246 3212 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3247 3213 <head>
3248 3214 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3249 3215 <meta name="robots" content="index, nofollow" />
3250 3216 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3251 3217 <script type="text/javascript" src="/static/mercurial.js"></script>
3252 3218
3253 3219 <title>Help: internals</title>
3254 3220 </head>
3255 3221 <body>
3256 3222
3257 3223 <div class="container">
3258 3224 <div class="menu">
3259 3225 <div class="logo">
3260 3226 <a href="https://mercurial-scm.org/">
3261 3227 <img src="/static/hglogo.png" alt="mercurial" /></a>
3262 3228 </div>
3263 3229 <ul>
3264 3230 <li><a href="/shortlog">log</a></li>
3265 3231 <li><a href="/graph">graph</a></li>
3266 3232 <li><a href="/tags">tags</a></li>
3267 3233 <li><a href="/bookmarks">bookmarks</a></li>
3268 3234 <li><a href="/branches">branches</a></li>
3269 3235 </ul>
3270 3236 <ul>
3271 3237 <li><a href="/help">help</a></li>
3272 3238 </ul>
3273 3239 </div>
3274 3240
3275 3241 <div class="main">
3276 3242 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3277 3243
3278 3244 <form class="search" action="/log">
3279 3245
3280 3246 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3281 3247 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3282 3248 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3283 3249 </form>
3284 3250 <table class="bigtable">
3285 3251 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
3286 3252
3287 3253 <tr><td>
3288 3254 <a href="/help/internals.bundle2">
3289 3255 bundle2
3290 3256 </a>
3291 3257 </td><td>
3292 3258 Bundle2
3293 3259 </td></tr>
3294 3260 <tr><td>
3295 3261 <a href="/help/internals.bundles">
3296 3262 bundles
3297 3263 </a>
3298 3264 </td><td>
3299 3265 Bundles
3300 3266 </td></tr>
3301 3267 <tr><td>
3302 3268 <a href="/help/internals.censor">
3303 3269 censor
3304 3270 </a>
3305 3271 </td><td>
3306 3272 Censor
3307 3273 </td></tr>
3308 3274 <tr><td>
3309 3275 <a href="/help/internals.changegroups">
3310 3276 changegroups
3311 3277 </a>
3312 3278 </td><td>
3313 3279 Changegroups
3314 3280 </td></tr>
3315 3281 <tr><td>
3316 3282 <a href="/help/internals.config">
3317 3283 config
3318 3284 </a>
3319 3285 </td><td>
3320 3286 Config Registrar
3321 3287 </td></tr>
3322 3288 <tr><td>
3323 3289 <a href="/help/internals.requirements">
3324 3290 requirements
3325 3291 </a>
3326 3292 </td><td>
3327 3293 Repository Requirements
3328 3294 </td></tr>
3329 3295 <tr><td>
3330 3296 <a href="/help/internals.revlogs">
3331 3297 revlogs
3332 3298 </a>
3333 3299 </td><td>
3334 3300 Revision Logs
3335 3301 </td></tr>
3336 3302 <tr><td>
3337 3303 <a href="/help/internals.wireprotocol">
3338 3304 wireprotocol
3339 3305 </a>
3340 3306 </td><td>
3341 3307 Wire Protocol
3342 3308 </td></tr>
3343 3309
3344 3310
3345 3311
3346 3312
3347 3313
3348 3314 </table>
3349 3315 </div>
3350 3316 </div>
3351 3317
3352 3318
3353 3319
3354 3320 </body>
3355 3321 </html>
3356 3322
3357 3323
3358 3324 Sub-topic topics rendered properly
3359 3325
3360 3326 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals.changegroups"
3361 3327 200 Script output follows
3362 3328
3363 3329 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3364 3330 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3365 3331 <head>
3366 3332 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3367 3333 <meta name="robots" content="index, nofollow" />
3368 3334 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3369 3335 <script type="text/javascript" src="/static/mercurial.js"></script>
3370 3336
3371 3337 <title>Help: internals.changegroups</title>
3372 3338 </head>
3373 3339 <body>
3374 3340
3375 3341 <div class="container">
3376 3342 <div class="menu">
3377 3343 <div class="logo">
3378 3344 <a href="https://mercurial-scm.org/">
3379 3345 <img src="/static/hglogo.png" alt="mercurial" /></a>
3380 3346 </div>
3381 3347 <ul>
3382 3348 <li><a href="/shortlog">log</a></li>
3383 3349 <li><a href="/graph">graph</a></li>
3384 3350 <li><a href="/tags">tags</a></li>
3385 3351 <li><a href="/bookmarks">bookmarks</a></li>
3386 3352 <li><a href="/branches">branches</a></li>
3387 3353 </ul>
3388 3354 <ul>
3389 3355 <li class="active"><a href="/help">help</a></li>
3390 3356 </ul>
3391 3357 </div>
3392 3358
3393 3359 <div class="main">
3394 3360 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3395 3361 <h3>Help: internals.changegroups</h3>
3396 3362
3397 3363 <form class="search" action="/log">
3398 3364
3399 3365 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3400 3366 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3401 3367 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3402 3368 </form>
3403 3369 <div id="doc">
3404 3370 <h1>Changegroups</h1>
3405 3371 <p>
3406 3372 Changegroups are representations of repository revlog data, specifically
3407 3373 the changelog data, root/flat manifest data, treemanifest data, and
3408 3374 filelogs.
3409 3375 </p>
3410 3376 <p>
3411 3377 There are 3 versions of changegroups: &quot;1&quot;, &quot;2&quot;, and &quot;3&quot;. From a
3412 3378 high-level, versions &quot;1&quot; and &quot;2&quot; are almost exactly the same, with the
3413 3379 only difference being an additional item in the *delta header*. Version
3414 3380 &quot;3&quot; adds support for revlog flags in the *delta header* and optionally
3415 3381 exchanging treemanifests (enabled by setting an option on the
3416 3382 &quot;changegroup&quot; part in the bundle2).
3417 3383 </p>
3418 3384 <p>
3419 3385 Changegroups when not exchanging treemanifests consist of 3 logical
3420 3386 segments:
3421 3387 </p>
3422 3388 <pre>
3423 3389 +---------------------------------+
3424 3390 | | | |
3425 3391 | changeset | manifest | filelogs |
3426 3392 | | | |
3427 3393 | | | |
3428 3394 +---------------------------------+
3429 3395 </pre>
3430 3396 <p>
3431 3397 When exchanging treemanifests, there are 4 logical segments:
3432 3398 </p>
3433 3399 <pre>
3434 3400 +-------------------------------------------------+
3435 3401 | | | | |
3436 3402 | changeset | root | treemanifests | filelogs |
3437 3403 | | manifest | | |
3438 3404 | | | | |
3439 3405 +-------------------------------------------------+
3440 3406 </pre>
3441 3407 <p>
3442 3408 The principle building block of each segment is a *chunk*. A *chunk*
3443 3409 is a framed piece of data:
3444 3410 </p>
3445 3411 <pre>
3446 3412 +---------------------------------------+
3447 3413 | | |
3448 3414 | length | data |
3449 3415 | (4 bytes) | (&lt;length - 4&gt; bytes) |
3450 3416 | | |
3451 3417 +---------------------------------------+
3452 3418 </pre>
3453 3419 <p>
3454 3420 All integers are big-endian signed integers. Each chunk starts with a 32-bit
3455 3421 integer indicating the length of the entire chunk (including the length field
3456 3422 itself).
3457 3423 </p>
3458 3424 <p>
3459 3425 There is a special case chunk that has a value of 0 for the length
3460 3426 (&quot;0x00000000&quot;). We call this an *empty chunk*.
3461 3427 </p>
3462 3428 <h2>Delta Groups</h2>
3463 3429 <p>
3464 3430 A *delta group* expresses the content of a revlog as a series of deltas,
3465 3431 or patches against previous revisions.
3466 3432 </p>
3467 3433 <p>
3468 3434 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
3469 3435 to signal the end of the delta group:
3470 3436 </p>
3471 3437 <pre>
3472 3438 +------------------------------------------------------------------------+
3473 3439 | | | | | |
3474 3440 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
3475 3441 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
3476 3442 | | | | | |
3477 3443 +------------------------------------------------------------------------+
3478 3444 </pre>
3479 3445 <p>
3480 3446 Each *chunk*'s data consists of the following:
3481 3447 </p>
3482 3448 <pre>
3483 3449 +---------------------------------------+
3484 3450 | | |
3485 3451 | delta header | delta data |
3486 3452 | (various by version) | (various) |
3487 3453 | | |
3488 3454 +---------------------------------------+
3489 3455 </pre>
3490 3456 <p>
3491 3457 The *delta data* is a series of *delta*s that describe a diff from an existing
3492 3458 entry (either that the recipient already has, or previously specified in the
3493 3459 bundle/changegroup).
3494 3460 </p>
3495 3461 <p>
3496 3462 The *delta header* is different between versions &quot;1&quot;, &quot;2&quot;, and
3497 3463 &quot;3&quot; of the changegroup format.
3498 3464 </p>
3499 3465 <p>
3500 3466 Version 1 (headerlen=80):
3501 3467 </p>
3502 3468 <pre>
3503 3469 +------------------------------------------------------+
3504 3470 | | | | |
3505 3471 | node | p1 node | p2 node | link node |
3506 3472 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3507 3473 | | | | |
3508 3474 +------------------------------------------------------+
3509 3475 </pre>
3510 3476 <p>
3511 3477 Version 2 (headerlen=100):
3512 3478 </p>
3513 3479 <pre>
3514 3480 +------------------------------------------------------------------+
3515 3481 | | | | | |
3516 3482 | node | p1 node | p2 node | base node | link node |
3517 3483 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3518 3484 | | | | | |
3519 3485 +------------------------------------------------------------------+
3520 3486 </pre>
3521 3487 <p>
3522 3488 Version 3 (headerlen=102):
3523 3489 </p>
3524 3490 <pre>
3525 3491 +------------------------------------------------------------------------------+
3526 3492 | | | | | | |
3527 3493 | node | p1 node | p2 node | base node | link node | flags |
3528 3494 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
3529 3495 | | | | | | |
3530 3496 +------------------------------------------------------------------------------+
3531 3497 </pre>
3532 3498 <p>
3533 3499 The *delta data* consists of &quot;chunklen - 4 - headerlen&quot; bytes, which contain a
3534 3500 series of *delta*s, densely packed (no separators). These deltas describe a diff
3535 3501 from an existing entry (either that the recipient already has, or previously
3536 3502 specified in the bundle/changegroup). The format is described more fully in
3537 3503 &quot;hg help internals.bdiff&quot;, but briefly:
3538 3504 </p>
3539 3505 <pre>
3540 3506 +---------------------------------------------------------------+
3541 3507 | | | | |
3542 3508 | start offset | end offset | new length | content |
3543 3509 | (4 bytes) | (4 bytes) | (4 bytes) | (&lt;new length&gt; bytes) |
3544 3510 | | | | |
3545 3511 +---------------------------------------------------------------+
3546 3512 </pre>
3547 3513 <p>
3548 3514 Please note that the length field in the delta data does *not* include itself.
3549 3515 </p>
3550 3516 <p>
3551 3517 In version 1, the delta is always applied against the previous node from
3552 3518 the changegroup or the first parent if this is the first entry in the
3553 3519 changegroup.
3554 3520 </p>
3555 3521 <p>
3556 3522 In version 2 and up, the delta base node is encoded in the entry in the
3557 3523 changegroup. This allows the delta to be expressed against any parent,
3558 3524 which can result in smaller deltas and more efficient encoding of data.
3559 3525 </p>
3560 3526 <h2>Changeset Segment</h2>
3561 3527 <p>
3562 3528 The *changeset segment* consists of a single *delta group* holding
3563 3529 changelog data. The *empty chunk* at the end of the *delta group* denotes
3564 3530 the boundary to the *manifest segment*.
3565 3531 </p>
3566 3532 <h2>Manifest Segment</h2>
3567 3533 <p>
3568 3534 The *manifest segment* consists of a single *delta group* holding manifest
3569 3535 data. If treemanifests are in use, it contains only the manifest for the
3570 3536 root directory of the repository. Otherwise, it contains the entire
3571 3537 manifest data. The *empty chunk* at the end of the *delta group* denotes
3572 3538 the boundary to the next segment (either the *treemanifests segment* or the
3573 3539 *filelogs segment*, depending on version and the request options).
3574 3540 </p>
3575 3541 <h3>Treemanifests Segment</h3>
3576 3542 <p>
3577 3543 The *treemanifests segment* only exists in changegroup version &quot;3&quot;, and
3578 3544 only if the 'treemanifest' param is part of the bundle2 changegroup part
3579 3545 (it is not possible to use changegroup version 3 outside of bundle2).
3580 3546 Aside from the filenames in the *treemanifests segment* containing a
3581 3547 trailing &quot;/&quot; character, it behaves identically to the *filelogs segment*
3582 3548 (see below). The final sub-segment is followed by an *empty chunk* (logically,
3583 3549 a sub-segment with filename size 0). This denotes the boundary to the
3584 3550 *filelogs segment*.
3585 3551 </p>
3586 3552 <h2>Filelogs Segment</h2>
3587 3553 <p>
3588 3554 The *filelogs segment* consists of multiple sub-segments, each
3589 3555 corresponding to an individual file whose data is being described:
3590 3556 </p>
3591 3557 <pre>
3592 3558 +--------------------------------------------------+
3593 3559 | | | | | |
3594 3560 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
3595 3561 | | | | | (4 bytes) |
3596 3562 | | | | | |
3597 3563 +--------------------------------------------------+
3598 3564 </pre>
3599 3565 <p>
3600 3566 The final filelog sub-segment is followed by an *empty chunk* (logically,
3601 3567 a sub-segment with filename size 0). This denotes the end of the segment
3602 3568 and of the overall changegroup.
3603 3569 </p>
3604 3570 <p>
3605 3571 Each filelog sub-segment consists of the following:
3606 3572 </p>
3607 3573 <pre>
3608 3574 +------------------------------------------------------+
3609 3575 | | | |
3610 3576 | filename length | filename | delta group |
3611 3577 | (4 bytes) | (&lt;length - 4&gt; bytes) | (various) |
3612 3578 | | | |
3613 3579 +------------------------------------------------------+
3614 3580 </pre>
3615 3581 <p>
3616 3582 That is, a *chunk* consisting of the filename (not terminated or padded)
3617 3583 followed by N chunks constituting the *delta group* for this file. The
3618 3584 *empty chunk* at the end of each *delta group* denotes the boundary to the
3619 3585 next filelog sub-segment.
3620 3586 </p>
3621 3587
3622 3588 </div>
3623 3589 </div>
3624 3590 </div>
3625 3591
3626 3592
3627 3593
3628 3594 </body>
3629 3595 </html>
3630 3596
3631 3597
3632 3598 $ get-with-headers.py 127.0.0.1:$HGPORT "help/unknowntopic"
3633 3599 404 Not Found
3634 3600
3635 3601 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3636 3602 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3637 3603 <head>
3638 3604 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3639 3605 <meta name="robots" content="index, nofollow" />
3640 3606 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3641 3607 <script type="text/javascript" src="/static/mercurial.js"></script>
3642 3608
3643 3609 <title>test: error</title>
3644 3610 </head>
3645 3611 <body>
3646 3612
3647 3613 <div class="container">
3648 3614 <div class="menu">
3649 3615 <div class="logo">
3650 3616 <a href="https://mercurial-scm.org/">
3651 3617 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
3652 3618 </div>
3653 3619 <ul>
3654 3620 <li><a href="/shortlog">log</a></li>
3655 3621 <li><a href="/graph">graph</a></li>
3656 3622 <li><a href="/tags">tags</a></li>
3657 3623 <li><a href="/bookmarks">bookmarks</a></li>
3658 3624 <li><a href="/branches">branches</a></li>
3659 3625 </ul>
3660 3626 <ul>
3661 3627 <li><a href="/help">help</a></li>
3662 3628 </ul>
3663 3629 </div>
3664 3630
3665 3631 <div class="main">
3666 3632
3667 3633 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3668 3634 <h3>error</h3>
3669 3635
3670 3636
3671 3637 <form class="search" action="/log">
3672 3638
3673 3639 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3674 3640 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3675 3641 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3676 3642 </form>
3677 3643
3678 3644 <div class="description">
3679 3645 <p>
3680 3646 An error occurred while processing your request:
3681 3647 </p>
3682 3648 <p>
3683 3649 Not Found
3684 3650 </p>
3685 3651 </div>
3686 3652 </div>
3687 3653 </div>
3688 3654
3689 3655
3690 3656
3691 3657 </body>
3692 3658 </html>
3693 3659
3694 3660 [1]
3695 3661
3696 3662 $ killdaemons.py
3697 3663
3698 3664 #endif
General Comments 0
You need to be logged in to leave comments. Login now