changeset 1402 | 9d2c2e6b32b5 |
parent 1400 | cf9a1233738a |
child 1404 | 67e20e27d8df |
1401:fbf2b10011aa | 1402:9d2c2e6b32b5 |
---|---|
177 num = repo.changelog.rev(repo.lookup(val)) |
177 num = repo.changelog.rev(repo.lookup(val)) |
178 except KeyError: |
178 except KeyError: |
179 try: |
179 try: |
180 num = revlog.rev(revlog.lookup(val)) |
180 num = revlog.rev(revlog.lookup(val)) |
181 except KeyError: |
181 except KeyError: |
182 raise util.Abort('invalid revision identifier %s', val) |
182 raise util.Abort(_('invalid revision identifier %s'), val) |
183 return num |
183 return num |
184 seen = {} |
184 seen = {} |
185 for spec in revs: |
185 for spec in revs: |
186 if spec.find(revrangesep) >= 0: |
186 if spec.find(revrangesep) >= 0: |
187 start, end = spec.split(revrangesep, 1) |
187 start, end = spec.split(revrangesep, 1) |
237 c = expander[c]() |
237 c = expander[c]() |
238 newname.append(c) |
238 newname.append(c) |
239 i += 1 |
239 i += 1 |
240 return ''.join(newname) |
240 return ''.join(newname) |
241 except KeyError, inst: |
241 except KeyError, inst: |
242 raise util.Abort("invalid format spec '%%%s' in output file name", |
242 raise util.Abort(_("invalid format spec '%%%s' in output file name"), |
243 inst.args[0]) |
243 inst.args[0]) |
244 |
244 |
245 def make_file(repo, r, pat, node=None, |
245 def make_file(repo, r, pat, node=None, |
246 total=None, seqno=None, revwidth=None, mode='wb', pathname=None): |
246 total=None, seqno=None, revwidth=None, mode='wb', pathname=None): |
247 if not pat or pat == '-': |
247 if not pat or pat == '-': |
331 if ui.debugflag or p != nullid] |
331 if ui.debugflag or p != nullid] |
332 if not ui.debugflag and len(parents) == 1 and parents[0][0] == rev-1: |
332 if not ui.debugflag and len(parents) == 1 and parents[0][0] == rev-1: |
333 parents = [] |
333 parents = [] |
334 |
334 |
335 if ui.verbose: |
335 if ui.verbose: |
336 ui.write("changeset: %d:%s\n" % (rev, hex(changenode))) |
336 ui.write(_("changeset: %d:%s\n") % (rev, hex(changenode))) |
337 else: |
337 else: |
338 ui.write("changeset: %d:%s\n" % (rev, short(changenode))) |
338 ui.write(_("changeset: %d:%s\n") % (rev, short(changenode))) |
339 |
339 |
340 for tag in repo.nodetags(changenode): |
340 for tag in repo.nodetags(changenode): |
341 ui.status("tag: %s\n" % tag) |
341 ui.status(_("tag: %s\n") % tag) |
342 for parent in parents: |
342 for parent in parents: |
343 ui.write("parent: %d:%s\n" % parent) |
343 ui.write(_("parent: %d:%s\n") % parent) |
344 |
344 |
345 if brinfo and changenode in brinfo: |
345 if brinfo and changenode in brinfo: |
346 br = brinfo[changenode] |
346 br = brinfo[changenode] |
347 ui.write("branch: %s\n" % " ".join(br)) |
347 ui.write(_("branch: %s\n") % " ".join(br)) |
348 |
348 |
349 ui.debug("manifest: %d:%s\n" % (repo.manifest.rev(changes[0]), |
349 ui.debug(_("manifest: %d:%s\n") % (repo.manifest.rev(changes[0]), |
350 hex(changes[0]))) |
350 hex(changes[0]))) |
351 ui.status("user: %s\n" % changes[1]) |
351 ui.status(_("user: %s\n") % changes[1]) |
352 ui.status("date: %s\n" % date) |
352 ui.status(_("date: %s\n") % date) |
353 |
353 |
354 if ui.debugflag: |
354 if ui.debugflag: |
355 files = repo.changes(log.parents(changenode)[0], changenode) |
355 files = repo.changes(log.parents(changenode)[0], changenode) |
356 for key, value in zip(["files:", "files+:", "files-:"], files): |
356 for key, value in zip([_("files:"), _("files+:"), _("files-:")], files): |
357 if value: |
357 if value: |
358 ui.note("%-12s %s\n" % (key, " ".join(value))) |
358 ui.note("%-12s %s\n" % (key, " ".join(value))) |
359 else: |
359 else: |
360 ui.note("files: %s\n" % " ".join(changes[3])) |
360 ui.note(_("files: %s\n") % " ".join(changes[3])) |
361 |
361 |
362 description = changes[4].strip() |
362 description = changes[4].strip() |
363 if description: |
363 if description: |
364 if ui.verbose: |
364 if ui.verbose: |
365 ui.status("description:\n") |
365 ui.status(_("description:\n")) |
366 ui.status(description) |
366 ui.status(description) |
367 ui.status("\n\n") |
367 ui.status("\n\n") |
368 else: |
368 else: |
369 ui.status("summary: %s\n" % description.splitlines()[0]) |
369 ui.status(_("summary: %s\n") % description.splitlines()[0]) |
370 ui.status("\n") |
370 ui.status("\n") |
371 |
371 |
372 def show_version(ui): |
372 def show_version(ui): |
373 """output version and copyright information""" |
373 """output version and copyright information""" |
374 ui.write("Mercurial Distributed SCM (version %s)\n" |
374 ui.write(_("Mercurial Distributed SCM (version %s)\n") |
375 % version.get_version()) |
375 % version.get_version()) |
376 ui.status( |
376 ui.status(_( |
377 "\nCopyright (C) 2005 Matt Mackall <mpm@selenic.com>\n" |
377 "\nCopyright (C) 2005 Matt Mackall <mpm@selenic.com>\n" |
378 "This is free software; see the source for copying conditions. " |
378 "This is free software; see the source for copying conditions. " |
379 "There is NO\nwarranty; " |
379 "There is NO\nwarranty; " |
380 "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" |
380 "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" |
381 ) |
381 )) |
382 |
382 |
383 def help_(ui, cmd=None, with_version=False): |
383 def help_(ui, cmd=None, with_version=False): |
384 """show help for a given command or all commands""" |
384 """show help for a given command or all commands""" |
385 option_lists = [] |
385 option_lists = [] |
386 if cmd and cmd != 'shortlist': |
386 if cmd and cmd != 'shortlist': |
399 |
399 |
400 if not ui.quiet: |
400 if not ui.quiet: |
401 # aliases |
401 # aliases |
402 aliases = ', '.join(key.split('|')[1:]) |
402 aliases = ', '.join(key.split('|')[1:]) |
403 if aliases: |
403 if aliases: |
404 ui.write("\naliases: %s\n" % aliases) |
404 ui.write(_("\naliases: %s\n") % aliases) |
405 |
405 |
406 # options |
406 # options |
407 if i[1]: |
407 if i[1]: |
408 option_lists.append(("options", i[1])) |
408 option_lists.append(("options", i[1])) |
409 |
409 |
410 else: |
410 else: |
411 # program name |
411 # program name |
412 if ui.verbose or with_version: |
412 if ui.verbose or with_version: |
413 show_version(ui) |
413 show_version(ui) |
414 else: |
414 else: |
415 ui.status("Mercurial Distributed SCM\n") |
415 ui.status(_("Mercurial Distributed SCM\n")) |
416 ui.status('\n') |
416 ui.status('\n') |
417 |
417 |
418 # list of commands |
418 # list of commands |
419 if cmd == "shortlist": |
419 if cmd == "shortlist": |
420 ui.status('basic commands (use "hg help" ' |
420 ui.status(_('basic commands (use "hg help" ' |
421 'for the full list or option "-v" for details):\n\n') |
421 'for the full list or option "-v" for details):\n\n')) |
422 elif ui.verbose: |
422 elif ui.verbose: |
423 ui.status('list of commands:\n\n') |
423 ui.status(_('list of commands:\n\n')) |
424 else: |
424 else: |
425 ui.status('list of commands (use "hg help -v" ' |
425 ui.status(_('list of commands (use "hg help -v" ' |
426 'to show aliases and global options):\n\n') |
426 'to show aliases and global options):\n\n')) |
427 |
427 |
428 h = {} |
428 h = {} |
429 cmds = {} |
429 cmds = {} |
430 for c, e in table.items(): |
430 for c, e in table.items(): |
431 f = c.split("|")[0] |
431 f = c.split("|")[0] |
460 opt_output.append(("\n%s:\n" % title, None)) |
460 opt_output.append(("\n%s:\n" % title, None)) |
461 for shortopt, longopt, default, desc in options: |
461 for shortopt, longopt, default, desc in options: |
462 opt_output.append(("%2s%s" % (shortopt and "-%s" % shortopt, |
462 opt_output.append(("%2s%s" % (shortopt and "-%s" % shortopt, |
463 longopt and " --%s" % longopt), |
463 longopt and " --%s" % longopt), |
464 "%s%s" % (desc, |
464 "%s%s" % (desc, |
465 default and " (default: %s)" % default |
465 default and _(" (default: %s)") % default |
466 or ""))) |
466 or ""))) |
467 |
467 |
468 if opt_output: |
468 if opt_output: |
469 opts_len = max([len(line[0]) for line in opt_output if line[1]]) |
469 opts_len = max([len(line[0]) for line in opt_output if line[1]]) |
470 for first, second in opt_output: |
470 for first, second in opt_output: |
478 def add(ui, repo, *pats, **opts): |
478 def add(ui, repo, *pats, **opts): |
479 '''add the specified files on the next commit''' |
479 '''add the specified files on the next commit''' |
480 names = [] |
480 names = [] |
481 for src, abs, rel, exact in walk(repo, pats, opts): |
481 for src, abs, rel, exact in walk(repo, pats, opts): |
482 if exact: |
482 if exact: |
483 if ui.verbose: ui.status('adding %s\n' % rel) |
483 if ui.verbose: ui.status(_('adding %s\n') % rel) |
484 names.append(abs) |
484 names.append(abs) |
485 elif repo.dirstate.state(abs) == '?': |
485 elif repo.dirstate.state(abs) == '?': |
486 ui.status('adding %s\n' % rel) |
486 ui.status(_('adding %s\n') % rel) |
487 names.append(abs) |
487 names.append(abs) |
488 repo.add(names) |
488 repo.add(names) |
489 |
489 |
490 def addremove(ui, repo, *pats, **opts): |
490 def addremove(ui, repo, *pats, **opts): |
491 """add all new files, delete all missing files""" |
491 """add all new files, delete all missing files""" |
492 add, remove = [], [] |
492 add, remove = [], [] |
493 for src, abs, rel, exact in walk(repo, pats, opts): |
493 for src, abs, rel, exact in walk(repo, pats, opts): |
494 if src == 'f' and repo.dirstate.state(abs) == '?': |
494 if src == 'f' and repo.dirstate.state(abs) == '?': |
495 add.append(abs) |
495 add.append(abs) |
496 if ui.verbose or not exact: |
496 if ui.verbose or not exact: |
497 ui.status('adding ', rel, '\n') |
497 ui.status(_('adding %s\n') % rel) |
498 if repo.dirstate.state(abs) != 'r' and not os.path.exists(rel): |
498 if repo.dirstate.state(abs) != 'r' and not os.path.exists(rel): |
499 remove.append(abs) |
499 remove.append(abs) |
500 if ui.verbose or not exact: |
500 if ui.verbose or not exact: |
501 ui.status('removing ', rel, '\n') |
501 ui.status(_('removing %s\n') % rel) |
502 repo.add(add) |
502 repo.add(add) |
503 repo.remove(remove) |
503 repo.remove(remove) |
504 |
504 |
505 def annotate(ui, repo, *pats, **opts): |
505 def annotate(ui, repo, *pats, **opts): |
506 """show changeset information per file line""" |
506 """show changeset information per file line""" |
511 def getname(rev): |
511 def getname(rev): |
512 cl = repo.changelog.read(repo.changelog.node(rev)) |
512 cl = repo.changelog.read(repo.changelog.node(rev)) |
513 return trimuser(ui, cl[1], rev, ucache) |
513 return trimuser(ui, cl[1], rev, ucache) |
514 |
514 |
515 if not pats: |
515 if not pats: |
516 raise util.Abort('at least one file name or pattern required') |
516 raise util.Abort(_('at least one file name or pattern required')) |
517 |
517 |
518 opmap = [['user', getname], ['number', str], ['changeset', getnode]] |
518 opmap = [['user', getname], ['number', str], ['changeset', getnode]] |
519 if not opts['user'] and not opts['changeset']: |
519 if not opts['user'] and not opts['changeset']: |
520 opts['number'] = 1 |
520 opts['number'] = 1 |
521 |
521 |
526 change = repo.changelog.read(node) |
526 change = repo.changelog.read(node) |
527 mmap = repo.manifest.read(change[0]) |
527 mmap = repo.manifest.read(change[0]) |
528 |
528 |
529 for src, abs, rel, exact in walk(repo, pats, opts): |
529 for src, abs, rel, exact in walk(repo, pats, opts): |
530 if abs not in mmap: |
530 if abs not in mmap: |
531 ui.warn("warning: %s is not in the repository!\n" % rel) |
531 ui.warn(_("warning: %s is not in the repository!\n") % rel) |
532 continue |
532 continue |
533 |
533 |
534 f = repo.file(abs) |
534 f = repo.file(abs) |
535 if not opts['text'] and util.binary(f.read(mmap[abs])): |
535 if not opts['text'] and util.binary(f.read(mmap[abs])): |
536 ui.write("%s: binary file\n" % rel) |
536 ui.write(_("%s: binary file\n") % rel) |
537 continue |
537 continue |
538 |
538 |
539 lines = f.annotate(mmap[abs]) |
539 lines = f.annotate(mmap[abs]) |
540 pieces = [] |
540 pieces = [] |
541 |
541 |
584 n = mf[abs] |
584 n = mf[abs] |
585 except (hg.RepoError, KeyError): |
585 except (hg.RepoError, KeyError): |
586 try: |
586 try: |
587 n = r.lookup(rev) |
587 n = r.lookup(rev) |
588 except KeyError, inst: |
588 except KeyError, inst: |
589 raise util.Abort('cannot find file %s in rev %s', rel, rev) |
589 raise util.Abort(_('cannot find file %s in rev %s'), rel, rev) |
590 else: |
590 else: |
591 n = r.tip() |
591 n = r.tip() |
592 fp = make_file(repo, r, opts['output'], node=n, pathname=abs) |
592 fp = make_file(repo, r, opts['output'], node=n, pathname=abs) |
593 fp.write(r.read(n)) |
593 fp.write(r.read(n)) |
594 |
594 |
596 """make a copy of an existing repository""" |
596 """make a copy of an existing repository""" |
597 if dest is None: |
597 if dest is None: |
598 dest = os.path.basename(os.path.normpath(source)) |
598 dest = os.path.basename(os.path.normpath(source)) |
599 |
599 |
600 if os.path.exists(dest): |
600 if os.path.exists(dest): |
601 raise util.Abort("destination '%s' already exists", dest) |
601 raise util.Abort(_("destination '%s' already exists"), dest) |
602 |
602 |
603 dest = os.path.realpath(dest) |
603 dest = os.path.realpath(dest) |
604 |
604 |
605 class Dircleanup: |
605 class Dircleanup: |
606 def __init__(self, dir_): |
606 def __init__(self, dir_): |
668 d.close() |
668 d.close() |
669 |
669 |
670 def commit(ui, repo, *pats, **opts): |
670 def commit(ui, repo, *pats, **opts): |
671 """commit the specified files or all outstanding changes""" |
671 """commit the specified files or all outstanding changes""" |
672 if opts['text']: |
672 if opts['text']: |
673 ui.warn("Warning: -t and --text is deprecated," |
673 ui.warn(_("Warning: -t and --text is deprecated," |
674 " please use -m or --message instead.\n") |
674 " please use -m or --message instead.\n")) |
675 message = opts['message'] or opts['text'] |
675 message = opts['message'] or opts['text'] |
676 logfile = opts['logfile'] |
676 logfile = opts['logfile'] |
677 |
677 |
678 if message and logfile: |
678 if message and logfile: |
679 raise util.Abort('options --message and --logfile are mutually ' |
679 raise util.Abort(_('options --message and --logfile are mutually ' |
680 'exclusive') |
680 'exclusive')) |
681 if not message and logfile: |
681 if not message and logfile: |
682 try: |
682 try: |
683 if logfile == '-': |
683 if logfile == '-': |
684 message = sys.stdin.read() |
684 message = sys.stdin.read() |
685 else: |
685 else: |
686 message = open(logfile).read() |
686 message = open(logfile).read() |
687 except IOError, inst: |
687 except IOError, inst: |
688 raise util.Abort("can't read commit message '%s': %s" % |
688 raise util.Abort(_("can't read commit message '%s': %s") % |
689 (logfile, inst.strerror)) |
689 (logfile, inst.strerror)) |
690 |
690 |
691 if opts['addremove']: |
691 if opts['addremove']: |
692 addremove(ui, repo, *pats, **opts) |
692 addremove(ui, repo, *pats, **opts) |
693 cwd = repo.getcwd() |
693 cwd = repo.getcwd() |
706 except ValueError, inst: |
706 except ValueError, inst: |
707 raise util.Abort(str(inst)) |
707 raise util.Abort(str(inst)) |
708 |
708 |
709 def docopy(ui, repo, pats, opts): |
709 def docopy(ui, repo, pats, opts): |
710 if not pats: |
710 if not pats: |
711 raise util.Abort('no source or destination specified') |
711 raise util.Abort(_('no source or destination specified')) |
712 elif len(pats) == 1: |
712 elif len(pats) == 1: |
713 raise util.Abort('no destination specified') |
713 raise util.Abort(_('no destination specified')) |
714 pats = list(pats) |
714 pats = list(pats) |
715 dest = pats.pop() |
715 dest = pats.pop() |
716 sources = [] |
716 sources = [] |
717 |
717 |
718 def okaytocopy(abs, rel, exact): |
718 def okaytocopy(abs, rel, exact): |
719 reasons = {'?': 'is not managed', |
719 reasons = {'?': _('is not managed'), |
720 'a': 'has been marked for add'} |
720 'a': _('has been marked for add')} |
721 reason = reasons.get(repo.dirstate.state(abs)) |
721 reason = reasons.get(repo.dirstate.state(abs)) |
722 if reason: |
722 if reason: |
723 if exact: ui.warn('%s: not copying - file %s\n' % (rel, reason)) |
723 if exact: ui.warn(_('%s: not copying - file %s\n') % (rel, reason)) |
724 else: |
724 else: |
725 return True |
725 return True |
726 |
726 |
727 for src, abs, rel, exact in walk(repo, pats, opts): |
727 for src, abs, rel, exact in walk(repo, pats, opts): |
728 if okaytocopy(abs, rel, exact): |
728 if okaytocopy(abs, rel, exact): |
729 sources.append((abs, rel, exact)) |
729 sources.append((abs, rel, exact)) |
730 if not sources: |
730 if not sources: |
731 raise util.Abort('no files to copy') |
731 raise util.Abort(_('no files to copy')) |
732 |
732 |
733 cwd = repo.getcwd() |
733 cwd = repo.getcwd() |
734 absdest = util.canonpath(repo.root, cwd, dest) |
734 absdest = util.canonpath(repo.root, cwd, dest) |
735 reldest = util.pathto(cwd, absdest) |
735 reldest = util.pathto(cwd, absdest) |
736 if os.path.exists(reldest): |
736 if os.path.exists(reldest): |
738 else: |
738 else: |
739 destisfile = len(sources) == 1 or repo.dirstate.state(absdest) != '?' |
739 destisfile = len(sources) == 1 or repo.dirstate.state(absdest) != '?' |
740 |
740 |
741 if destisfile: |
741 if destisfile: |
742 if opts['parents']: |
742 if opts['parents']: |
743 raise util.Abort('with --parents, destination must be a directory') |
743 raise util.Abort(_('with --parents, destination must be a directory')) |
744 elif len(sources) > 1: |
744 elif len(sources) > 1: |
745 raise util.Abort('with multiple sources, destination must be a ' |
745 raise util.Abort(_('with multiple sources, destination must be a ' |
746 'directory') |
746 'directory')) |
747 errs, copied = 0, [] |
747 errs, copied = 0, [] |
748 for abs, rel, exact in sources: |
748 for abs, rel, exact in sources: |
749 if opts['parents']: |
749 if opts['parents']: |
750 mydest = os.path.join(dest, rel) |
750 mydest = os.path.join(dest, rel) |
751 elif destisfile: |
751 elif destisfile: |
753 else: |
753 else: |
754 mydest = os.path.join(dest, os.path.basename(rel)) |
754 mydest = os.path.join(dest, os.path.basename(rel)) |
755 myabsdest = util.canonpath(repo.root, cwd, mydest) |
755 myabsdest = util.canonpath(repo.root, cwd, mydest) |
756 myreldest = util.pathto(cwd, myabsdest) |
756 myreldest = util.pathto(cwd, myabsdest) |
757 if not opts['force'] and repo.dirstate.state(myabsdest) not in 'a?': |
757 if not opts['force'] and repo.dirstate.state(myabsdest) not in 'a?': |
758 ui.warn('%s: not overwriting - file already managed\n' % myreldest) |
758 ui.warn(_('%s: not overwriting - file already managed\n') % myreldest) |
759 continue |
759 continue |
760 mydestdir = os.path.dirname(myreldest) or '.' |
760 mydestdir = os.path.dirname(myreldest) or '.' |
761 if not opts['after']: |
761 if not opts['after']: |
762 try: |
762 try: |
763 if opts['parents']: os.makedirs(mydestdir) |
763 if opts['parents']: os.makedirs(mydestdir) |
764 elif not destisfile: os.mkdir(mydestdir) |
764 elif not destisfile: os.mkdir(mydestdir) |
765 except OSError, inst: |
765 except OSError, inst: |
766 if inst.errno != errno.EEXIST: raise |
766 if inst.errno != errno.EEXIST: raise |
767 if ui.verbose or not exact: |
767 if ui.verbose or not exact: |
768 ui.status('copying %s to %s\n' % (rel, myreldest)) |
768 ui.status(_('copying %s to %s\n') % (rel, myreldest)) |
769 if not opts['after']: |
769 if not opts['after']: |
770 try: |
770 try: |
771 shutil.copyfile(rel, myreldest) |
771 shutil.copyfile(rel, myreldest) |
772 shutil.copymode(rel, myreldest) |
772 shutil.copymode(rel, myreldest) |
773 except shutil.Error, inst: |
773 except shutil.Error, inst: |
774 raise util.Abort(str(inst)) |
774 raise util.Abort(str(inst)) |
775 except IOError, inst: |
775 except IOError, inst: |
776 if inst.errno == errno.ENOENT: |
776 if inst.errno == errno.ENOENT: |
777 ui.warn('%s: deleted in working copy\n' % rel) |
777 ui.warn(_('%s: deleted in working copy\n') % rel) |
778 else: |
778 else: |
779 ui.warn('%s: cannot copy - %s\n' % (rel, inst.strerror)) |
779 ui.warn(_('%s: cannot copy - %s\n') % (rel, inst.strerror)) |
780 errs += 1 |
780 errs += 1 |
781 continue |
781 continue |
782 repo.copy(abs, myabsdest) |
782 repo.copy(abs, myabsdest) |
783 copied.append((abs, rel, exact)) |
783 copied.append((abs, rel, exact)) |
784 if errs: |
784 if errs: |
785 ui.warn('(consider using --after)\n') |
785 ui.warn(_('(consider using --after)\n')) |
786 return errs, copied |
786 return errs, copied |
787 |
787 |
788 def copy(ui, repo, *pats, **opts): |
788 def copy(ui, repo, *pats, **opts): |
789 """mark files as copied for the next commit""" |
789 """mark files as copied for the next commit""" |
790 errs, copied = docopy(ui, repo, pats, opts) |
790 errs, copied = docopy(ui, repo, pats, opts) |
809 m2 = repo.manifest.read(m2n) |
809 m2 = repo.manifest.read(m2n) |
810 errors = 0 |
810 errors = 0 |
811 for f in dc: |
811 for f in dc: |
812 state = repo.dirstate.state(f) |
812 state = repo.dirstate.state(f) |
813 if state in "nr" and f not in m1: |
813 if state in "nr" and f not in m1: |
814 ui.warn("%s in state %s, but not in manifest1\n" % (f, state)) |
814 ui.warn(_("%s in state %s, but not in manifest1\n") % (f, state)) |
815 errors += 1 |
815 errors += 1 |
816 if state in "a" and f in m1: |
816 if state in "a" and f in m1: |
817 ui.warn("%s in state %s, but also in manifest1\n" % (f, state)) |
817 ui.warn(_("%s in state %s, but also in manifest1\n") % (f, state)) |
818 errors += 1 |
818 errors += 1 |
819 if state in "m" and f not in m1 and f not in m2: |
819 if state in "m" and f not in m1 and f not in m2: |
820 ui.warn("%s in state %s, but not in either manifest\n" % |
820 ui.warn(_("%s in state %s, but not in either manifest\n") % |
821 (f, state)) |
821 (f, state)) |
822 errors += 1 |
822 errors += 1 |
823 for f in m1: |
823 for f in m1: |
824 state = repo.dirstate.state(f) |
824 state = repo.dirstate.state(f) |
825 if state not in "nrm": |
825 if state not in "nrm": |
826 ui.warn("%s in manifest1, but listed as state %s" % (f, state)) |
826 ui.warn(_("%s in manifest1, but listed as state %s") % (f, state)) |
827 errors += 1 |
827 errors += 1 |
828 if errors: |
828 if errors: |
829 raise util.Abort(".hg/dirstate inconsistent with current parent's manifest") |
829 raise util.Abort(_(".hg/dirstate inconsistent with current parent's manifest")) |
830 |
830 |
831 def debugconfig(ui): |
831 def debugconfig(ui): |
832 """show combined config settings from all hgrc files""" |
832 """show combined config settings from all hgrc files""" |
833 try: |
833 try: |
834 repo = hg.repository(ui) |
834 repo = hg.repository(ui) |
860 ui.write("%c %3o %10d %s %s\n" |
860 ui.write("%c %3o %10d %s %s\n" |
861 % (dc[file_][0], dc[file_][1] & 0777, dc[file_][2], |
861 % (dc[file_][0], dc[file_][1] & 0777, dc[file_][2], |
862 time.strftime("%x %X", |
862 time.strftime("%x %X", |
863 time.localtime(dc[file_][3])), file_)) |
863 time.localtime(dc[file_][3])), file_)) |
864 for f in repo.dirstate.copies: |
864 for f in repo.dirstate.copies: |
865 ui.write("copy: %s -> %s\n" % (repo.dirstate.copies[f], f)) |
865 ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copies[f], f)) |
866 |
866 |
867 def debugdata(ui, file_, rev): |
867 def debugdata(ui, file_, rev): |
868 """dump the contents of an data file revision""" |
868 """dump the contents of an data file revision""" |
869 r = revlog.revlog(file, file_[:-2] + ".i", file_) |
869 r = revlog.revlog(file, file_[:-2] + ".i", file_) |
870 try: |
870 try: |
871 ui.write(r.revision(r.lookup(rev))) |
871 ui.write(r.revision(r.lookup(rev))) |
872 except KeyError: |
872 except KeyError: |
873 raise util.Abort('invalid revision identifier %s', rev) |
873 raise util.Abort(_('invalid revision identifier %s'), rev) |
874 |
874 |
875 def debugindex(ui, file_): |
875 def debugindex(ui, file_): |
876 """dump the contents of an index file""" |
876 """dump the contents of an index file""" |
877 r = revlog.revlog(file, file_, "") |
877 r = revlog.revlog(file, file_, "") |
878 ui.write(" rev offset length base linkrev" + |
878 ui.write(" rev offset length base linkrev" + |
908 n = r.lookup(rev) |
908 n = r.lookup(rev) |
909 else: |
909 else: |
910 n = r.tip() |
910 n = r.tip() |
911 m = r.renamed(n) |
911 m = r.renamed(n) |
912 if m: |
912 if m: |
913 ui.write("renamed from %s:%s\n" % (m[0], hex(m[1]))) |
913 ui.write(_("renamed from %s:%s\n") % (m[0], hex(m[1]))) |
914 else: |
914 else: |
915 ui.write("not renamed\n") |
915 ui.write(_("not renamed\n")) |
916 |
916 |
917 def debugwalk(ui, repo, *pats, **opts): |
917 def debugwalk(ui, repo, *pats, **opts): |
918 """show how files match on given patterns""" |
918 """show how files match on given patterns""" |
919 items = list(walk(repo, pats, opts)) |
919 items = list(walk(repo, pats, opts)) |
920 if not items: |
920 if not items: |
934 if len(revs) > 0: |
934 if len(revs) > 0: |
935 node1 = revs[0] |
935 node1 = revs[0] |
936 if len(revs) > 1: |
936 if len(revs) > 1: |
937 node2 = revs[1] |
937 node2 = revs[1] |
938 if len(revs) > 2: |
938 if len(revs) > 2: |
939 raise util.Abort("too many revisions to diff") |
939 raise util.Abort(_("too many revisions to diff")) |
940 |
940 |
941 fns, matchfn, anypats = matchpats(repo, repo.getcwd(), pats, opts) |
941 fns, matchfn, anypats = matchpats(repo, repo.getcwd(), pats, opts) |
942 |
942 |
943 dodiff(sys.stdout, ui, repo, node1, node2, fns, match=matchfn, |
943 dodiff(sys.stdout, ui, repo, node1, node2, fns, match=matchfn, |
944 text=opts['text']) |
944 text=opts['text']) |
968 fp.close() |
968 fp.close() |
969 |
969 |
970 def export(ui, repo, *changesets, **opts): |
970 def export(ui, repo, *changesets, **opts): |
971 """dump the header and diffs for one or more changesets""" |
971 """dump the header and diffs for one or more changesets""" |
972 if not changesets: |
972 if not changesets: |
973 raise util.Abort("export requires at least one changeset") |
973 raise util.Abort(_("export requires at least one changeset")) |
974 seqno = 0 |
974 seqno = 0 |
975 revs = list(revrange(ui, repo, changesets)) |
975 revs = list(revrange(ui, repo, changesets)) |
976 total = len(revs) |
976 total = len(revs) |
977 revwidth = max(map(len, revs)) |
977 revwidth = max(map(len, revs)) |
978 ui.note(len(revs) > 1 and "Exporting patches:\n" or "Exporting patch:\n") |
978 ui.note(len(revs) > 1 and _("Exporting patches:\n") or _("Exporting patch:\n")) |
979 for cset in revs: |
979 for cset in revs: |
980 seqno += 1 |
980 seqno += 1 |
981 doexport(ui, repo, cset, seqno, total, revwidth, opts) |
981 doexport(ui, repo, cset, seqno, total, revwidth, opts) |
982 |
982 |
983 def forget(ui, repo, *pats, **opts): |
983 def forget(ui, repo, *pats, **opts): |
985 forget = [] |
985 forget = [] |
986 for src, abs, rel, exact in walk(repo, pats, opts): |
986 for src, abs, rel, exact in walk(repo, pats, opts): |
987 if repo.dirstate.state(abs) == 'a': |
987 if repo.dirstate.state(abs) == 'a': |
988 forget.append(abs) |
988 forget.append(abs) |
989 if ui.verbose or not exact: |
989 if ui.verbose or not exact: |
990 ui.status('forgetting ', rel, '\n') |
990 ui.status(_('forgetting %s\n') % rel) |
991 repo.forget(forget) |
991 repo.forget(forget) |
992 |
992 |
993 def grep(ui, repo, pattern, *pats, **opts): |
993 def grep(ui, repo, pattern, *pats, **opts): |
994 """search for a pattern in specified files and revisions""" |
994 """search for a pattern in specified files and revisions""" |
995 reflags = 0 |
995 reflags = 0 |
1120 |
1120 |
1121 def identify(ui, repo): |
1121 def identify(ui, repo): |
1122 """print information about the working copy""" |
1122 """print information about the working copy""" |
1123 parents = [p for p in repo.dirstate.parents() if p != nullid] |
1123 parents = [p for p in repo.dirstate.parents() if p != nullid] |
1124 if not parents: |
1124 if not parents: |
1125 ui.write("unknown\n") |
1125 ui.write(_("unknown\n")) |
1126 return |
1126 return |
1127 |
1127 |
1128 hexfunc = ui.verbose and hex or short |
1128 hexfunc = ui.verbose and hex or short |
1129 (c, a, d, u) = repo.changes() |
1129 (c, a, d, u) = repo.changes() |
1130 output = ["%s%s" % ('+'.join([hexfunc(parent) for parent in parents]), |
1130 output = ["%s%s" % ('+'.join([hexfunc(parent) for parent in parents]), |
1145 patches = (patch1,) + patches |
1145 patches = (patch1,) + patches |
1146 |
1146 |
1147 if not opts['force']: |
1147 if not opts['force']: |
1148 (c, a, d, u) = repo.changes() |
1148 (c, a, d, u) = repo.changes() |
1149 if c or a or d: |
1149 if c or a or d: |
1150 raise util.Abort("outstanding uncommitted changes") |
1150 raise util.Abort(_("outstanding uncommitted changes")) |
1151 |
1151 |
1152 d = opts["base"] |
1152 d = opts["base"] |
1153 strip = opts["strip"] |
1153 strip = opts["strip"] |
1154 |
1154 |
1155 mailre = re.compile(r'(?:From |[\w-]+:)') |
1155 mailre = re.compile(r'(?:From |[\w-]+:)') |
1159 diffre = re.compile(r'(?:Index:[ \t]|diff[ \t]|RCS file: |' + |
1159 diffre = re.compile(r'(?:Index:[ \t]|diff[ \t]|RCS file: |' + |
1160 'retrieving revision [0-9]+(\.[0-9]+)*$|' + |
1160 'retrieving revision [0-9]+(\.[0-9]+)*$|' + |
1161 '(---|\*\*\*)[ \t])') |
1161 '(---|\*\*\*)[ \t])') |
1162 |
1162 |
1163 for patch in patches: |
1163 for patch in patches: |
1164 ui.status("applying %s\n" % patch) |
1164 ui.status(_("applying %s\n") % patch) |
1165 pf = os.path.join(d, patch) |
1165 pf = os.path.join(d, patch) |
1166 |
1166 |
1167 message = [] |
1167 message = [] |
1168 user = None |
1168 user = None |
1169 hgpatch = False |
1169 hgpatch = False |
1170 for line in file(pf): |
1170 for line in file(pf): |
1171 line = line.rstrip() |
1171 line = line.rstrip() |
1172 if (not message and not hgpatch and |
1172 if (not message and not hgpatch and |
1173 mailre.match(line) and not opts['force']): |
1173 mailre.match(line) and not opts['force']): |
1174 if len(line) > 35: line = line[:32] + '...' |
1174 if len(line) > 35: line = line[:32] + '...' |
1175 raise util.Abort('first line looks like a ' |
1175 raise util.Abort(_('first line looks like a ' |
1176 'mail header: ' + line) |
1176 'mail header: ') + line) |
1177 if diffre.match(line): |
1177 if diffre.match(line): |
1178 break |
1178 break |
1179 elif hgpatch: |
1179 elif hgpatch: |
1180 # parse values when importing the result of an hg export |
1180 # parse values when importing the result of an hg export |
1181 if line.startswith("# User "): |
1181 if line.startswith("# User "): |
1182 user = line[7:] |
1182 user = line[7:] |
1183 ui.debug('User: %s\n' % user) |
1183 ui.debug(_('User: %s\n') % user) |
1184 elif not line.startswith("# ") and line: |
1184 elif not line.startswith("# ") and line: |
1185 message.append(line) |
1185 message.append(line) |
1186 hgpatch = False |
1186 hgpatch = False |
1187 elif line == '# HG changeset patch': |
1187 elif line == '# HG changeset patch': |
1188 hgpatch = True |
1188 hgpatch = True |
1190 else: |
1190 else: |
1191 message.append(line) |
1191 message.append(line) |
1192 |
1192 |
1193 # make sure message isn't empty |
1193 # make sure message isn't empty |
1194 if not message: |
1194 if not message: |
1195 message = "imported patch %s\n" % patch |
1195 message = _("imported patch %s\n") % patch |
1196 else: |
1196 else: |
1197 message = "%s\n" % '\n'.join(message) |
1197 message = "%s\n" % '\n'.join(message) |
1198 ui.debug('message:\n%s\n' % message) |
1198 ui.debug(_('message:\n%s\n') % message) |
1199 |
1199 |
1200 files = util.patch(strip, pf, ui) |
1200 files = util.patch(strip, pf, ui) |
1201 |
1201 |
1202 if len(files) > 0: |
1202 if len(files) > 0: |
1203 addremove(ui, repo, *files) |
1203 addremove(ui, repo, *files) |
1206 def incoming(ui, repo, source="default", **opts): |
1206 def incoming(ui, repo, source="default", **opts): |
1207 """show new changesets found in source""" |
1207 """show new changesets found in source""" |
1208 source = ui.expandpath(source) |
1208 source = ui.expandpath(source) |
1209 other = hg.repository(ui, source) |
1209 other = hg.repository(ui, source) |
1210 if not other.local(): |
1210 if not other.local(): |
1211 raise util.Abort("incoming doesn't work for remote repositories yet") |
1211 raise util.Abort(_("incoming doesn't work for remote repositories yet")) |
1212 o = repo.findincoming(other) |
1212 o = repo.findincoming(other) |
1213 if not o: |
1213 if not o: |
1214 return |
1214 return |
1215 o = other.newer(o) |
1215 o = other.newer(o) |
1216 for n in o: |
1216 for n in o: |
1353 if search: |
1353 if search: |
1354 for name, path in ui.configitems("paths"): |
1354 for name, path in ui.configitems("paths"): |
1355 if name == search: |
1355 if name == search: |
1356 ui.write("%s\n" % path) |
1356 ui.write("%s\n" % path) |
1357 return |
1357 return |
1358 ui.warn("not found!\n") |
1358 ui.warn(_("not found!\n")) |
1359 return 1 |
1359 return 1 |
1360 else: |
1360 else: |
1361 for name, path in ui.configitems("paths"): |
1361 for name, path in ui.configitems("paths"): |
1362 ui.write("%s = %s\n" % (name, path)) |
1362 ui.write("%s = %s\n" % (name, path)) |
1363 |
1363 |
1364 def pull(ui, repo, source="default", **opts): |
1364 def pull(ui, repo, source="default", **opts): |
1365 """pull changes from the specified source""" |
1365 """pull changes from the specified source""" |
1366 source = ui.expandpath(source) |
1366 source = ui.expandpath(source) |
1367 ui.status('pulling from %s\n' % (source)) |
1367 ui.status(_('pulling from %s\n') % (source)) |
1368 |
1368 |
1369 if opts['ssh']: |
1369 if opts['ssh']: |
1370 ui.setconfig("ui", "ssh", opts['ssh']) |
1370 ui.setconfig("ui", "ssh", opts['ssh']) |
1371 if opts['remotecmd']: |
1371 if opts['remotecmd']: |
1372 ui.setconfig("ui", "remotecmd", opts['remotecmd']) |
1372 ui.setconfig("ui", "remotecmd", opts['remotecmd']) |
1375 r = repo.pull(other) |
1375 r = repo.pull(other) |
1376 if not r: |
1376 if not r: |
1377 if opts['update']: |
1377 if opts['update']: |
1378 return update(ui, repo) |
1378 return update(ui, repo) |
1379 else: |
1379 else: |
1380 ui.status("(run 'hg update' to get a working copy)\n") |
1380 ui.status(_("(run 'hg update' to get a working copy)\n")) |
1381 |
1381 |
1382 return r |
1382 return r |
1383 |
1383 |
1384 def push(ui, repo, dest="default-push", force=False, ssh=None, remotecmd=None): |
1384 def push(ui, repo, dest="default-push", force=False, ssh=None, remotecmd=None): |
1385 """push changes to the specified destination""" |
1385 """push changes to the specified destination""" |
1396 return r |
1396 return r |
1397 |
1397 |
1398 def rawcommit(ui, repo, *flist, **rc): |
1398 def rawcommit(ui, repo, *flist, **rc): |
1399 "raw commit interface" |
1399 "raw commit interface" |
1400 if rc['text']: |
1400 if rc['text']: |
1401 ui.warn("Warning: -t and --text is deprecated," |
1401 ui.warn(_("Warning: -t and --text is deprecated," |
1402 " please use -m or --message instead.\n") |
1402 " please use -m or --message instead.\n")) |
1403 message = rc['message'] or rc['text'] |
1403 message = rc['message'] or rc['text'] |
1404 if not message and rc['logfile']: |
1404 if not message and rc['logfile']: |
1405 try: |
1405 try: |
1406 message = open(rc['logfile']).read() |
1406 message = open(rc['logfile']).read() |
1407 except IOError: |
1407 except IOError: |
1408 pass |
1408 pass |
1409 if not message and not rc['logfile']: |
1409 if not message and not rc['logfile']: |
1410 raise util.Abort("missing commit message") |
1410 raise util.Abort(_("missing commit message")) |
1411 |
1411 |
1412 files = relpath(repo, list(flist)) |
1412 files = relpath(repo, list(flist)) |
1413 if rc['files']: |
1413 if rc['files']: |
1414 files += open(rc['files']).read().splitlines() |
1414 files += open(rc['files']).read().splitlines() |
1415 |
1415 |
1428 """remove the specified files on the next commit""" |
1428 """remove the specified files on the next commit""" |
1429 names = [] |
1429 names = [] |
1430 def okaytoremove(abs, rel, exact): |
1430 def okaytoremove(abs, rel, exact): |
1431 c, a, d, u = repo.changes(files = [abs]) |
1431 c, a, d, u = repo.changes(files = [abs]) |
1432 reason = None |
1432 reason = None |
1433 if c: reason = 'is modified' |
1433 if c: reason = _('is modified') |
1434 elif a: reason = 'has been marked for add' |
1434 elif a: reason = _('has been marked for add') |
1435 elif u: reason = 'is not managed' |
1435 elif u: reason = _('is not managed') |
1436 if reason: |
1436 if reason: |
1437 if exact: ui.warn('not removing %s: file %s\n' % (rel, reason)) |
1437 if exact: ui.warn(_('not removing %s: file %s\n') % (rel, reason)) |
1438 else: |
1438 else: |
1439 return True |
1439 return True |
1440 for src, abs, rel, exact in walk(repo, (pat,) + pats, opts): |
1440 for src, abs, rel, exact in walk(repo, (pat,) + pats, opts): |
1441 if okaytoremove(abs, rel, exact): |
1441 if okaytoremove(abs, rel, exact): |
1442 if ui.verbose or not exact: ui.status('removing %s\n' % rel) |
1442 if ui.verbose or not exact: ui.status(_('removing %s\n') % rel) |
1443 names.append(abs) |
1443 names.append(abs) |
1444 for name in names: |
1444 for name in names: |
1445 try: |
1445 try: |
1446 os.unlink(name) |
1446 os.unlink(name) |
1447 except OSError, inst: |
1447 except OSError, inst: |
1451 def rename(ui, repo, *pats, **opts): |
1451 def rename(ui, repo, *pats, **opts): |
1452 """rename files; equivalent of copy + remove""" |
1452 """rename files; equivalent of copy + remove""" |
1453 errs, copied = docopy(ui, repo, pats, opts) |
1453 errs, copied = docopy(ui, repo, pats, opts) |
1454 names = [] |
1454 names = [] |
1455 for abs, rel, exact in copied: |
1455 for abs, rel, exact in copied: |
1456 if ui.verbose or not exact: ui.status('removing %s\n' % rel) |
1456 if ui.verbose or not exact: ui.status(_('removing %s\n') % rel) |
1457 try: |
1457 try: |
1458 os.unlink(rel) |
1458 os.unlink(rel) |
1459 except OSError, inst: |
1459 except OSError, inst: |
1460 if inst.errno != errno.ENOENT: raise |
1460 if inst.errno != errno.ENOENT: raise |
1461 names.append(abs) |
1461 names.append(abs) |
1503 return ret |
1503 return ret |
1504 |
1504 |
1505 r = repo.update(node, False, True, choose, False) |
1505 r = repo.update(node, False, True, choose, False) |
1506 for n in relnames: |
1506 for n in relnames: |
1507 if n not in chosen: |
1507 if n not in chosen: |
1508 ui.warn('error: no matches for %s\n' % n) |
1508 ui.warn(_('error: no matches for %s\n') % n) |
1509 r = 1 |
1509 r = 1 |
1510 sys.stdout.flush() |
1510 sys.stdout.flush() |
1511 return r |
1511 return r |
1512 |
1512 |
1513 def root(ui, repo): |
1513 def root(ui, repo): |
1603 try: |
1603 try: |
1604 addr = socket.gethostbyaddr(addr)[0] |
1604 addr = socket.gethostbyaddr(addr)[0] |
1605 except socket.error: |
1605 except socket.error: |
1606 pass |
1606 pass |
1607 if port != 80: |
1607 if port != 80: |
1608 ui.status('listening at http://%s:%d/\n' % (addr, port)) |
1608 ui.status(_('listening at http://%s:%d/\n') % (addr, port)) |
1609 else: |
1609 else: |
1610 ui.status('listening at http://%s/\n' % addr) |
1610 ui.status(_('listening at http://%s/\n') % addr) |
1611 httpd.serve_forever() |
1611 httpd.serve_forever() |
1612 |
1612 |
1613 def status(ui, repo, *pats, **opts): |
1613 def status(ui, repo, *pats, **opts): |
1614 '''show changed files in the working directory |
1614 '''show changed files in the working directory |
1615 |
1615 |
1622 cwd = repo.getcwd() |
1622 cwd = repo.getcwd() |
1623 files, matchfn, anypats = matchpats(repo, cwd, pats, opts) |
1623 files, matchfn, anypats = matchpats(repo, cwd, pats, opts) |
1624 (c, a, d, u) = [[util.pathto(cwd, x) for x in n] |
1624 (c, a, d, u) = [[util.pathto(cwd, x) for x in n] |
1625 for n in repo.changes(files=files, match=matchfn)] |
1625 for n in repo.changes(files=files, match=matchfn)] |
1626 |
1626 |
1627 changetypes = [('modified', 'M', c), |
1627 changetypes = [(_('modified'), 'M', c), |
1628 ('added', 'A', a), |
1628 (_('added'), 'A', a), |
1629 ('removed', 'R', d), |
1629 (_('removed'), 'R', d), |
1630 ('unknown', '?', u)] |
1630 (_('unknown'), '?', u)] |
1631 |
1631 |
1632 end = opts['print0'] and '\0' or '\n' |
1632 end = opts['print0'] and '\0' or '\n' |
1633 |
1633 |
1634 for opt, char, changes in ([ct for ct in changetypes if opts[ct[0]]] |
1634 for opt, char, changes in ([ct for ct in changetypes if opts[ct[0]]] |
1635 or changetypes): |
1635 or changetypes): |
1642 ui.write(format % f) |
1642 ui.write(format % f) |
1643 |
1643 |
1644 def tag(ui, repo, name, rev=None, **opts): |
1644 def tag(ui, repo, name, rev=None, **opts): |
1645 """add a tag for the current tip or a given revision""" |
1645 """add a tag for the current tip or a given revision""" |
1646 if opts['text']: |
1646 if opts['text']: |
1647 ui.warn("Warning: -t and --text is deprecated," |
1647 ui.warn(_("Warning: -t and --text is deprecated," |
1648 " please use -m or --message instead.\n") |
1648 " please use -m or --message instead.\n")) |
1649 if name == "tip": |
1649 if name == "tip": |
1650 raise util.Abort("the name 'tip' is reserved") |
1650 raise util.Abort(_("the name 'tip' is reserved")) |
1651 if rev: |
1651 if rev: |
1652 r = hex(repo.lookup(rev)) |
1652 r = hex(repo.lookup(rev)) |
1653 else: |
1653 else: |
1654 r = hex(repo.changelog.tip()) |
1654 r = hex(repo.changelog.tip()) |
1655 |
1655 |
1656 if name.find(revrangesep) >= 0: |
1656 if name.find(revrangesep) >= 0: |
1657 raise util.Abort("'%s' cannot be used in a tag name" % revrangesep) |
1657 raise util.Abort(_("'%s' cannot be used in a tag name") % revrangesep) |
1658 |
1658 |
1659 if opts['local']: |
1659 if opts['local']: |
1660 repo.opener("localtags", "a").write("%s %s\n" % (r, name)) |
1660 repo.opener("localtags", "a").write("%s %s\n" % (r, name)) |
1661 return |
1661 return |
1662 |
1662 |
1663 (c, a, d, u) = repo.changes() |
1663 (c, a, d, u) = repo.changes() |
1664 for x in (c, a, d, u): |
1664 for x in (c, a, d, u): |
1665 if ".hgtags" in x: |
1665 if ".hgtags" in x: |
1666 raise util.Abort("working copy of .hgtags is changed " |
1666 raise util.Abort(_("working copy of .hgtags is changed " |
1667 "(please commit .hgtags manually)") |
1667 "(please commit .hgtags manually)")) |
1668 |
1668 |
1669 repo.wfile(".hgtags", "ab").write("%s %s\n" % (r, name)) |
1669 repo.wfile(".hgtags", "ab").write("%s %s\n" % (r, name)) |
1670 if repo.dirstate.state(".hgtags") == '?': |
1670 if repo.dirstate.state(".hgtags") == '?': |
1671 repo.add([".hgtags"]) |
1671 repo.add([".hgtags"]) |
1672 |
1672 |
1673 message = (opts['message'] or opts['text'] or |
1673 message = (opts['message'] or opts['text'] or |
1674 "Added tag %s for changeset %s" % (name, r)) |
1674 _("Added tag %s for changeset %s") % (name, r)) |
1675 try: |
1675 try: |
1676 repo.commit([".hgtags"], message, opts['user'], opts['date']) |
1676 repo.commit([".hgtags"], message, opts['user'], opts['date']) |
1677 except ValueError, inst: |
1677 except ValueError, inst: |
1678 raise util.Abort(str(inst)) |
1678 raise util.Abort(str(inst)) |
1679 |
1679 |
1697 def unbundle(ui, repo, fname): |
1697 def unbundle(ui, repo, fname): |
1698 """apply a changegroup file""" |
1698 """apply a changegroup file""" |
1699 f = urllib.urlopen(fname) |
1699 f = urllib.urlopen(fname) |
1700 |
1700 |
1701 if f.read(4) != "HG10": |
1701 if f.read(4) != "HG10": |
1702 raise util.Abort("%s: not a Mercurial bundle file" % fname) |
1702 raise util.Abort(_("%s: not a Mercurial bundle file") % fname) |
1703 |
1703 |
1704 def bzgenerator(f): |
1704 def bzgenerator(f): |
1705 zd = bz2.BZ2Decompressor() |
1705 zd = bz2.BZ2Decompressor() |
1706 for chunk in f: |
1706 for chunk in f: |
1707 yield zd.decompress(chunk) |
1707 yield zd.decompress(chunk) |
1743 found = [] |
1743 found = [] |
1744 for x in br: |
1744 for x in br: |
1745 if branch in br[x]: |
1745 if branch in br[x]: |
1746 found.append(x) |
1746 found.append(x) |
1747 if len(found) > 1: |
1747 if len(found) > 1: |
1748 ui.warn("Found multiple heads for %s\n" % branch) |
1748 ui.warn(_("Found multiple heads for %s\n") % branch) |
1749 for x in found: |
1749 for x in found: |
1750 show_changeset(ui, repo, changenode=x, brinfo=br) |
1750 show_changeset(ui, repo, changenode=x, brinfo=br) |
1751 return 1 |
1751 return 1 |
1752 if len(found) == 1: |
1752 if len(found) == 1: |
1753 node = found[0] |
1753 node = found[0] |
1754 ui.warn("Using head %s for branch %s\n" % (short(node), branch)) |
1754 ui.warn(_("Using head %s for branch %s\n") % (short(node), branch)) |
1755 else: |
1755 else: |
1756 ui.warn("branch %s not found\n" % (branch)) |
1756 ui.warn(_("branch %s not found\n") % (branch)) |
1757 return 1 |
1757 return 1 |
1758 else: |
1758 else: |
1759 node = node and repo.lookup(node) or repo.changelog.tip() |
1759 node = node and repo.lookup(node) or repo.changelog.tip() |
1760 return repo.update(node, allow=merge, force=clean) |
1760 return repo.update(node, allow=merge, force=clean) |
1761 |
1761 |
1766 # Command options and aliases are listed here, alphabetically |
1766 # Command options and aliases are listed here, alphabetically |
1767 |
1767 |
1768 table = { |
1768 table = { |
1769 "^add": |
1769 "^add": |
1770 (add, |
1770 (add, |
1771 [('I', 'include', [], 'include path in search'), |
1771 [('I', 'include', [], _('include path in search')), |
1772 ('X', 'exclude', [], 'exclude path from search')], |
1772 ('X', 'exclude', [], _('exclude path from search'))], |
1773 "hg add [OPTION]... [FILE]..."), |
1773 "hg add [OPTION]... [FILE]..."), |
1774 "addremove": |
1774 "addremove": |
1775 (addremove, |
1775 (addremove, |
1776 [('I', 'include', [], 'include path in search'), |
1776 [('I', 'include', [], _('include path in search')), |
1777 ('X', 'exclude', [], 'exclude path from search')], |
1777 ('X', 'exclude', [], _('exclude path from search'))], |
1778 "hg addremove [OPTION]... [FILE]..."), |
1778 _("hg addremove [OPTION]... [FILE]...")), |
1779 "^annotate": |
1779 "^annotate": |
1780 (annotate, |
1780 (annotate, |
1781 [('r', 'rev', '', 'revision'), |
1781 [('r', 'rev', '', _('revision')), |
1782 ('a', 'text', None, 'treat all files as text'), |
1782 ('a', 'text', None, _('treat all files as text')), |
1783 ('u', 'user', None, 'show user'), |
1783 ('u', 'user', None, _('show user')), |
1784 ('n', 'number', None, 'show revision number'), |
1784 ('n', 'number', None, _('show revision number')), |
1785 ('c', 'changeset', None, 'show changeset'), |
1785 ('c', 'changeset', None, _('show changeset')), |
1786 ('I', 'include', [], 'include path in search'), |
1786 ('I', 'include', [], _('include path in search')), |
1787 ('X', 'exclude', [], 'exclude path from search')], |
1787 ('X', 'exclude', [], _('exclude path from search'))], |
1788 'hg annotate [OPTION]... FILE...'), |
1788 _('hg annotate [OPTION]... FILE...')), |
1789 "bundle": |
1789 "bundle": |
1790 (bundle, |
1790 (bundle, |
1791 [], |
1791 [], |
1792 'hg bundle FILE DEST'), |
1792 _('hg bundle FILE DEST')), |
1793 "cat": |
1793 "cat": |
1794 (cat, |
1794 (cat, |
1795 [('I', 'include', [], 'include path in search'), |
1795 [('I', 'include', [], _('include path in search')), |
1796 ('X', 'exclude', [], 'exclude path from search'), |
1796 ('X', 'exclude', [], _('exclude path from search')), |
1797 ('o', 'output', "", 'output to file'), |
1797 ('o', 'output', "", _('output to file')), |
1798 ('r', 'rev', '', 'revision')], |
1798 ('r', 'rev', '', _('revision'))], |
1799 'hg cat [OPTION]... FILE...'), |
1799 _('hg cat [OPTION]... FILE...')), |
1800 "^clone": |
1800 "^clone": |
1801 (clone, |
1801 (clone, |
1802 [('U', 'noupdate', None, 'skip update after cloning'), |
1802 [('U', 'noupdate', None, _('skip update after cloning')), |
1803 ('e', 'ssh', "", 'ssh command'), |
1803 ('e', 'ssh', "", _('ssh command')), |
1804 ('', 'pull', None, 'use pull protocol to copy metadata'), |
1804 ('', 'pull', None, _('use pull protocol to copy metadata')), |
1805 ('', 'remotecmd', "", 'remote hg command')], |
1805 ('', 'remotecmd', "", _('remote hg command'))], |
1806 'hg clone [OPTION]... SOURCE [DEST]'), |
1806 _('hg clone [OPTION]... SOURCE [DEST]')), |
1807 "^commit|ci": |
1807 "^commit|ci": |
1808 (commit, |
1808 (commit, |
1809 [('A', 'addremove', None, 'run add/remove during commit'), |
1809 [('A', 'addremove', None, _('run add/remove during commit')), |
1810 ('I', 'include', [], 'include path in search'), |
1810 ('I', 'include', [], _('include path in search')), |
1811 ('X', 'exclude', [], 'exclude path from search'), |
1811 ('X', 'exclude', [], _('exclude path from search')), |
1812 ('m', 'message', "", 'commit message'), |
1812 ('m', 'message', "", _('commit message')), |
1813 ('t', 'text', "", 'commit message (deprecated: use -m)'), |
1813 ('t', 'text', "", _('commit message (deprecated: use -m)')), |
1814 ('l', 'logfile', "", 'commit message file'), |
1814 ('l', 'logfile', "", _('commit message file')), |
1815 ('d', 'date', "", 'date code'), |
1815 ('d', 'date', "", _('date code')), |
1816 ('u', 'user', "", 'user')], |
1816 ('u', 'user', "", _('user'))], |
1817 'hg commit [OPTION]... [FILE]...'), |
1817 _('hg commit [OPTION]... [FILE]...')), |
1818 "copy|cp": (copy, |
1818 "copy|cp": (copy, |
1819 [('I', 'include', [], 'include path in search'), |
1819 [('I', 'include', [], _('include path in search')), |
1820 ('X', 'exclude', [], 'exclude path from search'), |
1820 ('X', 'exclude', [], _('exclude path from search')), |
1821 ('A', 'after', None, 'record a copy after it has happened'), |
1821 ('A', 'after', None, _('record a copy after it has happened')), |
1822 ('f', 'force', None, 'replace destination if it exists'), |
1822 ('f', 'force', None, _('replace destination if it exists')), |
1823 ('p', 'parents', None, 'append source path to dest')], |
1823 ('p', 'parents', None, _('append source path to dest'))], |
1824 'hg copy [OPTION]... [SOURCE]... DEST'), |
1824 _('hg copy [OPTION]... [SOURCE]... DEST')), |
1825 "debugancestor": (debugancestor, [], 'debugancestor INDEX REV1 REV2'), |
1825 "debugancestor": (debugancestor, [], _('debugancestor INDEX REV1 REV2')), |
1826 "debugcheckstate": (debugcheckstate, [], 'debugcheckstate'), |
1826 "debugcheckstate": (debugcheckstate, [], _('debugcheckstate')), |
1827 "debugconfig": (debugconfig, [], 'debugconfig'), |
1827 "debugconfig": (debugconfig, [], _('debugconfig')), |
1828 "debugsetparents": (debugsetparents, [], 'debugsetparents REV1 [REV2]'), |
1828 "debugsetparents": (debugsetparents, [], _('debugsetparents REV1 [REV2]')), |
1829 "debugstate": (debugstate, [], 'debugstate'), |
1829 "debugstate": (debugstate, [], _('debugstate')), |
1830 "debugdata": (debugdata, [], 'debugdata FILE REV'), |
1830 "debugdata": (debugdata, [], _('debugdata FILE REV')), |
1831 "debugindex": (debugindex, [], 'debugindex FILE'), |
1831 "debugindex": (debugindex, [], _('debugindex FILE')), |
1832 "debugindexdot": (debugindexdot, [], 'debugindexdot FILE'), |
1832 "debugindexdot": (debugindexdot, [], _('debugindexdot FILE')), |
1833 "debugrename": (debugrename, [], 'debugrename FILE [REV]'), |
1833 "debugrename": (debugrename, [], _('debugrename FILE [REV]')), |
1834 "debugwalk": |
1834 "debugwalk": |
1835 (debugwalk, |
1835 (debugwalk, |
1836 [('I', 'include', [], 'include path in search'), |
1836 [('I', 'include', [], _('include path in search')), |
1837 ('X', 'exclude', [], 'exclude path from search')], |
1837 ('X', 'exclude', [], _('exclude path from search'))], |
1838 'debugwalk [OPTION]... [FILE]...'), |
1838 _('debugwalk [OPTION]... [FILE]...')), |
1839 "^diff": |
1839 "^diff": |
1840 (diff, |
1840 (diff, |
1841 [('r', 'rev', [], 'revision'), |
1841 [('r', 'rev', [], _('revision')), |
1842 ('a', 'text', None, 'treat all files as text'), |
1842 ('a', 'text', None, _('treat all files as text')), |
1843 ('I', 'include', [], 'include path in search'), |
1843 ('I', 'include', [], _('include path in search')), |
1844 ('X', 'exclude', [], 'exclude path from search')], |
1844 ('X', 'exclude', [], _('exclude path from search'))], |
1845 'hg diff [-a] [-I] [-X] [-r REV1 [-r REV2]] [FILE]...'), |
1845 _('hg diff [-a] [-I] [-X] [-r REV1 [-r REV2]] [FILE]...')), |
1846 "^export": |
1846 "^export": |
1847 (export, |
1847 (export, |
1848 [('o', 'output', "", 'output to file'), |
1848 [('o', 'output', "", _('output to file')), |
1849 ('a', 'text', None, 'treat all files as text')], |
1849 ('a', 'text', None, _('treat all files as text'))], |
1850 "hg export [-a] [-o OUTFILE] REV..."), |
1850 _("hg export [-a] [-o OUTFILE] REV...")), |
1851 "forget": |
1851 "forget": |
1852 (forget, |
1852 (forget, |
1853 [('I', 'include', [], 'include path in search'), |
1853 [('I', 'include', [], _('include path in search')), |
1854 ('X', 'exclude', [], 'exclude path from search')], |
1854 ('X', 'exclude', [], _('exclude path from search'))], |
1855 "hg forget [OPTION]... FILE..."), |
1855 _("hg forget [OPTION]... FILE...")), |
1856 "grep": |
1856 "grep": |
1857 (grep, |
1857 (grep, |
1858 [('0', 'print0', None, 'end fields with NUL'), |
1858 [('0', 'print0', None, _('end fields with NUL')), |
1859 ('I', 'include', [], 'include path in search'), |
1859 ('I', 'include', [], _('include path in search')), |
1860 ('X', 'exclude', [], 'include path in search'), |
1860 ('X', 'exclude', [], _('include path in search')), |
1861 ('', 'all', None, 'print all revisions with matches'), |
1861 ('', 'all', None, _('print all revisions with matches')), |
1862 ('i', 'ignore-case', None, 'ignore case when matching'), |
1862 ('i', 'ignore-case', None, _('ignore case when matching')), |
1863 ('l', 'files-with-matches', None, 'print names of files and revs with matches'), |
1863 ('l', 'files-with-matches', None, _('print names of files and revs with matches')), |
1864 ('n', 'line-number', None, 'print line numbers'), |
1864 ('n', 'line-number', None, _('print line numbers')), |
1865 ('r', 'rev', [], 'search in revision rev'), |
1865 ('r', 'rev', [], _('search in revision rev')), |
1866 ('u', 'user', None, 'print user who made change')], |
1866 ('u', 'user', None, _('print user who made change'))], |
1867 "hg grep [OPTION]... PATTERN [FILE]..."), |
1867 _("hg grep [OPTION]... PATTERN [FILE]...")), |
1868 "heads": |
1868 "heads": |
1869 (heads, |
1869 (heads, |
1870 [('b', 'branches', None, 'find branch info')], |
1870 [('b', 'branches', None, _('find branch info'))], |
1871 'hg heads [-b]'), |
1871 _('hg heads [-b]')), |
1872 "help": (help_, [], 'hg help [COMMAND]'), |
1872 "help": (help_, [], _('hg help [COMMAND]')), |
1873 "identify|id": (identify, [], 'hg identify'), |
1873 "identify|id": (identify, [], _('hg identify')), |
1874 "import|patch": |
1874 "import|patch": |
1875 (import_, |
1875 (import_, |
1876 [('p', 'strip', 1, 'path strip'), |
1876 [('p', 'strip', 1, _('path strip')), |
1877 ('f', 'force', None, 'skip check for outstanding changes'), |
1877 ('f', 'force', None, _('skip check for outstanding changes')), |
1878 ('b', 'base', "", 'base path')], |
1878 ('b', 'base', "", _('base path'))], |
1879 "hg import [-f] [-p NUM] [-b BASE] PATCH..."), |
1879 _("hg import [-f] [-p NUM] [-b BASE] PATCH...")), |
1880 "incoming|in": (incoming, |
1880 "incoming|in": (incoming, |
1881 [('p', 'patch', None, 'show patch')], |
1881 [('p', 'patch', None, _('show patch'))], |
1882 'hg incoming [-p] [SOURCE]'), |
1882 _('hg incoming [-p] [SOURCE]')), |
1883 "^init": (init, [], 'hg init [DEST]'), |
1883 "^init": (init, [], _('hg init [DEST]')), |
1884 "locate": |
1884 "locate": |
1885 (locate, |
1885 (locate, |
1886 [('r', 'rev', '', 'revision'), |
1886 [('r', 'rev', '', _('revision')), |
1887 ('0', 'print0', None, 'end filenames with NUL'), |
1887 ('0', 'print0', None, _('end filenames with NUL')), |
1888 ('f', 'fullpath', None, 'print complete paths'), |
1888 ('f', 'fullpath', None, _('print complete paths')), |
1889 ('I', 'include', [], 'include path in search'), |
1889 ('I', 'include', [], _('include path in search')), |
1890 ('X', 'exclude', [], 'exclude path from search')], |
1890 ('X', 'exclude', [], _('exclude path from search'))], |
1891 'hg locate [OPTION]... [PATTERN]...'), |
1891 _('hg locate [OPTION]... [PATTERN]...')), |
1892 "^log|history": |
1892 "^log|history": |
1893 (log, |
1893 (log, |
1894 [('I', 'include', [], 'include path in search'), |
1894 [('I', 'include', [], _('include path in search')), |
1895 ('X', 'exclude', [], 'exclude path from search'), |
1895 ('X', 'exclude', [], _('exclude path from search')), |
1896 ('b', 'branch', None, 'show branches'), |
1896 ('b', 'branch', None, _('show branches')), |
1897 ('k', 'keyword', [], 'search for a keyword'), |
1897 ('k', 'keyword', [], _('search for a keyword')), |
1898 ('r', 'rev', [], 'revision'), |
1898 ('r', 'rev', [], _('revision')), |
1899 ('p', 'patch', None, 'show patch')], |
1899 ('p', 'patch', None, _('show patch'))], |
1900 'hg log [-I] [-X] [-r REV]... [-p] [FILE]'), |
1900 _('hg log [-I] [-X] [-r REV]... [-p] [FILE]')), |
1901 "manifest": (manifest, [], 'hg manifest [REV]'), |
1901 "manifest": (manifest, [], _('hg manifest [REV]')), |
1902 "outgoing|out": (outgoing, |
1902 "outgoing|out": (outgoing, |
1903 [('p', 'patch', None, 'show patch')], |
1903 [('p', 'patch', None, _('show patch'))], |
1904 'hg outgoing [-p] [DEST]'), |
1904 _('hg outgoing [-p] [DEST]')), |
1905 "parents": (parents, [], 'hg parents [REV]'), |
1905 "parents": (parents, [], _('hg parents [REV]')), |
1906 "paths": (paths, [], 'hg paths [NAME]'), |
1906 "paths": (paths, [], _('hg paths [NAME]')), |
1907 "^pull": |
1907 "^pull": |
1908 (pull, |
1908 (pull, |
1909 [('u', 'update', None, 'update working directory'), |
1909 [('u', 'update', None, _('update working directory')), |
1910 ('e', 'ssh', "", 'ssh command'), |
1910 ('e', 'ssh', "", _('ssh command')), |
1911 ('', 'remotecmd', "", 'remote hg command')], |
1911 ('', 'remotecmd', "", _('remote hg command'))], |
1912 'hg pull [-u] [-e FILE] [--remotecmd FILE] [SOURCE]'), |
1912 _('hg pull [-u] [-e FILE] [--remotecmd FILE] [SOURCE]')), |
1913 "^push": |
1913 "^push": |
1914 (push, |
1914 (push, |
1915 [('f', 'force', None, 'force push'), |
1915 [('f', 'force', None, _('force push')), |
1916 ('e', 'ssh', "", 'ssh command'), |
1916 ('e', 'ssh', "", _('ssh command')), |
1917 ('', 'remotecmd', "", 'remote hg command')], |
1917 ('', 'remotecmd', "", _('remote hg command'))], |
1918 'hg push [-f] [-e FILE] [--remotecmd FILE] [DEST]'), |
1918 _('hg push [-f] [-e FILE] [--remotecmd FILE] [DEST]')), |
1919 "rawcommit": |
1919 "rawcommit": |
1920 (rawcommit, |
1920 (rawcommit, |
1921 [('p', 'parent', [], 'parent'), |
1921 [('p', 'parent', [], _('parent')), |
1922 ('d', 'date', "", 'date code'), |
1922 ('d', 'date', "", _('date code')), |
1923 ('u', 'user', "", 'user'), |
1923 ('u', 'user', "", _('user')), |
1924 ('F', 'files', "", 'file list'), |
1924 ('F', 'files', "", _('file list')), |
1925 ('m', 'message', "", 'commit message'), |
1925 ('m', 'message', "", _('commit message')), |
1926 ('t', 'text', "", 'commit message (deprecated: use -m)'), |
1926 ('t', 'text', "", _('commit message (deprecated: use -m)')), |
1927 ('l', 'logfile', "", 'commit message file')], |
1927 ('l', 'logfile', "", _('commit message file'))], |
1928 'hg rawcommit [OPTION]... [FILE]...'), |
1928 _('hg rawcommit [OPTION]... [FILE]...')), |
1929 "recover": (recover, [], "hg recover"), |
1929 "recover": (recover, [], _("hg recover")), |
1930 "^remove|rm": (remove, |
1930 "^remove|rm": (remove, |
1931 [('I', 'include', [], 'include path in search'), |
1931 [('I', 'include', [], _('include path in search')), |
1932 ('X', 'exclude', [], 'exclude path from search')], |
1932 ('X', 'exclude', [], _('exclude path from search'))], |
1933 "hg remove [OPTION]... FILE..."), |
1933 _("hg remove [OPTION]... FILE...")), |
1934 "rename|mv": (rename, |
1934 "rename|mv": (rename, |
1935 [('I', 'include', [], 'include path in search'), |
1935 [('I', 'include', [], _('include path in search')), |
1936 ('X', 'exclude', [], 'exclude path from search'), |
1936 ('X', 'exclude', [], _('exclude path from search')), |
1937 ('A', 'after', None, 'record a copy after it has happened'), |
1937 ('A', 'after', None, _('record a copy after it has happened')), |
1938 ('f', 'force', None, 'replace destination if it exists'), |
1938 ('f', 'force', None, _('replace destination if it exists')), |
1939 ('p', 'parents', None, 'append source path to dest')], |
1939 ('p', 'parents', None, _('append source path to dest'))], |
1940 'hg rename [OPTION]... [SOURCE]... DEST'), |
1940 _('hg rename [OPTION]... [SOURCE]... DEST')), |
1941 "^revert": |
1941 "^revert": |
1942 (revert, |
1942 (revert, |
1943 [("n", "nonrecursive", None, "don't recurse into subdirs"), |
1943 [("n", "nonrecursive", None, _("don't recurse into subdirs")), |
1944 ("r", "rev", "", "revision")], |
1944 ("r", "rev", "", _("revision"))], |
1945 "hg revert [-n] [-r REV] [NAME]..."), |
1945 _("hg revert [-n] [-r REV] [NAME]...")), |
1946 "root": (root, [], "hg root"), |
1946 "root": (root, [], _("hg root")), |
1947 "^serve": |
1947 "^serve": |
1948 (serve, |
1948 (serve, |
1949 [('A', 'accesslog', '', 'access log file'), |
1949 [('A', 'accesslog', '', _('access log file')), |
1950 ('E', 'errorlog', '', 'error log file'), |
1950 ('E', 'errorlog', '', _('error log file')), |
1951 ('p', 'port', 0, 'listen port'), |
1951 ('p', 'port', 0, _('listen port')), |
1952 ('a', 'address', '', 'interface address'), |
1952 ('a', 'address', '', _('interface address')), |
1953 ('n', 'name', "", 'repository name'), |
1953 ('n', 'name', "", _('repository name')), |
1954 ('', 'stdio', None, 'for remote clients'), |
1954 ('', 'stdio', None, _('for remote clients')), |
1955 ('t', 'templates', "", 'template directory'), |
1955 ('t', 'templates', "", _('template directory')), |
1956 ('', 'style', "", 'template style'), |
1956 ('', 'style', "", _('template style')), |
1957 ('6', 'ipv6', None, 'use IPv6 in addition to IPv4')], |
1957 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4'))], |
1958 "hg serve [OPTION]..."), |
1958 _("hg serve [OPTION]...")), |
1959 "^status": |
1959 "^status": |
1960 (status, |
1960 (status, |
1961 [('m', 'modified', None, 'show only modified files'), |
1961 [('m', 'modified', None, _('show only modified files')), |
1962 ('a', 'added', None, 'show only added files'), |
1962 ('a', 'added', None, _('show only added files')), |
1963 ('r', 'removed', None, 'show only removed files'), |
1963 ('r', 'removed', None, _('show only removed files')), |
1964 ('u', 'unknown', None, 'show only unknown (not tracked) files'), |
1964 ('u', 'unknown', None, _('show only unknown (not tracked) files')), |
1965 ('n', 'no-status', None, 'hide status prefix'), |
1965 ('n', 'no-status', None, _('hide status prefix')), |
1966 ('0', 'print0', None, 'end filenames with NUL'), |
1966 ('0', 'print0', None, _('end filenames with NUL')), |
1967 ('I', 'include', [], 'include path in search'), |
1967 ('I', 'include', [], _('include path in search')), |
1968 ('X', 'exclude', [], 'exclude path from search')], |
1968 ('X', 'exclude', [], _('exclude path from search'))], |
1969 "hg status [OPTION]... [FILE]..."), |
1969 _("hg status [OPTION]... [FILE]...")), |
1970 "tag": |
1970 "tag": |
1971 (tag, |
1971 (tag, |
1972 [('l', 'local', None, 'make the tag local'), |
1972 [('l', 'local', None, _('make the tag local')), |
1973 ('m', 'message', "", 'commit message'), |
1973 ('m', 'message', "", _('commit message')), |
1974 ('t', 'text', "", 'commit message (deprecated: use -m)'), |
1974 ('t', 'text', "", _('commit message (deprecated: use -m)')), |
1975 ('d', 'date', "", 'date code'), |
1975 ('d', 'date', "", _('date code')), |
1976 ('u', 'user', "", 'user')], |
1976 ('u', 'user', "", _('user'))], |
1977 'hg tag [OPTION]... NAME [REV]'), |
1977 _('hg tag [OPTION]... NAME [REV]')), |
1978 "tags": (tags, [], 'hg tags'), |
1978 "tags": (tags, [], _('hg tags')), |
1979 "tip": (tip, [], 'hg tip'), |
1979 "tip": (tip, [], _('hg tip')), |
1980 "unbundle": |
1980 "unbundle": |
1981 (unbundle, |
1981 (unbundle, |
1982 [], |
1982 [], |
1983 'hg unbundle FILE'), |
1983 _('hg unbundle FILE')), |
1984 "undo": (undo, [], 'hg undo'), |
1984 "undo": (undo, [], _('hg undo')), |
1985 "^update|up|checkout|co": |
1985 "^update|up|checkout|co": |
1986 (update, |
1986 (update, |
1987 [('b', 'branch', "", 'checkout the head of a specific branch'), |
1987 [('b', 'branch', "", _('checkout the head of a specific branch')), |
1988 ('m', 'merge', None, 'allow merging of conflicts'), |
1988 ('m', 'merge', None, _('allow merging of conflicts')), |
1989 ('C', 'clean', None, 'overwrite locally modified files')], |
1989 ('C', 'clean', None, _('overwrite locally modified files'))], |
1990 'hg update [-b TAG] [-m] [-C] [REV]'), |
1990 _('hg update [-b TAG] [-m] [-C] [REV]')), |
1991 "verify": (verify, [], 'hg verify'), |
1991 "verify": (verify, [], _('hg verify')), |
1992 "version": (show_version, [], 'hg version'), |
1992 "version": (show_version, [], _('hg version')), |
1993 } |
1993 } |
1994 |
1994 |
1995 globalopts = [ |
1995 globalopts = [ |
1996 ('R', 'repository', "", 'repository root directory'), |
1996 ('R', 'repository', "", _('repository root directory')), |
1997 ('', 'cwd', '', 'change working directory'), |
1997 ('', 'cwd', '', _('change working directory')), |
1998 ('y', 'noninteractive', None, 'run non-interactively'), |
1998 ('y', 'noninteractive', None, _('run non-interactively')), |
1999 ('q', 'quiet', None, 'quiet mode'), |
1999 ('q', 'quiet', None, _('quiet mode')), |
2000 ('v', 'verbose', None, 'verbose mode'), |
2000 ('v', 'verbose', None, _('verbose mode')), |
2001 ('', 'debug', None, 'debug mode'), |
2001 ('', 'debug', None, _('debug mode')), |
2002 ('', 'debugger', None, 'start debugger'), |
2002 ('', 'debugger', None, _('start debugger')), |
2003 ('', 'traceback', None, 'print traceback on exception'), |
2003 ('', 'traceback', None, _('print traceback on exception')), |
2004 ('', 'time', None, 'time how long the command takes'), |
2004 ('', 'time', None, _('time how long the command takes')), |
2005 ('', 'profile', None, 'profile'), |
2005 ('', 'profile', None, _('profile')), |
2006 ('', 'version', None, 'output version information and exit'), |
2006 ('', 'version', None, _('output version information and exit')), |
2007 ('h', 'help', None, 'display help and exit'), |
2007 ('h', 'help', None, _('display help and exit')), |
2008 ] |
2008 ] |
2009 |
2009 |
2010 norepo = ("clone init version help debugancestor debugconfig debugdata" |
2010 norepo = ("clone init version help debugancestor debugconfig debugdata" |
2011 " debugindex debugindexdot paths") |
2011 " debugindex debugindexdot paths") |
2012 |
2012 |
2075 for x in u.extensions(): |
2075 for x in u.extensions(): |
2076 if x[1]: |
2076 if x[1]: |
2077 try: |
2077 try: |
2078 mod = imp.load_source(x[0], x[1]) |
2078 mod = imp.load_source(x[0], x[1]) |
2079 except: |
2079 except: |
2080 u.warn("*** failed to import extension %s\n" % x[1]) |
2080 u.warn(_("*** failed to import extension %s\n") % x[1]) |
2081 continue |
2081 continue |
2082 else: |
2082 else: |
2083 def importh(name): |
2083 def importh(name): |
2084 mod = __import__(name) |
2084 mod = __import__(name) |
2085 components = name.split('.') |
2085 components = name.split('.') |
2087 mod = getattr(mod, comp) |
2087 mod = getattr(mod, comp) |
2088 return mod |
2088 return mod |
2089 try: |
2089 try: |
2090 mod = importh(x[0]) |
2090 mod = importh(x[0]) |
2091 except: |
2091 except: |
2092 u.warn("failed to import extension %s\n" % x[0]) |
2092 u.warn(_("failed to import extension %s\n") % x[0]) |
2093 continue |
2093 continue |
2094 |
2094 |
2095 external.append(mod) |
2095 external.append(mod) |
2096 for x in external: |
2096 for x in external: |
2097 cmdtable = getattr(x, 'cmdtable', {}) |
2097 cmdtable = getattr(x, 'cmdtable', {}) |
2098 for t in cmdtable: |
2098 for t in cmdtable: |
2099 if t in table: |
2099 if t in table: |
2100 u.warn("module %s overrides %s\n" % (x.__name__, t)) |
2100 u.warn(_("module %s overrides %s\n") % (x.__name__, t)) |
2101 table.update(cmdtable) |
2101 table.update(cmdtable) |
2102 |
2102 |
2103 try: |
2103 try: |
2104 cmd, func, args, options, cmdoptions = parse(args) |
2104 cmd, func, args, options, cmdoptions = parse(args) |
2105 except ParseError, inst: |
2105 except ParseError, inst: |
2106 if inst.args[0]: |
2106 if inst.args[0]: |
2107 u.warn("hg %s: %s\n" % (inst.args[0], inst.args[1])) |
2107 u.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1])) |
2108 help_(u, inst.args[0]) |
2108 help_(u, inst.args[0]) |
2109 else: |
2109 else: |
2110 u.warn("hg: %s\n" % inst.args[1]) |
2110 u.warn(_("hg: %s\n") % inst.args[1]) |
2111 help_(u, 'shortlist') |
2111 help_(u, 'shortlist') |
2112 sys.exit(-1) |
2112 sys.exit(-1) |
2113 except UnknownCommand, inst: |
2113 except UnknownCommand, inst: |
2114 u.warn("hg: unknown command '%s'\n" % inst.args[0]) |
2114 u.warn(_("hg: unknown command '%s'\n") % inst.args[0]) |
2115 help_(u, 'shortlist') |
2115 help_(u, 'shortlist') |
2116 sys.exit(1) |
2116 sys.exit(1) |
2117 |
2117 |
2118 if options["time"]: |
2118 if options["time"]: |
2119 def get_times(): |
2119 def get_times(): |
2122 t = (t[0], t[1], t[2], t[3], time.clock()) |
2122 t = (t[0], t[1], t[2], t[3], time.clock()) |
2123 return t |
2123 return t |
2124 s = get_times() |
2124 s = get_times() |
2125 def print_time(): |
2125 def print_time(): |
2126 t = get_times() |
2126 t = get_times() |
2127 u.warn("Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n" % |
2127 u.warn(_("Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n") % |
2128 (t[4]-s[4], t[0]-s[0], t[2]-s[2], t[1]-s[1], t[3]-s[3])) |
2128 (t[4]-s[4], t[0]-s[0], t[2]-s[2], t[1]-s[1], t[3]-s[3])) |
2129 atexit.register(print_time) |
2129 atexit.register(print_time) |
2130 |
2130 |
2131 u.updateopts(options["verbose"], options["debug"], options["quiet"], |
2131 u.updateopts(options["verbose"], options["debug"], options["quiet"], |
2132 not options["noninteractive"]) |
2132 not options["noninteractive"]) |
2181 pdb.post_mortem(sys.exc_info()[2]) |
2181 pdb.post_mortem(sys.exc_info()[2]) |
2182 if options['traceback']: |
2182 if options['traceback']: |
2183 traceback.print_exc() |
2183 traceback.print_exc() |
2184 raise |
2184 raise |
2185 except hg.RepoError, inst: |
2185 except hg.RepoError, inst: |
2186 u.warn("abort: ", inst, "!\n") |
2186 u.warn(_("abort: "), inst, "!\n") |
2187 except revlog.RevlogError, inst: |
2187 except revlog.RevlogError, inst: |
2188 u.warn("abort: ", inst, "!\n") |
2188 u.warn(_("abort: "), inst, "!\n") |
2189 except SignalInterrupt: |
2189 except SignalInterrupt: |
2190 u.warn("killed!\n") |
2190 u.warn(_("killed!\n")) |
2191 except KeyboardInterrupt: |
2191 except KeyboardInterrupt: |
2192 try: |
2192 try: |
2193 u.warn("interrupted!\n") |
2193 u.warn(_("interrupted!\n")) |
2194 except IOError, inst: |
2194 except IOError, inst: |
2195 if inst.errno == errno.EPIPE: |
2195 if inst.errno == errno.EPIPE: |
2196 if u.debugflag: |
2196 if u.debugflag: |
2197 u.warn("\nbroken pipe\n") |
2197 u.warn(_("\nbroken pipe\n")) |
2198 else: |
2198 else: |
2199 raise |
2199 raise |
2200 except IOError, inst: |
2200 except IOError, inst: |
2201 if hasattr(inst, "code"): |
2201 if hasattr(inst, "code"): |
2202 u.warn("abort: %s\n" % inst) |
2202 u.warn(_("abort: %s\n") % inst) |
2203 elif hasattr(inst, "reason"): |
2203 elif hasattr(inst, "reason"): |
2204 u.warn("abort: error: %s\n" % inst.reason[1]) |
2204 u.warn(_("abort: error: %s\n") % inst.reason[1]) |
2205 elif hasattr(inst, "args") and inst[0] == errno.EPIPE: |
2205 elif hasattr(inst, "args") and inst[0] == errno.EPIPE: |
2206 if u.debugflag: |
2206 if u.debugflag: |
2207 u.warn("broken pipe\n") |
2207 u.warn(_("broken pipe\n")) |
2208 elif getattr(inst, "strerror", None): |
2208 elif getattr(inst, "strerror", None): |
2209 if getattr(inst, "filename", None): |
2209 if getattr(inst, "filename", None): |
2210 u.warn("abort: %s - %s\n" % (inst.strerror, inst.filename)) |
2210 u.warn(_("abort: %s - %s\n") % (inst.strerror, inst.filename)) |
2211 else: |
2211 else: |
2212 u.warn("abort: %s\n" % inst.strerror) |
2212 u.warn(_("abort: %s\n") % inst.strerror) |
2213 else: |
2213 else: |
2214 raise |
2214 raise |
2215 except OSError, inst: |
2215 except OSError, inst: |
2216 if hasattr(inst, "filename"): |
2216 if hasattr(inst, "filename"): |
2217 u.warn("abort: %s: %s\n" % (inst.strerror, inst.filename)) |
2217 u.warn(_("abort: %s: %s\n") % (inst.strerror, inst.filename)) |
2218 else: |
2218 else: |
2219 u.warn("abort: %s\n" % inst.strerror) |
2219 u.warn(_("abort: %s\n") % inst.strerror) |
2220 except util.Abort, inst: |
2220 except util.Abort, inst: |
2221 u.warn('abort: ', inst.args[0] % inst.args[1:], '\n') |
2221 u.warn(_('abort: '), inst.args[0] % inst.args[1:], '\n') |
2222 sys.exit(1) |
2222 sys.exit(1) |
2223 except TypeError, inst: |
2223 except TypeError, inst: |
2224 # was this an argument error? |
2224 # was this an argument error? |
2225 tb = traceback.extract_tb(sys.exc_info()[2]) |
2225 tb = traceback.extract_tb(sys.exc_info()[2]) |
2226 if len(tb) > 2: # no |
2226 if len(tb) > 2: # no |
2227 raise |
2227 raise |
2228 u.debug(inst, "\n") |
2228 u.debug(inst, "\n") |
2229 u.warn("%s: invalid arguments\n" % cmd) |
2229 u.warn(_("%s: invalid arguments\n") % cmd) |
2230 help_(u, cmd) |
2230 help_(u, cmd) |
2231 except UnknownCommand, inst: |
2231 except UnknownCommand, inst: |
2232 u.warn("hg: unknown command '%s'\n" % inst.args[0]) |
2232 u.warn(_("hg: unknown command '%s'\n") % inst.args[0]) |
2233 help_(u, 'shortlist') |
2233 help_(u, 'shortlist') |
2234 except SystemExit: |
2234 except SystemExit: |
2235 # don't catch this in the catch-all below |
2235 # don't catch this in the catch-all below |
2236 raise |
2236 raise |
2237 except: |
2237 except: |
2238 u.warn("** unknown exception encountered, details follow\n") |
2238 u.warn(_("** unknown exception encountered, details follow\n")) |
2239 u.warn("** report bug details to mercurial@selenic.com\n") |
2239 u.warn(_("** report bug details to mercurial@selenic.com\n")) |
2240 raise |
2240 raise |
2241 |
2241 |
2242 sys.exit(-1) |
2242 sys.exit(-1) |