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