##// END OF EJS Templates
help: normalize topic and extension verbose hints
Matt Mackall -
r22114:3ba1d7ca default
parent child Browse files
Show More
@@ -1,513 +1,513
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 i18n import gettext, _
9 9 import itertools, sys, os
10 10 import error
11 11 import extensions, revset, fileset, templatekw, templatefilters, filemerge
12 12 import encoding, util, minirst
13 13 import cmdutil
14 14
15 15 def listexts(header, exts, indent=1, showdeprecated=False):
16 16 '''return a text listing of the given extensions'''
17 17 rst = []
18 18 if exts:
19 19 rst.append('\n%s\n\n' % header)
20 20 for name, desc in sorted(exts.iteritems()):
21 21 if '(DEPRECATED)' in desc and not showdeprecated:
22 22 continue
23 23 rst.append('%s:%s: %s\n' % (' ' * indent, name, desc))
24 24 return rst
25 25
26 26 def extshelp():
27 27 rst = loaddoc('extensions')().splitlines(True)
28 28 rst.extend(listexts(
29 29 _('enabled extensions:'), extensions.enabled(), showdeprecated=True))
30 30 rst.extend(listexts(_('disabled extensions:'), extensions.disabled()))
31 31 doc = ''.join(rst)
32 32 return doc
33 33
34 34 def optrst(options, verbose):
35 35 data = []
36 36 multioccur = False
37 37 for option in options:
38 38 if len(option) == 5:
39 39 shortopt, longopt, default, desc, optlabel = option
40 40 else:
41 41 shortopt, longopt, default, desc = option
42 42 optlabel = _("VALUE") # default label
43 43
44 44 if not verbose and ("DEPRECATED" in desc or _("DEPRECATED") in desc):
45 45 continue
46 46
47 47 so = ''
48 48 if shortopt:
49 49 so = '-' + shortopt
50 50 lo = '--' + longopt
51 51 if default:
52 52 desc += _(" (default: %s)") % default
53 53
54 54 if isinstance(default, list):
55 55 lo += " %s [+]" % optlabel
56 56 multioccur = True
57 57 elif (default is not None) and not isinstance(default, bool):
58 58 lo += " %s" % optlabel
59 59
60 60 data.append((so, lo, desc))
61 61
62 62 rst = minirst.maketable(data, 1)
63 63
64 64 if multioccur:
65 65 rst.append(_("\n[+] marked option can be specified multiple times\n"))
66 66
67 67 return ''.join(rst)
68 68
69 69 def indicateomitted(rst, omitted, notomitted=None):
70 70 rst.append('\n\n.. container:: omitted\n\n %s\n\n' % omitted)
71 71 if notomitted:
72 72 rst.append('\n\n.. container:: notomitted\n\n %s\n\n' % notomitted)
73 73
74 74 def topicmatch(kw):
75 75 """Return help topics matching kw.
76 76
77 77 Returns {'section': [(name, summary), ...], ...} where section is
78 78 one of topics, commands, extensions, or extensioncommands.
79 79 """
80 80 kw = encoding.lower(kw)
81 81 def lowercontains(container):
82 82 return kw in encoding.lower(container) # translated in helptable
83 83 results = {'topics': [],
84 84 'commands': [],
85 85 'extensions': [],
86 86 'extensioncommands': [],
87 87 }
88 88 for names, header, doc in helptable:
89 89 if (sum(map(lowercontains, names))
90 90 or lowercontains(header)
91 91 or lowercontains(doc())):
92 92 results['topics'].append((names[0], header))
93 93 import commands # avoid cycle
94 94 for cmd, entry in commands.table.iteritems():
95 95 if len(entry) == 3:
96 96 summary = entry[2]
97 97 else:
98 98 summary = ''
99 99 # translate docs *before* searching there
100 100 docs = _(getattr(entry[0], '__doc__', None)) or ''
101 101 if kw in cmd or lowercontains(summary) or lowercontains(docs):
102 102 doclines = docs.splitlines()
103 103 if doclines:
104 104 summary = doclines[0]
105 105 cmdname = cmd.split('|')[0].lstrip('^')
106 106 results['commands'].append((cmdname, summary))
107 107 for name, docs in itertools.chain(
108 108 extensions.enabled(False).iteritems(),
109 109 extensions.disabled().iteritems()):
110 110 # extensions.load ignores the UI argument
111 111 mod = extensions.load(None, name, '')
112 112 name = name.split('.')[-1]
113 113 if lowercontains(name) or lowercontains(docs):
114 114 # extension docs are already translated
115 115 results['extensions'].append((name, docs.splitlines()[0]))
116 116 for cmd, entry in getattr(mod, 'cmdtable', {}).iteritems():
117 117 if kw in cmd or (len(entry) > 2 and lowercontains(entry[2])):
118 118 cmdname = cmd.split('|')[0].lstrip('^')
119 119 if entry[0].__doc__:
120 120 cmddoc = gettext(entry[0].__doc__).splitlines()[0]
121 121 else:
122 122 cmddoc = _('(no help text available)')
123 123 results['extensioncommands'].append((cmdname, cmddoc))
124 124 return results
125 125
126 126 def loaddoc(topic):
127 127 """Return a delayed loader for help/topic.txt."""
128 128
129 129 def loader():
130 130 if util.mainfrozen():
131 131 module = sys.executable
132 132 else:
133 133 module = __file__
134 134 base = os.path.dirname(module)
135 135
136 136 for dir in ('.', '..'):
137 137 docdir = os.path.join(base, dir, 'help')
138 138 if os.path.isdir(docdir):
139 139 break
140 140
141 141 path = os.path.join(docdir, topic + ".txt")
142 142 doc = gettext(util.readfile(path))
143 143 for rewriter in helphooks.get(topic, []):
144 144 doc = rewriter(topic, doc)
145 145 return doc
146 146
147 147 return loader
148 148
149 149 helptable = sorted([
150 150 (["config", "hgrc"], _("Configuration Files"), loaddoc('config')),
151 151 (["dates"], _("Date Formats"), loaddoc('dates')),
152 152 (["patterns"], _("File Name Patterns"), loaddoc('patterns')),
153 153 (['environment', 'env'], _('Environment Variables'),
154 154 loaddoc('environment')),
155 155 (['revisions', 'revs'], _('Specifying Single Revisions'),
156 156 loaddoc('revisions')),
157 157 (['multirevs', 'mrevs'], _('Specifying Multiple Revisions'),
158 158 loaddoc('multirevs')),
159 159 (['revsets', 'revset'], _("Specifying Revision Sets"), loaddoc('revsets')),
160 160 (['filesets', 'fileset'], _("Specifying File Sets"), loaddoc('filesets')),
161 161 (['diffs'], _('Diff Formats'), loaddoc('diffs')),
162 162 (['merge-tools', 'mergetools'], _('Merge Tools'), loaddoc('merge-tools')),
163 163 (['templating', 'templates', 'template', 'style'], _('Template Usage'),
164 164 loaddoc('templates')),
165 165 (['urls'], _('URL Paths'), loaddoc('urls')),
166 166 (["extensions"], _("Using Additional Features"), extshelp),
167 167 (["subrepos", "subrepo"], _("Subrepositories"), loaddoc('subrepos')),
168 168 (["hgweb"], _("Configuring hgweb"), loaddoc('hgweb')),
169 169 (["glossary"], _("Glossary"), loaddoc('glossary')),
170 170 (["hgignore", "ignore"], _("Syntax for Mercurial Ignore Files"),
171 171 loaddoc('hgignore')),
172 172 (["phases"], _("Working with Phases"), loaddoc('phases')),
173 173 ])
174 174
175 175 # Map topics to lists of callable taking the current topic help and
176 176 # returning the updated version
177 177 helphooks = {}
178 178
179 179 def addtopichook(topic, rewriter):
180 180 helphooks.setdefault(topic, []).append(rewriter)
181 181
182 182 def makeitemsdoc(topic, doc, marker, items):
183 183 """Extract docstring from the items key to function mapping, build a
184 184 .single documentation block and use it to overwrite the marker in doc
185 185 """
186 186 entries = []
187 187 for name in sorted(items):
188 188 text = (items[name].__doc__ or '').rstrip()
189 189 if not text:
190 190 continue
191 191 text = gettext(text)
192 192 lines = text.splitlines()
193 193 doclines = [(lines[0])]
194 194 for l in lines[1:]:
195 195 # Stop once we find some Python doctest
196 196 if l.strip().startswith('>>>'):
197 197 break
198 198 doclines.append(' ' + l.strip())
199 199 entries.append('\n'.join(doclines))
200 200 entries = '\n\n'.join(entries)
201 201 return doc.replace(marker, entries)
202 202
203 203 def addtopicsymbols(topic, marker, symbols):
204 204 def add(topic, doc):
205 205 return makeitemsdoc(topic, doc, marker, symbols)
206 206 addtopichook(topic, add)
207 207
208 208 addtopicsymbols('filesets', '.. predicatesmarker', fileset.symbols)
209 209 addtopicsymbols('merge-tools', '.. internaltoolsmarker', filemerge.internals)
210 210 addtopicsymbols('revsets', '.. predicatesmarker', revset.symbols)
211 211 addtopicsymbols('templates', '.. keywordsmarker', templatekw.dockeywords)
212 212 addtopicsymbols('templates', '.. filtersmarker', templatefilters.filters)
213 213
214 214 def help_(ui, name, unknowncmd=False, full=True, **opts):
215 215 '''
216 216 Generate the help for 'name' as unformatted restructured text. If
217 217 'name' is None, describe the commands available.
218 218 '''
219 219
220 220 import commands # avoid cycle
221 221
222 222 def helpcmd(name):
223 223 try:
224 224 aliases, entry = cmdutil.findcmd(name, commands.table,
225 225 strict=unknowncmd)
226 226 except error.AmbiguousCommand, inst:
227 227 # py3k fix: except vars can't be used outside the scope of the
228 228 # except block, nor can be used inside a lambda. python issue4617
229 229 prefix = inst.args[0]
230 230 select = lambda c: c.lstrip('^').startswith(prefix)
231 231 rst = helplist(select)
232 232 return rst
233 233
234 234 rst = []
235 235
236 236 # check if it's an invalid alias and display its error if it is
237 237 if getattr(entry[0], 'badalias', False):
238 238 if not unknowncmd:
239 239 ui.pushbuffer()
240 240 entry[0](ui)
241 241 rst.append(ui.popbuffer())
242 242 return rst
243 243
244 244 # synopsis
245 245 if len(entry) > 2:
246 246 if entry[2].startswith('hg'):
247 247 rst.append("%s\n" % entry[2])
248 248 else:
249 249 rst.append('hg %s %s\n' % (aliases[0], entry[2]))
250 250 else:
251 251 rst.append('hg %s\n' % aliases[0])
252 252 # aliases
253 253 if full and not ui.quiet and len(aliases) > 1:
254 254 rst.append(_("\naliases: %s\n") % ', '.join(aliases[1:]))
255 255 rst.append('\n')
256 256
257 257 # description
258 258 doc = gettext(entry[0].__doc__)
259 259 if not doc:
260 260 doc = _("(no help text available)")
261 261 if util.safehasattr(entry[0], 'definition'): # aliased command
262 262 if entry[0].definition.startswith('!'): # shell alias
263 263 doc = _('shell alias for::\n\n %s') % entry[0].definition[1:]
264 264 else:
265 265 doc = _('alias for: hg %s\n\n%s') % (entry[0].definition, doc)
266 266 doc = doc.splitlines(True)
267 267 if ui.quiet or not full:
268 268 rst.append(doc[0])
269 269 else:
270 270 rst.extend(doc)
271 271 rst.append('\n')
272 272
273 273 # check if this command shadows a non-trivial (multi-line)
274 274 # extension help text
275 275 try:
276 276 mod = extensions.find(name)
277 277 doc = gettext(mod.__doc__) or ''
278 278 if '\n' in doc.strip():
279 279 msg = _('(use "hg help -e %s" to show help for '
280 280 'the %s extension)') % (name, name)
281 281 rst.append('\n%s\n' % msg)
282 282 except KeyError:
283 283 pass
284 284
285 285 # options
286 286 if not ui.quiet and entry[1]:
287 287 rst.append('\n%s\n\n' % _("options:"))
288 288 rst.append(optrst(entry[1], ui.verbose))
289 289
290 290 if ui.verbose:
291 291 rst.append('\n%s\n\n' % _("global options:"))
292 292 rst.append(optrst(commands.globalopts, ui.verbose))
293 293
294 294 if not ui.verbose:
295 295 if not full:
296 296 rst.append(_('\n(use "hg %s -h" to show more help)\n')
297 297 % name)
298 298 elif not ui.quiet:
299 299 rst.append(_('\n(some details hidden, use --verbose '
300 300 'to show complete help)'))
301 301
302 302 return rst
303 303
304 304
305 305 def helplist(select=None):
306 306 # list of commands
307 307 if name == "shortlist":
308 308 header = _('basic commands:\n\n')
309 309 elif name == "debug":
310 310 header = _('debug commands (internal and unsupported):\n\n')
311 311 else:
312 312 header = _('list of commands:\n\n')
313 313
314 314 h = {}
315 315 cmds = {}
316 316 for c, e in commands.table.iteritems():
317 317 f = c.split("|", 1)[0]
318 318 if select and not select(f):
319 319 continue
320 320 if (not select and name != 'shortlist' and
321 321 e[0].__module__ != commands.__name__):
322 322 continue
323 323 if name == "shortlist" and not f.startswith("^"):
324 324 continue
325 325 f = f.lstrip("^")
326 326 if not ui.debugflag and f.startswith("debug") and name != "debug":
327 327 continue
328 328 doc = e[0].__doc__
329 329 if doc and 'DEPRECATED' in doc and not ui.verbose:
330 330 continue
331 331 doc = gettext(doc)
332 332 if not doc:
333 333 doc = _("(no help text available)")
334 334 h[f] = doc.splitlines()[0].rstrip()
335 335 cmds[f] = c.lstrip("^")
336 336
337 337 rst = []
338 338 if not h:
339 339 if not ui.quiet:
340 340 rst.append(_('no commands defined\n'))
341 341 return rst
342 342
343 343 if not ui.quiet:
344 344 rst.append(header)
345 345 fns = sorted(h)
346 346 for f in fns:
347 347 if ui.verbose:
348 348 commacmds = cmds[f].replace("|",", ")
349 349 rst.append(" :%s: %s\n" % (commacmds, h[f]))
350 350 else:
351 351 rst.append(' :%s: %s\n' % (f, h[f]))
352 352
353 353 if not name:
354 354 exts = listexts(_('enabled extensions:'), extensions.enabled())
355 355 if exts:
356 356 rst.append('\n')
357 357 rst.extend(exts)
358 358
359 359 rst.append(_("\nadditional help topics:\n\n"))
360 360 topics = []
361 361 for names, header, doc in helptable:
362 362 topics.append((names[0], header))
363 363 for t, desc in topics:
364 364 rst.append(" :%s: %s\n" % (t, desc))
365 365
366 366 optlist = []
367 367 if not ui.quiet:
368 368 if ui.verbose:
369 369 optlist.append((_("global options:"), commands.globalopts))
370 370 if name == 'shortlist':
371 371 optlist.append((_('use "hg help" for the full list '
372 372 'of commands'), ()))
373 373 else:
374 374 if name == 'shortlist':
375 375 msg = _('use "hg help" for the full list of commands '
376 376 'or "hg -v" for details')
377 377 elif name and not full:
378 378 msg = _('use "hg help %s" to show the full help '
379 379 'text') % name
380 380 else:
381 381 msg = _('use "hg -v help%s" to show builtin aliases and '
382 382 'global options') % (name and " " + name or "")
383 383 optlist.append((msg, ()))
384 384
385 385 if optlist:
386 386 for title, options in optlist:
387 387 rst.append('\n%s\n' % title)
388 388 if options:
389 389 rst.append('\n%s\n' % optrst(options, ui.verbose))
390 390 return rst
391 391
392 392 def helptopic(name):
393 393 for names, header, doc in helptable:
394 394 if name in names:
395 395 break
396 396 else:
397 397 raise error.UnknownCommand(name)
398 398
399 399 rst = [minirst.section(header)]
400 400
401 401 # description
402 402 if not doc:
403 403 rst.append(" %s\n" % _("(no help text available)"))
404 404 if callable(doc):
405 405 rst += [" %s\n" % l for l in doc().splitlines()]
406 406
407 407 if not ui.verbose:
408 omitted = (_('use "hg help -v %s" to show more complete help') %
409 name)
408 omitted = _('(some details hidden, use --verbose'
409 ' to show complete help)')
410 410 indicateomitted(rst, omitted)
411 411
412 412 try:
413 413 cmdutil.findcmd(name, commands.table)
414 414 rst.append(_('\nuse "hg help -c %s" to see help for '
415 415 'the %s command\n') % (name, name))
416 416 except error.UnknownCommand:
417 417 pass
418 418 return rst
419 419
420 420 def helpext(name):
421 421 try:
422 422 mod = extensions.find(name)
423 423 doc = gettext(mod.__doc__) or _('no help text available')
424 424 except KeyError:
425 425 mod = None
426 426 doc = extensions.disabledext(name)
427 427 if not doc:
428 428 raise error.UnknownCommand(name)
429 429
430 430 if '\n' not in doc:
431 431 head, tail = doc, ""
432 432 else:
433 433 head, tail = doc.split('\n', 1)
434 434 rst = [_('%s extension - %s\n\n') % (name.split('.')[-1], head)]
435 435 if tail:
436 436 rst.extend(tail.splitlines(True))
437 437 rst.append('\n')
438 438
439 439 if not ui.verbose:
440 omitted = (_('use "hg help -v %s" to show more complete help') %
441 name)
440 omitted = _('(some details hidden, use --verbose'
441 ' to show complete help)')
442 442 indicateomitted(rst, omitted)
443 443
444 444 if mod:
445 445 try:
446 446 ct = mod.cmdtable
447 447 except AttributeError:
448 448 ct = {}
449 449 modcmds = set([c.split('|', 1)[0] for c in ct])
450 450 rst.extend(helplist(modcmds.__contains__))
451 451 else:
452 452 rst.append(_('(use "hg help extensions" for information on enabling'
453 453 ' extensions)\n'))
454 454 return rst
455 455
456 456 def helpextcmd(name):
457 457 cmd, ext, mod = extensions.disabledcmd(ui, name,
458 458 ui.configbool('ui', 'strict'))
459 459 doc = gettext(mod.__doc__).splitlines()[0]
460 460
461 461 rst = listexts(_("'%s' is provided by the following "
462 462 "extension:") % cmd, {ext: doc}, indent=4)
463 463 rst.append('\n')
464 464 rst.append(_('(use "hg help extensions" for information on enabling '
465 465 'extensions)\n'))
466 466 return rst
467 467
468 468
469 469 rst = []
470 470 kw = opts.get('keyword')
471 471 if kw:
472 472 matches = topicmatch(kw)
473 473 for t, title in (('topics', _('Topics')),
474 474 ('commands', _('Commands')),
475 475 ('extensions', _('Extensions')),
476 476 ('extensioncommands', _('Extension Commands'))):
477 477 if matches[t]:
478 478 rst.append('%s:\n\n' % title)
479 479 rst.extend(minirst.maketable(sorted(matches[t]), 1))
480 480 rst.append('\n')
481 481 if not rst:
482 482 msg = _('no matches')
483 483 hint = _('try "hg help" for a list of topics')
484 484 raise util.Abort(msg, hint=hint)
485 485 elif name and name != 'shortlist':
486 486 if unknowncmd:
487 487 queries = (helpextcmd,)
488 488 elif opts.get('extension'):
489 489 queries = (helpext,)
490 490 elif opts.get('command'):
491 491 queries = (helpcmd,)
492 492 else:
493 493 queries = (helptopic, helpcmd, helpext, helpextcmd)
494 494 for f in queries:
495 495 try:
496 496 rst = f(name)
497 497 break
498 498 except error.UnknownCommand:
499 499 pass
500 500 else:
501 501 if unknowncmd:
502 502 raise error.UnknownCommand(name)
503 503 else:
504 504 msg = _('no such help topic: %s') % name
505 505 hint = _('try "hg help --keyword %s"') % name
506 506 raise util.Abort(msg, hint=hint)
507 507 else:
508 508 # program name
509 509 if not ui.quiet:
510 510 rst = [_("Mercurial Distributed SCM\n"), '\n']
511 511 rst.extend(helplist())
512 512
513 513 return ''.join(rst)
@@ -1,2098 +1,2098
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 working directory with another revision
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 working directory with another revision
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 $ hg help
48 48 Mercurial Distributed SCM
49 49
50 50 list of commands:
51 51
52 52 add add the specified files on the next commit
53 53 addremove add all new files, delete all missing files
54 54 annotate show changeset information by line for each file
55 55 archive create an unversioned archive of a repository revision
56 56 backout reverse effect of earlier changeset
57 57 bisect subdivision search of changesets
58 58 bookmarks create a new bookmark or list existing bookmarks
59 59 branch set or show the current branch name
60 60 branches list repository named branches
61 61 bundle create a changegroup file
62 62 cat output the current or given revision of files
63 63 clone make a copy of an existing repository
64 64 commit commit the specified files or all outstanding changes
65 65 config show combined config settings from all hgrc files
66 66 copy mark files as copied for the next commit
67 67 diff diff repository (or selected files)
68 68 export dump the header and diffs for one or more changesets
69 69 forget forget the specified files on the next commit
70 70 graft copy changes from other branches onto the current branch
71 71 grep search for a pattern in specified files and revisions
72 72 heads show branch heads
73 73 help show help for a given topic or a help overview
74 74 identify identify the working copy or specified revision
75 75 import import an ordered set of patches
76 76 incoming show new changesets found in source
77 77 init create a new repository in the given directory
78 78 locate locate files matching specific patterns
79 79 log show revision history of entire repository or files
80 80 manifest output the current or given revision of the project manifest
81 81 merge merge working directory with another revision
82 82 outgoing show changesets not found in the destination
83 83 parents show the parents of the working directory or revision
84 84 paths show aliases for remote repositories
85 85 phase set or show the current phase name
86 86 pull pull changes from the specified source
87 87 push push changes to the specified destination
88 88 recover roll back an interrupted transaction
89 89 remove remove the specified files on the next commit
90 90 rename rename files; equivalent of copy + remove
91 91 resolve redo merges or set/view the merge status of files
92 92 revert restore files to their checkout state
93 93 root print the root (top) of the current working directory
94 94 serve start stand-alone webserver
95 95 status show changed files in the working directory
96 96 summary summarize working directory state
97 97 tag add one or more tags for the current or given revision
98 98 tags list repository tags
99 99 unbundle apply one or more changegroup files
100 100 update update working directory (or switch revisions)
101 101 verify verify the integrity of the repository
102 102 version output version and copyright information
103 103
104 104 additional help topics:
105 105
106 106 config Configuration Files
107 107 dates Date Formats
108 108 diffs Diff Formats
109 109 environment Environment Variables
110 110 extensions Using Additional Features
111 111 filesets Specifying File Sets
112 112 glossary Glossary
113 113 hgignore Syntax for Mercurial Ignore Files
114 114 hgweb Configuring hgweb
115 115 merge-tools Merge Tools
116 116 multirevs Specifying Multiple Revisions
117 117 patterns File Name Patterns
118 118 phases Working with Phases
119 119 revisions Specifying Single Revisions
120 120 revsets Specifying Revision Sets
121 121 subrepos Subrepositories
122 122 templating Template Usage
123 123 urls URL Paths
124 124
125 125 use "hg -v help" to show builtin aliases and global options
126 126
127 127 $ hg -q help
128 128 add add the specified files on the next commit
129 129 addremove add all new files, delete all missing files
130 130 annotate show changeset information by line for each file
131 131 archive create an unversioned archive of a repository revision
132 132 backout reverse effect of earlier changeset
133 133 bisect subdivision search of changesets
134 134 bookmarks create a new bookmark or list existing bookmarks
135 135 branch set or show the current branch name
136 136 branches list repository named branches
137 137 bundle create a changegroup file
138 138 cat output the current or given revision of files
139 139 clone make a copy of an existing repository
140 140 commit commit the specified files or all outstanding changes
141 141 config show combined config settings from all hgrc files
142 142 copy mark files as copied for the next commit
143 143 diff diff repository (or selected files)
144 144 export dump the header and diffs for one or more changesets
145 145 forget forget the specified files on the next commit
146 146 graft copy changes from other branches onto the current branch
147 147 grep search for a pattern in specified files and revisions
148 148 heads show branch heads
149 149 help show help for a given topic or a help overview
150 150 identify identify the working copy or specified revision
151 151 import import an ordered set of patches
152 152 incoming show new changesets found in source
153 153 init create a new repository in the given directory
154 154 locate locate files matching specific patterns
155 155 log show revision history of entire repository or files
156 156 manifest output the current or given revision of the project manifest
157 157 merge merge working directory with another revision
158 158 outgoing show changesets not found in the destination
159 159 parents show the parents of the working directory or revision
160 160 paths show aliases for remote repositories
161 161 phase set or show the current phase name
162 162 pull pull changes from the specified source
163 163 push push changes to the specified destination
164 164 recover roll back an interrupted transaction
165 165 remove remove the specified files on the next commit
166 166 rename rename files; equivalent of copy + remove
167 167 resolve redo merges or set/view the merge status of files
168 168 revert restore files to their checkout state
169 169 root print the root (top) of the current working directory
170 170 serve start stand-alone webserver
171 171 status show changed files in the working directory
172 172 summary summarize working directory state
173 173 tag add one or more tags for the current or given revision
174 174 tags list repository tags
175 175 unbundle apply one or more changegroup files
176 176 update update working directory (or switch revisions)
177 177 verify verify the integrity of the repository
178 178 version output version and copyright information
179 179
180 180 additional help topics:
181 181
182 182 config Configuration Files
183 183 dates Date Formats
184 184 diffs Diff Formats
185 185 environment Environment Variables
186 186 extensions Using Additional Features
187 187 filesets Specifying File Sets
188 188 glossary Glossary
189 189 hgignore Syntax for Mercurial Ignore Files
190 190 hgweb Configuring hgweb
191 191 merge-tools Merge Tools
192 192 multirevs Specifying Multiple Revisions
193 193 patterns File Name Patterns
194 194 phases Working with Phases
195 195 revisions Specifying Single Revisions
196 196 revsets Specifying Revision Sets
197 197 subrepos Subrepositories
198 198 templating Template Usage
199 199 urls URL Paths
200 200
201 201 Test extension help:
202 202 $ hg help extensions --config extensions.rebase= --config extensions.children=
203 203 Using Additional Features
204 204 """""""""""""""""""""""""
205 205
206 206 Mercurial has the ability to add new features through the use of
207 207 extensions. Extensions may add new commands, add options to existing
208 208 commands, change the default behavior of commands, or implement hooks.
209 209
210 210 To enable the "foo" extension, either shipped with Mercurial or in the
211 211 Python search path, create an entry for it in your configuration file,
212 212 like this:
213 213
214 214 [extensions]
215 215 foo =
216 216
217 217 You may also specify the full path to an extension:
218 218
219 219 [extensions]
220 220 myfeature = ~/.hgext/myfeature.py
221 221
222 222 See "hg help config" for more information on configuration files.
223 223
224 224 Extensions are not loaded by default for a variety of reasons: they can
225 225 increase startup overhead; they may be meant for advanced usage only; they
226 226 may provide potentially dangerous abilities (such as letting you destroy
227 227 or modify history); they might not be ready for prime time; or they may
228 228 alter some usual behaviors of stock Mercurial. It is thus up to the user
229 229 to activate extensions as needed.
230 230
231 231 To explicitly disable an extension enabled in a configuration file of
232 232 broader scope, prepend its path with !:
233 233
234 234 [extensions]
235 235 # disabling extension bar residing in /path/to/extension/bar.py
236 236 bar = !/path/to/extension/bar.py
237 237 # ditto, but no path was supplied for extension baz
238 238 baz = !
239 239
240 240 enabled extensions:
241 241
242 242 children command to display child changesets (DEPRECATED)
243 243 rebase command to move sets of revisions to a different ancestor
244 244
245 245 disabled extensions:
246 246
247 247 acl hooks for controlling repository access
248 248 blackbox log repository events to a blackbox for debugging
249 249 bugzilla hooks for integrating with the Bugzilla bug tracker
250 250 churn command to display statistics about repository history
251 251 color colorize output from some commands
252 252 convert import revisions from foreign VCS repositories into
253 253 Mercurial
254 254 eol automatically manage newlines in repository files
255 255 extdiff command to allow external programs to compare revisions
256 256 factotum http authentication with factotum
257 257 gpg commands to sign and verify changesets
258 258 hgcia hooks for integrating with the CIA.vc notification service
259 259 hgk browse the repository in a graphical way
260 260 highlight syntax highlighting for hgweb (requires Pygments)
261 261 histedit interactive history editing
262 262 keyword expand keywords in tracked files
263 263 largefiles track large binary files
264 264 mq manage a stack of patches
265 265 notify hooks for sending email push notifications
266 266 pager browse command output with an external pager
267 267 patchbomb command to send changesets as (a series of) patch emails
268 268 progress show progress bars for some actions
269 269 purge command to delete untracked files from the working
270 270 directory
271 271 record commands to interactively select changes for
272 272 commit/qrefresh
273 273 relink recreates hardlinks between repository clones
274 274 schemes extend schemes with shortcuts to repository swarms
275 275 share share a common history between several working directories
276 276 shelve save and restore changes to the working directory
277 277 strip strip changesets and their descendents from history
278 278 transplant command to transplant changesets from another branch
279 279 win32mbcs allow the use of MBCS paths with problematic encodings
280 280 zeroconf discover and advertise repositories on the local network
281 281 Test short command list with verbose option
282 282
283 283 $ hg -v help shortlist
284 284 Mercurial Distributed SCM
285 285
286 286 basic commands:
287 287
288 288 add add the specified files on the next commit
289 289 annotate, blame
290 290 show changeset information by line for each file
291 291 clone make a copy of an existing repository
292 292 commit, ci commit the specified files or all outstanding changes
293 293 diff diff repository (or selected files)
294 294 export dump the header and diffs for one or more changesets
295 295 forget forget the specified files on the next commit
296 296 init create a new repository in the given directory
297 297 log, history show revision history of entire repository or files
298 298 merge merge working directory with another revision
299 299 pull pull changes from the specified source
300 300 push push changes to the specified destination
301 301 remove, rm remove the specified files on the next commit
302 302 serve start stand-alone webserver
303 303 status, st show changed files in the working directory
304 304 summary, sum summarize working directory state
305 305 update, up, checkout, co
306 306 update working directory (or switch revisions)
307 307
308 308 global options:
309 309
310 310 -R --repository REPO repository root directory or name of overlay bundle
311 311 file
312 312 --cwd DIR change working directory
313 313 -y --noninteractive do not prompt, automatically pick the first choice for
314 314 all prompts
315 315 -q --quiet suppress output
316 316 -v --verbose enable additional output
317 317 --config CONFIG [+] set/override config option (use 'section.name=value')
318 318 --debug enable debugging output
319 319 --debugger start debugger
320 320 --encoding ENCODE set the charset encoding (default: ascii)
321 321 --encodingmode MODE set the charset encoding mode (default: strict)
322 322 --traceback always print a traceback on exception
323 323 --time time how long the command takes
324 324 --profile print command execution profile
325 325 --version output version information and exit
326 326 -h --help display help and exit
327 327 --hidden consider hidden changesets
328 328
329 329 [+] marked option can be specified multiple times
330 330
331 331 use "hg help" for the full list of commands
332 332
333 333 $ hg add -h
334 334 hg add [OPTION]... [FILE]...
335 335
336 336 add the specified files on the next commit
337 337
338 338 Schedule files to be version controlled and added to the repository.
339 339
340 340 The files will be added to the repository at the next commit. To undo an
341 341 add before that, see "hg forget".
342 342
343 343 If no names are given, add all files to the repository.
344 344
345 345 Returns 0 if all files are successfully added.
346 346
347 347 options:
348 348
349 349 -I --include PATTERN [+] include names matching the given patterns
350 350 -X --exclude PATTERN [+] exclude names matching the given patterns
351 351 -S --subrepos recurse into subrepositories
352 352 -n --dry-run do not perform actions, just print output
353 353
354 354 [+] marked option can be specified multiple times
355 355
356 356 (some details hidden, use --verbose to show complete help)
357 357
358 358 Verbose help for add
359 359
360 360 $ hg add -hv
361 361 hg add [OPTION]... [FILE]...
362 362
363 363 add the specified files on the next commit
364 364
365 365 Schedule files to be version controlled and added to the repository.
366 366
367 367 The files will be added to the repository at the next commit. To undo an
368 368 add before that, see "hg forget".
369 369
370 370 If no names are given, add all files to the repository.
371 371
372 372 An example showing how new (unknown) files are added automatically by "hg
373 373 add":
374 374
375 375 $ ls
376 376 foo.c
377 377 $ hg status
378 378 ? foo.c
379 379 $ hg add
380 380 adding foo.c
381 381 $ hg status
382 382 A foo.c
383 383
384 384 Returns 0 if all files are successfully added.
385 385
386 386 options:
387 387
388 388 -I --include PATTERN [+] include names matching the given patterns
389 389 -X --exclude PATTERN [+] exclude names matching the given patterns
390 390 -S --subrepos recurse into subrepositories
391 391 -n --dry-run do not perform actions, just print output
392 392
393 393 [+] marked option can be specified multiple times
394 394
395 395 global options:
396 396
397 397 -R --repository REPO repository root directory or name of overlay bundle
398 398 file
399 399 --cwd DIR change working directory
400 400 -y --noninteractive do not prompt, automatically pick the first choice for
401 401 all prompts
402 402 -q --quiet suppress output
403 403 -v --verbose enable additional output
404 404 --config CONFIG [+] set/override config option (use 'section.name=value')
405 405 --debug enable debugging output
406 406 --debugger start debugger
407 407 --encoding ENCODE set the charset encoding (default: ascii)
408 408 --encodingmode MODE set the charset encoding mode (default: strict)
409 409 --traceback always print a traceback on exception
410 410 --time time how long the command takes
411 411 --profile print command execution profile
412 412 --version output version information and exit
413 413 -h --help display help and exit
414 414 --hidden consider hidden changesets
415 415
416 416 [+] marked option can be specified multiple times
417 417
418 418 Test help option with version option
419 419
420 420 $ hg add -h --version
421 421 Mercurial Distributed SCM (version *) (glob)
422 422 (see http://mercurial.selenic.com for more information)
423 423
424 424 Copyright (C) 2005-2014 Matt Mackall and others
425 425 This is free software; see the source for copying conditions. There is NO
426 426 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
427 427
428 428 $ hg add --skjdfks
429 429 hg add: option --skjdfks not recognized
430 430 hg add [OPTION]... [FILE]...
431 431
432 432 add the specified files on the next commit
433 433
434 434 options:
435 435
436 436 -I --include PATTERN [+] include names matching the given patterns
437 437 -X --exclude PATTERN [+] exclude names matching the given patterns
438 438 -S --subrepos recurse into subrepositories
439 439 -n --dry-run do not perform actions, just print output
440 440
441 441 [+] marked option can be specified multiple times
442 442
443 443 (use "hg add -h" to show more help)
444 444 [255]
445 445
446 446 Test ambiguous command help
447 447
448 448 $ hg help ad
449 449 list of commands:
450 450
451 451 add add the specified files on the next commit
452 452 addremove add all new files, delete all missing files
453 453
454 454 use "hg -v help ad" to show builtin aliases and global options
455 455
456 456 Test command without options
457 457
458 458 $ hg help verify
459 459 hg verify
460 460
461 461 verify the integrity of the repository
462 462
463 463 Verify the integrity of the current repository.
464 464
465 465 This will perform an extensive check of the repository's integrity,
466 466 validating the hashes and checksums of each entry in the changelog,
467 467 manifest, and tracked files, as well as the integrity of their crosslinks
468 468 and indices.
469 469
470 470 Please see http://mercurial.selenic.com/wiki/RepositoryCorruption for more
471 471 information about recovery from corruption of the repository.
472 472
473 473 Returns 0 on success, 1 if errors are encountered.
474 474
475 475 (some details hidden, use --verbose to show complete help)
476 476
477 477 $ hg help diff
478 478 hg diff [OPTION]... ([-c REV] | [-r REV1 [-r REV2]]) [FILE]...
479 479
480 480 diff repository (or selected files)
481 481
482 482 Show differences between revisions for the specified files.
483 483
484 484 Differences between files are shown using the unified diff format.
485 485
486 486 Note:
487 487 diff may generate unexpected results for merges, as it will default to
488 488 comparing against the working directory's first parent changeset if no
489 489 revisions are specified.
490 490
491 491 When two revision arguments are given, then changes are shown between
492 492 those revisions. If only one revision is specified then that revision is
493 493 compared to the working directory, and, when no revisions are specified,
494 494 the working directory files are compared to its parent.
495 495
496 496 Alternatively you can specify -c/--change with a revision to see the
497 497 changes in that changeset relative to its first parent.
498 498
499 499 Without the -a/--text option, diff will avoid generating diffs of files it
500 500 detects as binary. With -a, diff will generate a diff anyway, probably
501 501 with undesirable results.
502 502
503 503 Use the -g/--git option to generate diffs in the git extended diff format.
504 504 For more information, read "hg help diffs".
505 505
506 506 Returns 0 on success.
507 507
508 508 options:
509 509
510 510 -r --rev REV [+] revision
511 511 -c --change REV change made by revision
512 512 -a --text treat all files as text
513 513 -g --git use git extended diff format
514 514 --nodates omit dates from diff headers
515 515 -p --show-function show which function each change is in
516 516 --reverse produce a diff that undoes the changes
517 517 -w --ignore-all-space ignore white space when comparing lines
518 518 -b --ignore-space-change ignore changes in the amount of white space
519 519 -B --ignore-blank-lines ignore changes whose lines are all blank
520 520 -U --unified NUM number of lines of context to show
521 521 --stat output diffstat-style summary of changes
522 522 -I --include PATTERN [+] include names matching the given patterns
523 523 -X --exclude PATTERN [+] exclude names matching the given patterns
524 524 -S --subrepos recurse into subrepositories
525 525
526 526 [+] marked option can be specified multiple times
527 527
528 528 (some details hidden, use --verbose to show complete help)
529 529
530 530 $ hg help status
531 531 hg status [OPTION]... [FILE]...
532 532
533 533 aliases: st
534 534
535 535 show changed files in the working directory
536 536
537 537 Show status of files in the repository. If names are given, only files
538 538 that match are shown. Files that are clean or ignored or the source of a
539 539 copy/move operation, are not listed unless -c/--clean, -i/--ignored,
540 540 -C/--copies or -A/--all are given. Unless options described with "show
541 541 only ..." are given, the options -mardu are used.
542 542
543 543 Option -q/--quiet hides untracked (unknown and ignored) files unless
544 544 explicitly requested with -u/--unknown or -i/--ignored.
545 545
546 546 Note:
547 547 status may appear to disagree with diff if permissions have changed or
548 548 a merge has occurred. The standard diff format does not report
549 549 permission changes and diff only reports changes relative to one merge
550 550 parent.
551 551
552 552 If one revision is given, it is used as the base revision. If two
553 553 revisions are given, the differences between them are shown. The --change
554 554 option can also be used as a shortcut to list the changed files of a
555 555 revision from its first parent.
556 556
557 557 The codes used to show the status of files are:
558 558
559 559 M = modified
560 560 A = added
561 561 R = removed
562 562 C = clean
563 563 ! = missing (deleted by non-hg command, but still tracked)
564 564 ? = not tracked
565 565 I = ignored
566 566 = origin of the previous file (with --copies)
567 567
568 568 Returns 0 on success.
569 569
570 570 options:
571 571
572 572 -A --all show status of all files
573 573 -m --modified show only modified files
574 574 -a --added show only added files
575 575 -r --removed show only removed files
576 576 -d --deleted show only deleted (but tracked) files
577 577 -c --clean show only files without changes
578 578 -u --unknown show only unknown (not tracked) files
579 579 -i --ignored show only ignored files
580 580 -n --no-status hide status prefix
581 581 -C --copies show source of copied files
582 582 -0 --print0 end filenames with NUL, for use with xargs
583 583 --rev REV [+] show difference from revision
584 584 --change REV list the changed files of a revision
585 585 -I --include PATTERN [+] include names matching the given patterns
586 586 -X --exclude PATTERN [+] exclude names matching the given patterns
587 587 -S --subrepos recurse into subrepositories
588 588
589 589 [+] marked option can be specified multiple times
590 590
591 591 (some details hidden, use --verbose to show complete help)
592 592
593 593 $ hg -q help status
594 594 hg status [OPTION]... [FILE]...
595 595
596 596 show changed files in the working directory
597 597
598 598 $ hg help foo
599 599 abort: no such help topic: foo
600 600 (try "hg help --keyword foo")
601 601 [255]
602 602
603 603 $ hg skjdfks
604 604 hg: unknown command 'skjdfks'
605 605 Mercurial Distributed SCM
606 606
607 607 basic commands:
608 608
609 609 add add the specified files on the next commit
610 610 annotate show changeset information by line for each file
611 611 clone make a copy of an existing repository
612 612 commit commit the specified files or all outstanding changes
613 613 diff diff repository (or selected files)
614 614 export dump the header and diffs for one or more changesets
615 615 forget forget the specified files on the next commit
616 616 init create a new repository in the given directory
617 617 log show revision history of entire repository or files
618 618 merge merge working directory with another revision
619 619 pull pull changes from the specified source
620 620 push push changes to the specified destination
621 621 remove remove the specified files on the next commit
622 622 serve start stand-alone webserver
623 623 status show changed files in the working directory
624 624 summary summarize working directory state
625 625 update update working directory (or switch revisions)
626 626
627 627 use "hg help" for the full list of commands or "hg -v" for details
628 628 [255]
629 629
630 630
631 631 $ cat > helpext.py <<EOF
632 632 > import os
633 633 > from mercurial import cmdutil, commands
634 634 >
635 635 > cmdtable = {}
636 636 > command = cmdutil.command(cmdtable)
637 637 >
638 638 > @command('nohelp',
639 639 > [('', 'longdesc', 3, 'x'*90),
640 640 > ('n', '', None, 'normal desc'),
641 641 > ('', 'newline', '', 'line1\nline2')],
642 642 > 'hg nohelp',
643 643 > norepo=True)
644 644 > @command('debugoptDEP', [('', 'dopt', None, 'option is DEPRECATED')])
645 645 > def nohelp(ui, *args, **kwargs):
646 646 > pass
647 647 >
648 648 > EOF
649 649 $ echo '[extensions]' >> $HGRCPATH
650 650 $ echo "helpext = `pwd`/helpext.py" >> $HGRCPATH
651 651
652 652 Test command with no help text
653 653
654 654 $ hg help nohelp
655 655 hg nohelp
656 656
657 657 (no help text available)
658 658
659 659 options:
660 660
661 661 --longdesc VALUE xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
662 662 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (default: 3)
663 663 -n -- normal desc
664 664 --newline VALUE line1 line2
665 665
666 666 (some details hidden, use --verbose to show complete help)
667 667
668 668 $ hg help -k nohelp
669 669 Commands:
670 670
671 671 nohelp hg nohelp
672 672
673 673 Extension Commands:
674 674
675 675 nohelp (no help text available)
676 676
677 677 Test that default list of commands omits extension commands
678 678
679 679 $ hg help
680 680 Mercurial Distributed SCM
681 681
682 682 list of commands:
683 683
684 684 add add the specified files on the next commit
685 685 addremove add all new files, delete all missing files
686 686 annotate show changeset information by line for each file
687 687 archive create an unversioned archive of a repository revision
688 688 backout reverse effect of earlier changeset
689 689 bisect subdivision search of changesets
690 690 bookmarks create a new bookmark or list existing bookmarks
691 691 branch set or show the current branch name
692 692 branches list repository named branches
693 693 bundle create a changegroup file
694 694 cat output the current or given revision of files
695 695 clone make a copy of an existing repository
696 696 commit commit the specified files or all outstanding changes
697 697 config show combined config settings from all hgrc files
698 698 copy mark files as copied for the next commit
699 699 diff diff repository (or selected files)
700 700 export dump the header and diffs for one or more changesets
701 701 forget forget the specified files on the next commit
702 702 graft copy changes from other branches onto the current branch
703 703 grep search for a pattern in specified files and revisions
704 704 heads show branch heads
705 705 help show help for a given topic or a help overview
706 706 identify identify the working copy or specified revision
707 707 import import an ordered set of patches
708 708 incoming show new changesets found in source
709 709 init create a new repository in the given directory
710 710 locate locate files matching specific patterns
711 711 log show revision history of entire repository or files
712 712 manifest output the current or given revision of the project manifest
713 713 merge merge working directory with another revision
714 714 outgoing show changesets not found in the destination
715 715 parents show the parents of the working directory or revision
716 716 paths show aliases for remote repositories
717 717 phase set or show the current phase name
718 718 pull pull changes from the specified source
719 719 push push changes to the specified destination
720 720 recover roll back an interrupted transaction
721 721 remove remove the specified files on the next commit
722 722 rename rename files; equivalent of copy + remove
723 723 resolve redo merges or set/view the merge status of files
724 724 revert restore files to their checkout state
725 725 root print the root (top) of the current working directory
726 726 serve start stand-alone webserver
727 727 status show changed files in the working directory
728 728 summary summarize working directory state
729 729 tag add one or more tags for the current or given revision
730 730 tags list repository tags
731 731 unbundle apply one or more changegroup files
732 732 update update working directory (or switch revisions)
733 733 verify verify the integrity of the repository
734 734 version output version and copyright information
735 735
736 736 enabled extensions:
737 737
738 738 helpext (no help text available)
739 739
740 740 additional help topics:
741 741
742 742 config Configuration Files
743 743 dates Date Formats
744 744 diffs Diff Formats
745 745 environment Environment Variables
746 746 extensions Using Additional Features
747 747 filesets Specifying File Sets
748 748 glossary Glossary
749 749 hgignore Syntax for Mercurial Ignore Files
750 750 hgweb Configuring hgweb
751 751 merge-tools Merge Tools
752 752 multirevs Specifying Multiple Revisions
753 753 patterns File Name Patterns
754 754 phases Working with Phases
755 755 revisions Specifying Single Revisions
756 756 revsets Specifying Revision Sets
757 757 subrepos Subrepositories
758 758 templating Template Usage
759 759 urls URL Paths
760 760
761 761 use "hg -v help" to show builtin aliases and global options
762 762
763 763
764 764 Test list of internal help commands
765 765
766 766 $ hg help debug
767 767 debug commands (internal and unsupported):
768 768
769 769 debugancestor
770 770 find the ancestor revision of two revisions in a given index
771 771 debugbuilddag
772 772 builds a repo with a given DAG from scratch in the current
773 773 empty repo
774 774 debugbundle lists the contents of a bundle
775 775 debugcheckstate
776 776 validate the correctness of the current dirstate
777 777 debugcommands
778 778 list all available commands and options
779 779 debugcomplete
780 780 returns the completion list associated with the given command
781 781 debugdag format the changelog or an index DAG as a concise textual
782 782 description
783 783 debugdata dump the contents of a data file revision
784 784 debugdate parse and display a date
785 785 debugdirstate
786 786 show the contents of the current dirstate
787 787 debugdiscovery
788 788 runs the changeset discovery protocol in isolation
789 789 debugfileset parse and apply a fileset specification
790 790 debugfsinfo show information detected about current filesystem
791 791 debuggetbundle
792 792 retrieves a bundle from a repo
793 793 debugignore display the combined ignore pattern
794 794 debugindex dump the contents of an index file
795 795 debugindexdot
796 796 dump an index DAG as a graphviz dot file
797 797 debuginstall test Mercurial installation
798 798 debugknown test whether node ids are known to a repo
799 799 debuglabelcomplete
800 800 complete "labels" - tags, open branch names, bookmark names
801 801 debugobsolete
802 802 create arbitrary obsolete marker
803 803 debugoptDEP (no help text available)
804 804 debugpathcomplete
805 805 complete part or all of a tracked path
806 806 debugpushkey access the pushkey key/value protocol
807 807 debugpvec (no help text available)
808 808 debugrebuilddirstate
809 809 rebuild the dirstate as it would look like for the given
810 810 revision
811 811 debugrename dump rename information
812 812 debugrevlog show data and statistics about a revlog
813 813 debugrevspec parse and apply a revision specification
814 814 debugsetparents
815 815 manually set the parents of the current working directory
816 816 debugsub (no help text available)
817 817 debugsuccessorssets
818 818 show set of successors for revision
819 819 debugwalk show how files match on given patterns
820 820 debugwireargs
821 821 (no help text available)
822 822
823 823 use "hg -v help debug" to show builtin aliases and global options
824 824
825 825
826 826 Test list of commands with command with no help text
827 827
828 828 $ hg help helpext
829 829 helpext extension - no help text available
830 830
831 831 list of commands:
832 832
833 833 nohelp (no help text available)
834 834
835 835 use "hg -v help helpext" to show builtin aliases and global options
836 836
837 837
838 838 test deprecated option is hidden in command help
839 839 $ hg help debugoptDEP
840 840 hg debugoptDEP
841 841
842 842 (no help text available)
843 843
844 844 options:
845 845
846 846 (some details hidden, use --verbose to show complete help)
847 847
848 848 test deprecated option is shown with -v
849 849 $ hg help -v debugoptDEP | grep dopt
850 850 --dopt option is DEPRECATED
851 851
852 852 #if gettext
853 853 test deprecated option is hidden with translation with untranslated description
854 854 (use many globy for not failing on changed transaction)
855 855 $ LANGUAGE=sv hg help debugoptDEP
856 856 hg debugoptDEP
857 857
858 858 (*) (glob)
859 859
860 860 flaggor:
861 861
862 862 (some details hidden, use --verbose to show complete help)
863 863 #endif
864 864
865 865 Test commands that collide with topics (issue4240)
866 866
867 867 $ hg config -hq
868 868 hg config [-u] [NAME]...
869 869
870 870 show combined config settings from all hgrc files
871 871 $ hg showconfig -hq
872 872 hg config [-u] [NAME]...
873 873
874 874 show combined config settings from all hgrc files
875 875
876 876 Test a help topic
877 877
878 878 $ hg help revs
879 879 Specifying Single Revisions
880 880 """""""""""""""""""""""""""
881 881
882 882 Mercurial supports several ways to specify individual revisions.
883 883
884 884 A plain integer is treated as a revision number. Negative integers are
885 885 treated as sequential offsets from the tip, with -1 denoting the tip, -2
886 886 denoting the revision prior to the tip, and so forth.
887 887
888 888 A 40-digit hexadecimal string is treated as a unique revision identifier.
889 889
890 890 A hexadecimal string less than 40 characters long is treated as a unique
891 891 revision identifier and is referred to as a short-form identifier. A
892 892 short-form identifier is only valid if it is the prefix of exactly one
893 893 full-length identifier.
894 894
895 895 Any other string is treated as a bookmark, tag, or branch name. A bookmark
896 896 is a movable pointer to a revision. A tag is a permanent name associated
897 897 with a revision. A branch name denotes the tipmost open branch head of
898 898 that branch - or if they are all closed, the tipmost closed head of the
899 899 branch. Bookmark, tag, and branch names must not contain the ":"
900 900 character.
901 901
902 902 The reserved name "tip" always identifies the most recent revision.
903 903
904 904 The reserved name "null" indicates the null revision. This is the revision
905 905 of an empty repository, and the parent of revision 0.
906 906
907 907 The reserved name "." indicates the working directory parent. If no
908 908 working directory is checked out, it is equivalent to null. If an
909 909 uncommitted merge is in progress, "." is the revision of the first parent.
910 910
911 911 Test templating help
912 912
913 913 $ hg help templating | egrep '(desc|diffstat|firstline|nonempty) '
914 914 desc String. The text of the changeset description.
915 915 diffstat String. Statistics of changes with the following format:
916 916 firstline Any text. Returns the first line of text.
917 917 nonempty Any text. Returns '(none)' if the string is empty.
918 918
919 919 Test help hooks
920 920
921 921 $ cat > helphook1.py <<EOF
922 922 > from mercurial import help
923 923 >
924 924 > def rewrite(topic, doc):
925 925 > return doc + '\nhelphook1\n'
926 926 >
927 927 > def extsetup(ui):
928 928 > help.addtopichook('revsets', rewrite)
929 929 > EOF
930 930 $ cat > helphook2.py <<EOF
931 931 > from mercurial import help
932 932 >
933 933 > def rewrite(topic, doc):
934 934 > return doc + '\nhelphook2\n'
935 935 >
936 936 > def extsetup(ui):
937 937 > help.addtopichook('revsets', rewrite)
938 938 > EOF
939 939 $ echo '[extensions]' >> $HGRCPATH
940 940 $ echo "helphook1 = `pwd`/helphook1.py" >> $HGRCPATH
941 941 $ echo "helphook2 = `pwd`/helphook2.py" >> $HGRCPATH
942 942 $ hg help revsets | grep helphook
943 943 helphook1
944 944 helphook2
945 945
946 946 Test keyword search help
947 947
948 948 $ cat > prefixedname.py <<EOF
949 949 > '''matched against word "clone"
950 950 > '''
951 951 > EOF
952 952 $ echo '[extensions]' >> $HGRCPATH
953 953 $ echo "dot.dot.prefixedname = `pwd`/prefixedname.py" >> $HGRCPATH
954 954 $ hg help -k clone
955 955 Topics:
956 956
957 957 config Configuration Files
958 958 extensions Using Additional Features
959 959 glossary Glossary
960 960 phases Working with Phases
961 961 subrepos Subrepositories
962 962 urls URL Paths
963 963
964 964 Commands:
965 965
966 966 bookmarks create a new bookmark or list existing bookmarks
967 967 clone make a copy of an existing repository
968 968 paths show aliases for remote repositories
969 969 update update working directory (or switch revisions)
970 970
971 971 Extensions:
972 972
973 973 prefixedname matched against word "clone"
974 974 relink recreates hardlinks between repository clones
975 975
976 976 Extension Commands:
977 977
978 978 qclone clone main and patch repository at same time
979 979
980 980 Test unfound topic
981 981
982 982 $ hg help nonexistingtopicthatwillneverexisteverever
983 983 abort: no such help topic: nonexistingtopicthatwillneverexisteverever
984 984 (try "hg help --keyword nonexistingtopicthatwillneverexisteverever")
985 985 [255]
986 986
987 987 Test unfound keyword
988 988
989 989 $ hg help --keyword nonexistingwordthatwillneverexisteverever
990 990 abort: no matches
991 991 (try "hg help" for a list of topics)
992 992 [255]
993 993
994 994 Test omit indicating for help
995 995
996 996 $ cat > addverboseitems.py <<EOF
997 997 > '''extension to test omit indicating.
998 998 >
999 999 > This paragraph is never omitted (for extension)
1000 1000 >
1001 1001 > .. container:: verbose
1002 1002 >
1003 1003 > This paragraph is omitted,
1004 1004 > if :hg:\`help\` is invoked witout \`\`-v\`\` (for extension)
1005 1005 >
1006 1006 > This paragraph is never omitted, too (for extension)
1007 1007 > '''
1008 1008 >
1009 1009 > from mercurial import help, commands
1010 1010 > testtopic = """This paragraph is never omitted (for topic).
1011 1011 >
1012 1012 > .. container:: verbose
1013 1013 >
1014 1014 > This paragraph is omitted,
1015 1015 > if :hg:\`help\` is invoked witout \`\`-v\`\` (for topic)
1016 1016 >
1017 1017 > This paragraph is never omitted, too (for topic)
1018 1018 > """
1019 1019 > def extsetup(ui):
1020 1020 > help.helptable.append((["topic-containing-verbose"],
1021 1021 > "This is the topic to test omit indicating.",
1022 1022 > lambda : testtopic))
1023 1023 > EOF
1024 1024 $ echo '[extensions]' >> $HGRCPATH
1025 1025 $ echo "addverboseitems = `pwd`/addverboseitems.py" >> $HGRCPATH
1026 1026 $ hg help addverboseitems
1027 1027 addverboseitems extension - extension to test omit indicating.
1028 1028
1029 1029 This paragraph is never omitted (for extension)
1030 1030
1031 1031 This paragraph is never omitted, too (for extension)
1032 1032
1033 use "hg help -v addverboseitems" to show more complete help
1033 (some details hidden, use --verbose to show complete help)
1034 1034
1035 1035 no commands defined
1036 1036 $ hg help -v addverboseitems
1037 1037 addverboseitems extension - extension to test omit indicating.
1038 1038
1039 1039 This paragraph is never omitted (for extension)
1040 1040
1041 1041 This paragraph is omitted, if "hg help" is invoked witout "-v" (for extension)
1042 1042
1043 1043 This paragraph is never omitted, too (for extension)
1044 1044
1045 1045 no commands defined
1046 1046 $ hg help topic-containing-verbose
1047 1047 This is the topic to test omit indicating.
1048 1048 """"""""""""""""""""""""""""""""""""""""""
1049 1049
1050 1050 This paragraph is never omitted (for topic).
1051 1051
1052 1052 This paragraph is never omitted, too (for topic)
1053 1053
1054 use "hg help -v topic-containing-verbose" to show more complete help
1054 (some details hidden, use --verbose to show complete help)
1055 1055 $ hg help -v topic-containing-verbose
1056 1056 This is the topic to test omit indicating.
1057 1057 """"""""""""""""""""""""""""""""""""""""""
1058 1058
1059 1059 This paragraph is never omitted (for topic).
1060 1060
1061 1061 This paragraph is omitted, if "hg help" is invoked witout "-v" (for topic)
1062 1062
1063 1063 This paragraph is never omitted, too (for topic)
1064 1064
1065 1065 Test usage of section marks in help documents
1066 1066
1067 1067 $ cd "$TESTDIR"/../doc
1068 1068 $ python check-seclevel.py
1069 1069 $ cd $TESTTMP
1070 1070
1071 1071 #if serve
1072 1072
1073 1073 Test the help pages in hgweb.
1074 1074
1075 1075 Dish up an empty repo; serve it cold.
1076 1076
1077 1077 $ hg init "$TESTTMP/test"
1078 1078 $ hg serve -R "$TESTTMP/test" -n test -p $HGPORT -d --pid-file=hg.pid
1079 1079 $ cat hg.pid >> $DAEMON_PIDS
1080 1080
1081 1081 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT "help"
1082 1082 200 Script output follows
1083 1083
1084 1084 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1085 1085 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1086 1086 <head>
1087 1087 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1088 1088 <meta name="robots" content="index, nofollow" />
1089 1089 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1090 1090 <script type="text/javascript" src="/static/mercurial.js"></script>
1091 1091
1092 1092 <title>Help: Index</title>
1093 1093 </head>
1094 1094 <body>
1095 1095
1096 1096 <div class="container">
1097 1097 <div class="menu">
1098 1098 <div class="logo">
1099 1099 <a href="http://mercurial.selenic.com/">
1100 1100 <img src="/static/hglogo.png" alt="mercurial" /></a>
1101 1101 </div>
1102 1102 <ul>
1103 1103 <li><a href="/shortlog">log</a></li>
1104 1104 <li><a href="/graph">graph</a></li>
1105 1105 <li><a href="/tags">tags</a></li>
1106 1106 <li><a href="/bookmarks">bookmarks</a></li>
1107 1107 <li><a href="/branches">branches</a></li>
1108 1108 </ul>
1109 1109 <ul>
1110 1110 <li class="active">help</li>
1111 1111 </ul>
1112 1112 </div>
1113 1113
1114 1114 <div class="main">
1115 1115 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
1116 1116 <form class="search" action="/log">
1117 1117
1118 1118 <p><input name="rev" id="search1" type="text" size="30" /></p>
1119 1119 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
1120 1120 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
1121 1121 </form>
1122 1122 <table class="bigtable">
1123 1123 <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
1124 1124
1125 1125 <tr><td>
1126 1126 <a href="/help/config">
1127 1127 config
1128 1128 </a>
1129 1129 </td><td>
1130 1130 Configuration Files
1131 1131 </td></tr>
1132 1132 <tr><td>
1133 1133 <a href="/help/dates">
1134 1134 dates
1135 1135 </a>
1136 1136 </td><td>
1137 1137 Date Formats
1138 1138 </td></tr>
1139 1139 <tr><td>
1140 1140 <a href="/help/diffs">
1141 1141 diffs
1142 1142 </a>
1143 1143 </td><td>
1144 1144 Diff Formats
1145 1145 </td></tr>
1146 1146 <tr><td>
1147 1147 <a href="/help/environment">
1148 1148 environment
1149 1149 </a>
1150 1150 </td><td>
1151 1151 Environment Variables
1152 1152 </td></tr>
1153 1153 <tr><td>
1154 1154 <a href="/help/extensions">
1155 1155 extensions
1156 1156 </a>
1157 1157 </td><td>
1158 1158 Using Additional Features
1159 1159 </td></tr>
1160 1160 <tr><td>
1161 1161 <a href="/help/filesets">
1162 1162 filesets
1163 1163 </a>
1164 1164 </td><td>
1165 1165 Specifying File Sets
1166 1166 </td></tr>
1167 1167 <tr><td>
1168 1168 <a href="/help/glossary">
1169 1169 glossary
1170 1170 </a>
1171 1171 </td><td>
1172 1172 Glossary
1173 1173 </td></tr>
1174 1174 <tr><td>
1175 1175 <a href="/help/hgignore">
1176 1176 hgignore
1177 1177 </a>
1178 1178 </td><td>
1179 1179 Syntax for Mercurial Ignore Files
1180 1180 </td></tr>
1181 1181 <tr><td>
1182 1182 <a href="/help/hgweb">
1183 1183 hgweb
1184 1184 </a>
1185 1185 </td><td>
1186 1186 Configuring hgweb
1187 1187 </td></tr>
1188 1188 <tr><td>
1189 1189 <a href="/help/merge-tools">
1190 1190 merge-tools
1191 1191 </a>
1192 1192 </td><td>
1193 1193 Merge Tools
1194 1194 </td></tr>
1195 1195 <tr><td>
1196 1196 <a href="/help/multirevs">
1197 1197 multirevs
1198 1198 </a>
1199 1199 </td><td>
1200 1200 Specifying Multiple Revisions
1201 1201 </td></tr>
1202 1202 <tr><td>
1203 1203 <a href="/help/patterns">
1204 1204 patterns
1205 1205 </a>
1206 1206 </td><td>
1207 1207 File Name Patterns
1208 1208 </td></tr>
1209 1209 <tr><td>
1210 1210 <a href="/help/phases">
1211 1211 phases
1212 1212 </a>
1213 1213 </td><td>
1214 1214 Working with Phases
1215 1215 </td></tr>
1216 1216 <tr><td>
1217 1217 <a href="/help/revisions">
1218 1218 revisions
1219 1219 </a>
1220 1220 </td><td>
1221 1221 Specifying Single Revisions
1222 1222 </td></tr>
1223 1223 <tr><td>
1224 1224 <a href="/help/revsets">
1225 1225 revsets
1226 1226 </a>
1227 1227 </td><td>
1228 1228 Specifying Revision Sets
1229 1229 </td></tr>
1230 1230 <tr><td>
1231 1231 <a href="/help/subrepos">
1232 1232 subrepos
1233 1233 </a>
1234 1234 </td><td>
1235 1235 Subrepositories
1236 1236 </td></tr>
1237 1237 <tr><td>
1238 1238 <a href="/help/templating">
1239 1239 templating
1240 1240 </a>
1241 1241 </td><td>
1242 1242 Template Usage
1243 1243 </td></tr>
1244 1244 <tr><td>
1245 1245 <a href="/help/urls">
1246 1246 urls
1247 1247 </a>
1248 1248 </td><td>
1249 1249 URL Paths
1250 1250 </td></tr>
1251 1251 <tr><td>
1252 1252 <a href="/help/topic-containing-verbose">
1253 1253 topic-containing-verbose
1254 1254 </a>
1255 1255 </td><td>
1256 1256 This is the topic to test omit indicating.
1257 1257 </td></tr>
1258 1258
1259 1259 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
1260 1260
1261 1261 <tr><td>
1262 1262 <a href="/help/add">
1263 1263 add
1264 1264 </a>
1265 1265 </td><td>
1266 1266 add the specified files on the next commit
1267 1267 </td></tr>
1268 1268 <tr><td>
1269 1269 <a href="/help/annotate">
1270 1270 annotate
1271 1271 </a>
1272 1272 </td><td>
1273 1273 show changeset information by line for each file
1274 1274 </td></tr>
1275 1275 <tr><td>
1276 1276 <a href="/help/clone">
1277 1277 clone
1278 1278 </a>
1279 1279 </td><td>
1280 1280 make a copy of an existing repository
1281 1281 </td></tr>
1282 1282 <tr><td>
1283 1283 <a href="/help/commit">
1284 1284 commit
1285 1285 </a>
1286 1286 </td><td>
1287 1287 commit the specified files or all outstanding changes
1288 1288 </td></tr>
1289 1289 <tr><td>
1290 1290 <a href="/help/diff">
1291 1291 diff
1292 1292 </a>
1293 1293 </td><td>
1294 1294 diff repository (or selected files)
1295 1295 </td></tr>
1296 1296 <tr><td>
1297 1297 <a href="/help/export">
1298 1298 export
1299 1299 </a>
1300 1300 </td><td>
1301 1301 dump the header and diffs for one or more changesets
1302 1302 </td></tr>
1303 1303 <tr><td>
1304 1304 <a href="/help/forget">
1305 1305 forget
1306 1306 </a>
1307 1307 </td><td>
1308 1308 forget the specified files on the next commit
1309 1309 </td></tr>
1310 1310 <tr><td>
1311 1311 <a href="/help/init">
1312 1312 init
1313 1313 </a>
1314 1314 </td><td>
1315 1315 create a new repository in the given directory
1316 1316 </td></tr>
1317 1317 <tr><td>
1318 1318 <a href="/help/log">
1319 1319 log
1320 1320 </a>
1321 1321 </td><td>
1322 1322 show revision history of entire repository or files
1323 1323 </td></tr>
1324 1324 <tr><td>
1325 1325 <a href="/help/merge">
1326 1326 merge
1327 1327 </a>
1328 1328 </td><td>
1329 1329 merge working directory with another revision
1330 1330 </td></tr>
1331 1331 <tr><td>
1332 1332 <a href="/help/pull">
1333 1333 pull
1334 1334 </a>
1335 1335 </td><td>
1336 1336 pull changes from the specified source
1337 1337 </td></tr>
1338 1338 <tr><td>
1339 1339 <a href="/help/push">
1340 1340 push
1341 1341 </a>
1342 1342 </td><td>
1343 1343 push changes to the specified destination
1344 1344 </td></tr>
1345 1345 <tr><td>
1346 1346 <a href="/help/remove">
1347 1347 remove
1348 1348 </a>
1349 1349 </td><td>
1350 1350 remove the specified files on the next commit
1351 1351 </td></tr>
1352 1352 <tr><td>
1353 1353 <a href="/help/serve">
1354 1354 serve
1355 1355 </a>
1356 1356 </td><td>
1357 1357 start stand-alone webserver
1358 1358 </td></tr>
1359 1359 <tr><td>
1360 1360 <a href="/help/status">
1361 1361 status
1362 1362 </a>
1363 1363 </td><td>
1364 1364 show changed files in the working directory
1365 1365 </td></tr>
1366 1366 <tr><td>
1367 1367 <a href="/help/summary">
1368 1368 summary
1369 1369 </a>
1370 1370 </td><td>
1371 1371 summarize working directory state
1372 1372 </td></tr>
1373 1373 <tr><td>
1374 1374 <a href="/help/update">
1375 1375 update
1376 1376 </a>
1377 1377 </td><td>
1378 1378 update working directory (or switch revisions)
1379 1379 </td></tr>
1380 1380
1381 1381 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
1382 1382
1383 1383 <tr><td>
1384 1384 <a href="/help/addremove">
1385 1385 addremove
1386 1386 </a>
1387 1387 </td><td>
1388 1388 add all new files, delete all missing files
1389 1389 </td></tr>
1390 1390 <tr><td>
1391 1391 <a href="/help/archive">
1392 1392 archive
1393 1393 </a>
1394 1394 </td><td>
1395 1395 create an unversioned archive of a repository revision
1396 1396 </td></tr>
1397 1397 <tr><td>
1398 1398 <a href="/help/backout">
1399 1399 backout
1400 1400 </a>
1401 1401 </td><td>
1402 1402 reverse effect of earlier changeset
1403 1403 </td></tr>
1404 1404 <tr><td>
1405 1405 <a href="/help/bisect">
1406 1406 bisect
1407 1407 </a>
1408 1408 </td><td>
1409 1409 subdivision search of changesets
1410 1410 </td></tr>
1411 1411 <tr><td>
1412 1412 <a href="/help/bookmarks">
1413 1413 bookmarks
1414 1414 </a>
1415 1415 </td><td>
1416 1416 create a new bookmark or list existing bookmarks
1417 1417 </td></tr>
1418 1418 <tr><td>
1419 1419 <a href="/help/branch">
1420 1420 branch
1421 1421 </a>
1422 1422 </td><td>
1423 1423 set or show the current branch name
1424 1424 </td></tr>
1425 1425 <tr><td>
1426 1426 <a href="/help/branches">
1427 1427 branches
1428 1428 </a>
1429 1429 </td><td>
1430 1430 list repository named branches
1431 1431 </td></tr>
1432 1432 <tr><td>
1433 1433 <a href="/help/bundle">
1434 1434 bundle
1435 1435 </a>
1436 1436 </td><td>
1437 1437 create a changegroup file
1438 1438 </td></tr>
1439 1439 <tr><td>
1440 1440 <a href="/help/cat">
1441 1441 cat
1442 1442 </a>
1443 1443 </td><td>
1444 1444 output the current or given revision of files
1445 1445 </td></tr>
1446 1446 <tr><td>
1447 1447 <a href="/help/config">
1448 1448 config
1449 1449 </a>
1450 1450 </td><td>
1451 1451 show combined config settings from all hgrc files
1452 1452 </td></tr>
1453 1453 <tr><td>
1454 1454 <a href="/help/copy">
1455 1455 copy
1456 1456 </a>
1457 1457 </td><td>
1458 1458 mark files as copied for the next commit
1459 1459 </td></tr>
1460 1460 <tr><td>
1461 1461 <a href="/help/graft">
1462 1462 graft
1463 1463 </a>
1464 1464 </td><td>
1465 1465 copy changes from other branches onto the current branch
1466 1466 </td></tr>
1467 1467 <tr><td>
1468 1468 <a href="/help/grep">
1469 1469 grep
1470 1470 </a>
1471 1471 </td><td>
1472 1472 search for a pattern in specified files and revisions
1473 1473 </td></tr>
1474 1474 <tr><td>
1475 1475 <a href="/help/heads">
1476 1476 heads
1477 1477 </a>
1478 1478 </td><td>
1479 1479 show branch heads
1480 1480 </td></tr>
1481 1481 <tr><td>
1482 1482 <a href="/help/help">
1483 1483 help
1484 1484 </a>
1485 1485 </td><td>
1486 1486 show help for a given topic or a help overview
1487 1487 </td></tr>
1488 1488 <tr><td>
1489 1489 <a href="/help/identify">
1490 1490 identify
1491 1491 </a>
1492 1492 </td><td>
1493 1493 identify the working copy or specified revision
1494 1494 </td></tr>
1495 1495 <tr><td>
1496 1496 <a href="/help/import">
1497 1497 import
1498 1498 </a>
1499 1499 </td><td>
1500 1500 import an ordered set of patches
1501 1501 </td></tr>
1502 1502 <tr><td>
1503 1503 <a href="/help/incoming">
1504 1504 incoming
1505 1505 </a>
1506 1506 </td><td>
1507 1507 show new changesets found in source
1508 1508 </td></tr>
1509 1509 <tr><td>
1510 1510 <a href="/help/locate">
1511 1511 locate
1512 1512 </a>
1513 1513 </td><td>
1514 1514 locate files matching specific patterns
1515 1515 </td></tr>
1516 1516 <tr><td>
1517 1517 <a href="/help/manifest">
1518 1518 manifest
1519 1519 </a>
1520 1520 </td><td>
1521 1521 output the current or given revision of the project manifest
1522 1522 </td></tr>
1523 1523 <tr><td>
1524 1524 <a href="/help/nohelp">
1525 1525 nohelp
1526 1526 </a>
1527 1527 </td><td>
1528 1528 (no help text available)
1529 1529 </td></tr>
1530 1530 <tr><td>
1531 1531 <a href="/help/outgoing">
1532 1532 outgoing
1533 1533 </a>
1534 1534 </td><td>
1535 1535 show changesets not found in the destination
1536 1536 </td></tr>
1537 1537 <tr><td>
1538 1538 <a href="/help/parents">
1539 1539 parents
1540 1540 </a>
1541 1541 </td><td>
1542 1542 show the parents of the working directory or revision
1543 1543 </td></tr>
1544 1544 <tr><td>
1545 1545 <a href="/help/paths">
1546 1546 paths
1547 1547 </a>
1548 1548 </td><td>
1549 1549 show aliases for remote repositories
1550 1550 </td></tr>
1551 1551 <tr><td>
1552 1552 <a href="/help/phase">
1553 1553 phase
1554 1554 </a>
1555 1555 </td><td>
1556 1556 set or show the current phase name
1557 1557 </td></tr>
1558 1558 <tr><td>
1559 1559 <a href="/help/recover">
1560 1560 recover
1561 1561 </a>
1562 1562 </td><td>
1563 1563 roll back an interrupted transaction
1564 1564 </td></tr>
1565 1565 <tr><td>
1566 1566 <a href="/help/rename">
1567 1567 rename
1568 1568 </a>
1569 1569 </td><td>
1570 1570 rename files; equivalent of copy + remove
1571 1571 </td></tr>
1572 1572 <tr><td>
1573 1573 <a href="/help/resolve">
1574 1574 resolve
1575 1575 </a>
1576 1576 </td><td>
1577 1577 redo merges or set/view the merge status of files
1578 1578 </td></tr>
1579 1579 <tr><td>
1580 1580 <a href="/help/revert">
1581 1581 revert
1582 1582 </a>
1583 1583 </td><td>
1584 1584 restore files to their checkout state
1585 1585 </td></tr>
1586 1586 <tr><td>
1587 1587 <a href="/help/root">
1588 1588 root
1589 1589 </a>
1590 1590 </td><td>
1591 1591 print the root (top) of the current working directory
1592 1592 </td></tr>
1593 1593 <tr><td>
1594 1594 <a href="/help/tag">
1595 1595 tag
1596 1596 </a>
1597 1597 </td><td>
1598 1598 add one or more tags for the current or given revision
1599 1599 </td></tr>
1600 1600 <tr><td>
1601 1601 <a href="/help/tags">
1602 1602 tags
1603 1603 </a>
1604 1604 </td><td>
1605 1605 list repository tags
1606 1606 </td></tr>
1607 1607 <tr><td>
1608 1608 <a href="/help/unbundle">
1609 1609 unbundle
1610 1610 </a>
1611 1611 </td><td>
1612 1612 apply one or more changegroup files
1613 1613 </td></tr>
1614 1614 <tr><td>
1615 1615 <a href="/help/verify">
1616 1616 verify
1617 1617 </a>
1618 1618 </td><td>
1619 1619 verify the integrity of the repository
1620 1620 </td></tr>
1621 1621 <tr><td>
1622 1622 <a href="/help/version">
1623 1623 version
1624 1624 </a>
1625 1625 </td><td>
1626 1626 output version and copyright information
1627 1627 </td></tr>
1628 1628 </table>
1629 1629 </div>
1630 1630 </div>
1631 1631
1632 1632 <script type="text/javascript">process_dates()</script>
1633 1633
1634 1634
1635 1635 </body>
1636 1636 </html>
1637 1637
1638 1638
1639 1639 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT "help/add"
1640 1640 200 Script output follows
1641 1641
1642 1642 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1643 1643 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1644 1644 <head>
1645 1645 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1646 1646 <meta name="robots" content="index, nofollow" />
1647 1647 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1648 1648 <script type="text/javascript" src="/static/mercurial.js"></script>
1649 1649
1650 1650 <title>Help: add</title>
1651 1651 </head>
1652 1652 <body>
1653 1653
1654 1654 <div class="container">
1655 1655 <div class="menu">
1656 1656 <div class="logo">
1657 1657 <a href="http://mercurial.selenic.com/">
1658 1658 <img src="/static/hglogo.png" alt="mercurial" /></a>
1659 1659 </div>
1660 1660 <ul>
1661 1661 <li><a href="/shortlog">log</a></li>
1662 1662 <li><a href="/graph">graph</a></li>
1663 1663 <li><a href="/tags">tags</a></li>
1664 1664 <li><a href="/bookmarks">bookmarks</a></li>
1665 1665 <li><a href="/branches">branches</a></li>
1666 1666 </ul>
1667 1667 <ul>
1668 1668 <li class="active"><a href="/help">help</a></li>
1669 1669 </ul>
1670 1670 </div>
1671 1671
1672 1672 <div class="main">
1673 1673 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
1674 1674 <h3>Help: add</h3>
1675 1675
1676 1676 <form class="search" action="/log">
1677 1677
1678 1678 <p><input name="rev" id="search1" type="text" size="30" /></p>
1679 1679 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
1680 1680 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
1681 1681 </form>
1682 1682 <div id="doc">
1683 1683 <p>
1684 1684 hg add [OPTION]... [FILE]...
1685 1685 </p>
1686 1686 <p>
1687 1687 add the specified files on the next commit
1688 1688 </p>
1689 1689 <p>
1690 1690 Schedule files to be version controlled and added to the
1691 1691 repository.
1692 1692 </p>
1693 1693 <p>
1694 1694 The files will be added to the repository at the next commit. To
1695 1695 undo an add before that, see &quot;hg forget&quot;.
1696 1696 </p>
1697 1697 <p>
1698 1698 If no names are given, add all files to the repository.
1699 1699 </p>
1700 1700 <p>
1701 1701 An example showing how new (unknown) files are added
1702 1702 automatically by &quot;hg add&quot;:
1703 1703 </p>
1704 1704 <pre>
1705 1705 \$ ls (re)
1706 1706 foo.c
1707 1707 \$ hg status (re)
1708 1708 ? foo.c
1709 1709 \$ hg add (re)
1710 1710 adding foo.c
1711 1711 \$ hg status (re)
1712 1712 A foo.c
1713 1713 </pre>
1714 1714 <p>
1715 1715 Returns 0 if all files are successfully added.
1716 1716 </p>
1717 1717 <p>
1718 1718 options:
1719 1719 </p>
1720 1720 <table>
1721 1721 <tr><td>-I</td>
1722 1722 <td>--include PATTERN [+]</td>
1723 1723 <td>include names matching the given patterns</td></tr>
1724 1724 <tr><td>-X</td>
1725 1725 <td>--exclude PATTERN [+]</td>
1726 1726 <td>exclude names matching the given patterns</td></tr>
1727 1727 <tr><td>-S</td>
1728 1728 <td>--subrepos</td>
1729 1729 <td>recurse into subrepositories</td></tr>
1730 1730 <tr><td>-n</td>
1731 1731 <td>--dry-run</td>
1732 1732 <td>do not perform actions, just print output</td></tr>
1733 1733 </table>
1734 1734 <p>
1735 1735 [+] marked option can be specified multiple times
1736 1736 </p>
1737 1737 <p>
1738 1738 global options:
1739 1739 </p>
1740 1740 <table>
1741 1741 <tr><td>-R</td>
1742 1742 <td>--repository REPO</td>
1743 1743 <td>repository root directory or name of overlay bundle file</td></tr>
1744 1744 <tr><td></td>
1745 1745 <td>--cwd DIR</td>
1746 1746 <td>change working directory</td></tr>
1747 1747 <tr><td>-y</td>
1748 1748 <td>--noninteractive</td>
1749 1749 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
1750 1750 <tr><td>-q</td>
1751 1751 <td>--quiet</td>
1752 1752 <td>suppress output</td></tr>
1753 1753 <tr><td>-v</td>
1754 1754 <td>--verbose</td>
1755 1755 <td>enable additional output</td></tr>
1756 1756 <tr><td></td>
1757 1757 <td>--config CONFIG [+]</td>
1758 1758 <td>set/override config option (use 'section.name=value')</td></tr>
1759 1759 <tr><td></td>
1760 1760 <td>--debug</td>
1761 1761 <td>enable debugging output</td></tr>
1762 1762 <tr><td></td>
1763 1763 <td>--debugger</td>
1764 1764 <td>start debugger</td></tr>
1765 1765 <tr><td></td>
1766 1766 <td>--encoding ENCODE</td>
1767 1767 <td>set the charset encoding (default: ascii)</td></tr>
1768 1768 <tr><td></td>
1769 1769 <td>--encodingmode MODE</td>
1770 1770 <td>set the charset encoding mode (default: strict)</td></tr>
1771 1771 <tr><td></td>
1772 1772 <td>--traceback</td>
1773 1773 <td>always print a traceback on exception</td></tr>
1774 1774 <tr><td></td>
1775 1775 <td>--time</td>
1776 1776 <td>time how long the command takes</td></tr>
1777 1777 <tr><td></td>
1778 1778 <td>--profile</td>
1779 1779 <td>print command execution profile</td></tr>
1780 1780 <tr><td></td>
1781 1781 <td>--version</td>
1782 1782 <td>output version information and exit</td></tr>
1783 1783 <tr><td>-h</td>
1784 1784 <td>--help</td>
1785 1785 <td>display help and exit</td></tr>
1786 1786 <tr><td></td>
1787 1787 <td>--hidden</td>
1788 1788 <td>consider hidden changesets</td></tr>
1789 1789 </table>
1790 1790 <p>
1791 1791 [+] marked option can be specified multiple times
1792 1792 </p>
1793 1793
1794 1794 </div>
1795 1795 </div>
1796 1796 </div>
1797 1797
1798 1798 <script type="text/javascript">process_dates()</script>
1799 1799
1800 1800
1801 1801 </body>
1802 1802 </html>
1803 1803
1804 1804
1805 1805 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT "help/remove"
1806 1806 200 Script output follows
1807 1807
1808 1808 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1809 1809 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1810 1810 <head>
1811 1811 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1812 1812 <meta name="robots" content="index, nofollow" />
1813 1813 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1814 1814 <script type="text/javascript" src="/static/mercurial.js"></script>
1815 1815
1816 1816 <title>Help: remove</title>
1817 1817 </head>
1818 1818 <body>
1819 1819
1820 1820 <div class="container">
1821 1821 <div class="menu">
1822 1822 <div class="logo">
1823 1823 <a href="http://mercurial.selenic.com/">
1824 1824 <img src="/static/hglogo.png" alt="mercurial" /></a>
1825 1825 </div>
1826 1826 <ul>
1827 1827 <li><a href="/shortlog">log</a></li>
1828 1828 <li><a href="/graph">graph</a></li>
1829 1829 <li><a href="/tags">tags</a></li>
1830 1830 <li><a href="/bookmarks">bookmarks</a></li>
1831 1831 <li><a href="/branches">branches</a></li>
1832 1832 </ul>
1833 1833 <ul>
1834 1834 <li class="active"><a href="/help">help</a></li>
1835 1835 </ul>
1836 1836 </div>
1837 1837
1838 1838 <div class="main">
1839 1839 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
1840 1840 <h3>Help: remove</h3>
1841 1841
1842 1842 <form class="search" action="/log">
1843 1843
1844 1844 <p><input name="rev" id="search1" type="text" size="30" /></p>
1845 1845 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
1846 1846 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
1847 1847 </form>
1848 1848 <div id="doc">
1849 1849 <p>
1850 1850 hg remove [OPTION]... FILE...
1851 1851 </p>
1852 1852 <p>
1853 1853 aliases: rm
1854 1854 </p>
1855 1855 <p>
1856 1856 remove the specified files on the next commit
1857 1857 </p>
1858 1858 <p>
1859 1859 Schedule the indicated files for removal from the current branch.
1860 1860 </p>
1861 1861 <p>
1862 1862 This command schedules the files to be removed at the next commit.
1863 1863 To undo a remove before that, see &quot;hg revert&quot;. To undo added
1864 1864 files, see &quot;hg forget&quot;.
1865 1865 </p>
1866 1866 <p>
1867 1867 -A/--after can be used to remove only files that have already
1868 1868 been deleted, -f/--force can be used to force deletion, and -Af
1869 1869 can be used to remove files from the next revision without
1870 1870 deleting them from the working directory.
1871 1871 </p>
1872 1872 <p>
1873 1873 The following table details the behavior of remove for different
1874 1874 file states (columns) and option combinations (rows). The file
1875 1875 states are Added [A], Clean [C], Modified [M] and Missing [!]
1876 1876 (as reported by &quot;hg status&quot;). The actions are Warn, Remove
1877 1877 (from branch) and Delete (from disk):
1878 1878 </p>
1879 1879 <table>
1880 1880 <tr><td>opt/state</td>
1881 1881 <td>A</td>
1882 1882 <td>C</td>
1883 1883 <td>M</td>
1884 1884 <td>!</td></tr>
1885 1885 <tr><td>none</td>
1886 1886 <td>W</td>
1887 1887 <td>RD</td>
1888 1888 <td>W</td>
1889 1889 <td>R</td></tr>
1890 1890 <tr><td>-f</td>
1891 1891 <td>R</td>
1892 1892 <td>RD</td>
1893 1893 <td>RD</td>
1894 1894 <td>R</td></tr>
1895 1895 <tr><td>-A</td>
1896 1896 <td>W</td>
1897 1897 <td>W</td>
1898 1898 <td>W</td>
1899 1899 <td>R</td></tr>
1900 1900 <tr><td>-Af</td>
1901 1901 <td>R</td>
1902 1902 <td>R</td>
1903 1903 <td>R</td>
1904 1904 <td>R</td></tr>
1905 1905 </table>
1906 1906 <p>
1907 1907 Note that remove never deletes files in Added [A] state from the
1908 1908 working directory, not even if option --force is specified.
1909 1909 </p>
1910 1910 <p>
1911 1911 Returns 0 on success, 1 if any warnings encountered.
1912 1912 </p>
1913 1913 <p>
1914 1914 options:
1915 1915 </p>
1916 1916 <table>
1917 1917 <tr><td>-A</td>
1918 1918 <td>--after</td>
1919 1919 <td>record delete for missing files</td></tr>
1920 1920 <tr><td>-f</td>
1921 1921 <td>--force</td>
1922 1922 <td>remove (and delete) file even if added or modified</td></tr>
1923 1923 <tr><td>-I</td>
1924 1924 <td>--include PATTERN [+]</td>
1925 1925 <td>include names matching the given patterns</td></tr>
1926 1926 <tr><td>-X</td>
1927 1927 <td>--exclude PATTERN [+]</td>
1928 1928 <td>exclude names matching the given patterns</td></tr>
1929 1929 </table>
1930 1930 <p>
1931 1931 [+] marked option can be specified multiple times
1932 1932 </p>
1933 1933 <p>
1934 1934 global options:
1935 1935 </p>
1936 1936 <table>
1937 1937 <tr><td>-R</td>
1938 1938 <td>--repository REPO</td>
1939 1939 <td>repository root directory or name of overlay bundle file</td></tr>
1940 1940 <tr><td></td>
1941 1941 <td>--cwd DIR</td>
1942 1942 <td>change working directory</td></tr>
1943 1943 <tr><td>-y</td>
1944 1944 <td>--noninteractive</td>
1945 1945 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
1946 1946 <tr><td>-q</td>
1947 1947 <td>--quiet</td>
1948 1948 <td>suppress output</td></tr>
1949 1949 <tr><td>-v</td>
1950 1950 <td>--verbose</td>
1951 1951 <td>enable additional output</td></tr>
1952 1952 <tr><td></td>
1953 1953 <td>--config CONFIG [+]</td>
1954 1954 <td>set/override config option (use 'section.name=value')</td></tr>
1955 1955 <tr><td></td>
1956 1956 <td>--debug</td>
1957 1957 <td>enable debugging output</td></tr>
1958 1958 <tr><td></td>
1959 1959 <td>--debugger</td>
1960 1960 <td>start debugger</td></tr>
1961 1961 <tr><td></td>
1962 1962 <td>--encoding ENCODE</td>
1963 1963 <td>set the charset encoding (default: ascii)</td></tr>
1964 1964 <tr><td></td>
1965 1965 <td>--encodingmode MODE</td>
1966 1966 <td>set the charset encoding mode (default: strict)</td></tr>
1967 1967 <tr><td></td>
1968 1968 <td>--traceback</td>
1969 1969 <td>always print a traceback on exception</td></tr>
1970 1970 <tr><td></td>
1971 1971 <td>--time</td>
1972 1972 <td>time how long the command takes</td></tr>
1973 1973 <tr><td></td>
1974 1974 <td>--profile</td>
1975 1975 <td>print command execution profile</td></tr>
1976 1976 <tr><td></td>
1977 1977 <td>--version</td>
1978 1978 <td>output version information and exit</td></tr>
1979 1979 <tr><td>-h</td>
1980 1980 <td>--help</td>
1981 1981 <td>display help and exit</td></tr>
1982 1982 <tr><td></td>
1983 1983 <td>--hidden</td>
1984 1984 <td>consider hidden changesets</td></tr>
1985 1985 </table>
1986 1986 <p>
1987 1987 [+] marked option can be specified multiple times
1988 1988 </p>
1989 1989
1990 1990 </div>
1991 1991 </div>
1992 1992 </div>
1993 1993
1994 1994 <script type="text/javascript">process_dates()</script>
1995 1995
1996 1996
1997 1997 </body>
1998 1998 </html>
1999 1999
2000 2000
2001 2001 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT "help/revisions"
2002 2002 200 Script output follows
2003 2003
2004 2004 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2005 2005 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2006 2006 <head>
2007 2007 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2008 2008 <meta name="robots" content="index, nofollow" />
2009 2009 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2010 2010 <script type="text/javascript" src="/static/mercurial.js"></script>
2011 2011
2012 2012 <title>Help: revisions</title>
2013 2013 </head>
2014 2014 <body>
2015 2015
2016 2016 <div class="container">
2017 2017 <div class="menu">
2018 2018 <div class="logo">
2019 2019 <a href="http://mercurial.selenic.com/">
2020 2020 <img src="/static/hglogo.png" alt="mercurial" /></a>
2021 2021 </div>
2022 2022 <ul>
2023 2023 <li><a href="/shortlog">log</a></li>
2024 2024 <li><a href="/graph">graph</a></li>
2025 2025 <li><a href="/tags">tags</a></li>
2026 2026 <li><a href="/bookmarks">bookmarks</a></li>
2027 2027 <li><a href="/branches">branches</a></li>
2028 2028 </ul>
2029 2029 <ul>
2030 2030 <li class="active"><a href="/help">help</a></li>
2031 2031 </ul>
2032 2032 </div>
2033 2033
2034 2034 <div class="main">
2035 2035 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2036 2036 <h3>Help: revisions</h3>
2037 2037
2038 2038 <form class="search" action="/log">
2039 2039
2040 2040 <p><input name="rev" id="search1" type="text" size="30" /></p>
2041 2041 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2042 2042 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2043 2043 </form>
2044 2044 <div id="doc">
2045 2045 <h1>Specifying Single Revisions</h1>
2046 2046 <p>
2047 2047 Mercurial supports several ways to specify individual revisions.
2048 2048 </p>
2049 2049 <p>
2050 2050 A plain integer is treated as a revision number. Negative integers are
2051 2051 treated as sequential offsets from the tip, with -1 denoting the tip,
2052 2052 -2 denoting the revision prior to the tip, and so forth.
2053 2053 </p>
2054 2054 <p>
2055 2055 A 40-digit hexadecimal string is treated as a unique revision
2056 2056 identifier.
2057 2057 </p>
2058 2058 <p>
2059 2059 A hexadecimal string less than 40 characters long is treated as a
2060 2060 unique revision identifier and is referred to as a short-form
2061 2061 identifier. A short-form identifier is only valid if it is the prefix
2062 2062 of exactly one full-length identifier.
2063 2063 </p>
2064 2064 <p>
2065 2065 Any other string is treated as a bookmark, tag, or branch name. A
2066 2066 bookmark is a movable pointer to a revision. A tag is a permanent name
2067 2067 associated with a revision. A branch name denotes the tipmost open branch head
2068 2068 of that branch - or if they are all closed, the tipmost closed head of the
2069 2069 branch. Bookmark, tag, and branch names must not contain the &quot;:&quot; character.
2070 2070 </p>
2071 2071 <p>
2072 2072 The reserved name &quot;tip&quot; always identifies the most recent revision.
2073 2073 </p>
2074 2074 <p>
2075 2075 The reserved name &quot;null&quot; indicates the null revision. This is the
2076 2076 revision of an empty repository, and the parent of revision 0.
2077 2077 </p>
2078 2078 <p>
2079 2079 The reserved name &quot;.&quot; indicates the working directory parent. If no
2080 2080 working directory is checked out, it is equivalent to null. If an
2081 2081 uncommitted merge is in progress, &quot;.&quot; is the revision of the first
2082 2082 parent.
2083 2083 </p>
2084 2084
2085 2085 </div>
2086 2086 </div>
2087 2087 </div>
2088 2088
2089 2089 <script type="text/javascript">process_dates()</script>
2090 2090
2091 2091
2092 2092 </body>
2093 2093 </html>
2094 2094
2095 2095
2096 2096 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
2097 2097
2098 2098 #endif
General Comments 0
You need to be logged in to leave comments. Login now