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