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