##// END OF EJS Templates
help: always show command help with -h (issue4240)...
Matt Mackall -
r21961:af15de67 stable
parent child Browse files
Show More
@@ -1,911 +1,911 b''
1 1 # dispatch.py - command dispatching for mercurial
2 2 #
3 3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8 from i18n import _
9 9 import os, sys, atexit, signal, pdb, socket, errno, shlex, time, traceback, re
10 10 import util, commands, hg, fancyopts, extensions, hook, error
11 11 import cmdutil, encoding
12 12 import ui as uimod
13 13
14 14 class request(object):
15 15 def __init__(self, args, ui=None, repo=None, fin=None, fout=None,
16 16 ferr=None):
17 17 self.args = args
18 18 self.ui = ui
19 19 self.repo = repo
20 20
21 21 # input/output/error streams
22 22 self.fin = fin
23 23 self.fout = fout
24 24 self.ferr = ferr
25 25
26 26 def run():
27 27 "run the command in sys.argv"
28 28 sys.exit((dispatch(request(sys.argv[1:])) or 0) & 255)
29 29
30 30 def dispatch(req):
31 31 "run the command specified in req.args"
32 32 if req.ferr:
33 33 ferr = req.ferr
34 34 elif req.ui:
35 35 ferr = req.ui.ferr
36 36 else:
37 37 ferr = sys.stderr
38 38
39 39 try:
40 40 if not req.ui:
41 41 req.ui = uimod.ui()
42 42 if '--traceback' in req.args:
43 43 req.ui.setconfig('ui', 'traceback', 'on', '--traceback')
44 44
45 45 # set ui streams from the request
46 46 if req.fin:
47 47 req.ui.fin = req.fin
48 48 if req.fout:
49 49 req.ui.fout = req.fout
50 50 if req.ferr:
51 51 req.ui.ferr = req.ferr
52 52 except util.Abort, inst:
53 53 ferr.write(_("abort: %s\n") % inst)
54 54 if inst.hint:
55 55 ferr.write(_("(%s)\n") % inst.hint)
56 56 return -1
57 57 except error.ParseError, inst:
58 58 if len(inst.args) > 1:
59 59 ferr.write(_("hg: parse error at %s: %s\n") %
60 60 (inst.args[1], inst.args[0]))
61 61 else:
62 62 ferr.write(_("hg: parse error: %s\n") % inst.args[0])
63 63 return -1
64 64
65 65 msg = ' '.join(' ' in a and repr(a) or a for a in req.args)
66 66 starttime = time.time()
67 67 ret = None
68 68 try:
69 69 ret = _runcatch(req)
70 70 return ret
71 71 finally:
72 72 duration = time.time() - starttime
73 73 req.ui.log("commandfinish", "%s exited %s after %0.2f seconds\n",
74 74 msg, ret or 0, duration)
75 75
76 76 def _runcatch(req):
77 77 def catchterm(*args):
78 78 raise error.SignalInterrupt
79 79
80 80 ui = req.ui
81 81 try:
82 82 for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
83 83 num = getattr(signal, name, None)
84 84 if num:
85 85 signal.signal(num, catchterm)
86 86 except ValueError:
87 87 pass # happens if called in a thread
88 88
89 89 try:
90 90 try:
91 91 debugger = 'pdb'
92 92 debugtrace = {
93 93 'pdb' : pdb.set_trace
94 94 }
95 95 debugmortem = {
96 96 'pdb' : pdb.post_mortem
97 97 }
98 98
99 99 # read --config before doing anything else
100 100 # (e.g. to change trust settings for reading .hg/hgrc)
101 101 cfgs = _parseconfig(req.ui, _earlygetopt(['--config'], req.args))
102 102
103 103 if req.repo:
104 104 # copy configs that were passed on the cmdline (--config) to
105 105 # the repo ui
106 106 for sec, name, val in cfgs:
107 107 req.repo.ui.setconfig(sec, name, val, source='--config')
108 108
109 109 # if we are in HGPLAIN mode, then disable custom debugging
110 110 debugger = ui.config("ui", "debugger")
111 111 debugmod = pdb
112 112 if not debugger or ui.plain():
113 113 debugger = 'pdb'
114 114 elif '--debugger' in req.args:
115 115 # This import can be slow for fancy debuggers, so only
116 116 # do it when absolutely necessary, i.e. when actual
117 117 # debugging has been requested
118 118 try:
119 119 debugmod = __import__(debugger)
120 120 except ImportError:
121 121 pass # Leave debugmod = pdb
122 122
123 123 debugtrace[debugger] = debugmod.set_trace
124 124 debugmortem[debugger] = debugmod.post_mortem
125 125
126 126 # enter the debugger before command execution
127 127 if '--debugger' in req.args:
128 128 ui.warn(_("entering debugger - "
129 129 "type c to continue starting hg or h for help\n"))
130 130
131 131 if (debugger != 'pdb' and
132 132 debugtrace[debugger] == debugtrace['pdb']):
133 133 ui.warn(_("%s debugger specified "
134 134 "but its module was not found\n") % debugger)
135 135
136 136 debugtrace[debugger]()
137 137 try:
138 138 return _dispatch(req)
139 139 finally:
140 140 ui.flush()
141 141 except: # re-raises
142 142 # enter the debugger when we hit an exception
143 143 if '--debugger' in req.args:
144 144 traceback.print_exc()
145 145 debugmortem[debugger](sys.exc_info()[2])
146 146 ui.traceback()
147 147 raise
148 148
149 149 # Global exception handling, alphabetically
150 150 # Mercurial-specific first, followed by built-in and library exceptions
151 151 except error.AmbiguousCommand, inst:
152 152 ui.warn(_("hg: command '%s' is ambiguous:\n %s\n") %
153 153 (inst.args[0], " ".join(inst.args[1])))
154 154 except error.ParseError, inst:
155 155 if len(inst.args) > 1:
156 156 ui.warn(_("hg: parse error at %s: %s\n") %
157 157 (inst.args[1], inst.args[0]))
158 158 else:
159 159 ui.warn(_("hg: parse error: %s\n") % inst.args[0])
160 160 return -1
161 161 except error.LockHeld, inst:
162 162 if inst.errno == errno.ETIMEDOUT:
163 163 reason = _('timed out waiting for lock held by %s') % inst.locker
164 164 else:
165 165 reason = _('lock held by %s') % inst.locker
166 166 ui.warn(_("abort: %s: %s\n") % (inst.desc or inst.filename, reason))
167 167 except error.LockUnavailable, inst:
168 168 ui.warn(_("abort: could not lock %s: %s\n") %
169 169 (inst.desc or inst.filename, inst.strerror))
170 170 except error.CommandError, inst:
171 171 if inst.args[0]:
172 172 ui.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1]))
173 173 commands.help_(ui, inst.args[0], full=False, command=True)
174 174 else:
175 175 ui.warn(_("hg: %s\n") % inst.args[1])
176 176 commands.help_(ui, 'shortlist')
177 177 except error.OutOfBandError, inst:
178 178 ui.warn(_("abort: remote error:\n"))
179 179 ui.warn(''.join(inst.args))
180 180 except error.RepoError, inst:
181 181 ui.warn(_("abort: %s!\n") % inst)
182 182 if inst.hint:
183 183 ui.warn(_("(%s)\n") % inst.hint)
184 184 except error.ResponseError, inst:
185 185 ui.warn(_("abort: %s") % inst.args[0])
186 186 if not isinstance(inst.args[1], basestring):
187 187 ui.warn(" %r\n" % (inst.args[1],))
188 188 elif not inst.args[1]:
189 189 ui.warn(_(" empty string\n"))
190 190 else:
191 191 ui.warn("\n%r\n" % util.ellipsis(inst.args[1]))
192 192 except error.RevlogError, inst:
193 193 ui.warn(_("abort: %s!\n") % inst)
194 194 except error.SignalInterrupt:
195 195 ui.warn(_("killed!\n"))
196 196 except error.UnknownCommand, inst:
197 197 ui.warn(_("hg: unknown command '%s'\n") % inst.args[0])
198 198 try:
199 199 # check if the command is in a disabled extension
200 200 # (but don't check for extensions themselves)
201 201 commands.help_(ui, inst.args[0], unknowncmd=True)
202 202 except error.UnknownCommand:
203 203 commands.help_(ui, 'shortlist')
204 204 except error.InterventionRequired, inst:
205 205 ui.warn("%s\n" % inst)
206 206 return 1
207 207 except util.Abort, inst:
208 208 ui.warn(_("abort: %s\n") % inst)
209 209 if inst.hint:
210 210 ui.warn(_("(%s)\n") % inst.hint)
211 211 except ImportError, inst:
212 212 ui.warn(_("abort: %s!\n") % inst)
213 213 m = str(inst).split()[-1]
214 214 if m in "mpatch bdiff".split():
215 215 ui.warn(_("(did you forget to compile extensions?)\n"))
216 216 elif m in "zlib".split():
217 217 ui.warn(_("(is your Python install correct?)\n"))
218 218 except IOError, inst:
219 219 if util.safehasattr(inst, "code"):
220 220 ui.warn(_("abort: %s\n") % inst)
221 221 elif util.safehasattr(inst, "reason"):
222 222 try: # usually it is in the form (errno, strerror)
223 223 reason = inst.reason.args[1]
224 224 except (AttributeError, IndexError):
225 225 # it might be anything, for example a string
226 226 reason = inst.reason
227 227 ui.warn(_("abort: error: %s\n") % reason)
228 228 elif (util.safehasattr(inst, "args")
229 229 and inst.args and inst.args[0] == errno.EPIPE):
230 230 if ui.debugflag:
231 231 ui.warn(_("broken pipe\n"))
232 232 elif getattr(inst, "strerror", None):
233 233 if getattr(inst, "filename", None):
234 234 ui.warn(_("abort: %s: %s\n") % (inst.strerror, inst.filename))
235 235 else:
236 236 ui.warn(_("abort: %s\n") % inst.strerror)
237 237 else:
238 238 raise
239 239 except OSError, inst:
240 240 if getattr(inst, "filename", None) is not None:
241 241 ui.warn(_("abort: %s: '%s'\n") % (inst.strerror, inst.filename))
242 242 else:
243 243 ui.warn(_("abort: %s\n") % inst.strerror)
244 244 except KeyboardInterrupt:
245 245 try:
246 246 ui.warn(_("interrupted!\n"))
247 247 except IOError, inst:
248 248 if inst.errno == errno.EPIPE:
249 249 if ui.debugflag:
250 250 ui.warn(_("\nbroken pipe\n"))
251 251 else:
252 252 raise
253 253 except MemoryError:
254 254 ui.warn(_("abort: out of memory\n"))
255 255 except SystemExit, inst:
256 256 # Commands shouldn't sys.exit directly, but give a return code.
257 257 # Just in case catch this and and pass exit code to caller.
258 258 return inst.code
259 259 except socket.error, inst:
260 260 ui.warn(_("abort: %s\n") % inst.args[-1])
261 261 except: # re-raises
262 262 myver = util.version()
263 263 # For compatibility checking, we discard the portion of the hg
264 264 # version after the + on the assumption that if a "normal
265 265 # user" is running a build with a + in it the packager
266 266 # probably built from fairly close to a tag and anyone with a
267 267 # 'make local' copy of hg (where the version number can be out
268 268 # of date) will be clueful enough to notice the implausible
269 269 # version number and try updating.
270 270 compare = myver.split('+')[0]
271 271 ct = tuplever(compare)
272 272 worst = None, ct, ''
273 273 for name, mod in extensions.extensions():
274 274 testedwith = getattr(mod, 'testedwith', '')
275 275 report = getattr(mod, 'buglink', _('the extension author.'))
276 276 if not testedwith.strip():
277 277 # We found an untested extension. It's likely the culprit.
278 278 worst = name, 'unknown', report
279 279 break
280 280 if compare not in testedwith.split() and testedwith != 'internal':
281 281 tested = [tuplever(v) for v in testedwith.split()]
282 282 lower = [t for t in tested if t < ct]
283 283 nearest = max(lower or tested)
284 284 if worst[0] is None or nearest < worst[1]:
285 285 worst = name, nearest, report
286 286 if worst[0] is not None:
287 287 name, testedwith, report = worst
288 288 if not isinstance(testedwith, str):
289 289 testedwith = '.'.join([str(c) for c in testedwith])
290 290 warning = (_('** Unknown exception encountered with '
291 291 'possibly-broken third-party extension %s\n'
292 292 '** which supports versions %s of Mercurial.\n'
293 293 '** Please disable %s and try your action again.\n'
294 294 '** If that fixes the bug please report it to %s\n')
295 295 % (name, testedwith, name, report))
296 296 else:
297 297 warning = (_("** unknown exception encountered, "
298 298 "please report by visiting\n") +
299 299 _("** http://mercurial.selenic.com/wiki/BugTracker\n"))
300 300 warning += ((_("** Python %s\n") % sys.version.replace('\n', '')) +
301 301 (_("** Mercurial Distributed SCM (version %s)\n") % myver) +
302 302 (_("** Extensions loaded: %s\n") %
303 303 ", ".join([x[0] for x in extensions.extensions()])))
304 304 ui.log("commandexception", "%s\n%s\n", warning, traceback.format_exc())
305 305 ui.warn(warning)
306 306 raise
307 307
308 308 return -1
309 309
310 310 def tuplever(v):
311 311 try:
312 312 return tuple([int(i) for i in v.split('.')])
313 313 except ValueError:
314 314 return tuple()
315 315
316 316 def aliasargs(fn, givenargs):
317 317 args = getattr(fn, 'args', [])
318 318 if args:
319 319 cmd = ' '.join(map(util.shellquote, args))
320 320
321 321 nums = []
322 322 def replacer(m):
323 323 num = int(m.group(1)) - 1
324 324 nums.append(num)
325 325 if num < len(givenargs):
326 326 return givenargs[num]
327 327 raise util.Abort(_('too few arguments for command alias'))
328 328 cmd = re.sub(r'\$(\d+|\$)', replacer, cmd)
329 329 givenargs = [x for i, x in enumerate(givenargs)
330 330 if i not in nums]
331 331 args = shlex.split(cmd)
332 332 return args + givenargs
333 333
334 334 class cmdalias(object):
335 335 def __init__(self, name, definition, cmdtable):
336 336 self.name = self.cmd = name
337 337 self.cmdname = ''
338 338 self.definition = definition
339 339 self.args = []
340 340 self.opts = []
341 341 self.help = ''
342 342 self.norepo = True
343 343 self.optionalrepo = False
344 344 self.badalias = False
345 345
346 346 try:
347 347 aliases, entry = cmdutil.findcmd(self.name, cmdtable)
348 348 for alias, e in cmdtable.iteritems():
349 349 if e is entry:
350 350 self.cmd = alias
351 351 break
352 352 self.shadows = True
353 353 except error.UnknownCommand:
354 354 self.shadows = False
355 355
356 356 if not self.definition:
357 357 def fn(ui, *args):
358 358 ui.warn(_("no definition for alias '%s'\n") % self.name)
359 359 return -1
360 360 self.fn = fn
361 361 self.badalias = True
362 362 return
363 363
364 364 if self.definition.startswith('!'):
365 365 self.shell = True
366 366 def fn(ui, *args):
367 367 env = {'HG_ARGS': ' '.join((self.name,) + args)}
368 368 def _checkvar(m):
369 369 if m.groups()[0] == '$':
370 370 return m.group()
371 371 elif int(m.groups()[0]) <= len(args):
372 372 return m.group()
373 373 else:
374 374 ui.debug("No argument found for substitution "
375 375 "of %i variable in alias '%s' definition."
376 376 % (int(m.groups()[0]), self.name))
377 377 return ''
378 378 cmd = re.sub(r'\$(\d+|\$)', _checkvar, self.definition[1:])
379 379 replace = dict((str(i + 1), arg) for i, arg in enumerate(args))
380 380 replace['0'] = self.name
381 381 replace['@'] = ' '.join(args)
382 382 cmd = util.interpolate(r'\$', replace, cmd, escape_prefix=True)
383 383 return util.system(cmd, environ=env, out=ui.fout)
384 384 self.fn = fn
385 385 return
386 386
387 387 try:
388 388 args = shlex.split(self.definition)
389 389 except ValueError, inst:
390 390 def fn(ui, *args):
391 391 ui.warn(_("error in definition for alias '%s': %s\n")
392 392 % (self.name, inst))
393 393 return -1
394 394 self.fn = fn
395 395 self.badalias = True
396 396 return
397 397 self.cmdname = cmd = args.pop(0)
398 398 args = map(util.expandpath, args)
399 399
400 400 for invalidarg in ("--cwd", "-R", "--repository", "--repo", "--config"):
401 401 if _earlygetopt([invalidarg], args):
402 402 def fn(ui, *args):
403 403 ui.warn(_("error in definition for alias '%s': %s may only "
404 404 "be given on the command line\n")
405 405 % (self.name, invalidarg))
406 406 return -1
407 407
408 408 self.fn = fn
409 409 self.badalias = True
410 410 return
411 411
412 412 try:
413 413 tableentry = cmdutil.findcmd(cmd, cmdtable, False)[1]
414 414 if len(tableentry) > 2:
415 415 self.fn, self.opts, self.help = tableentry
416 416 else:
417 417 self.fn, self.opts = tableentry
418 418
419 419 self.args = aliasargs(self.fn, args)
420 420 if cmd not in commands.norepo.split(' '):
421 421 self.norepo = False
422 422 if cmd in commands.optionalrepo.split(' '):
423 423 self.optionalrepo = True
424 424 if self.help.startswith("hg " + cmd):
425 425 # drop prefix in old-style help lines so hg shows the alias
426 426 self.help = self.help[4 + len(cmd):]
427 427 self.__doc__ = self.fn.__doc__
428 428
429 429 except error.UnknownCommand:
430 430 def fn(ui, *args):
431 431 ui.warn(_("alias '%s' resolves to unknown command '%s'\n") \
432 432 % (self.name, cmd))
433 433 try:
434 434 # check if the command is in a disabled extension
435 435 commands.help_(ui, cmd, unknowncmd=True)
436 436 except error.UnknownCommand:
437 437 pass
438 438 return -1
439 439 self.fn = fn
440 440 self.badalias = True
441 441 except error.AmbiguousCommand:
442 442 def fn(ui, *args):
443 443 ui.warn(_("alias '%s' resolves to ambiguous command '%s'\n") \
444 444 % (self.name, cmd))
445 445 return -1
446 446 self.fn = fn
447 447 self.badalias = True
448 448
449 449 def __call__(self, ui, *args, **opts):
450 450 if self.shadows:
451 451 ui.debug("alias '%s' shadows command '%s'\n" %
452 452 (self.name, self.cmdname))
453 453
454 454 if util.safehasattr(self, 'shell'):
455 455 return self.fn(ui, *args, **opts)
456 456 else:
457 457 try:
458 458 return util.checksignature(self.fn)(ui, *args, **opts)
459 459 except error.SignatureError:
460 460 args = ' '.join([self.cmdname] + self.args)
461 461 ui.debug("alias '%s' expands to '%s'\n" % (self.name, args))
462 462 raise
463 463
464 464 def addaliases(ui, cmdtable):
465 465 # aliases are processed after extensions have been loaded, so they
466 466 # may use extension commands. Aliases can also use other alias definitions,
467 467 # but only if they have been defined prior to the current definition.
468 468 for alias, definition in ui.configitems('alias'):
469 469 aliasdef = cmdalias(alias, definition, cmdtable)
470 470
471 471 try:
472 472 olddef = cmdtable[aliasdef.cmd][0]
473 473 if olddef.definition == aliasdef.definition:
474 474 continue
475 475 except (KeyError, AttributeError):
476 476 # definition might not exist or it might not be a cmdalias
477 477 pass
478 478
479 479 cmdtable[aliasdef.name] = (aliasdef, aliasdef.opts, aliasdef.help)
480 480 if aliasdef.norepo:
481 481 commands.norepo += ' %s' % alias
482 482 if aliasdef.optionalrepo:
483 483 commands.optionalrepo += ' %s' % alias
484 484
485 485 def _parse(ui, args):
486 486 options = {}
487 487 cmdoptions = {}
488 488
489 489 try:
490 490 args = fancyopts.fancyopts(args, commands.globalopts, options)
491 491 except fancyopts.getopt.GetoptError, inst:
492 492 raise error.CommandError(None, inst)
493 493
494 494 if args:
495 495 cmd, args = args[0], args[1:]
496 496 aliases, entry = cmdutil.findcmd(cmd, commands.table,
497 497 ui.configbool("ui", "strict"))
498 498 cmd = aliases[0]
499 499 args = aliasargs(entry[0], args)
500 500 defaults = ui.config("defaults", cmd)
501 501 if defaults:
502 502 args = map(util.expandpath, shlex.split(defaults)) + args
503 503 c = list(entry[1])
504 504 else:
505 505 cmd = None
506 506 c = []
507 507
508 508 # combine global options into local
509 509 for o in commands.globalopts:
510 510 c.append((o[0], o[1], options[o[1]], o[3]))
511 511
512 512 try:
513 513 args = fancyopts.fancyopts(args, c, cmdoptions, True)
514 514 except fancyopts.getopt.GetoptError, inst:
515 515 raise error.CommandError(cmd, inst)
516 516
517 517 # separate global options back out
518 518 for o in commands.globalopts:
519 519 n = o[1]
520 520 options[n] = cmdoptions[n]
521 521 del cmdoptions[n]
522 522
523 523 return (cmd, cmd and entry[0] or None, args, options, cmdoptions)
524 524
525 525 def _parseconfig(ui, config):
526 526 """parse the --config options from the command line"""
527 527 configs = []
528 528
529 529 for cfg in config:
530 530 try:
531 531 name, value = cfg.split('=', 1)
532 532 section, name = name.split('.', 1)
533 533 if not section or not name:
534 534 raise IndexError
535 535 ui.setconfig(section, name, value, '--config')
536 536 configs.append((section, name, value))
537 537 except (IndexError, ValueError):
538 538 raise util.Abort(_('malformed --config option: %r '
539 539 '(use --config section.name=value)') % cfg)
540 540
541 541 return configs
542 542
543 543 def _earlygetopt(aliases, args):
544 544 """Return list of values for an option (or aliases).
545 545
546 546 The values are listed in the order they appear in args.
547 547 The options and values are removed from args.
548 548
549 549 >>> args = ['x', '--cwd', 'foo', 'y']
550 550 >>> _earlygetopt(['--cwd'], args), args
551 551 (['foo'], ['x', 'y'])
552 552
553 553 >>> args = ['x', '--cwd=bar', 'y']
554 554 >>> _earlygetopt(['--cwd'], args), args
555 555 (['bar'], ['x', 'y'])
556 556
557 557 >>> args = ['x', '-R', 'foo', 'y']
558 558 >>> _earlygetopt(['-R'], args), args
559 559 (['foo'], ['x', 'y'])
560 560
561 561 >>> args = ['x', '-Rbar', 'y']
562 562 >>> _earlygetopt(['-R'], args), args
563 563 (['bar'], ['x', 'y'])
564 564 """
565 565 try:
566 566 argcount = args.index("--")
567 567 except ValueError:
568 568 argcount = len(args)
569 569 shortopts = [opt for opt in aliases if len(opt) == 2]
570 570 values = []
571 571 pos = 0
572 572 while pos < argcount:
573 573 fullarg = arg = args[pos]
574 574 equals = arg.find('=')
575 575 if equals > -1:
576 576 arg = arg[:equals]
577 577 if arg in aliases:
578 578 del args[pos]
579 579 if equals > -1:
580 580 values.append(fullarg[equals + 1:])
581 581 argcount -= 1
582 582 else:
583 583 if pos + 1 >= argcount:
584 584 # ignore and let getopt report an error if there is no value
585 585 break
586 586 values.append(args.pop(pos))
587 587 argcount -= 2
588 588 elif arg[:2] in shortopts:
589 589 # short option can have no following space, e.g. hg log -Rfoo
590 590 values.append(args.pop(pos)[2:])
591 591 argcount -= 1
592 592 else:
593 593 pos += 1
594 594 return values
595 595
596 596 def runcommand(lui, repo, cmd, fullargs, ui, options, d, cmdpats, cmdoptions):
597 597 # run pre-hook, and abort if it fails
598 598 hook.hook(lui, repo, "pre-%s" % cmd, True, args=" ".join(fullargs),
599 599 pats=cmdpats, opts=cmdoptions)
600 600 ret = _runcommand(ui, options, cmd, d)
601 601 # run post-hook, passing command result
602 602 hook.hook(lui, repo, "post-%s" % cmd, False, args=" ".join(fullargs),
603 603 result=ret, pats=cmdpats, opts=cmdoptions)
604 604 return ret
605 605
606 606 def _getlocal(ui, rpath):
607 607 """Return (path, local ui object) for the given target path.
608 608
609 609 Takes paths in [cwd]/.hg/hgrc into account."
610 610 """
611 611 try:
612 612 wd = os.getcwd()
613 613 except OSError, e:
614 614 raise util.Abort(_("error getting current working directory: %s") %
615 615 e.strerror)
616 616 path = cmdutil.findrepo(wd) or ""
617 617 if not path:
618 618 lui = ui
619 619 else:
620 620 lui = ui.copy()
621 621 lui.readconfig(os.path.join(path, ".hg", "hgrc"), path)
622 622
623 623 if rpath and rpath[-1]:
624 624 path = lui.expandpath(rpath[-1])
625 625 lui = ui.copy()
626 626 lui.readconfig(os.path.join(path, ".hg", "hgrc"), path)
627 627
628 628 return path, lui
629 629
630 630 def _checkshellalias(lui, ui, args):
631 631 options = {}
632 632
633 633 try:
634 634 args = fancyopts.fancyopts(args, commands.globalopts, options)
635 635 except fancyopts.getopt.GetoptError:
636 636 return
637 637
638 638 if not args:
639 639 return
640 640
641 641 norepo = commands.norepo
642 642 optionalrepo = commands.optionalrepo
643 643 def restorecommands():
644 644 commands.norepo = norepo
645 645 commands.optionalrepo = optionalrepo
646 646
647 647 cmdtable = commands.table.copy()
648 648 addaliases(lui, cmdtable)
649 649
650 650 cmd = args[0]
651 651 try:
652 652 aliases, entry = cmdutil.findcmd(cmd, cmdtable)
653 653 except (error.AmbiguousCommand, error.UnknownCommand):
654 654 restorecommands()
655 655 return
656 656
657 657 cmd = aliases[0]
658 658 fn = entry[0]
659 659
660 660 if cmd and util.safehasattr(fn, 'shell'):
661 661 d = lambda: fn(ui, *args[1:])
662 662 return lambda: runcommand(lui, None, cmd, args[:1], ui, options, d,
663 663 [], {})
664 664
665 665 restorecommands()
666 666
667 667 _loaded = set()
668 668 def _dispatch(req):
669 669 args = req.args
670 670 ui = req.ui
671 671
672 672 # check for cwd
673 673 cwd = _earlygetopt(['--cwd'], args)
674 674 if cwd:
675 675 os.chdir(cwd[-1])
676 676
677 677 rpath = _earlygetopt(["-R", "--repository", "--repo"], args)
678 678 path, lui = _getlocal(ui, rpath)
679 679
680 680 # Now that we're operating in the right directory/repository with
681 681 # the right config settings, check for shell aliases
682 682 shellaliasfn = _checkshellalias(lui, ui, args)
683 683 if shellaliasfn:
684 684 return shellaliasfn()
685 685
686 686 # Configure extensions in phases: uisetup, extsetup, cmdtable, and
687 687 # reposetup. Programs like TortoiseHg will call _dispatch several
688 688 # times so we keep track of configured extensions in _loaded.
689 689 extensions.loadall(lui)
690 690 exts = [ext for ext in extensions.extensions() if ext[0] not in _loaded]
691 691 # Propagate any changes to lui.__class__ by extensions
692 692 ui.__class__ = lui.__class__
693 693
694 694 # (uisetup and extsetup are handled in extensions.loadall)
695 695
696 696 for name, module in exts:
697 697 cmdtable = getattr(module, 'cmdtable', {})
698 698 overrides = [cmd for cmd in cmdtable if cmd in commands.table]
699 699 if overrides:
700 700 ui.warn(_("extension '%s' overrides commands: %s\n")
701 701 % (name, " ".join(overrides)))
702 702 commands.table.update(cmdtable)
703 703 _loaded.add(name)
704 704
705 705 # (reposetup is handled in hg.repository)
706 706
707 707 addaliases(lui, commands.table)
708 708
709 709 # check for fallback encoding
710 710 fallback = lui.config('ui', 'fallbackencoding')
711 711 if fallback:
712 712 encoding.fallbackencoding = fallback
713 713
714 714 fullargs = args
715 715 cmd, func, args, options, cmdoptions = _parse(lui, args)
716 716
717 717 if options["config"]:
718 718 raise util.Abort(_("option --config may not be abbreviated!"))
719 719 if options["cwd"]:
720 720 raise util.Abort(_("option --cwd may not be abbreviated!"))
721 721 if options["repository"]:
722 722 raise util.Abort(_(
723 723 "option -R has to be separated from other options (e.g. not -qR) "
724 724 "and --repository may only be abbreviated as --repo!"))
725 725
726 726 if options["encoding"]:
727 727 encoding.encoding = options["encoding"]
728 728 if options["encodingmode"]:
729 729 encoding.encodingmode = options["encodingmode"]
730 730 if options["time"]:
731 731 def get_times():
732 732 t = os.times()
733 733 if t[4] == 0.0: # Windows leaves this as zero, so use time.clock()
734 734 t = (t[0], t[1], t[2], t[3], time.clock())
735 735 return t
736 736 s = get_times()
737 737 def print_time():
738 738 t = get_times()
739 739 ui.warn(_("time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n") %
740 740 (t[4]-s[4], t[0]-s[0], t[2]-s[2], t[1]-s[1], t[3]-s[3]))
741 741 atexit.register(print_time)
742 742
743 743 uis = set([ui, lui])
744 744
745 745 if req.repo:
746 746 uis.add(req.repo.ui)
747 747
748 748 if options['verbose'] or options['debug'] or options['quiet']:
749 749 for opt in ('verbose', 'debug', 'quiet'):
750 750 val = str(bool(options[opt]))
751 751 for ui_ in uis:
752 752 ui_.setconfig('ui', opt, val, '--' + opt)
753 753
754 754 if options['traceback']:
755 755 for ui_ in uis:
756 756 ui_.setconfig('ui', 'traceback', 'on', '--traceback')
757 757
758 758 if options['noninteractive']:
759 759 for ui_ in uis:
760 760 ui_.setconfig('ui', 'interactive', 'off', '-y')
761 761
762 762 if cmdoptions.get('insecure', False):
763 763 for ui_ in uis:
764 764 ui_.setconfig('web', 'cacerts', '', '--insecure')
765 765
766 766 if options['version']:
767 767 return commands.version_(ui)
768 768 if options['help']:
769 return commands.help_(ui, cmd)
769 return commands.help_(ui, cmd, command=True)
770 770 elif not cmd:
771 771 return commands.help_(ui, 'shortlist')
772 772
773 773 repo = None
774 774 cmdpats = args[:]
775 775 if cmd not in commands.norepo.split():
776 776 # use the repo from the request only if we don't have -R
777 777 if not rpath and not cwd:
778 778 repo = req.repo
779 779
780 780 if repo:
781 781 # set the descriptors of the repo ui to those of ui
782 782 repo.ui.fin = ui.fin
783 783 repo.ui.fout = ui.fout
784 784 repo.ui.ferr = ui.ferr
785 785 else:
786 786 try:
787 787 repo = hg.repository(ui, path=path)
788 788 if not repo.local():
789 789 raise util.Abort(_("repository '%s' is not local") % path)
790 790 repo.ui.setconfig("bundle", "mainreporoot", repo.root, 'repo')
791 791 except error.RequirementError:
792 792 raise
793 793 except error.RepoError:
794 794 if cmd not in commands.optionalrepo.split():
795 795 if (cmd in commands.inferrepo.split() and
796 796 args and not path): # try to infer -R from command args
797 797 repos = map(cmdutil.findrepo, args)
798 798 guess = repos[0]
799 799 if guess and repos.count(guess) == len(repos):
800 800 req.args = ['--repository', guess] + fullargs
801 801 return _dispatch(req)
802 802 if not path:
803 803 raise error.RepoError(_("no repository found in '%s'"
804 804 " (.hg not found)")
805 805 % os.getcwd())
806 806 raise
807 807 if repo:
808 808 ui = repo.ui
809 809 if options['hidden']:
810 810 repo = repo.unfiltered()
811 811 args.insert(0, repo)
812 812 elif rpath:
813 813 ui.warn(_("warning: --repository ignored\n"))
814 814
815 815 msg = ' '.join(' ' in a and repr(a) or a for a in fullargs)
816 816 ui.log("command", '%s\n', msg)
817 817 d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
818 818 try:
819 819 return runcommand(lui, repo, cmd, fullargs, ui, options, d,
820 820 cmdpats, cmdoptions)
821 821 finally:
822 822 if repo and repo != req.repo:
823 823 repo.close()
824 824
825 825 def lsprofile(ui, func, fp):
826 826 format = ui.config('profiling', 'format', default='text')
827 827 field = ui.config('profiling', 'sort', default='inlinetime')
828 828 limit = ui.configint('profiling', 'limit', default=30)
829 829 climit = ui.configint('profiling', 'nested', default=5)
830 830
831 831 if format not in ['text', 'kcachegrind']:
832 832 ui.warn(_("unrecognized profiling format '%s'"
833 833 " - Ignored\n") % format)
834 834 format = 'text'
835 835
836 836 try:
837 837 from mercurial import lsprof
838 838 except ImportError:
839 839 raise util.Abort(_(
840 840 'lsprof not available - install from '
841 841 'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/'))
842 842 p = lsprof.Profiler()
843 843 p.enable(subcalls=True)
844 844 try:
845 845 return func()
846 846 finally:
847 847 p.disable()
848 848
849 849 if format == 'kcachegrind':
850 850 import lsprofcalltree
851 851 calltree = lsprofcalltree.KCacheGrind(p)
852 852 calltree.output(fp)
853 853 else:
854 854 # format == 'text'
855 855 stats = lsprof.Stats(p.getstats())
856 856 stats.sort(field)
857 857 stats.pprint(limit=limit, file=fp, climit=climit)
858 858
859 859 def statprofile(ui, func, fp):
860 860 try:
861 861 import statprof
862 862 except ImportError:
863 863 raise util.Abort(_(
864 864 'statprof not available - install using "easy_install statprof"'))
865 865
866 866 freq = ui.configint('profiling', 'freq', default=1000)
867 867 if freq > 0:
868 868 statprof.reset(freq)
869 869 else:
870 870 ui.warn(_("invalid sampling frequency '%s' - ignoring\n") % freq)
871 871
872 872 statprof.start()
873 873 try:
874 874 return func()
875 875 finally:
876 876 statprof.stop()
877 877 statprof.display(fp)
878 878
879 879 def _runcommand(ui, options, cmd, cmdfunc):
880 880 def checkargs():
881 881 try:
882 882 return cmdfunc()
883 883 except error.SignatureError:
884 884 raise error.CommandError(cmd, _("invalid arguments"))
885 885
886 886 if options['profile']:
887 887 profiler = os.getenv('HGPROF')
888 888 if profiler is None:
889 889 profiler = ui.config('profiling', 'type', default='ls')
890 890 if profiler not in ('ls', 'stat'):
891 891 ui.warn(_("unrecognized profiler '%s' - ignored\n") % profiler)
892 892 profiler = 'ls'
893 893
894 894 output = ui.config('profiling', 'output')
895 895
896 896 if output:
897 897 path = ui.expandpath(output)
898 898 fp = open(path, 'wb')
899 899 else:
900 900 fp = sys.stderr
901 901
902 902 try:
903 903 if profiler == 'ls':
904 904 return lsprofile(ui, checkargs, fp)
905 905 else:
906 906 return statprofile(ui, checkargs, fp)
907 907 finally:
908 908 if output:
909 909 fp.close()
910 910 else:
911 911 return checkargs()
@@ -1,2087 +1,2098 b''
1 1 Short help:
2 2
3 3 $ hg
4 4 Mercurial Distributed SCM
5 5
6 6 basic commands:
7 7
8 8 add add the specified files on the next commit
9 9 annotate show changeset information by line for each file
10 10 clone make a copy of an existing repository
11 11 commit commit the specified files or all outstanding changes
12 12 diff diff repository (or selected files)
13 13 export dump the header and diffs for one or more changesets
14 14 forget forget the specified files on the next commit
15 15 init create a new repository in the given directory
16 16 log show revision history of entire repository or files
17 17 merge merge 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 use "hg -v help add" to show more complete help and the global options
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 help add" to show the full help text
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 use "hg -v help verify" to show the global options
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 use "hg -v help diff" to show more complete help and the global options
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 use "hg -v help status" to show more complete help and the global options
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 use "hg -v help nohelp" to show the global options
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 use "hg -v help debugoptDEP" to show the global options
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 *"hg -v help debugoptDEP"* (glob)
863 863 #endif
864 864
865 Test commands that collide with topics (issue4240)
866
867 $ hg config -hq
868 hg config [-u] [NAME]...
869
870 show combined config settings from all hgrc files
871 $ hg showconfig -hq
872 hg config [-u] [NAME]...
873
874 show combined config settings from all hgrc files
875
865 876 Test a help topic
866 877
867 878 $ hg help revs
868 879 Specifying Single Revisions
869 880 """""""""""""""""""""""""""
870 881
871 882 Mercurial supports several ways to specify individual revisions.
872 883
873 884 A plain integer is treated as a revision number. Negative integers are
874 885 treated as sequential offsets from the tip, with -1 denoting the tip, -2
875 886 denoting the revision prior to the tip, and so forth.
876 887
877 888 A 40-digit hexadecimal string is treated as a unique revision identifier.
878 889
879 890 A hexadecimal string less than 40 characters long is treated as a unique
880 891 revision identifier and is referred to as a short-form identifier. A
881 892 short-form identifier is only valid if it is the prefix of exactly one
882 893 full-length identifier.
883 894
884 895 Any other string is treated as a bookmark, tag, or branch name. A bookmark
885 896 is a movable pointer to a revision. A tag is a permanent name associated
886 897 with a revision. A branch name denotes the tipmost open branch head of
887 898 that branch - or if they are all closed, the tipmost closed head of the
888 899 branch. Bookmark, tag, and branch names must not contain the ":"
889 900 character.
890 901
891 902 The reserved name "tip" always identifies the most recent revision.
892 903
893 904 The reserved name "null" indicates the null revision. This is the revision
894 905 of an empty repository, and the parent of revision 0.
895 906
896 907 The reserved name "." indicates the working directory parent. If no
897 908 working directory is checked out, it is equivalent to null. If an
898 909 uncommitted merge is in progress, "." is the revision of the first parent.
899 910
900 911 Test templating help
901 912
902 913 $ hg help templating | egrep '(desc|diffstat|firstline|nonempty) '
903 914 desc String. The text of the changeset description.
904 915 diffstat String. Statistics of changes with the following format:
905 916 firstline Any text. Returns the first line of text.
906 917 nonempty Any text. Returns '(none)' if the string is empty.
907 918
908 919 Test help hooks
909 920
910 921 $ cat > helphook1.py <<EOF
911 922 > from mercurial import help
912 923 >
913 924 > def rewrite(topic, doc):
914 925 > return doc + '\nhelphook1\n'
915 926 >
916 927 > def extsetup(ui):
917 928 > help.addtopichook('revsets', rewrite)
918 929 > EOF
919 930 $ cat > helphook2.py <<EOF
920 931 > from mercurial import help
921 932 >
922 933 > def rewrite(topic, doc):
923 934 > return doc + '\nhelphook2\n'
924 935 >
925 936 > def extsetup(ui):
926 937 > help.addtopichook('revsets', rewrite)
927 938 > EOF
928 939 $ echo '[extensions]' >> $HGRCPATH
929 940 $ echo "helphook1 = `pwd`/helphook1.py" >> $HGRCPATH
930 941 $ echo "helphook2 = `pwd`/helphook2.py" >> $HGRCPATH
931 942 $ hg help revsets | grep helphook
932 943 helphook1
933 944 helphook2
934 945
935 946 Test keyword search help
936 947
937 948 $ cat > prefixedname.py <<EOF
938 949 > '''matched against word "clone"
939 950 > '''
940 951 > EOF
941 952 $ echo '[extensions]' >> $HGRCPATH
942 953 $ echo "dot.dot.prefixedname = `pwd`/prefixedname.py" >> $HGRCPATH
943 954 $ hg help -k clone
944 955 Topics:
945 956
946 957 config Configuration Files
947 958 extensions Using Additional Features
948 959 glossary Glossary
949 960 phases Working with Phases
950 961 subrepos Subrepositories
951 962 urls URL Paths
952 963
953 964 Commands:
954 965
955 966 bookmarks create a new bookmark or list existing bookmarks
956 967 clone make a copy of an existing repository
957 968 paths show aliases for remote repositories
958 969 update update working directory (or switch revisions)
959 970
960 971 Extensions:
961 972
962 973 prefixedname matched against word "clone"
963 974 relink recreates hardlinks between repository clones
964 975
965 976 Extension Commands:
966 977
967 978 qclone clone main and patch repository at same time
968 979
969 980 Test unfound topic
970 981
971 982 $ hg help nonexistingtopicthatwillneverexisteverever
972 983 abort: no such help topic: nonexistingtopicthatwillneverexisteverever
973 984 (try "hg help --keyword nonexistingtopicthatwillneverexisteverever")
974 985 [255]
975 986
976 987 Test unfound keyword
977 988
978 989 $ hg help --keyword nonexistingwordthatwillneverexisteverever
979 990 abort: no matches
980 991 (try "hg help" for a list of topics)
981 992 [255]
982 993
983 994 Test omit indicating for help
984 995
985 996 $ cat > addverboseitems.py <<EOF
986 997 > '''extension to test omit indicating.
987 998 >
988 999 > This paragraph is never omitted (for extension)
989 1000 >
990 1001 > .. container:: verbose
991 1002 >
992 1003 > This paragraph is omitted,
993 1004 > if :hg:\`help\` is invoked witout \`\`-v\`\` (for extension)
994 1005 >
995 1006 > This paragraph is never omitted, too (for extension)
996 1007 > '''
997 1008 >
998 1009 > from mercurial import help, commands
999 1010 > testtopic = """This paragraph is never omitted (for topic).
1000 1011 >
1001 1012 > .. container:: verbose
1002 1013 >
1003 1014 > This paragraph is omitted,
1004 1015 > if :hg:\`help\` is invoked witout \`\`-v\`\` (for topic)
1005 1016 >
1006 1017 > This paragraph is never omitted, too (for topic)
1007 1018 > """
1008 1019 > def extsetup(ui):
1009 1020 > help.helptable.append((["topic-containing-verbose"],
1010 1021 > "This is the topic to test omit indicating.",
1011 1022 > lambda : testtopic))
1012 1023 > EOF
1013 1024 $ echo '[extensions]' >> $HGRCPATH
1014 1025 $ echo "addverboseitems = `pwd`/addverboseitems.py" >> $HGRCPATH
1015 1026 $ hg help addverboseitems
1016 1027 addverboseitems extension - extension to test omit indicating.
1017 1028
1018 1029 This paragraph is never omitted (for extension)
1019 1030
1020 1031 This paragraph is never omitted, too (for extension)
1021 1032
1022 1033 use "hg help -v addverboseitems" to show more complete help
1023 1034
1024 1035 no commands defined
1025 1036 $ hg help -v addverboseitems
1026 1037 addverboseitems extension - extension to test omit indicating.
1027 1038
1028 1039 This paragraph is never omitted (for extension)
1029 1040
1030 1041 This paragraph is omitted, if "hg help" is invoked witout "-v" (for extension)
1031 1042
1032 1043 This paragraph is never omitted, too (for extension)
1033 1044
1034 1045 no commands defined
1035 1046 $ hg help topic-containing-verbose
1036 1047 This is the topic to test omit indicating.
1037 1048 """"""""""""""""""""""""""""""""""""""""""
1038 1049
1039 1050 This paragraph is never omitted (for topic).
1040 1051
1041 1052 This paragraph is never omitted, too (for topic)
1042 1053
1043 1054 use "hg help -v topic-containing-verbose" to show more complete help
1044 1055 $ hg help -v topic-containing-verbose
1045 1056 This is the topic to test omit indicating.
1046 1057 """"""""""""""""""""""""""""""""""""""""""
1047 1058
1048 1059 This paragraph is never omitted (for topic).
1049 1060
1050 1061 This paragraph is omitted, if "hg help" is invoked witout "-v" (for topic)
1051 1062
1052 1063 This paragraph is never omitted, too (for topic)
1053 1064
1054 1065 Test usage of section marks in help documents
1055 1066
1056 1067 $ cd "$TESTDIR"/../doc
1057 1068 $ python check-seclevel.py
1058 1069 $ cd $TESTTMP
1059 1070
1060 1071 #if serve
1061 1072
1062 1073 Test the help pages in hgweb.
1063 1074
1064 1075 Dish up an empty repo; serve it cold.
1065 1076
1066 1077 $ hg init "$TESTTMP/test"
1067 1078 $ hg serve -R "$TESTTMP/test" -n test -p $HGPORT -d --pid-file=hg.pid
1068 1079 $ cat hg.pid >> $DAEMON_PIDS
1069 1080
1070 1081 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT "help"
1071 1082 200 Script output follows
1072 1083
1073 1084 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1074 1085 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1075 1086 <head>
1076 1087 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1077 1088 <meta name="robots" content="index, nofollow" />
1078 1089 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1079 1090 <script type="text/javascript" src="/static/mercurial.js"></script>
1080 1091
1081 1092 <title>Help: Index</title>
1082 1093 </head>
1083 1094 <body>
1084 1095
1085 1096 <div class="container">
1086 1097 <div class="menu">
1087 1098 <div class="logo">
1088 1099 <a href="http://mercurial.selenic.com/">
1089 1100 <img src="/static/hglogo.png" alt="mercurial" /></a>
1090 1101 </div>
1091 1102 <ul>
1092 1103 <li><a href="/shortlog">log</a></li>
1093 1104 <li><a href="/graph">graph</a></li>
1094 1105 <li><a href="/tags">tags</a></li>
1095 1106 <li><a href="/bookmarks">bookmarks</a></li>
1096 1107 <li><a href="/branches">branches</a></li>
1097 1108 </ul>
1098 1109 <ul>
1099 1110 <li class="active">help</li>
1100 1111 </ul>
1101 1112 </div>
1102 1113
1103 1114 <div class="main">
1104 1115 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
1105 1116 <form class="search" action="/log">
1106 1117
1107 1118 <p><input name="rev" id="search1" type="text" size="30" /></p>
1108 1119 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
1109 1120 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
1110 1121 </form>
1111 1122 <table class="bigtable">
1112 1123 <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
1113 1124
1114 1125 <tr><td>
1115 1126 <a href="/help/config">
1116 1127 config
1117 1128 </a>
1118 1129 </td><td>
1119 1130 Configuration Files
1120 1131 </td></tr>
1121 1132 <tr><td>
1122 1133 <a href="/help/dates">
1123 1134 dates
1124 1135 </a>
1125 1136 </td><td>
1126 1137 Date Formats
1127 1138 </td></tr>
1128 1139 <tr><td>
1129 1140 <a href="/help/diffs">
1130 1141 diffs
1131 1142 </a>
1132 1143 </td><td>
1133 1144 Diff Formats
1134 1145 </td></tr>
1135 1146 <tr><td>
1136 1147 <a href="/help/environment">
1137 1148 environment
1138 1149 </a>
1139 1150 </td><td>
1140 1151 Environment Variables
1141 1152 </td></tr>
1142 1153 <tr><td>
1143 1154 <a href="/help/extensions">
1144 1155 extensions
1145 1156 </a>
1146 1157 </td><td>
1147 1158 Using Additional Features
1148 1159 </td></tr>
1149 1160 <tr><td>
1150 1161 <a href="/help/filesets">
1151 1162 filesets
1152 1163 </a>
1153 1164 </td><td>
1154 1165 Specifying File Sets
1155 1166 </td></tr>
1156 1167 <tr><td>
1157 1168 <a href="/help/glossary">
1158 1169 glossary
1159 1170 </a>
1160 1171 </td><td>
1161 1172 Glossary
1162 1173 </td></tr>
1163 1174 <tr><td>
1164 1175 <a href="/help/hgignore">
1165 1176 hgignore
1166 1177 </a>
1167 1178 </td><td>
1168 1179 Syntax for Mercurial Ignore Files
1169 1180 </td></tr>
1170 1181 <tr><td>
1171 1182 <a href="/help/hgweb">
1172 1183 hgweb
1173 1184 </a>
1174 1185 </td><td>
1175 1186 Configuring hgweb
1176 1187 </td></tr>
1177 1188 <tr><td>
1178 1189 <a href="/help/merge-tools">
1179 1190 merge-tools
1180 1191 </a>
1181 1192 </td><td>
1182 1193 Merge Tools
1183 1194 </td></tr>
1184 1195 <tr><td>
1185 1196 <a href="/help/multirevs">
1186 1197 multirevs
1187 1198 </a>
1188 1199 </td><td>
1189 1200 Specifying Multiple Revisions
1190 1201 </td></tr>
1191 1202 <tr><td>
1192 1203 <a href="/help/patterns">
1193 1204 patterns
1194 1205 </a>
1195 1206 </td><td>
1196 1207 File Name Patterns
1197 1208 </td></tr>
1198 1209 <tr><td>
1199 1210 <a href="/help/phases">
1200 1211 phases
1201 1212 </a>
1202 1213 </td><td>
1203 1214 Working with Phases
1204 1215 </td></tr>
1205 1216 <tr><td>
1206 1217 <a href="/help/revisions">
1207 1218 revisions
1208 1219 </a>
1209 1220 </td><td>
1210 1221 Specifying Single Revisions
1211 1222 </td></tr>
1212 1223 <tr><td>
1213 1224 <a href="/help/revsets">
1214 1225 revsets
1215 1226 </a>
1216 1227 </td><td>
1217 1228 Specifying Revision Sets
1218 1229 </td></tr>
1219 1230 <tr><td>
1220 1231 <a href="/help/subrepos">
1221 1232 subrepos
1222 1233 </a>
1223 1234 </td><td>
1224 1235 Subrepositories
1225 1236 </td></tr>
1226 1237 <tr><td>
1227 1238 <a href="/help/templating">
1228 1239 templating
1229 1240 </a>
1230 1241 </td><td>
1231 1242 Template Usage
1232 1243 </td></tr>
1233 1244 <tr><td>
1234 1245 <a href="/help/urls">
1235 1246 urls
1236 1247 </a>
1237 1248 </td><td>
1238 1249 URL Paths
1239 1250 </td></tr>
1240 1251 <tr><td>
1241 1252 <a href="/help/topic-containing-verbose">
1242 1253 topic-containing-verbose
1243 1254 </a>
1244 1255 </td><td>
1245 1256 This is the topic to test omit indicating.
1246 1257 </td></tr>
1247 1258
1248 1259 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
1249 1260
1250 1261 <tr><td>
1251 1262 <a href="/help/add">
1252 1263 add
1253 1264 </a>
1254 1265 </td><td>
1255 1266 add the specified files on the next commit
1256 1267 </td></tr>
1257 1268 <tr><td>
1258 1269 <a href="/help/annotate">
1259 1270 annotate
1260 1271 </a>
1261 1272 </td><td>
1262 1273 show changeset information by line for each file
1263 1274 </td></tr>
1264 1275 <tr><td>
1265 1276 <a href="/help/clone">
1266 1277 clone
1267 1278 </a>
1268 1279 </td><td>
1269 1280 make a copy of an existing repository
1270 1281 </td></tr>
1271 1282 <tr><td>
1272 1283 <a href="/help/commit">
1273 1284 commit
1274 1285 </a>
1275 1286 </td><td>
1276 1287 commit the specified files or all outstanding changes
1277 1288 </td></tr>
1278 1289 <tr><td>
1279 1290 <a href="/help/diff">
1280 1291 diff
1281 1292 </a>
1282 1293 </td><td>
1283 1294 diff repository (or selected files)
1284 1295 </td></tr>
1285 1296 <tr><td>
1286 1297 <a href="/help/export">
1287 1298 export
1288 1299 </a>
1289 1300 </td><td>
1290 1301 dump the header and diffs for one or more changesets
1291 1302 </td></tr>
1292 1303 <tr><td>
1293 1304 <a href="/help/forget">
1294 1305 forget
1295 1306 </a>
1296 1307 </td><td>
1297 1308 forget the specified files on the next commit
1298 1309 </td></tr>
1299 1310 <tr><td>
1300 1311 <a href="/help/init">
1301 1312 init
1302 1313 </a>
1303 1314 </td><td>
1304 1315 create a new repository in the given directory
1305 1316 </td></tr>
1306 1317 <tr><td>
1307 1318 <a href="/help/log">
1308 1319 log
1309 1320 </a>
1310 1321 </td><td>
1311 1322 show revision history of entire repository or files
1312 1323 </td></tr>
1313 1324 <tr><td>
1314 1325 <a href="/help/merge">
1315 1326 merge
1316 1327 </a>
1317 1328 </td><td>
1318 1329 merge working directory with another revision
1319 1330 </td></tr>
1320 1331 <tr><td>
1321 1332 <a href="/help/pull">
1322 1333 pull
1323 1334 </a>
1324 1335 </td><td>
1325 1336 pull changes from the specified source
1326 1337 </td></tr>
1327 1338 <tr><td>
1328 1339 <a href="/help/push">
1329 1340 push
1330 1341 </a>
1331 1342 </td><td>
1332 1343 push changes to the specified destination
1333 1344 </td></tr>
1334 1345 <tr><td>
1335 1346 <a href="/help/remove">
1336 1347 remove
1337 1348 </a>
1338 1349 </td><td>
1339 1350 remove the specified files on the next commit
1340 1351 </td></tr>
1341 1352 <tr><td>
1342 1353 <a href="/help/serve">
1343 1354 serve
1344 1355 </a>
1345 1356 </td><td>
1346 1357 start stand-alone webserver
1347 1358 </td></tr>
1348 1359 <tr><td>
1349 1360 <a href="/help/status">
1350 1361 status
1351 1362 </a>
1352 1363 </td><td>
1353 1364 show changed files in the working directory
1354 1365 </td></tr>
1355 1366 <tr><td>
1356 1367 <a href="/help/summary">
1357 1368 summary
1358 1369 </a>
1359 1370 </td><td>
1360 1371 summarize working directory state
1361 1372 </td></tr>
1362 1373 <tr><td>
1363 1374 <a href="/help/update">
1364 1375 update
1365 1376 </a>
1366 1377 </td><td>
1367 1378 update working directory (or switch revisions)
1368 1379 </td></tr>
1369 1380
1370 1381 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
1371 1382
1372 1383 <tr><td>
1373 1384 <a href="/help/addremove">
1374 1385 addremove
1375 1386 </a>
1376 1387 </td><td>
1377 1388 add all new files, delete all missing files
1378 1389 </td></tr>
1379 1390 <tr><td>
1380 1391 <a href="/help/archive">
1381 1392 archive
1382 1393 </a>
1383 1394 </td><td>
1384 1395 create an unversioned archive of a repository revision
1385 1396 </td></tr>
1386 1397 <tr><td>
1387 1398 <a href="/help/backout">
1388 1399 backout
1389 1400 </a>
1390 1401 </td><td>
1391 1402 reverse effect of earlier changeset
1392 1403 </td></tr>
1393 1404 <tr><td>
1394 1405 <a href="/help/bisect">
1395 1406 bisect
1396 1407 </a>
1397 1408 </td><td>
1398 1409 subdivision search of changesets
1399 1410 </td></tr>
1400 1411 <tr><td>
1401 1412 <a href="/help/bookmarks">
1402 1413 bookmarks
1403 1414 </a>
1404 1415 </td><td>
1405 1416 create a new bookmark or list existing bookmarks
1406 1417 </td></tr>
1407 1418 <tr><td>
1408 1419 <a href="/help/branch">
1409 1420 branch
1410 1421 </a>
1411 1422 </td><td>
1412 1423 set or show the current branch name
1413 1424 </td></tr>
1414 1425 <tr><td>
1415 1426 <a href="/help/branches">
1416 1427 branches
1417 1428 </a>
1418 1429 </td><td>
1419 1430 list repository named branches
1420 1431 </td></tr>
1421 1432 <tr><td>
1422 1433 <a href="/help/bundle">
1423 1434 bundle
1424 1435 </a>
1425 1436 </td><td>
1426 1437 create a changegroup file
1427 1438 </td></tr>
1428 1439 <tr><td>
1429 1440 <a href="/help/cat">
1430 1441 cat
1431 1442 </a>
1432 1443 </td><td>
1433 1444 output the current or given revision of files
1434 1445 </td></tr>
1435 1446 <tr><td>
1436 1447 <a href="/help/config">
1437 1448 config
1438 1449 </a>
1439 1450 </td><td>
1440 1451 show combined config settings from all hgrc files
1441 1452 </td></tr>
1442 1453 <tr><td>
1443 1454 <a href="/help/copy">
1444 1455 copy
1445 1456 </a>
1446 1457 </td><td>
1447 1458 mark files as copied for the next commit
1448 1459 </td></tr>
1449 1460 <tr><td>
1450 1461 <a href="/help/graft">
1451 1462 graft
1452 1463 </a>
1453 1464 </td><td>
1454 1465 copy changes from other branches onto the current branch
1455 1466 </td></tr>
1456 1467 <tr><td>
1457 1468 <a href="/help/grep">
1458 1469 grep
1459 1470 </a>
1460 1471 </td><td>
1461 1472 search for a pattern in specified files and revisions
1462 1473 </td></tr>
1463 1474 <tr><td>
1464 1475 <a href="/help/heads">
1465 1476 heads
1466 1477 </a>
1467 1478 </td><td>
1468 1479 show branch heads
1469 1480 </td></tr>
1470 1481 <tr><td>
1471 1482 <a href="/help/help">
1472 1483 help
1473 1484 </a>
1474 1485 </td><td>
1475 1486 show help for a given topic or a help overview
1476 1487 </td></tr>
1477 1488 <tr><td>
1478 1489 <a href="/help/identify">
1479 1490 identify
1480 1491 </a>
1481 1492 </td><td>
1482 1493 identify the working copy or specified revision
1483 1494 </td></tr>
1484 1495 <tr><td>
1485 1496 <a href="/help/import">
1486 1497 import
1487 1498 </a>
1488 1499 </td><td>
1489 1500 import an ordered set of patches
1490 1501 </td></tr>
1491 1502 <tr><td>
1492 1503 <a href="/help/incoming">
1493 1504 incoming
1494 1505 </a>
1495 1506 </td><td>
1496 1507 show new changesets found in source
1497 1508 </td></tr>
1498 1509 <tr><td>
1499 1510 <a href="/help/locate">
1500 1511 locate
1501 1512 </a>
1502 1513 </td><td>
1503 1514 locate files matching specific patterns
1504 1515 </td></tr>
1505 1516 <tr><td>
1506 1517 <a href="/help/manifest">
1507 1518 manifest
1508 1519 </a>
1509 1520 </td><td>
1510 1521 output the current or given revision of the project manifest
1511 1522 </td></tr>
1512 1523 <tr><td>
1513 1524 <a href="/help/nohelp">
1514 1525 nohelp
1515 1526 </a>
1516 1527 </td><td>
1517 1528 (no help text available)
1518 1529 </td></tr>
1519 1530 <tr><td>
1520 1531 <a href="/help/outgoing">
1521 1532 outgoing
1522 1533 </a>
1523 1534 </td><td>
1524 1535 show changesets not found in the destination
1525 1536 </td></tr>
1526 1537 <tr><td>
1527 1538 <a href="/help/parents">
1528 1539 parents
1529 1540 </a>
1530 1541 </td><td>
1531 1542 show the parents of the working directory or revision
1532 1543 </td></tr>
1533 1544 <tr><td>
1534 1545 <a href="/help/paths">
1535 1546 paths
1536 1547 </a>
1537 1548 </td><td>
1538 1549 show aliases for remote repositories
1539 1550 </td></tr>
1540 1551 <tr><td>
1541 1552 <a href="/help/phase">
1542 1553 phase
1543 1554 </a>
1544 1555 </td><td>
1545 1556 set or show the current phase name
1546 1557 </td></tr>
1547 1558 <tr><td>
1548 1559 <a href="/help/recover">
1549 1560 recover
1550 1561 </a>
1551 1562 </td><td>
1552 1563 roll back an interrupted transaction
1553 1564 </td></tr>
1554 1565 <tr><td>
1555 1566 <a href="/help/rename">
1556 1567 rename
1557 1568 </a>
1558 1569 </td><td>
1559 1570 rename files; equivalent of copy + remove
1560 1571 </td></tr>
1561 1572 <tr><td>
1562 1573 <a href="/help/resolve">
1563 1574 resolve
1564 1575 </a>
1565 1576 </td><td>
1566 1577 redo merges or set/view the merge status of files
1567 1578 </td></tr>
1568 1579 <tr><td>
1569 1580 <a href="/help/revert">
1570 1581 revert
1571 1582 </a>
1572 1583 </td><td>
1573 1584 restore files to their checkout state
1574 1585 </td></tr>
1575 1586 <tr><td>
1576 1587 <a href="/help/root">
1577 1588 root
1578 1589 </a>
1579 1590 </td><td>
1580 1591 print the root (top) of the current working directory
1581 1592 </td></tr>
1582 1593 <tr><td>
1583 1594 <a href="/help/tag">
1584 1595 tag
1585 1596 </a>
1586 1597 </td><td>
1587 1598 add one or more tags for the current or given revision
1588 1599 </td></tr>
1589 1600 <tr><td>
1590 1601 <a href="/help/tags">
1591 1602 tags
1592 1603 </a>
1593 1604 </td><td>
1594 1605 list repository tags
1595 1606 </td></tr>
1596 1607 <tr><td>
1597 1608 <a href="/help/unbundle">
1598 1609 unbundle
1599 1610 </a>
1600 1611 </td><td>
1601 1612 apply one or more changegroup files
1602 1613 </td></tr>
1603 1614 <tr><td>
1604 1615 <a href="/help/verify">
1605 1616 verify
1606 1617 </a>
1607 1618 </td><td>
1608 1619 verify the integrity of the repository
1609 1620 </td></tr>
1610 1621 <tr><td>
1611 1622 <a href="/help/version">
1612 1623 version
1613 1624 </a>
1614 1625 </td><td>
1615 1626 output version and copyright information
1616 1627 </td></tr>
1617 1628 </table>
1618 1629 </div>
1619 1630 </div>
1620 1631
1621 1632 <script type="text/javascript">process_dates()</script>
1622 1633
1623 1634
1624 1635 </body>
1625 1636 </html>
1626 1637
1627 1638
1628 1639 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT "help/add"
1629 1640 200 Script output follows
1630 1641
1631 1642 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1632 1643 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1633 1644 <head>
1634 1645 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1635 1646 <meta name="robots" content="index, nofollow" />
1636 1647 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1637 1648 <script type="text/javascript" src="/static/mercurial.js"></script>
1638 1649
1639 1650 <title>Help: add</title>
1640 1651 </head>
1641 1652 <body>
1642 1653
1643 1654 <div class="container">
1644 1655 <div class="menu">
1645 1656 <div class="logo">
1646 1657 <a href="http://mercurial.selenic.com/">
1647 1658 <img src="/static/hglogo.png" alt="mercurial" /></a>
1648 1659 </div>
1649 1660 <ul>
1650 1661 <li><a href="/shortlog">log</a></li>
1651 1662 <li><a href="/graph">graph</a></li>
1652 1663 <li><a href="/tags">tags</a></li>
1653 1664 <li><a href="/bookmarks">bookmarks</a></li>
1654 1665 <li><a href="/branches">branches</a></li>
1655 1666 </ul>
1656 1667 <ul>
1657 1668 <li class="active"><a href="/help">help</a></li>
1658 1669 </ul>
1659 1670 </div>
1660 1671
1661 1672 <div class="main">
1662 1673 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
1663 1674 <h3>Help: add</h3>
1664 1675
1665 1676 <form class="search" action="/log">
1666 1677
1667 1678 <p><input name="rev" id="search1" type="text" size="30" /></p>
1668 1679 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
1669 1680 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
1670 1681 </form>
1671 1682 <div id="doc">
1672 1683 <p>
1673 1684 hg add [OPTION]... [FILE]...
1674 1685 </p>
1675 1686 <p>
1676 1687 add the specified files on the next commit
1677 1688 </p>
1678 1689 <p>
1679 1690 Schedule files to be version controlled and added to the
1680 1691 repository.
1681 1692 </p>
1682 1693 <p>
1683 1694 The files will be added to the repository at the next commit. To
1684 1695 undo an add before that, see &quot;hg forget&quot;.
1685 1696 </p>
1686 1697 <p>
1687 1698 If no names are given, add all files to the repository.
1688 1699 </p>
1689 1700 <p>
1690 1701 An example showing how new (unknown) files are added
1691 1702 automatically by &quot;hg add&quot;:
1692 1703 </p>
1693 1704 <pre>
1694 1705 \$ ls (re)
1695 1706 foo.c
1696 1707 \$ hg status (re)
1697 1708 ? foo.c
1698 1709 \$ hg add (re)
1699 1710 adding foo.c
1700 1711 \$ hg status (re)
1701 1712 A foo.c
1702 1713 </pre>
1703 1714 <p>
1704 1715 Returns 0 if all files are successfully added.
1705 1716 </p>
1706 1717 <p>
1707 1718 options:
1708 1719 </p>
1709 1720 <table>
1710 1721 <tr><td>-I</td>
1711 1722 <td>--include PATTERN [+]</td>
1712 1723 <td>include names matching the given patterns</td></tr>
1713 1724 <tr><td>-X</td>
1714 1725 <td>--exclude PATTERN [+]</td>
1715 1726 <td>exclude names matching the given patterns</td></tr>
1716 1727 <tr><td>-S</td>
1717 1728 <td>--subrepos</td>
1718 1729 <td>recurse into subrepositories</td></tr>
1719 1730 <tr><td>-n</td>
1720 1731 <td>--dry-run</td>
1721 1732 <td>do not perform actions, just print output</td></tr>
1722 1733 </table>
1723 1734 <p>
1724 1735 [+] marked option can be specified multiple times
1725 1736 </p>
1726 1737 <p>
1727 1738 global options:
1728 1739 </p>
1729 1740 <table>
1730 1741 <tr><td>-R</td>
1731 1742 <td>--repository REPO</td>
1732 1743 <td>repository root directory or name of overlay bundle file</td></tr>
1733 1744 <tr><td></td>
1734 1745 <td>--cwd DIR</td>
1735 1746 <td>change working directory</td></tr>
1736 1747 <tr><td>-y</td>
1737 1748 <td>--noninteractive</td>
1738 1749 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
1739 1750 <tr><td>-q</td>
1740 1751 <td>--quiet</td>
1741 1752 <td>suppress output</td></tr>
1742 1753 <tr><td>-v</td>
1743 1754 <td>--verbose</td>
1744 1755 <td>enable additional output</td></tr>
1745 1756 <tr><td></td>
1746 1757 <td>--config CONFIG [+]</td>
1747 1758 <td>set/override config option (use 'section.name=value')</td></tr>
1748 1759 <tr><td></td>
1749 1760 <td>--debug</td>
1750 1761 <td>enable debugging output</td></tr>
1751 1762 <tr><td></td>
1752 1763 <td>--debugger</td>
1753 1764 <td>start debugger</td></tr>
1754 1765 <tr><td></td>
1755 1766 <td>--encoding ENCODE</td>
1756 1767 <td>set the charset encoding (default: ascii)</td></tr>
1757 1768 <tr><td></td>
1758 1769 <td>--encodingmode MODE</td>
1759 1770 <td>set the charset encoding mode (default: strict)</td></tr>
1760 1771 <tr><td></td>
1761 1772 <td>--traceback</td>
1762 1773 <td>always print a traceback on exception</td></tr>
1763 1774 <tr><td></td>
1764 1775 <td>--time</td>
1765 1776 <td>time how long the command takes</td></tr>
1766 1777 <tr><td></td>
1767 1778 <td>--profile</td>
1768 1779 <td>print command execution profile</td></tr>
1769 1780 <tr><td></td>
1770 1781 <td>--version</td>
1771 1782 <td>output version information and exit</td></tr>
1772 1783 <tr><td>-h</td>
1773 1784 <td>--help</td>
1774 1785 <td>display help and exit</td></tr>
1775 1786 <tr><td></td>
1776 1787 <td>--hidden</td>
1777 1788 <td>consider hidden changesets</td></tr>
1778 1789 </table>
1779 1790 <p>
1780 1791 [+] marked option can be specified multiple times
1781 1792 </p>
1782 1793
1783 1794 </div>
1784 1795 </div>
1785 1796 </div>
1786 1797
1787 1798 <script type="text/javascript">process_dates()</script>
1788 1799
1789 1800
1790 1801 </body>
1791 1802 </html>
1792 1803
1793 1804
1794 1805 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT "help/remove"
1795 1806 200 Script output follows
1796 1807
1797 1808 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1798 1809 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1799 1810 <head>
1800 1811 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1801 1812 <meta name="robots" content="index, nofollow" />
1802 1813 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1803 1814 <script type="text/javascript" src="/static/mercurial.js"></script>
1804 1815
1805 1816 <title>Help: remove</title>
1806 1817 </head>
1807 1818 <body>
1808 1819
1809 1820 <div class="container">
1810 1821 <div class="menu">
1811 1822 <div class="logo">
1812 1823 <a href="http://mercurial.selenic.com/">
1813 1824 <img src="/static/hglogo.png" alt="mercurial" /></a>
1814 1825 </div>
1815 1826 <ul>
1816 1827 <li><a href="/shortlog">log</a></li>
1817 1828 <li><a href="/graph">graph</a></li>
1818 1829 <li><a href="/tags">tags</a></li>
1819 1830 <li><a href="/bookmarks">bookmarks</a></li>
1820 1831 <li><a href="/branches">branches</a></li>
1821 1832 </ul>
1822 1833 <ul>
1823 1834 <li class="active"><a href="/help">help</a></li>
1824 1835 </ul>
1825 1836 </div>
1826 1837
1827 1838 <div class="main">
1828 1839 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
1829 1840 <h3>Help: remove</h3>
1830 1841
1831 1842 <form class="search" action="/log">
1832 1843
1833 1844 <p><input name="rev" id="search1" type="text" size="30" /></p>
1834 1845 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
1835 1846 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
1836 1847 </form>
1837 1848 <div id="doc">
1838 1849 <p>
1839 1850 hg remove [OPTION]... FILE...
1840 1851 </p>
1841 1852 <p>
1842 1853 aliases: rm
1843 1854 </p>
1844 1855 <p>
1845 1856 remove the specified files on the next commit
1846 1857 </p>
1847 1858 <p>
1848 1859 Schedule the indicated files for removal from the current branch.
1849 1860 </p>
1850 1861 <p>
1851 1862 This command schedules the files to be removed at the next commit.
1852 1863 To undo a remove before that, see &quot;hg revert&quot;. To undo added
1853 1864 files, see &quot;hg forget&quot;.
1854 1865 </p>
1855 1866 <p>
1856 1867 -A/--after can be used to remove only files that have already
1857 1868 been deleted, -f/--force can be used to force deletion, and -Af
1858 1869 can be used to remove files from the next revision without
1859 1870 deleting them from the working directory.
1860 1871 </p>
1861 1872 <p>
1862 1873 The following table details the behavior of remove for different
1863 1874 file states (columns) and option combinations (rows). The file
1864 1875 states are Added [A], Clean [C], Modified [M] and Missing [!]
1865 1876 (as reported by &quot;hg status&quot;). The actions are Warn, Remove
1866 1877 (from branch) and Delete (from disk):
1867 1878 </p>
1868 1879 <table>
1869 1880 <tr><td>opt/state</td>
1870 1881 <td>A</td>
1871 1882 <td>C</td>
1872 1883 <td>M</td>
1873 1884 <td>!</td></tr>
1874 1885 <tr><td>none</td>
1875 1886 <td>W</td>
1876 1887 <td>RD</td>
1877 1888 <td>W</td>
1878 1889 <td>R</td></tr>
1879 1890 <tr><td>-f</td>
1880 1891 <td>R</td>
1881 1892 <td>RD</td>
1882 1893 <td>RD</td>
1883 1894 <td>R</td></tr>
1884 1895 <tr><td>-A</td>
1885 1896 <td>W</td>
1886 1897 <td>W</td>
1887 1898 <td>W</td>
1888 1899 <td>R</td></tr>
1889 1900 <tr><td>-Af</td>
1890 1901 <td>R</td>
1891 1902 <td>R</td>
1892 1903 <td>R</td>
1893 1904 <td>R</td></tr>
1894 1905 </table>
1895 1906 <p>
1896 1907 Note that remove never deletes files in Added [A] state from the
1897 1908 working directory, not even if option --force is specified.
1898 1909 </p>
1899 1910 <p>
1900 1911 Returns 0 on success, 1 if any warnings encountered.
1901 1912 </p>
1902 1913 <p>
1903 1914 options:
1904 1915 </p>
1905 1916 <table>
1906 1917 <tr><td>-A</td>
1907 1918 <td>--after</td>
1908 1919 <td>record delete for missing files</td></tr>
1909 1920 <tr><td>-f</td>
1910 1921 <td>--force</td>
1911 1922 <td>remove (and delete) file even if added or modified</td></tr>
1912 1923 <tr><td>-I</td>
1913 1924 <td>--include PATTERN [+]</td>
1914 1925 <td>include names matching the given patterns</td></tr>
1915 1926 <tr><td>-X</td>
1916 1927 <td>--exclude PATTERN [+]</td>
1917 1928 <td>exclude names matching the given patterns</td></tr>
1918 1929 </table>
1919 1930 <p>
1920 1931 [+] marked option can be specified multiple times
1921 1932 </p>
1922 1933 <p>
1923 1934 global options:
1924 1935 </p>
1925 1936 <table>
1926 1937 <tr><td>-R</td>
1927 1938 <td>--repository REPO</td>
1928 1939 <td>repository root directory or name of overlay bundle file</td></tr>
1929 1940 <tr><td></td>
1930 1941 <td>--cwd DIR</td>
1931 1942 <td>change working directory</td></tr>
1932 1943 <tr><td>-y</td>
1933 1944 <td>--noninteractive</td>
1934 1945 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
1935 1946 <tr><td>-q</td>
1936 1947 <td>--quiet</td>
1937 1948 <td>suppress output</td></tr>
1938 1949 <tr><td>-v</td>
1939 1950 <td>--verbose</td>
1940 1951 <td>enable additional output</td></tr>
1941 1952 <tr><td></td>
1942 1953 <td>--config CONFIG [+]</td>
1943 1954 <td>set/override config option (use 'section.name=value')</td></tr>
1944 1955 <tr><td></td>
1945 1956 <td>--debug</td>
1946 1957 <td>enable debugging output</td></tr>
1947 1958 <tr><td></td>
1948 1959 <td>--debugger</td>
1949 1960 <td>start debugger</td></tr>
1950 1961 <tr><td></td>
1951 1962 <td>--encoding ENCODE</td>
1952 1963 <td>set the charset encoding (default: ascii)</td></tr>
1953 1964 <tr><td></td>
1954 1965 <td>--encodingmode MODE</td>
1955 1966 <td>set the charset encoding mode (default: strict)</td></tr>
1956 1967 <tr><td></td>
1957 1968 <td>--traceback</td>
1958 1969 <td>always print a traceback on exception</td></tr>
1959 1970 <tr><td></td>
1960 1971 <td>--time</td>
1961 1972 <td>time how long the command takes</td></tr>
1962 1973 <tr><td></td>
1963 1974 <td>--profile</td>
1964 1975 <td>print command execution profile</td></tr>
1965 1976 <tr><td></td>
1966 1977 <td>--version</td>
1967 1978 <td>output version information and exit</td></tr>
1968 1979 <tr><td>-h</td>
1969 1980 <td>--help</td>
1970 1981 <td>display help and exit</td></tr>
1971 1982 <tr><td></td>
1972 1983 <td>--hidden</td>
1973 1984 <td>consider hidden changesets</td></tr>
1974 1985 </table>
1975 1986 <p>
1976 1987 [+] marked option can be specified multiple times
1977 1988 </p>
1978 1989
1979 1990 </div>
1980 1991 </div>
1981 1992 </div>
1982 1993
1983 1994 <script type="text/javascript">process_dates()</script>
1984 1995
1985 1996
1986 1997 </body>
1987 1998 </html>
1988 1999
1989 2000
1990 2001 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT "help/revisions"
1991 2002 200 Script output follows
1992 2003
1993 2004 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1994 2005 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1995 2006 <head>
1996 2007 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1997 2008 <meta name="robots" content="index, nofollow" />
1998 2009 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1999 2010 <script type="text/javascript" src="/static/mercurial.js"></script>
2000 2011
2001 2012 <title>Help: revisions</title>
2002 2013 </head>
2003 2014 <body>
2004 2015
2005 2016 <div class="container">
2006 2017 <div class="menu">
2007 2018 <div class="logo">
2008 2019 <a href="http://mercurial.selenic.com/">
2009 2020 <img src="/static/hglogo.png" alt="mercurial" /></a>
2010 2021 </div>
2011 2022 <ul>
2012 2023 <li><a href="/shortlog">log</a></li>
2013 2024 <li><a href="/graph">graph</a></li>
2014 2025 <li><a href="/tags">tags</a></li>
2015 2026 <li><a href="/bookmarks">bookmarks</a></li>
2016 2027 <li><a href="/branches">branches</a></li>
2017 2028 </ul>
2018 2029 <ul>
2019 2030 <li class="active"><a href="/help">help</a></li>
2020 2031 </ul>
2021 2032 </div>
2022 2033
2023 2034 <div class="main">
2024 2035 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2025 2036 <h3>Help: revisions</h3>
2026 2037
2027 2038 <form class="search" action="/log">
2028 2039
2029 2040 <p><input name="rev" id="search1" type="text" size="30" /></p>
2030 2041 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2031 2042 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2032 2043 </form>
2033 2044 <div id="doc">
2034 2045 <h1>Specifying Single Revisions</h1>
2035 2046 <p>
2036 2047 Mercurial supports several ways to specify individual revisions.
2037 2048 </p>
2038 2049 <p>
2039 2050 A plain integer is treated as a revision number. Negative integers are
2040 2051 treated as sequential offsets from the tip, with -1 denoting the tip,
2041 2052 -2 denoting the revision prior to the tip, and so forth.
2042 2053 </p>
2043 2054 <p>
2044 2055 A 40-digit hexadecimal string is treated as a unique revision
2045 2056 identifier.
2046 2057 </p>
2047 2058 <p>
2048 2059 A hexadecimal string less than 40 characters long is treated as a
2049 2060 unique revision identifier and is referred to as a short-form
2050 2061 identifier. A short-form identifier is only valid if it is the prefix
2051 2062 of exactly one full-length identifier.
2052 2063 </p>
2053 2064 <p>
2054 2065 Any other string is treated as a bookmark, tag, or branch name. A
2055 2066 bookmark is a movable pointer to a revision. A tag is a permanent name
2056 2067 associated with a revision. A branch name denotes the tipmost open branch head
2057 2068 of that branch - or if they are all closed, the tipmost closed head of the
2058 2069 branch. Bookmark, tag, and branch names must not contain the &quot;:&quot; character.
2059 2070 </p>
2060 2071 <p>
2061 2072 The reserved name &quot;tip&quot; always identifies the most recent revision.
2062 2073 </p>
2063 2074 <p>
2064 2075 The reserved name &quot;null&quot; indicates the null revision. This is the
2065 2076 revision of an empty repository, and the parent of revision 0.
2066 2077 </p>
2067 2078 <p>
2068 2079 The reserved name &quot;.&quot; indicates the working directory parent. If no
2069 2080 working directory is checked out, it is equivalent to null. If an
2070 2081 uncommitted merge is in progress, &quot;.&quot; is the revision of the first
2071 2082 parent.
2072 2083 </p>
2073 2084
2074 2085 </div>
2075 2086 </div>
2076 2087 </div>
2077 2088
2078 2089 <script type="text/javascript">process_dates()</script>
2079 2090
2080 2091
2081 2092 </body>
2082 2093 </html>
2083 2094
2084 2095
2085 2096 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
2086 2097
2087 2098 #endif
General Comments 0
You need to be logged in to leave comments. Login now