71 |
71 |
72 Without the -a option, annotate will avoid processing files it |
72 Without the -a option, annotate will avoid processing files it |
73 detects as binary. With -a, annotate will generate an annotation |
73 detects as binary. With -a, annotate will generate an annotation |
74 anyway, probably with undesirable results. |
74 anyway, probably with undesirable results. |
75 """ |
75 """ |
76 getdate = util.cachefunc(lambda x: util.datestr(x.date())) |
76 getdate = util.cachefunc(lambda x: util.datestr(x[0].date())) |
77 |
77 |
78 if not pats: |
78 if not pats: |
79 raise util.Abort(_('at least one file name or pattern required')) |
79 raise util.Abort(_('at least one file name or pattern required')) |
80 |
80 |
81 opmap = [['user', lambda x: ui.shortuser(x.user())], |
81 opmap = [('user', lambda x: ui.shortuser(x[0].user())), |
82 ['number', lambda x: str(x.rev())], |
82 ('number', lambda x: str(x[0].rev())), |
83 ['changeset', lambda x: short(x.node())], |
83 ('changeset', lambda x: short(x[0].node())), |
84 ['date', getdate], ['follow', lambda x: x.path()]] |
84 ('date', getdate), |
|
85 ('follow', lambda x: x[0].path()), |
|
86 ] |
|
87 |
85 if (not opts['user'] and not opts['changeset'] and not opts['date'] |
88 if (not opts['user'] and not opts['changeset'] and not opts['date'] |
86 and not opts['follow']): |
89 and not opts['follow']): |
87 opts['number'] = 1 |
90 opts['number'] = 1 |
|
91 |
|
92 linenumber = opts.get('line_number') is not None |
|
93 if (linenumber and (not opts['changeset']) and (not opts['number'])): |
|
94 raise util.Abort(_('at least one of -n/-c is required for -l')) |
|
95 |
|
96 funcmap = [func for op, func in opmap if opts.get(op)] |
|
97 if linenumber: |
|
98 lastfunc = funcmap[-1] |
|
99 funcmap[-1] = lambda x: "%s:%s" % (lastfunc(x), x[1]) |
88 |
100 |
89 ctx = repo.changectx(opts['rev']) |
101 ctx = repo.changectx(opts['rev']) |
90 |
102 |
91 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, |
103 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, |
92 node=ctx.node()): |
104 node=ctx.node()): |
93 fctx = ctx.filectx(abs) |
105 fctx = ctx.filectx(abs) |
94 if not opts['text'] and util.binary(fctx.data()): |
106 if not opts['text'] and util.binary(fctx.data()): |
95 ui.write(_("%s: binary file\n") % ((pats and rel) or abs)) |
107 ui.write(_("%s: binary file\n") % ((pats and rel) or abs)) |
96 continue |
108 continue |
97 |
109 |
98 lines = fctx.annotate(follow=opts.get('follow')) |
110 lines = fctx.annotate(follow=opts.get('follow'), |
|
111 linenumber=linenumber) |
99 pieces = [] |
112 pieces = [] |
100 |
113 |
101 for o, f in opmap: |
114 for f in funcmap: |
102 if opts[o]: |
115 l = [f(n) for n, dummy in lines] |
103 l = [f(n) for n, dummy in lines] |
116 if l: |
104 if l: |
117 m = max(map(len, l)) |
105 m = max(map(len, l)) |
118 pieces.append(["%*s" % (m, x) for x in l]) |
106 pieces.append(["%*s" % (m, x) for x in l]) |
|
107 |
119 |
108 if pieces: |
120 if pieces: |
109 for p, l in zip(zip(*pieces), lines): |
121 for p, l in zip(zip(*pieces), lines): |
110 ui.write("%s: %s" % (" ".join(p), l[1])) |
122 ui.write("%s: %s" % (" ".join(p), l[1])) |
111 |
123 |
414 will be committed. |
426 will be committed. |
415 |
427 |
416 If no commit message is specified, the editor configured in your hgrc |
428 If no commit message is specified, the editor configured in your hgrc |
417 or in the EDITOR environment variable is started to enter a message. |
429 or in the EDITOR environment variable is started to enter a message. |
418 """ |
430 """ |
419 message = cmdutil.logmessage(opts) |
431 def commitfunc(ui, repo, files, message, match, opts): |
420 |
432 return repo.commit(files, message, opts['user'], opts['date'], match, |
421 if opts['addremove']: |
433 force_editor=opts.get('force_editor')) |
422 cmdutil.addremove(repo, pats, opts) |
434 cmdutil.commit(ui, repo, commitfunc, pats, opts) |
423 fns, match, anypats = cmdutil.matchpats(repo, pats, opts) |
435 |
424 if pats: |
436 def docopy(ui, repo, pats, opts): |
425 status = repo.status(files=fns, match=match) |
|
426 modified, added, removed, deleted, unknown = status[:5] |
|
427 files = modified + added + removed |
|
428 slist = None |
|
429 for f in fns: |
|
430 if f == '.': |
|
431 continue |
|
432 if f not in files: |
|
433 rf = repo.wjoin(f) |
|
434 try: |
|
435 mode = os.lstat(rf)[stat.ST_MODE] |
|
436 except OSError: |
|
437 raise util.Abort(_("file %s not found!") % rf) |
|
438 if stat.S_ISDIR(mode): |
|
439 name = f + '/' |
|
440 if slist is None: |
|
441 slist = list(files) |
|
442 slist.sort() |
|
443 i = bisect.bisect(slist, name) |
|
444 if i >= len(slist) or not slist[i].startswith(name): |
|
445 raise util.Abort(_("no match under directory %s!") |
|
446 % rf) |
|
447 elif not (stat.S_ISREG(mode) or stat.S_ISLNK(mode)): |
|
448 raise util.Abort(_("can't commit %s: " |
|
449 "unsupported file type!") % rf) |
|
450 elif repo.dirstate.state(f) == '?': |
|
451 raise util.Abort(_("file %s not tracked!") % rf) |
|
452 else: |
|
453 files = [] |
|
454 try: |
|
455 repo.commit(files, message, opts['user'], opts['date'], match, |
|
456 force_editor=opts.get('force_editor')) |
|
457 except ValueError, inst: |
|
458 raise util.Abort(str(inst)) |
|
459 |
|
460 def docopy(ui, repo, pats, opts, wlock): |
|
461 # called with the repo lock held |
437 # called with the repo lock held |
462 # |
438 # |
463 # hgsep => pathname that uses "/" to separate directories |
439 # hgsep => pathname that uses "/" to separate directories |
464 # ossep => pathname that uses os.sep to separate directories |
440 # ossep => pathname that uses os.sep to separate directories |
465 cwd = repo.getcwd() |
441 cwd = repo.getcwd() |
1570 if opts.get('exact') or not opts['force']: |
1553 if opts.get('exact') or not opts['force']: |
1571 cmdutil.bail_if_changed(repo) |
1554 cmdutil.bail_if_changed(repo) |
1572 |
1555 |
1573 d = opts["base"] |
1556 d = opts["base"] |
1574 strip = opts["strip"] |
1557 strip = opts["strip"] |
1575 |
1558 wlock = lock = None |
1576 wlock = repo.wlock() |
1559 try: |
1577 lock = repo.lock() |
1560 wlock = repo.wlock() |
1578 |
1561 lock = repo.lock() |
1579 for p in patches: |
1562 for p in patches: |
1580 pf = os.path.join(d, p) |
1563 pf = os.path.join(d, p) |
1581 |
1564 |
1582 if pf == '-': |
1565 if pf == '-': |
1583 ui.status(_("applying patch from stdin\n")) |
1566 ui.status(_("applying patch from stdin\n")) |
1584 tmpname, message, user, date, branch, nodeid, p1, p2 = patch.extract(ui, sys.stdin) |
1567 data = patch.extract(ui, sys.stdin) |
1585 else: |
|
1586 ui.status(_("applying %s\n") % p) |
|
1587 tmpname, message, user, date, branch, nodeid, p1, p2 = patch.extract(ui, file(pf, 'rb')) |
|
1588 |
|
1589 if tmpname is None: |
|
1590 raise util.Abort(_('no diffs found')) |
|
1591 |
|
1592 try: |
|
1593 cmdline_message = cmdutil.logmessage(opts) |
|
1594 if cmdline_message: |
|
1595 # pickup the cmdline msg |
|
1596 message = cmdline_message |
|
1597 elif message: |
|
1598 # pickup the patch msg |
|
1599 message = message.strip() |
|
1600 else: |
1568 else: |
1601 # launch the editor |
1569 ui.status(_("applying %s\n") % p) |
1602 message = None |
1570 data = patch.extract(ui, file(pf, 'rb')) |
1603 ui.debug(_('message:\n%s\n') % message) |
1571 |
1604 |
1572 tmpname, message, user, date, branch, nodeid, p1, p2 = data |
1605 wp = repo.workingctx().parents() |
1573 |
1606 if opts.get('exact'): |
1574 if tmpname is None: |
1607 if not nodeid or not p1: |
1575 raise util.Abort(_('no diffs found')) |
1608 raise util.Abort(_('not a mercurial patch')) |
1576 |
1609 p1 = repo.lookup(p1) |
1577 try: |
1610 p2 = repo.lookup(p2 or hex(nullid)) |
1578 cmdline_message = cmdutil.logmessage(opts) |
1611 |
1579 if cmdline_message: |
1612 if p1 != wp[0].node(): |
1580 # pickup the cmdline msg |
1613 hg.clean(repo, p1, wlock=wlock) |
1581 message = cmdline_message |
1614 repo.dirstate.setparents(p1, p2) |
1582 elif message: |
1615 elif p2: |
1583 # pickup the patch msg |
|
1584 message = message.strip() |
|
1585 else: |
|
1586 # launch the editor |
|
1587 message = None |
|
1588 ui.debug(_('message:\n%s\n') % message) |
|
1589 |
|
1590 wp = repo.workingctx().parents() |
|
1591 if opts.get('exact'): |
|
1592 if not nodeid or not p1: |
|
1593 raise util.Abort(_('not a mercurial patch')) |
|
1594 p1 = repo.lookup(p1) |
|
1595 p2 = repo.lookup(p2 or hex(nullid)) |
|
1596 |
|
1597 if p1 != wp[0].node(): |
|
1598 hg.clean(repo, p1) |
|
1599 repo.dirstate.setparents(p1, p2) |
|
1600 elif p2: |
|
1601 try: |
|
1602 p1 = repo.lookup(p1) |
|
1603 p2 = repo.lookup(p2) |
|
1604 if p1 == wp[0].node(): |
|
1605 repo.dirstate.setparents(p1, p2) |
|
1606 except hg.RepoError: |
|
1607 pass |
|
1608 if opts.get('exact') or opts.get('import_branch'): |
|
1609 repo.dirstate.setbranch(branch or 'default') |
|
1610 |
|
1611 files = {} |
1616 try: |
1612 try: |
1617 p1 = repo.lookup(p1) |
1613 fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root, |
1618 p2 = repo.lookup(p2) |
1614 files=files) |
1619 if p1 == wp[0].node(): |
1615 finally: |
1620 repo.dirstate.setparents(p1, p2) |
1616 files = patch.updatedir(ui, repo, files) |
1621 except hg.RepoError: |
1617 n = repo.commit(files, message, user, date) |
1622 pass |
1618 if opts.get('exact'): |
1623 if opts.get('exact') or opts.get('import_branch'): |
1619 if hex(n) != nodeid: |
1624 repo.dirstate.setbranch(branch or 'default') |
1620 repo.rollback() |
1625 |
1621 raise util.Abort(_('patch is damaged' + |
1626 files = {} |
1622 ' or loses information')) |
1627 try: |
|
1628 fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root, |
|
1629 files=files) |
|
1630 finally: |
1623 finally: |
1631 files = patch.updatedir(ui, repo, files, wlock=wlock) |
1624 os.unlink(tmpname) |
1632 n = repo.commit(files, message, user, date, wlock=wlock, lock=lock) |
1625 finally: |
1633 if opts.get('exact'): |
1626 del lock, wlock |
1634 if hex(n) != nodeid: |
|
1635 repo.rollback(wlock=wlock, lock=lock) |
|
1636 raise util.Abort(_('patch is damaged or loses information')) |
|
1637 finally: |
|
1638 os.unlink(tmpname) |
|
1639 |
1627 |
1640 def incoming(ui, repo, source="default", **opts): |
1628 def incoming(ui, repo, source="default", **opts): |
1641 """show new changesets found in source |
1629 """show new changesets found in source |
1642 |
1630 |
1643 Show new changesets found in the specified path/URL or the default |
1631 Show new changesets found in the specified path/URL or the default |
2296 if node == parent: |
2286 if node == parent: |
2297 pmf = mf |
2287 pmf = mf |
2298 else: |
2288 else: |
2299 pmf = None |
2289 pmf = None |
2300 |
2290 |
2301 wlock = repo.wlock() |
|
2302 |
|
2303 # need all matching names in dirstate and manifest of target rev, |
2291 # need all matching names in dirstate and manifest of target rev, |
2304 # so have to walk both. do not print errors if files exist in one |
2292 # so have to walk both. do not print errors if files exist in one |
2305 # but not other. |
2293 # but not other. |
2306 |
2294 |
2307 names = {} |
2295 names = {} |
2308 target_only = {} |
2296 target_only = {} |
2309 |
2297 |
2310 # walk dirstate. |
2298 wlock = repo.wlock() |
2311 |
2299 try: |
2312 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, |
2300 # walk dirstate. |
2313 badmatch=mf.has_key): |
2301 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, |
2314 names[abs] = (rel, exact) |
2302 badmatch=mf.has_key): |
2315 if src == 'b': |
2303 names[abs] = (rel, exact) |
|
2304 if src == 'b': |
|
2305 target_only[abs] = True |
|
2306 |
|
2307 # walk target manifest. |
|
2308 |
|
2309 def badmatch(path): |
|
2310 if path in names: |
|
2311 return True |
|
2312 path_ = path + '/' |
|
2313 for f in names: |
|
2314 if f.startswith(path_): |
|
2315 return True |
|
2316 return False |
|
2317 |
|
2318 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, node=node, |
|
2319 badmatch=badmatch): |
|
2320 if abs in names or src == 'b': |
|
2321 continue |
|
2322 names[abs] = (rel, exact) |
2316 target_only[abs] = True |
2323 target_only[abs] = True |
2317 |
2324 |
2318 # walk target manifest. |
2325 changes = repo.status(match=names.has_key)[:5] |
2319 |
2326 modified, added, removed, deleted, unknown = map(dict.fromkeys, changes) |
2320 def badmatch(path): |
2327 |
2321 if path in names: |
2328 revert = ([], _('reverting %s\n')) |
2322 return True |
2329 add = ([], _('adding %s\n')) |
2323 path_ = path + '/' |
2330 remove = ([], _('removing %s\n')) |
2324 for f in names: |
2331 forget = ([], _('forgetting %s\n')) |
2325 if f.startswith(path_): |
2332 undelete = ([], _('undeleting %s\n')) |
2326 return True |
2333 update = {} |
2327 return False |
2334 |
2328 |
2335 disptable = ( |
2329 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, node=node, |
2336 # dispatch table: |
2330 badmatch=badmatch): |
2337 # file state |
2331 if abs in names or src == 'b': |
2338 # action if in target manifest |
2332 continue |
2339 # action if not in target manifest |
2333 names[abs] = (rel, exact) |
2340 # make backup if in target manifest |
2334 target_only[abs] = True |
2341 # make backup if not in target manifest |
2335 |
2342 (modified, revert, remove, True, True), |
2336 changes = repo.status(match=names.has_key, wlock=wlock)[:5] |
2343 (added, revert, forget, True, False), |
2337 modified, added, removed, deleted, unknown = map(dict.fromkeys, changes) |
2344 (removed, undelete, None, False, False), |
2338 |
2345 (deleted, revert, remove, False, False), |
2339 revert = ([], _('reverting %s\n')) |
2346 (unknown, add, None, True, False), |
2340 add = ([], _('adding %s\n')) |
2347 (target_only, add, None, False, False), |
2341 remove = ([], _('removing %s\n')) |
2348 ) |
2342 forget = ([], _('forgetting %s\n')) |
2349 |
2343 undelete = ([], _('undeleting %s\n')) |
2350 entries = names.items() |
2344 update = {} |
2351 entries.sort() |
2345 |
2352 |
2346 disptable = ( |
2353 for abs, (rel, exact) in entries: |
2347 # dispatch table: |
2354 mfentry = mf.get(abs) |
2348 # file state |
2355 target = repo.wjoin(abs) |
2349 # action if in target manifest |
2356 def handle(xlist, dobackup): |
2350 # action if not in target manifest |
2357 xlist[0].append(abs) |
2351 # make backup if in target manifest |
2358 update[abs] = 1 |
2352 # make backup if not in target manifest |
2359 if dobackup and not opts['no_backup'] and util.lexists(target): |
2353 (modified, revert, remove, True, True), |
2360 bakname = "%s.orig" % rel |
2354 (added, revert, forget, True, False), |
2361 ui.note(_('saving current version of %s as %s\n') % |
2355 (removed, undelete, None, False, False), |
2362 (rel, bakname)) |
2356 (deleted, revert, remove, False, False), |
2363 if not opts.get('dry_run'): |
2357 (unknown, add, None, True, False), |
2364 util.copyfile(target, bakname) |
2358 (target_only, add, None, False, False), |
2365 if ui.verbose or not exact: |
2359 ) |
2366 ui.status(xlist[1] % rel) |
2360 |
2367 for table, hitlist, misslist, backuphit, backupmiss in disptable: |
2361 entries = names.items() |
2368 if abs not in table: continue |
2362 entries.sort() |
2369 # file has changed in dirstate |
2363 |
2370 if mfentry: |
2364 for abs, (rel, exact) in entries: |
2371 handle(hitlist, backuphit) |
2365 mfentry = mf.get(abs) |
2372 elif misslist is not None: |
2366 target = repo.wjoin(abs) |
2373 handle(misslist, backupmiss) |
2367 def handle(xlist, dobackup): |
2374 else: |
2368 xlist[0].append(abs) |
2375 if exact: ui.warn(_('file not managed: %s\n') % rel) |
2369 update[abs] = 1 |
2376 break |
2370 if dobackup and not opts['no_backup'] and util.lexists(target): |
|
2371 bakname = "%s.orig" % rel |
|
2372 ui.note(_('saving current version of %s as %s\n') % |
|
2373 (rel, bakname)) |
|
2374 if not opts.get('dry_run'): |
|
2375 util.copyfile(target, bakname) |
|
2376 if ui.verbose or not exact: |
|
2377 ui.status(xlist[1] % rel) |
|
2378 for table, hitlist, misslist, backuphit, backupmiss in disptable: |
|
2379 if abs not in table: continue |
|
2380 # file has changed in dirstate |
|
2381 if mfentry: |
|
2382 handle(hitlist, backuphit) |
|
2383 elif misslist is not None: |
|
2384 handle(misslist, backupmiss) |
|
2385 else: |
2377 else: |
2386 if exact: ui.warn(_('file not managed: %s\n') % rel) |
2378 # file has not changed in dirstate |
2387 break |
2379 if node == parent: |
2388 else: |
2380 if exact: ui.warn(_('no changes needed to %s\n') % rel) |
2389 # file has not changed in dirstate |
2381 continue |
2390 if node == parent: |
2382 if pmf is None: |
2391 if exact: ui.warn(_('no changes needed to %s\n') % rel) |
2383 # only need parent manifest in this unlikely case, |
2392 continue |
2384 # so do not read by default |
2393 if pmf is None: |
2385 pmf = repo.changectx(parent).manifest() |
2394 # only need parent manifest in this unlikely case, |
2386 if abs in pmf: |
2395 # so do not read by default |
2387 if mfentry: |
2396 pmf = repo.changectx(parent).manifest() |
2388 # if version of file is same in parent and target |
2397 if abs in pmf: |
2389 # manifests, do nothing |
2398 if mfentry: |
2390 if pmf[abs] != mfentry: |
2399 # if version of file is same in parent and target |
2391 handle(revert, False) |
2400 # manifests, do nothing |
2392 else: |
2401 if pmf[abs] != mfentry: |
2393 handle(remove, False) |
2402 handle(revert, False) |
2394 |
2403 else: |
2395 if not opts.get('dry_run'): |
2404 handle(remove, False) |
2396 for f in forget[0]: |
2405 |
2397 repo.dirstate.forget(f) |
2406 if not opts.get('dry_run'): |
2398 r = hg.revert(repo, node, update.has_key) |
2407 repo.dirstate.forget(forget[0]) |
2399 for f in add[0]: |
2408 r = hg.revert(repo, node, update.has_key, wlock) |
2400 repo.dirstate.add(f) |
2409 repo.dirstate.update(add[0], 'a') |
2401 for f in undelete[0]: |
2410 repo.dirstate.update(undelete[0], 'n') |
2402 repo.dirstate.normal(f) |
2411 repo.dirstate.update(remove[0], 'r') |
2403 for f in remove[0]: |
2412 return r |
2404 repo.dirstate.remove(f) |
|
2405 return r |
|
2406 finally: |
|
2407 del wlock |
2413 |
2408 |
2414 def rollback(ui, repo): |
2409 def rollback(ui, repo): |
2415 """roll back the last transaction in this repository |
2410 """roll back the last transaction in this repository |
2416 |
2411 |
2417 Roll back the last transaction in this repository, restoring the |
2412 Roll back the last transaction in this repository, restoring the |
2772 ('a', 'text', None, _('treat all files as text')), |
2771 ('a', 'text', None, _('treat all files as text')), |
2773 ('u', 'user', None, _('list the author')), |
2772 ('u', 'user', None, _('list the author')), |
2774 ('d', 'date', None, _('list the date')), |
2773 ('d', 'date', None, _('list the date')), |
2775 ('n', 'number', None, _('list the revision number (default)')), |
2774 ('n', 'number', None, _('list the revision number (default)')), |
2776 ('c', 'changeset', None, _('list the changeset')), |
2775 ('c', 'changeset', None, _('list the changeset')), |
|
2776 ('l', 'line-number', None, |
|
2777 _('show line number at the first appearance')) |
2777 ] + walkopts, |
2778 ] + walkopts, |
2778 _('hg annotate [-r REV] [-f] [-a] [-u] [-d] [-n] [-c] FILE...')), |
2779 _('hg annotate [-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...')), |
2779 "archive": |
2780 "archive": |
2780 (archive, |
2781 (archive, |
2781 [('', 'no-decode', None, _('do not pass files through decoders')), |
2782 [('', 'no-decode', None, _('do not pass files through decoders')), |
2782 ('p', 'prefix', '', _('directory prefix for files in archive')), |
2783 ('p', 'prefix', '', _('directory prefix for files in archive')), |
2783 ('r', 'rev', '', _('revision to distribute')), |
2784 ('r', 'rev', '', _('revision to distribute')), |
2786 _('hg archive [OPTION]... DEST')), |
2787 _('hg archive [OPTION]... DEST')), |
2787 "backout": |
2788 "backout": |
2788 (backout, |
2789 (backout, |
2789 [('', 'merge', None, |
2790 [('', 'merge', None, |
2790 _('merge with old dirstate parent after backout')), |
2791 _('merge with old dirstate parent after backout')), |
2791 ('d', 'date', '', _('record datecode as commit date')), |
|
2792 ('', 'parent', '', _('parent to choose when backing out merge')), |
2792 ('', 'parent', '', _('parent to choose when backing out merge')), |
2793 ('u', 'user', '', _('record user as committer')), |
|
2794 ('r', 'rev', '', _('revision to backout')), |
2793 ('r', 'rev', '', _('revision to backout')), |
2795 ] + walkopts + commitopts, |
2794 ] + walkopts + commitopts + commitopts2, |
2796 _('hg backout [OPTION]... [-r] REV')), |
2795 _('hg backout [OPTION]... [-r] REV')), |
2797 "branch": |
2796 "branch": |
2798 (branch, |
2797 (branch, |
2799 [('f', 'force', None, |
2798 [('f', 'force', None, |
2800 _('set branch name even if it shadows an existing branch'))], |
2799 _('set branch name even if it shadows an existing branch'))], |
3073 ' (serve more than one repo)')), |
3068 ' (serve more than one repo)')), |
3074 ('', 'pid-file', '', _('name of file to write process ID to')), |
3069 ('', 'pid-file', '', _('name of file to write process ID to')), |
3075 ('', 'stdio', None, _('for remote clients')), |
3070 ('', 'stdio', None, _('for remote clients')), |
3076 ('t', 'templates', '', _('web templates to use')), |
3071 ('t', 'templates', '', _('web templates to use')), |
3077 ('', 'style', '', _('template style to use')), |
3072 ('', 'style', '', _('template style to use')), |
3078 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4'))], |
3073 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4')), |
|
3074 ('', 'certificate', '', _('SSL certificate file'))], |
3079 _('hg serve [OPTION]...')), |
3075 _('hg serve [OPTION]...')), |
3080 "^status|st": |
3076 "^status|st": |
3081 (status, |
3077 (status, |
3082 [('A', 'all', None, _('show status of all files')), |
3078 [('A', 'all', None, _('show status of all files')), |
3083 ('m', 'modified', None, _('show only modified files')), |
3079 ('m', 'modified', None, _('show only modified files')), |
3096 _('hg status [OPTION]... [FILE]...')), |
3092 _('hg status [OPTION]... [FILE]...')), |
3097 "tag": |
3093 "tag": |
3098 (tag, |
3094 (tag, |
3099 [('f', 'force', None, _('replace existing tag')), |
3095 [('f', 'force', None, _('replace existing tag')), |
3100 ('l', 'local', None, _('make the tag local')), |
3096 ('l', 'local', None, _('make the tag local')), |
3101 ('m', 'message', '', _('message for tag commit log entry')), |
|
3102 ('d', 'date', '', _('record datecode as commit date')), |
|
3103 ('u', 'user', '', _('record user as commiter')), |
|
3104 ('r', 'rev', '', _('revision to tag')), |
3097 ('r', 'rev', '', _('revision to tag')), |
3105 ('', 'remove', None, _('remove a tag'))], |
3098 ('', 'remove', None, _('remove a tag')), |
|
3099 # -l/--local is already there, commitopts cannot be used |
|
3100 ('m', 'message', '', _('use <text> as commit message')), |
|
3101 ] + commitopts2, |
3106 _('hg tag [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME')), |
3102 _('hg tag [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME')), |
3107 "tags": (tags, [], _('hg tags')), |
3103 "tags": (tags, [], _('hg tags')), |
3108 "tip": |
3104 "tip": |
3109 (tip, |
3105 (tip, |
3110 [('', 'style', '', _('display using template map file')), |
3106 [('', 'style', '', _('display using template map file')), |