changeset 1437 | ea51d296085f |
parent 1436 | db6d7b4005ba |
child 1439 | 65cbe22b03fa |
1436:db6d7b4005ba | 1437:ea51d296085f |
---|---|
474 ui.write("%s\n" % first) |
474 ui.write("%s\n" % first) |
475 |
475 |
476 # Commands start here, listed alphabetically |
476 # Commands start here, listed alphabetically |
477 |
477 |
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 |
|
481 Schedule files to be version controlled and added to the repository. |
|
482 |
|
483 The files will be added to the repository at the next commit. |
|
484 |
|
485 If no names are given, add all files in the current directory and |
|
486 its subdirectories. |
|
487 """ |
|
488 |
|
480 names = [] |
489 names = [] |
481 for src, abs, rel, exact in walk(repo, pats, opts): |
490 for src, abs, rel, exact in walk(repo, pats, opts): |
482 if exact: |
491 if exact: |
483 if ui.verbose: ui.status(_('adding %s\n') % rel) |
492 if ui.verbose: ui.status(_('adding %s\n') % rel) |
484 names.append(abs) |
493 names.append(abs) |
486 ui.status(_('adding %s\n') % rel) |
495 ui.status(_('adding %s\n') % rel) |
487 names.append(abs) |
496 names.append(abs) |
488 repo.add(names) |
497 repo.add(names) |
489 |
498 |
490 def addremove(ui, repo, *pats, **opts): |
499 def addremove(ui, repo, *pats, **opts): |
491 """add all new files, delete all missing files""" |
500 """add all new files, delete all missing files |
501 |
|
502 Add all new files and remove all missing files from the repository. |
|
503 |
|
504 New files are ignored if they match any of the patterns in .hgignore. As |
|
505 with add, these changes take effect at the next commit. |
|
506 """ |
|
492 add, remove = [], [] |
507 add, remove = [], [] |
493 for src, abs, rel, exact in walk(repo, pats, opts): |
508 for src, abs, rel, exact in walk(repo, pats, opts): |
494 if src == 'f' and repo.dirstate.state(abs) == '?': |
509 if src == 'f' and repo.dirstate.state(abs) == '?': |
495 add.append(abs) |
510 add.append(abs) |
496 if ui.verbose or not exact: |
511 if ui.verbose or not exact: |
501 ui.status(_('removing %s\n') % rel) |
516 ui.status(_('removing %s\n') % rel) |
502 repo.add(add) |
517 repo.add(add) |
503 repo.remove(remove) |
518 repo.remove(remove) |
504 |
519 |
505 def annotate(ui, repo, *pats, **opts): |
520 def annotate(ui, repo, *pats, **opts): |
506 """show changeset information per file line""" |
521 """show changeset information per file line |
522 |
|
523 List changes in files, showing the revision id responsible for each line |
|
524 |
|
525 This command is useful to discover who did a change or when a change took |
|
526 place. |
|
527 |
|
528 Without the -a option, annotate will avoid processing files it |
|
529 detects as binary. With -a, annotate will generate an annotation |
|
530 anyway, probably with undesirable results. |
|
531 """ |
|
507 def getnode(rev): |
532 def getnode(rev): |
508 return short(repo.changelog.node(rev)) |
533 return short(repo.changelog.node(rev)) |
509 |
534 |
510 ucache = {} |
535 ucache = {} |
511 def getname(rev): |
536 def getname(rev): |
549 if pieces: |
574 if pieces: |
550 for p, l in zip(zip(*pieces), lines): |
575 for p, l in zip(zip(*pieces), lines): |
551 ui.write("%s: %s" % (" ".join(p), l[1])) |
576 ui.write("%s: %s" % (" ".join(p), l[1])) |
552 |
577 |
553 def bundle(ui, repo, fname, dest="default-push", **opts): |
578 def bundle(ui, repo, fname, dest="default-push", **opts): |
554 """create a changegroup file""" |
579 """create a changegroup file |
580 |
|
581 Generate a compressed changegroup file collecting all changesets |
|
582 not found in the other repository. |
|
583 |
|
584 This file can then be transferred using conventional means and |
|
585 applied to another repository with the unbundle command. This is |
|
586 useful when native push and pull are not available or when |
|
587 exporting an entire repository is undesirable. The standard file |
|
588 extension is ".hg". |
|
589 |
|
590 Unlike import/export, this exactly preserves all changeset |
|
591 contents including permissions, rename data, and revision history. |
|
592 """ |
|
555 f = open(fname, "wb") |
593 f = open(fname, "wb") |
556 dest = ui.expandpath(dest) |
594 dest = ui.expandpath(dest) |
557 other = hg.repository(ui, dest) |
595 other = hg.repository(ui, dest) |
558 o = repo.findoutgoing(other) |
596 o = repo.findoutgoing(other) |
559 cg = repo.changegroup(o) |
597 cg = repo.changegroup(o) |
570 except: |
608 except: |
571 os.unlink(fname) |
609 os.unlink(fname) |
572 raise |
610 raise |
573 |
611 |
574 def cat(ui, repo, file1, *pats, **opts): |
612 def cat(ui, repo, file1, *pats, **opts): |
575 """output the latest or given revisions of files""" |
613 """output the latest or given revisions of files |
614 |
|
615 Print the specified files as they were at the given revision. |
|
616 If no revision is given then the tip is used. |
|
617 |
|
618 Output may be to a file, in which case the name of the file is |
|
619 given using a format string. The formatting rules are the same as |
|
620 for the export command, with the following additions: |
|
621 |
|
622 %s basename of file being printed |
|
623 %d dirname of file being printed, or '.' if in repo root |
|
624 %p root-relative path name of file being printed |
|
625 """ |
|
576 mf = {} |
626 mf = {} |
577 if opts['rev']: |
627 if opts['rev']: |
578 change = repo.changelog.read(repo.lookup(opts['rev'])) |
628 change = repo.changelog.read(repo.lookup(opts['rev'])) |
579 mf = repo.manifest.read(change[0]) |
629 mf = repo.manifest.read(change[0]) |
580 for src, abs, rel, exact in walk(repo, (file1,) + pats, opts): |
630 for src, abs, rel, exact in walk(repo, (file1,) + pats, opts): |
591 n = r.tip() |
641 n = r.tip() |
592 fp = make_file(repo, r, opts['output'], node=n, pathname=abs) |
642 fp = make_file(repo, r, opts['output'], node=n, pathname=abs) |
593 fp.write(r.read(n)) |
643 fp.write(r.read(n)) |
594 |
644 |
595 def clone(ui, source, dest=None, **opts): |
645 def clone(ui, source, dest=None, **opts): |
596 """make a copy of an existing repository""" |
646 """make a copy of an existing repository |
647 |
|
648 Create a copy of an existing repository in a new directory. |
|
649 |
|
650 If no destination directory name is specified, it defaults to the |
|
651 basename of the source. |
|
652 |
|
653 The location of the source is added to the new repository's |
|
654 .hg/hgrc file, as the default to be used for future pulls. |
|
655 |
|
656 For efficiency, hardlinks are used for cloning whenever the source |
|
657 and destination are on the same filesystem. Some filesystems, |
|
658 such as AFS, implement hardlinking incorrectly, but do not report |
|
659 errors. In these cases, use the --pull option to avoid |
|
660 hardlinking. |
|
661 """ |
|
597 if dest is None: |
662 if dest is None: |
598 dest = os.path.basename(os.path.normpath(source)) |
663 dest = os.path.basename(os.path.normpath(source)) |
599 |
664 |
600 if os.path.exists(dest): |
665 if os.path.exists(dest): |
601 raise util.Abort(_("destination '%s' already exists"), dest) |
666 raise util.Abort(_("destination '%s' already exists"), dest) |
666 update(ui, repo) |
731 update(ui, repo) |
667 |
732 |
668 d.close() |
733 d.close() |
669 |
734 |
670 def commit(ui, repo, *pats, **opts): |
735 def commit(ui, repo, *pats, **opts): |
671 """commit the specified files or all outstanding changes""" |
736 """commit the specified files or all outstanding changes |
737 |
|
738 Commit changes to the given files into the repository. |
|
739 |
|
740 If a list of files is omitted, all changes reported by "hg status" |
|
741 from the root of the repository will be commited. |
|
742 |
|
743 The HGEDITOR or EDITOR environment variables are used to start an |
|
744 editor to add a commit comment. |
|
745 """ |
|
672 if opts['text']: |
746 if opts['text']: |
673 ui.warn(_("Warning: -t and --text is deprecated," |
747 ui.warn(_("Warning: -t and --text is deprecated," |
674 " please use -m or --message instead.\n")) |
748 " please use -m or --message instead.\n")) |
675 message = opts['message'] or opts['text'] |
749 message = opts['message'] or opts['text'] |
676 logfile = opts['logfile'] |
750 logfile = opts['logfile'] |
784 if errs: |
858 if errs: |
785 ui.warn(_('(consider using --after)\n')) |
859 ui.warn(_('(consider using --after)\n')) |
786 return errs, copied |
860 return errs, copied |
787 |
861 |
788 def copy(ui, repo, *pats, **opts): |
862 def copy(ui, repo, *pats, **opts): |
789 """mark files as copied for the next commit""" |
863 """mark files as copied for the next commit |
864 |
|
865 Mark dest as having copies of source files. If dest is a |
|
866 directory, copies are put in that directory. If dest is a file, |
|
867 there can only be one source. |
|
868 |
|
869 By default, this command copies the contents of files as they |
|
870 stand in the working directory. If invoked with --after, the |
|
871 operation is recorded, but no copying is performed. |
|
872 |
|
873 This command takes effect in the next commit. |
|
874 |
|
875 NOTE: This command should be treated as experimental. While it |
|
876 should properly record copied files, this information is not yet |
|
877 fully used by merge, nor fully reported by log. |
|
878 """ |
|
790 errs, copied = docopy(ui, repo, pats, opts) |
879 errs, copied = docopy(ui, repo, pats, opts) |
791 return errs |
880 return errs |
792 |
881 |
793 def debugancestor(ui, index, rev1, rev2): |
882 def debugancestor(ui, index, rev1, rev2): |
794 """find the ancestor revision of two revisions in a given index""" |
883 """find the ancestor revision of two revisions in a given index""" |
925 for src, abs, rel, exact in items: |
1014 for src, abs, rel, exact in items: |
926 line = fmt % (src, abs, rel, exact and 'exact' or '') |
1015 line = fmt % (src, abs, rel, exact and 'exact' or '') |
927 ui.write("%s\n" % line.rstrip()) |
1016 ui.write("%s\n" % line.rstrip()) |
928 |
1017 |
929 def diff(ui, repo, *pats, **opts): |
1018 def diff(ui, repo, *pats, **opts): |
930 """diff working directory (or selected files)""" |
1019 """diff working directory (or selected files) |
1020 |
|
1021 Show differences between revisions for the specified files. |
|
1022 |
|
1023 Differences between files are shown using the unified diff format. |
|
1024 |
|
1025 When two revision arguments are given, then changes are shown |
|
1026 between those revisions. If only one revision is specified then |
|
1027 that revision is compared to the working directory, and, when no |
|
1028 revisions are specified, the working directory files are compared |
|
1029 to its parent. |
|
1030 |
|
1031 Without the -a option, diff will avoid generating diffs of files |
|
1032 it detects as binary. With -a, diff will generate a diff anyway, |
|
1033 probably with undesirable results. |
|
1034 """ |
|
931 node1, node2 = None, None |
1035 node1, node2 = None, None |
932 revs = [repo.lookup(x) for x in opts['rev']] |
1036 revs = [repo.lookup(x) for x in opts['rev']] |
933 |
1037 |
934 if len(revs) > 0: |
1038 if len(revs) > 0: |
935 node1 = revs[0] |
1039 node1 = revs[0] |
966 dodiff(fp, ui, repo, prev, node, text=opts['text']) |
1070 dodiff(fp, ui, repo, prev, node, text=opts['text']) |
967 if fp != sys.stdout: |
1071 if fp != sys.stdout: |
968 fp.close() |
1072 fp.close() |
969 |
1073 |
970 def export(ui, repo, *changesets, **opts): |
1074 def export(ui, repo, *changesets, **opts): |
971 """dump the header and diffs for one or more changesets""" |
1075 """dump the header and diffs for one or more changesets |
1076 |
|
1077 Print the changeset header and diffs for one or more revisions. |
|
1078 |
|
1079 The information shown in the changeset header is: author, |
|
1080 changeset hash, parent and commit comment. |
|
1081 |
|
1082 Output may be to a file, in which case the name of the file is |
|
1083 given using a format string. The formatting rules are as follows: |
|
1084 |
|
1085 %% literal "%" character |
|
1086 %H changeset hash (40 bytes of hexadecimal) |
|
1087 %N number of patches being generated |
|
1088 %R changeset revision number |
|
1089 %b basename of the exporting repository |
|
1090 %h short-form changeset hash (12 bytes of hexadecimal) |
|
1091 %n zero-padded sequence number, starting at 1 |
|
1092 %r zero-padded changeset revision number |
|
1093 |
|
1094 Without the -a option, export will avoid generating diffs of files |
|
1095 it detects as binary. With -a, export will generate a diff anyway, |
|
1096 probably with undesirable results. |
|
1097 """ |
|
972 if not changesets: |
1098 if not changesets: |
973 raise util.Abort(_("export requires at least one changeset")) |
1099 raise util.Abort(_("export requires at least one changeset")) |
974 seqno = 0 |
1100 seqno = 0 |
975 revs = list(revrange(ui, repo, changesets)) |
1101 revs = list(revrange(ui, repo, changesets)) |
976 total = len(revs) |
1102 total = len(revs) |
979 for cset in revs: |
1105 for cset in revs: |
980 seqno += 1 |
1106 seqno += 1 |
981 doexport(ui, repo, cset, seqno, total, revwidth, opts) |
1107 doexport(ui, repo, cset, seqno, total, revwidth, opts) |
982 |
1108 |
983 def forget(ui, repo, *pats, **opts): |
1109 def forget(ui, repo, *pats, **opts): |
984 """don't add the specified files on the next commit""" |
1110 """don't add the specified files on the next commit |
1111 |
|
1112 Undo an 'hg add' scheduled for the next commit. |
|
1113 """ |
|
985 forget = [] |
1114 forget = [] |
986 for src, abs, rel, exact in walk(repo, pats, opts): |
1115 for src, abs, rel, exact in walk(repo, pats, opts): |
987 if repo.dirstate.state(abs) == 'a': |
1116 if repo.dirstate.state(abs) == 'a': |
988 forget.append(abs) |
1117 forget.append(abs) |
989 if ui.verbose or not exact: |
1118 if ui.verbose or not exact: |
990 ui.status(_('forgetting %s\n') % rel) |
1119 ui.status(_('forgetting %s\n') % rel) |
991 repo.forget(forget) |
1120 repo.forget(forget) |
992 |
1121 |
993 def grep(ui, repo, pattern, *pats, **opts): |
1122 def grep(ui, repo, pattern, *pats, **opts): |
994 """search for a pattern in specified files and revisions""" |
1123 """search for a pattern in specified files and revisions |
1124 |
|
1125 Search revisions of files for a regular expression. |
|
1126 |
|
1127 This command behaves differently than Unix grep. It only accepts |
|
1128 Python/Perl regexps. It searches repository history, not the |
|
1129 working directory. It always prints the revision number in which |
|
1130 a match appears. |
|
1131 |
|
1132 By default, grep only prints output for the first revision of a |
|
1133 file in which it finds a match. To get it to print every revision |
|
1134 that contains a change in match status ("-" for a match that |
|
1135 becomes a non-match, or "+" for a non-match that becomes a match), |
|
1136 use the --all flag. |
|
1137 """ |
|
995 reflags = 0 |
1138 reflags = 0 |
996 if opts['ignore_case']: |
1139 if opts['ignore_case']: |
997 reflags |= re.I |
1140 reflags |= re.I |
998 regexp = re.compile(pattern, reflags) |
1141 regexp = re.compile(pattern, reflags) |
999 sep, eol = ':', '\n' |
1142 sep, eol = ':', '\n' |
1108 if fn in skip: continue |
1251 if fn in skip: continue |
1109 display(fn, rev, {}, state) |
1252 display(fn, rev, {}, state) |
1110 return (count == 0 and 1) or 0 |
1253 return (count == 0 and 1) or 0 |
1111 |
1254 |
1112 def heads(ui, repo, **opts): |
1255 def heads(ui, repo, **opts): |
1113 """show current repository heads""" |
1256 """show current repository heads |
1257 |
|
1258 Show all repository head changesets. |
|
1259 |
|
1260 Repository "heads" are changesets that don't have children |
|
1261 changesets. They are where development generally takes place and |
|
1262 are the usual targets for update and merge operations. |
|
1263 """ |
|
1114 heads = repo.changelog.heads() |
1264 heads = repo.changelog.heads() |
1115 br = None |
1265 br = None |
1116 if opts['branches']: |
1266 if opts['branches']: |
1117 br = repo.branchlookup(heads) |
1267 br = repo.branchlookup(heads) |
1118 for n in repo.changelog.heads(): |
1268 for n in repo.changelog.heads(): |
1119 show_changeset(ui, repo, changenode=n, brinfo=br) |
1269 show_changeset(ui, repo, changenode=n, brinfo=br) |
1120 |
1270 |
1121 def identify(ui, repo): |
1271 def identify(ui, repo): |
1122 """print information about the working copy""" |
1272 """print information about the working copy |
1273 Print a short summary of the current state of the repo. |
|
1274 |
|
1275 This summary identifies the repository state using one or two parent |
|
1276 hash identifiers, followed by a "+" if there are uncommitted changes |
|
1277 in the working directory, followed by a list of tags for this revision. |
|
1278 """ |
|
1123 parents = [p for p in repo.dirstate.parents() if p != nullid] |
1279 parents = [p for p in repo.dirstate.parents() if p != nullid] |
1124 if not parents: |
1280 if not parents: |
1125 ui.write(_("unknown\n")) |
1281 ui.write(_("unknown\n")) |
1126 return |
1282 return |
1127 |
1283 |
1139 output.append(' + '.join(parenttags)) |
1295 output.append(' + '.join(parenttags)) |
1140 |
1296 |
1141 ui.write("%s\n" % ' '.join(output)) |
1297 ui.write("%s\n" % ' '.join(output)) |
1142 |
1298 |
1143 def import_(ui, repo, patch1, *patches, **opts): |
1299 def import_(ui, repo, patch1, *patches, **opts): |
1144 """import an ordered set of patches""" |
1300 """import an ordered set of patches |
1301 |
|
1302 Import a list of patches and commit them individually. |
|
1303 |
|
1304 If there are outstanding changes in the working directory, import |
|
1305 will abort unless given the -f flag. |
|
1306 |
|
1307 If a patch looks like a mail message (its first line starts with |
|
1308 "From " or looks like an RFC822 header), it will not be applied |
|
1309 unless the -f option is used. The importer neither parses nor |
|
1310 discards mail headers, so use -f only to override the "mailness" |
|
1311 safety check, not to import a real mail message. |
|
1312 """ |
|
1145 patches = (patch1,) + patches |
1313 patches = (patch1,) + patches |
1146 |
1314 |
1147 if not opts['force']: |
1315 if not opts['force']: |
1148 (c, a, d, u) = repo.changes() |
1316 (c, a, d, u) = repo.changes() |
1149 if c or a or d: |
1317 if c or a or d: |
1202 if len(files) > 0: |
1370 if len(files) > 0: |
1203 addremove(ui, repo, *files) |
1371 addremove(ui, repo, *files) |
1204 repo.commit(files, message, user) |
1372 repo.commit(files, message, user) |
1205 |
1373 |
1206 def incoming(ui, repo, source="default", **opts): |
1374 def incoming(ui, repo, source="default", **opts): |
1207 """show new changesets found in source""" |
1375 """show new changesets found in source |
1376 |
|
1377 Show new changesets found in the specified repo or the default |
|
1378 pull repo. These are the changesets that would be pulled if a pull |
|
1379 was requested. |
|
1380 |
|
1381 Currently only local repositories are supported. |
|
1382 """ |
|
1208 source = ui.expandpath(source) |
1383 source = ui.expandpath(source) |
1209 other = hg.repository(ui, source) |
1384 other = hg.repository(ui, source) |
1210 if not other.local(): |
1385 if not other.local(): |
1211 raise util.Abort(_("incoming doesn't work for remote repositories yet")) |
1386 raise util.Abort(_("incoming doesn't work for remote repositories yet")) |
1212 o = repo.findincoming(other) |
1387 o = repo.findincoming(other) |
1222 prev = (parents and parents[0]) or nullid |
1397 prev = (parents and parents[0]) or nullid |
1223 dodiff(ui, ui, other, prev, n) |
1398 dodiff(ui, ui, other, prev, n) |
1224 ui.write("\n") |
1399 ui.write("\n") |
1225 |
1400 |
1226 def init(ui, dest="."): |
1401 def init(ui, dest="."): |
1227 """create a new repository in the given directory""" |
1402 """create a new repository in the given directory |
1403 |
|
1404 Initialize a new repository in the given directory. If the given |
|
1405 directory does not exist, it is created. |
|
1406 |
|
1407 If no directory is given, the current directory is used. |
|
1408 """ |
|
1228 if not os.path.exists(dest): |
1409 if not os.path.exists(dest): |
1229 os.mkdir(dest) |
1410 os.mkdir(dest) |
1230 hg.repository(ui, dest, create=1) |
1411 hg.repository(ui, dest, create=1) |
1231 |
1412 |
1232 def locate(ui, repo, *pats, **opts): |
1413 def locate(ui, repo, *pats, **opts): |
1233 """locate files matching specific patterns""" |
1414 """locate files matching specific patterns |
1415 |
|
1416 Print all files under Mercurial control whose names match the |
|
1417 given patterns. |
|
1418 |
|
1419 This command searches the current directory and its |
|
1420 subdirectories. To search an entire repository, move to the root |
|
1421 of the repository. |
|
1422 |
|
1423 If no patterns are given to match, this command prints all file |
|
1424 names. |
|
1425 |
|
1426 If you want to feed the output of this command into the "xargs" |
|
1427 command, use the "-0" option to both this command and "xargs". |
|
1428 This will avoid the problem of "xargs" treating single filenames |
|
1429 that contain white space as multiple filenames. |
|
1430 """ |
|
1234 end = opts['print0'] and '\0' or '\n' |
1431 end = opts['print0'] and '\0' or '\n' |
1235 |
1432 |
1236 for src, abs, rel, exact in walk(repo, pats, opts, '(?:.*/|)'): |
1433 for src, abs, rel, exact in walk(repo, pats, opts, '(?:.*/|)'): |
1237 if repo.dirstate.state(abs) == '?': |
1434 if repo.dirstate.state(abs) == '?': |
1238 continue |
1435 continue |
1240 ui.write(os.path.join(repo.root, abs), end) |
1437 ui.write(os.path.join(repo.root, abs), end) |
1241 else: |
1438 else: |
1242 ui.write(rel, end) |
1439 ui.write(rel, end) |
1243 |
1440 |
1244 def log(ui, repo, *pats, **opts): |
1441 def log(ui, repo, *pats, **opts): |
1245 """show revision history of entire repository or files""" |
1442 """show revision history of entire repository or files |
1443 |
|
1444 Print the revision history of the specified files or the entire project. |
|
1445 |
|
1446 By default this command outputs: changeset id and hash, tags, |
|
1447 parents, user, date and time, and a summary for each commit. The |
|
1448 -v switch adds some more detail, such as changed files, manifest |
|
1449 hashes or message signatures. |
|
1450 """ |
|
1246 class dui: |
1451 class dui: |
1247 # Implement and delegate some ui protocol. Save hunks of |
1452 # Implement and delegate some ui protocol. Save hunks of |
1248 # output for later display in the desired order. |
1453 # output for later display in the desired order. |
1249 def __init__(self, ui): |
1454 def __init__(self, ui): |
1250 self.ui = ui |
1455 self.ui = ui |
1308 elif st == 'iter': |
1513 elif st == 'iter': |
1309 for args in du.hunk[rev]: |
1514 for args in du.hunk[rev]: |
1310 ui.write(*args) |
1515 ui.write(*args) |
1311 |
1516 |
1312 def manifest(ui, repo, rev=None): |
1517 def manifest(ui, repo, rev=None): |
1313 """output the latest or given revision of the project manifest""" |
1518 """output the latest or given revision of the project manifest |
1519 |
|
1520 Print a list of version controlled files for the given revision. |
|
1521 |
|
1522 The manifest is the list of files being version controlled. If no revision |
|
1523 is given then the tip is used. |
|
1524 """ |
|
1314 if rev: |
1525 if rev: |
1315 try: |
1526 try: |
1316 # assume all revision numbers are for changesets |
1527 # assume all revision numbers are for changesets |
1317 n = repo.lookup(rev) |
1528 n = repo.lookup(rev) |
1318 change = repo.changelog.read(n) |
1529 change = repo.changelog.read(n) |
1328 |
1539 |
1329 for f in files: |
1540 for f in files: |
1330 ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f)) |
1541 ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f)) |
1331 |
1542 |
1332 def outgoing(ui, repo, dest="default-push", **opts): |
1543 def outgoing(ui, repo, dest="default-push", **opts): |
1333 """show changesets not found in destination""" |
1544 """show changesets not found in destination |
1545 |
|
1546 Show changesets not found in the specified destination repo or the |
|
1547 default push repo. These are the changesets that would be pushed |
|
1548 if a push was requested. |
|
1549 """ |
|
1334 dest = ui.expandpath(dest) |
1550 dest = ui.expandpath(dest) |
1335 other = hg.repository(ui, dest) |
1551 other = hg.repository(ui, dest) |
1336 o = repo.findoutgoing(other) |
1552 o = repo.findoutgoing(other) |
1337 o = repo.newer(o) |
1553 o = repo.newer(o) |
1338 for n in o: |
1554 for n in o: |
1344 prev = (parents and parents[0]) or nullid |
1560 prev = (parents and parents[0]) or nullid |
1345 dodiff(ui, ui, repo, prev, n) |
1561 dodiff(ui, ui, repo, prev, n) |
1346 ui.write("\n") |
1562 ui.write("\n") |
1347 |
1563 |
1348 def parents(ui, repo, rev=None): |
1564 def parents(ui, repo, rev=None): |
1349 """show the parents of the working dir or revision""" |
1565 """show the parents of the working dir or revision |
1566 |
|
1567 Print the working directory's parent revisions. |
|
1568 """ |
|
1350 if rev: |
1569 if rev: |
1351 p = repo.changelog.parents(repo.lookup(rev)) |
1570 p = repo.changelog.parents(repo.lookup(rev)) |
1352 else: |
1571 else: |
1353 p = repo.dirstate.parents() |
1572 p = repo.dirstate.parents() |
1354 |
1573 |
1355 for n in p: |
1574 for n in p: |
1356 if n != nullid: |
1575 if n != nullid: |
1357 show_changeset(ui, repo, changenode=n) |
1576 show_changeset(ui, repo, changenode=n) |
1358 |
1577 |
1359 def paths(ui, search=None): |
1578 def paths(ui, search=None): |
1360 """show definition of symbolic path names""" |
1579 """show definition of symbolic path names |
1580 |
|
1581 Show definition of symbolic path name NAME. If no name is given, show |
|
1582 definition of available names. |
|
1583 |
|
1584 Path names are defined in the [paths] section of /etc/mercurial/hgrc |
|
1585 and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too. |
|
1586 """ |
|
1361 try: |
1587 try: |
1362 repo = hg.repository(ui=ui) |
1588 repo = hg.repository(ui=ui) |
1363 except hg.RepoError: |
1589 except hg.RepoError: |
1364 pass |
1590 pass |
1365 |
1591 |
1373 else: |
1599 else: |
1374 for name, path in ui.configitems("paths"): |
1600 for name, path in ui.configitems("paths"): |
1375 ui.write("%s = %s\n" % (name, path)) |
1601 ui.write("%s = %s\n" % (name, path)) |
1376 |
1602 |
1377 def pull(ui, repo, source="default", **opts): |
1603 def pull(ui, repo, source="default", **opts): |
1378 """pull changes from the specified source""" |
1604 """pull changes from the specified source |
1605 |
|
1606 Pull changes from a remote repository to a local one. |
|
1607 |
|
1608 This finds all changes from the repository at the specified path |
|
1609 or URL and adds them to the local repository. By default, this |
|
1610 does not update the copy of the project in the working directory. |
|
1611 |
|
1612 Valid URLs are of the form: |
|
1613 |
|
1614 local/filesystem/path |
|
1615 http://[user@]host[:port][/path] |
|
1616 https://[user@]host[:port][/path] |
|
1617 ssh://[user@]host[:port][/path] |
|
1618 |
|
1619 SSH requires an accessible shell account on the destination machine |
|
1620 and a copy of hg in the remote path. With SSH, paths are relative |
|
1621 to the remote user's home directory by default; use two slashes at |
|
1622 the start of a path to specify it as relative to the filesystem root. |
|
1623 """ |
|
1379 source = ui.expandpath(source) |
1624 source = ui.expandpath(source) |
1380 ui.status(_('pulling from %s\n') % (source)) |
1625 ui.status(_('pulling from %s\n') % (source)) |
1381 |
1626 |
1382 if opts['ssh']: |
1627 if opts['ssh']: |
1383 ui.setconfig("ui", "ssh", opts['ssh']) |
1628 ui.setconfig("ui", "ssh", opts['ssh']) |
1393 ui.status(_("(run 'hg update' to get a working copy)\n")) |
1638 ui.status(_("(run 'hg update' to get a working copy)\n")) |
1394 |
1639 |
1395 return r |
1640 return r |
1396 |
1641 |
1397 def push(ui, repo, dest="default-push", force=False, ssh=None, remotecmd=None): |
1642 def push(ui, repo, dest="default-push", force=False, ssh=None, remotecmd=None): |
1398 """push changes to the specified destination""" |
1643 """push changes to the specified destination |
1644 |
|
1645 Push changes from the local repository to the given destination. |
|
1646 |
|
1647 This is the symmetrical operation for pull. It helps to move |
|
1648 changes from the current repository to a different one. If the |
|
1649 destination is local this is identical to a pull in that directory |
|
1650 from the current one. |
|
1651 |
|
1652 By default, push will refuse to run if it detects the result would |
|
1653 increase the number of remote heads. This generally indicates the |
|
1654 the client has forgotten to sync and merge before pushing. |
|
1655 |
|
1656 Valid URLs are of the form: |
|
1657 |
|
1658 local/filesystem/path |
|
1659 ssh://[user@]host[:port][/path] |
|
1660 |
|
1661 SSH requires an accessible shell account on the destination |
|
1662 machine and a copy of hg in the remote path. |
|
1663 """ |
|
1399 dest = ui.expandpath(dest) |
1664 dest = ui.expandpath(dest) |
1400 ui.status('pushing to %s\n' % (dest)) |
1665 ui.status('pushing to %s\n' % (dest)) |
1401 |
1666 |
1402 if ssh: |
1667 if ssh: |
1403 ui.setconfig("ui", "ssh", ssh) |
1668 ui.setconfig("ui", "ssh", ssh) |
1407 other = hg.repository(ui, dest) |
1672 other = hg.repository(ui, dest) |
1408 r = repo.push(other, force) |
1673 r = repo.push(other, force) |
1409 return r |
1674 return r |
1410 |
1675 |
1411 def rawcommit(ui, repo, *flist, **rc): |
1676 def rawcommit(ui, repo, *flist, **rc): |
1412 "raw commit interface" |
1677 """raw commit interface |
1678 |
|
1679 Lowlevel commit, for use in helper scripts. |
|
1680 |
|
1681 This command is not intended to be used by normal users, as it is |
|
1682 primarily useful for importing from other SCMs. |
|
1683 """ |
|
1413 if rc['text']: |
1684 if rc['text']: |
1414 ui.warn(_("Warning: -t and --text is deprecated," |
1685 ui.warn(_("Warning: -t and --text is deprecated," |
1415 " please use -m or --message instead.\n")) |
1686 " please use -m or --message instead.\n")) |
1416 message = rc['message'] or rc['text'] |
1687 message = rc['message'] or rc['text'] |
1417 if not message and rc['logfile']: |
1688 if not message and rc['logfile']: |
1432 repo.rawcommit(files, message, rc['user'], rc['date'], *rc['parent']) |
1703 repo.rawcommit(files, message, rc['user'], rc['date'], *rc['parent']) |
1433 except ValueError, inst: |
1704 except ValueError, inst: |
1434 raise util.Abort(str(inst)) |
1705 raise util.Abort(str(inst)) |
1435 |
1706 |
1436 def recover(ui, repo): |
1707 def recover(ui, repo): |
1437 """roll back an interrupted transaction""" |
1708 """roll back an interrupted transaction |
1709 |
|
1710 Recover from an interrupted commit or pull. |
|
1711 |
|
1712 This command tries to fix the repository status after an interrupted |
|
1713 operation. It should only be necessary when Mercurial suggests it. |
|
1714 """ |
|
1438 repo.recover() |
1715 repo.recover() |
1439 |
1716 |
1440 def remove(ui, repo, pat, *pats, **opts): |
1717 def remove(ui, repo, pat, *pats, **opts): |
1441 """remove the specified files on the next commit""" |
1718 """remove the specified files on the next commit |
1719 |
|
1720 Schedule the indicated files for removal from the repository. |
|
1721 |
|
1722 This command schedules the files to be removed at the next commit. |
|
1723 This only removes files from the current branch, not from the |
|
1724 entire project history. If the files still exist in the working |
|
1725 directory, they will be deleted from it. |
|
1726 """ |
|
1442 names = [] |
1727 names = [] |
1443 def okaytoremove(abs, rel, exact): |
1728 def okaytoremove(abs, rel, exact): |
1444 c, a, d, u = repo.changes(files = [abs]) |
1729 c, a, d, u = repo.changes(files = [abs]) |
1445 reason = None |
1730 reason = None |
1446 if c: reason = _('is modified') |
1731 if c: reason = _('is modified') |
1455 if ui.verbose or not exact: ui.status(_('removing %s\n') % rel) |
1740 if ui.verbose or not exact: ui.status(_('removing %s\n') % rel) |
1456 names.append(abs) |
1741 names.append(abs) |
1457 repo.remove(names, unlink=True) |
1742 repo.remove(names, unlink=True) |
1458 |
1743 |
1459 def rename(ui, repo, *pats, **opts): |
1744 def rename(ui, repo, *pats, **opts): |
1460 """rename files; equivalent of copy + remove""" |
1745 """rename files; equivalent of copy + remove |
1746 |
|
1747 Mark dest as copies of sources; mark sources for deletion. If |
|
1748 dest is a directory, copies are put in that directory. If dest is |
|
1749 a file, there can only be one source. |
|
1750 |
|
1751 By default, this command copies the contents of files as they |
|
1752 stand in the working directory. If invoked with --after, the |
|
1753 operation is recorded, but no copying is performed. |
|
1754 |
|
1755 This command takes effect in the next commit. |
|
1756 |
|
1757 NOTE: This command should be treated as experimental. While it |
|
1758 should properly record rename files, this information is not yet |
|
1759 fully used by merge, nor fully reported by log. |
|
1760 """ |
|
1461 errs, copied = docopy(ui, repo, pats, opts) |
1761 errs, copied = docopy(ui, repo, pats, opts) |
1462 names = [] |
1762 names = [] |
1463 for abs, rel, exact in copied: |
1763 for abs, rel, exact in copied: |
1464 if ui.verbose or not exact: ui.status(_('removing %s\n') % rel) |
1764 if ui.verbose or not exact: ui.status(_('removing %s\n') % rel) |
1465 names.append(abs) |
1765 names.append(abs) |
1466 repo.remove(names, unlink=True) |
1766 repo.remove(names, unlink=True) |
1467 return errs |
1767 return errs |
1468 |
1768 |
1469 def revert(ui, repo, *names, **opts): |
1769 def revert(ui, repo, *names, **opts): |
1470 """revert modified files or dirs back to their unmodified states""" |
1770 """revert modified files or dirs back to their unmodified states |
1771 |
|
1772 Revert any uncommitted modifications made to the named files or |
|
1773 directories. This restores the contents of the affected files to |
|
1774 an unmodified state. |
|
1775 |
|
1776 If a file has been deleted, it is recreated. If the executable |
|
1777 mode of a file was changed, it is reset. |
|
1778 |
|
1779 If a directory is given, all files in that directory and its |
|
1780 subdirectories are reverted. |
|
1781 |
|
1782 If no arguments are given, all files in the current directory and |
|
1783 its subdirectories are reverted. |
|
1784 """ |
|
1471 node = opts['rev'] and repo.lookup(opts['rev']) or \ |
1785 node = opts['rev'] and repo.lookup(opts['rev']) or \ |
1472 repo.dirstate.parents()[0] |
1786 repo.dirstate.parents()[0] |
1473 root = os.path.realpath(repo.root) |
1787 root = os.path.realpath(repo.root) |
1474 |
1788 |
1475 def trimpath(p): |
1789 def trimpath(p): |
1513 r = 1 |
1827 r = 1 |
1514 sys.stdout.flush() |
1828 sys.stdout.flush() |
1515 return r |
1829 return r |
1516 |
1830 |
1517 def root(ui, repo): |
1831 def root(ui, repo): |
1518 """print the root (top) of the current working dir""" |
1832 """print the root (top) of the current working dir |
1833 |
|
1834 Print the root directory of the current repository. |
|
1835 """ |
|
1519 ui.write(repo.root + "\n") |
1836 ui.write(repo.root + "\n") |
1520 |
1837 |
1521 def serve(ui, repo, **opts): |
1838 def serve(ui, repo, **opts): |
1522 """export the repository via HTTP""" |
1839 """export the repository via HTTP |
1840 |
|
1841 Start a local HTTP repository browser and pull server. |
|
1842 |
|
1843 By default, the server logs accesses to stdout and errors to |
|
1844 stderr. Use the "-A" and "-E" options to log to files. |
|
1845 """ |
|
1523 |
1846 |
1524 if opts["stdio"]: |
1847 if opts["stdio"]: |
1525 fin, fout = sys.stdin, sys.stdout |
1848 fin, fout = sys.stdin, sys.stdout |
1526 sys.stdout = sys.stderr |
1849 sys.stdout = sys.stderr |
1527 |
1850 |
1617 else: |
1940 else: |
1618 ui.status(_('listening at http://%s/\n') % addr) |
1941 ui.status(_('listening at http://%s/\n') % addr) |
1619 httpd.serve_forever() |
1942 httpd.serve_forever() |
1620 |
1943 |
1621 def status(ui, repo, *pats, **opts): |
1944 def status(ui, repo, *pats, **opts): |
1622 '''show changed files in the working directory |
1945 """show changed files in the working directory |
1623 |
1946 |
1947 Show changed files in the working directory. If no names are |
|
1948 given, all files are shown. Otherwise, only files matching the |
|
1949 given names are shown. |
|
1950 |
|
1951 The codes used to show the status of files are: |
|
1624 M = modified |
1952 M = modified |
1625 A = added |
1953 A = added |
1626 R = removed |
1954 R = removed |
1627 ? = not tracked |
1955 ? = not tracked |
1628 ''' |
1956 """ |
1629 |
1957 |
1630 cwd = repo.getcwd() |
1958 cwd = repo.getcwd() |
1631 files, matchfn, anypats = matchpats(repo, cwd, pats, opts) |
1959 files, matchfn, anypats = matchpats(repo, cwd, pats, opts) |
1632 (c, a, d, u) = [[util.pathto(cwd, x) for x in n] |
1960 (c, a, d, u) = [[util.pathto(cwd, x) for x in n] |
1633 for n in repo.changes(files=files, match=matchfn)] |
1961 for n in repo.changes(files=files, match=matchfn)] |
1648 |
1976 |
1649 for f in changes: |
1977 for f in changes: |
1650 ui.write(format % f) |
1978 ui.write(format % f) |
1651 |
1979 |
1652 def tag(ui, repo, name, rev=None, **opts): |
1980 def tag(ui, repo, name, rev=None, **opts): |
1653 """add a tag for the current tip or a given revision""" |
1981 """add a tag for the current tip or a given revision |
1982 |
|
1983 Name a particular revision using <name>. |
|
1984 |
|
1985 Tags are used to name particular revisions of the repository and are |
|
1986 very useful to compare different revision, to go back to significant |
|
1987 earlier versions or to mark branch points as releases, etc. |
|
1988 |
|
1989 If no revision is given, the tip is used. |
|
1990 |
|
1991 To facilitate version control, distribution, and merging of tags, |
|
1992 they are stored as a file named ".hgtags" which is managed |
|
1993 similarly to other project files and can be hand-edited if |
|
1994 necessary. |
|
1995 """ |
|
1654 if opts['text']: |
1996 if opts['text']: |
1655 ui.warn(_("Warning: -t and --text is deprecated," |
1997 ui.warn(_("Warning: -t and --text is deprecated," |
1656 " please use -m or --message instead.\n")) |
1998 " please use -m or --message instead.\n")) |
1657 if name == "tip": |
1999 if name == "tip": |
1658 raise util.Abort(_("the name 'tip' is reserved")) |
2000 raise util.Abort(_("the name 'tip' is reserved")) |
1684 repo.commit([".hgtags"], message, opts['user'], opts['date']) |
2026 repo.commit([".hgtags"], message, opts['user'], opts['date']) |
1685 except ValueError, inst: |
2027 except ValueError, inst: |
1686 raise util.Abort(str(inst)) |
2028 raise util.Abort(str(inst)) |
1687 |
2029 |
1688 def tags(ui, repo): |
2030 def tags(ui, repo): |
1689 """list repository tags""" |
2031 """list repository tags |
2032 |
|
2033 List the repository tags. |
|
2034 |
|
2035 This lists both regular and local tags. |
|
2036 """ |
|
1690 |
2037 |
1691 l = repo.tagslist() |
2038 l = repo.tagslist() |
1692 l.reverse() |
2039 l.reverse() |
1693 for t, n in l: |
2040 for t, n in l: |
1694 try: |
2041 try: |
1696 except KeyError: |
2043 except KeyError: |
1697 r = " ?:?" |
2044 r = " ?:?" |
1698 ui.write("%-30s %s\n" % (t, r)) |
2045 ui.write("%-30s %s\n" % (t, r)) |
1699 |
2046 |
1700 def tip(ui, repo): |
2047 def tip(ui, repo): |
1701 """show the tip revision""" |
2048 """show the tip revision |
2049 |
|
2050 Show the tip revision. |
|
2051 """ |
|
1702 n = repo.changelog.tip() |
2052 n = repo.changelog.tip() |
1703 show_changeset(ui, repo, changenode=n) |
2053 show_changeset(ui, repo, changenode=n) |
1704 |
2054 |
1705 def unbundle(ui, repo, fname): |
2055 def unbundle(ui, repo, fname): |
1706 """apply a changegroup file""" |
2056 """apply a changegroup file |
2057 |
|
2058 Apply a compressed changegroup file generated by the bundle |
|
2059 command. |
|
2060 """ |
|
1707 f = urllib.urlopen(fname) |
2061 f = urllib.urlopen(fname) |
1708 |
2062 |
1709 if f.read(4) != "HG10": |
2063 if f.read(4) != "HG10": |
1710 raise util.Abort(_("%s: not a Mercurial bundle file") % fname) |
2064 raise util.Abort(_("%s: not a Mercurial bundle file") % fname) |
1711 |
2065 |
1731 ineffective. |
2085 ineffective. |
1732 """ |
2086 """ |
1733 repo.undo() |
2087 repo.undo() |
1734 |
2088 |
1735 def update(ui, repo, node=None, merge=False, clean=False, branch=None): |
2089 def update(ui, repo, node=None, merge=False, clean=False, branch=None): |
1736 '''update or merge working directory |
2090 """update or merge working directory |
2091 |
|
2092 Update the working directory to the specified revision. |
|
1737 |
2093 |
1738 If there are no outstanding changes in the working directory and |
2094 If there are no outstanding changes in the working directory and |
1739 there is a linear relationship between the current version and the |
2095 there is a linear relationship between the current version and the |
1740 requested version, the result is the requested version. |
2096 requested version, the result is the requested version. |
1741 |
2097 |
1742 Otherwise the result is a merge between the contents of the |
2098 Otherwise the result is a merge between the contents of the |
1743 current working directory and the requested version. Files that |
2099 current working directory and the requested version. Files that |
1744 changed between either parent are marked as changed for the next |
2100 changed between either parent are marked as changed for the next |
1745 commit and a commit must be performed before any further updates |
2101 commit and a commit must be performed before any further updates |
1746 are allowed. |
2102 are allowed. |
1747 ''' |
2103 |
2104 By default, update will refuse to run if doing so would require |
|
2105 merging or discarding local changes. |
|
2106 """ |
|
1748 if branch: |
2107 if branch: |
1749 br = repo.branchlookup(branch=branch) |
2108 br = repo.branchlookup(branch=branch) |
1750 found = [] |
2109 found = [] |
1751 for x in br: |
2110 for x in br: |
1752 if branch in br[x]: |
2111 if branch in br[x]: |
1765 else: |
2124 else: |
1766 node = node and repo.lookup(node) or repo.changelog.tip() |
2125 node = node and repo.lookup(node) or repo.changelog.tip() |
1767 return repo.update(node, allow=merge, force=clean) |
2126 return repo.update(node, allow=merge, force=clean) |
1768 |
2127 |
1769 def verify(ui, repo): |
2128 def verify(ui, repo): |
1770 """verify the integrity of the repository""" |
2129 """verify the integrity of the repository |
2130 |
|
2131 Verify the integrity of the current repository. |
|
2132 |
|
2133 This will perform an extensive check of the repository's |
|
2134 integrity, validating the hashes and checksums of each entry in |
|
2135 the changelog, manifest, and tracked files, as well as the |
|
2136 integrity of their crosslinks and indices. |
|
2137 """ |
|
1771 return repo.verify() |
2138 return repo.verify() |
1772 |
2139 |
1773 # Command options and aliases are listed here, alphabetically |
2140 # Command options and aliases are listed here, alphabetically |
1774 |
2141 |
1775 table = { |
2142 table = { |
1776 "^add": |
2143 "^add": |
1777 (add, |
2144 (add, |
1778 [('I', 'include', [], _('include path in search')), |
2145 [('I', 'include', [], _('include names matching the given patterns')), |
1779 ('X', 'exclude', [], _('exclude path from search'))], |
2146 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
1780 "hg add [OPTION]... [FILE]..."), |
2147 "hg add [OPTION]... [FILE]..."), |
1781 "addremove": |
2148 "addremove": |
1782 (addremove, |
2149 (addremove, |
1783 [('I', 'include', [], _('include path in search')), |
2150 [('I', 'include', [], _('include names matching the given patterns')), |
1784 ('X', 'exclude', [], _('exclude path from search'))], |
2151 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
1785 _("hg addremove [OPTION]... [FILE]...")), |
2152 "hg addremove [OPTION]... [FILE]..."), |
1786 "^annotate": |
2153 "^annotate": |
1787 (annotate, |
2154 (annotate, |
1788 [('r', 'rev', '', _('revision')), |
2155 [('r', 'rev', '', _('annotate the specified revision')), |
1789 ('a', 'text', None, _('treat all files as text')), |
2156 ('a', 'text', None, _('treat all files as text')), |
1790 ('u', 'user', None, _('show user')), |
2157 ('u', 'user', None, _('list the author')), |
1791 ('n', 'number', None, _('show revision number')), |
2158 ('n', 'number', None, _('list the revision number (default)')), |
1792 ('c', 'changeset', None, _('show changeset')), |
2159 ('c', 'changeset', None, _('list the changeset')), |
1793 ('I', 'include', [], _('include path in search')), |
2160 ('I', 'include', [], _('include names matching the given patterns')), |
1794 ('X', 'exclude', [], _('exclude path from search'))], |
2161 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
1795 _('hg annotate [OPTION]... FILE...')), |
2162 _('hg annotate [OPTION]... FILE...')), |
1796 "bundle": |
2163 "bundle": |
1797 (bundle, |
2164 (bundle, |
1798 [], |
2165 [], |
1799 _('hg bundle FILE DEST')), |
2166 _('hg bundle FILE DEST')), |
1800 "cat": |
2167 "cat": |
1801 (cat, |
2168 (cat, |
1802 [('I', 'include', [], _('include path in search')), |
2169 [('I', 'include', [], _('include names matching the given patterns')), |
1803 ('X', 'exclude', [], _('exclude path from search')), |
2170 ('X', 'exclude', [], _('exclude names matching the given patterns')), |
1804 ('o', 'output', "", _('output to file')), |
2171 ('o', 'output', "", _('print output to file with formatted name')), |
1805 ('r', 'rev', '', _('revision'))], |
2172 ('r', 'rev', '', _('print the given revision'))], |
1806 _('hg cat [OPTION]... FILE...')), |
2173 _('hg cat [OPTION]... FILE...')), |
1807 "^clone": |
2174 "^clone": |
1808 (clone, |
2175 (clone, |
1809 [('U', 'noupdate', None, _('skip update after cloning')), |
2176 [('U', 'noupdate', None, _('do not update the new working directory')), |
1810 ('e', 'ssh', "", _('ssh command')), |
2177 ('e', 'ssh', "", _('specify ssh command to use')), |
1811 ('', 'pull', None, _('use pull protocol to copy metadata')), |
2178 ('', 'pull', None, _('use pull protocol to copy metadata')), |
1812 ('', 'remotecmd', "", _('remote hg command'))], |
2179 ('', 'remotecmd', "", _('specify hg command to run on the remote side'))], |
1813 _('hg clone [OPTION]... SOURCE [DEST]')), |
2180 _('hg clone [OPTION]... SOURCE [DEST]')), |
1814 "^commit|ci": |
2181 "^commit|ci": |
1815 (commit, |
2182 (commit, |
1816 [('A', 'addremove', None, _('run add/remove during commit')), |
2183 [('A', 'addremove', None, _('run addremove during commit')), |
1817 ('I', 'include', [], _('include path in search')), |
2184 ('I', 'include', [], _('include names matching the given patterns')), |
1818 ('X', 'exclude', [], _('exclude path from search')), |
2185 ('X', 'exclude', [], _('exclude names matching the given patterns')), |
1819 ('m', 'message', "", _('commit message')), |
2186 ('m', 'message', "", _('use <text> as commit message')), |
1820 ('t', 'text', "", _('commit message (deprecated: use -m)')), |
2187 ('t', 'text', "", _('commit message (deprecated: use -m)')), |
1821 ('l', 'logfile', "", _('commit message file')), |
2188 ('l', 'logfile', "", _('read the commit message from <file>')), |
1822 ('d', 'date', "", _('date code')), |
2189 ('d', 'date', "", _('record datecode as commit date')), |
1823 ('u', 'user', "", _('user'))], |
2190 ('u', 'user', "", _('record user as commiter'))], |
1824 _('hg commit [OPTION]... [FILE]...')), |
2191 _('hg commit [OPTION]... [FILE]...')), |
1825 "copy|cp": (copy, |
2192 "copy|cp": (copy, |
1826 [('I', 'include', [], _('include path in search')), |
2193 [('I', 'include', [], _('include names matching the given patterns')), |
1827 ('X', 'exclude', [], _('exclude path from search')), |
2194 ('X', 'exclude', [], _('exclude names matching the given patterns')), |
1828 ('A', 'after', None, _('record a copy after it has happened')), |
2195 ('A', 'after', None, _('record a copy that has already occurred')), |
1829 ('f', 'force', None, _('replace destination if it exists')), |
2196 ('f', 'force', None, _('forcibly copy over an existing managed file')), |
1830 ('p', 'parents', None, _('append source path to dest'))], |
2197 ('p', 'parents', None, _('append source path to dest'))], |
1831 _('hg copy [OPTION]... [SOURCE]... DEST')), |
2198 _('hg copy [OPTION]... [SOURCE]... DEST')), |
1832 "debugancestor": (debugancestor, [], _('debugancestor INDEX REV1 REV2')), |
2199 "debugancestor": (debugancestor, [], _('debugancestor INDEX REV1 REV2')), |
1833 "debugcheckstate": (debugcheckstate, [], _('debugcheckstate')), |
2200 "debugcheckstate": (debugcheckstate, [], _('debugcheckstate')), |
1834 "debugconfig": (debugconfig, [], _('debugconfig')), |
2201 "debugconfig": (debugconfig, [], _('debugconfig')), |
1838 "debugindex": (debugindex, [], _('debugindex FILE')), |
2205 "debugindex": (debugindex, [], _('debugindex FILE')), |
1839 "debugindexdot": (debugindexdot, [], _('debugindexdot FILE')), |
2206 "debugindexdot": (debugindexdot, [], _('debugindexdot FILE')), |
1840 "debugrename": (debugrename, [], _('debugrename FILE [REV]')), |
2207 "debugrename": (debugrename, [], _('debugrename FILE [REV]')), |
1841 "debugwalk": |
2208 "debugwalk": |
1842 (debugwalk, |
2209 (debugwalk, |
1843 [('I', 'include', [], _('include path in search')), |
2210 [('I', 'include', [], _('include names matching the given patterns')), |
1844 ('X', 'exclude', [], _('exclude path from search'))], |
2211 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
1845 _('debugwalk [OPTION]... [FILE]...')), |
2212 _('debugwalk [OPTION]... [FILE]...')), |
1846 "^diff": |
2213 "^diff": |
1847 (diff, |
2214 (diff, |
1848 [('r', 'rev', [], _('revision')), |
2215 [('r', 'rev', [], _('revision')), |
1849 ('a', 'text', None, _('treat all files as text')), |
2216 ('a', 'text', None, _('treat all files as text')), |
1850 ('I', 'include', [], _('include path in search')), |
2217 ('I', 'include', [], _('include names matching the given patterns')), |
1851 ('X', 'exclude', [], _('exclude path from search'))], |
2218 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
1852 _('hg diff [-a] [-I] [-X] [-r REV1 [-r REV2]] [FILE]...')), |
2219 _('hg diff [-a] [-I] [-X] [-r REV1 [-r REV2]] [FILE]...')), |
1853 "^export": |
2220 "^export": |
1854 (export, |
2221 (export, |
1855 [('o', 'output', "", _('output to file')), |
2222 [('o', 'output', "", _('print output to file with formatted name')), |
1856 ('a', 'text', None, _('treat all files as text'))], |
2223 ('a', 'text', None, _('treat all files as text'))], |
1857 _("hg export [-a] [-o OUTFILE] REV...")), |
2224 "hg export [-a] [-o OUTFILE] REV..."), |
1858 "forget": |
2225 "forget": |
1859 (forget, |
2226 (forget, |
1860 [('I', 'include', [], _('include path in search')), |
2227 [('I', 'include', [], _('include names matching the given patterns')), |
1861 ('X', 'exclude', [], _('exclude path from search'))], |
2228 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
1862 _("hg forget [OPTION]... FILE...")), |
2229 "hg forget [OPTION]... FILE..."), |
1863 "grep": |
2230 "grep": |
1864 (grep, |
2231 (grep, |
1865 [('0', 'print0', None, _('end fields with NUL')), |
2232 [('0', 'print0', None, _('end fields with NUL')), |
1866 ('I', 'include', [], _('include path in search')), |
2233 ('I', 'include', [], _('include names matching the given patterns')), |
1867 ('X', 'exclude', [], _('include path in search')), |
2234 ('X', 'exclude', [], _('include names matching the given patterns')), |
1868 ('', 'all', None, _('print all revisions with matches')), |
2235 ('', 'all', None, _('print all revisions that match')), |
1869 ('i', 'ignore-case', None, _('ignore case when matching')), |
2236 ('i', 'ignore-case', None, _('ignore case when matching')), |
1870 ('l', 'files-with-matches', None, _('print names of files and revs with matches')), |
2237 ('l', 'files-with-matches', None, _('print only filenames and revs that match')), |
1871 ('n', 'line-number', None, _('print line numbers')), |
2238 ('n', 'line-number', None, _('print matching line numbers')), |
1872 ('r', 'rev', [], _('search in revision rev')), |
2239 ('r', 'rev', [], _('search in given revision range')), |
1873 ('u', 'user', None, _('print user who made change'))], |
2240 ('u', 'user', None, _('print user who committed change'))], |
1874 _("hg grep [OPTION]... PATTERN [FILE]...")), |
2241 "hg grep [OPTION]... PATTERN [FILE]..."), |
1875 "heads": |
2242 "heads": |
1876 (heads, |
2243 (heads, |
1877 [('b', 'branches', None, _('find branch info'))], |
2244 [('b', 'branches', None, _('find branch info'))], |
1878 _('hg heads [-b]')), |
2245 _('hg heads [-b]')), |
1879 "help": (help_, [], _('hg help [COMMAND]')), |
2246 "help": (help_, [], _('hg help [COMMAND]')), |
1880 "identify|id": (identify, [], _('hg identify')), |
2247 "identify|id": (identify, [], _('hg identify')), |
1881 "import|patch": |
2248 "import|patch": |
1882 (import_, |
2249 (import_, |
1883 [('p', 'strip', 1, _('path strip')), |
2250 [('p', 'strip', 1, _('directory strip option for patch. This has the same\n') + |
1884 ('f', 'force', None, _('skip check for outstanding changes')), |
2251 _('meaning as the corresponding patch option')), |
2252 ('f', 'force', None, _('skip check for outstanding uncommitted changes')), |
|
1885 ('b', 'base', "", _('base path'))], |
2253 ('b', 'base', "", _('base path'))], |
1886 _("hg import [-f] [-p NUM] [-b BASE] PATCH...")), |
2254 "hg import [-f] [-p NUM] [-b BASE] PATCH..."), |
1887 "incoming|in": (incoming, |
2255 "incoming|in": (incoming, |
1888 [('M', 'no-merges', None, _("do not show merges")), |
2256 [('M', 'no-merges', None, _("do not show merges")), |
1889 ('p', 'patch', None, _('show patch'))], |
2257 ('p', 'patch', None, _('show patch'))], |
1890 _('hg incoming [-p] [SOURCE]')), |
2258 _('hg incoming [-p] [SOURCE]')), |
1891 "^init": (init, [], _('hg init [DEST]')), |
2259 "^init": (init, [], _('hg init [DEST]')), |
1892 "locate": |
2260 "locate": |
1893 (locate, |
2261 (locate, |
1894 [('r', 'rev', '', _('revision')), |
2262 [('r', 'rev', '', _('search the repository as it stood at rev')), |
1895 ('0', 'print0', None, _('end filenames with NUL')), |
2263 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')), |
1896 ('f', 'fullpath', None, _('print complete paths')), |
2264 ('f', 'fullpath', None, _('print complete paths from the filesystem root')), |
1897 ('I', 'include', [], _('include path in search')), |
2265 ('I', 'include', [], _('include names matching the given patterns')), |
1898 ('X', 'exclude', [], _('exclude path from search'))], |
2266 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
1899 _('hg locate [OPTION]... [PATTERN]...')), |
2267 _('hg locate [OPTION]... [PATTERN]...')), |
1900 "^log|history": |
2268 "^log|history": |
1901 (log, |
2269 (log, |
1902 [('I', 'include', [], _('include path in search')), |
2270 [('I', 'include', [], _('include names matching the given patterns')), |
1903 ('X', 'exclude', [], _('exclude path from search')), |
2271 ('X', 'exclude', [], _('exclude names matching the given patterns')), |
1904 ('b', 'branch', None, _('show branches')), |
2272 ('b', 'branch', None, _('show branches')), |
1905 ('k', 'keyword', [], _('search for a keyword')), |
2273 ('k', 'keyword', [], _('search for a keyword')), |
1906 ('r', 'rev', [], _('revision')), |
2274 ('r', 'rev', [], _('show the specified revision or range')), |
1907 ('M', 'no-merges', None, _("do not show merges")), |
2275 ('M', 'no-merges', None, _("do not show merges")), |
1908 ('m', 'only-merges', None, _("show only merges")), |
2276 ('m', 'only-merges', None, _("show only merges")), |
1909 ('p', 'patch', None, _('show patch'))], |
2277 ('p', 'patch', None, _('show patch'))], |
1910 _('hg log [-I] [-X] [-r REV]... [-p] [FILE]')), |
2278 _('hg log [-I] [-X] [-r REV]... [-p] [FILE]')), |
1911 "manifest": (manifest, [], _('hg manifest [REV]')), |
2279 "manifest": (manifest, [], _('hg manifest [REV]')), |
1915 _('hg outgoing [-p] [DEST]')), |
2283 _('hg outgoing [-p] [DEST]')), |
1916 "parents": (parents, [], _('hg parents [REV]')), |
2284 "parents": (parents, [], _('hg parents [REV]')), |
1917 "paths": (paths, [], _('hg paths [NAME]')), |
2285 "paths": (paths, [], _('hg paths [NAME]')), |
1918 "^pull": |
2286 "^pull": |
1919 (pull, |
2287 (pull, |
1920 [('u', 'update', None, _('update working directory')), |
2288 [('u', 'update', None, _('update the working directory to tip after pull')), |
1921 ('e', 'ssh', "", _('ssh command')), |
2289 ('e', 'ssh', "", _('specify ssh command to use')), |
1922 ('', 'remotecmd', "", _('remote hg command'))], |
2290 ('', 'remotecmd', "", _('specify hg command to run on the remote side'))], |
1923 _('hg pull [-u] [-e FILE] [--remotecmd FILE] [SOURCE]')), |
2291 _('hg pull [-u] [-e FILE] [--remotecmd FILE] [SOURCE]')), |
1924 "^push": |
2292 "^push": |
1925 (push, |
2293 (push, |
1926 [('f', 'force', None, _('force push')), |
2294 [('f', 'force', None, _('force push')), |
1927 ('e', 'ssh', "", _('ssh command')), |
2295 ('e', 'ssh', "", _('specify ssh command to use')), |
1928 ('', 'remotecmd', "", _('remote hg command'))], |
2296 ('', 'remotecmd', "", _('specify hg command to run on the remote side'))], |
1929 _('hg push [-f] [-e FILE] [--remotecmd FILE] [DEST]')), |
2297 _('hg push [-f] [-e FILE] [--remotecmd FILE] [DEST]')), |
1930 "rawcommit": |
2298 "rawcommit": |
1931 (rawcommit, |
2299 (rawcommit, |
1932 [('p', 'parent', [], _('parent')), |
2300 [('p', 'parent', [], _('parent')), |
1933 ('d', 'date', "", _('date code')), |
2301 ('d', 'date', "", _('date code')), |
1937 ('t', 'text', "", _('commit message (deprecated: use -m)')), |
2305 ('t', 'text', "", _('commit message (deprecated: use -m)')), |
1938 ('l', 'logfile', "", _('commit message file'))], |
2306 ('l', 'logfile', "", _('commit message file'))], |
1939 _('hg rawcommit [OPTION]... [FILE]...')), |
2307 _('hg rawcommit [OPTION]... [FILE]...')), |
1940 "recover": (recover, [], _("hg recover")), |
2308 "recover": (recover, [], _("hg recover")), |
1941 "^remove|rm": (remove, |
2309 "^remove|rm": (remove, |
1942 [('I', 'include', [], _('include path in search')), |
2310 [('I', 'include', [], _('include names matching the given patterns')), |
1943 ('X', 'exclude', [], _('exclude path from search'))], |
2311 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
1944 _("hg remove [OPTION]... FILE...")), |
2312 _("hg remove [OPTION]... FILE...")), |
1945 "rename|mv": (rename, |
2313 "rename|mv": (rename, |
1946 [('I', 'include', [], _('include path in search')), |
2314 [('I', 'include', [], _('include names matching the given patterns')), |
1947 ('X', 'exclude', [], _('exclude path from search')), |
2315 ('X', 'exclude', [], _('exclude names matching the given patterns')), |
1948 ('A', 'after', None, _('record a copy after it has happened')), |
2316 ('A', 'after', None, _('record a rename that has already occurred')), |
1949 ('f', 'force', None, _('replace destination if it exists')), |
2317 ('f', 'force', None, _('forcibly copy over an existing managed file')), |
1950 ('p', 'parents', None, _('append source path to dest'))], |
2318 ('p', 'parents', None, _('append source path to dest'))], |
1951 _('hg rename [OPTION]... [SOURCE]... DEST')), |
2319 _('hg rename [OPTION]... [SOURCE]... DEST')), |
1952 "^revert": |
2320 "^revert": |
1953 (revert, |
2321 (revert, |
1954 [("n", "nonrecursive", None, _("don't recurse into subdirs")), |
2322 [("n", "nonrecursive", None, _("do not recurse into subdirectories")), |
1955 ("r", "rev", "", _("revision"))], |
2323 ("r", "rev", "", _("revision to revert to"))], |
1956 _("hg revert [-n] [-r REV] [NAME]...")), |
2324 _("hg revert [-n] [-r REV] [NAME]...")), |
1957 "root": (root, [], _("hg root")), |
2325 "root": (root, [], _("hg root")), |
1958 "^serve": |
2326 "^serve": |
1959 (serve, |
2327 (serve, |
1960 [('A', 'accesslog', '', _('access log file')), |
2328 [('A', 'accesslog', '', _('name of access log file to write to')), |
1961 ('E', 'errorlog', '', _('error log file')), |
2329 ('E', 'errorlog', '', _('name of error log file to write to')), |
1962 ('p', 'port', 0, _('listen port')), |
2330 ('p', 'port', 0, _('port to use (default: 8000)')), |
1963 ('a', 'address', '', _('interface address')), |
2331 ('a', 'address', '', _('address to use')), |
1964 ('n', 'name', "", _('repository name')), |
2332 ('n', 'name', "", _('name to show in web pages (default: working dir)')), |
1965 ('', 'stdio', None, _('for remote clients')), |
2333 ('', 'stdio', None, _('for remote clients')), |
1966 ('t', 'templates', "", _('template directory')), |
2334 ('t', 'templates', "", _('web templates to use')), |
1967 ('', 'style', "", _('template style')), |
2335 ('', 'style', "", _('template style to use')), |
1968 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4'))], |
2336 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4'))], |
1969 _("hg serve [OPTION]...")), |
2337 _("hg serve [OPTION]...")), |
1970 "^status": |
2338 "^status": |
1971 (status, |
2339 (status, |
1972 [('m', 'modified', None, _('show only modified files')), |
2340 [('m', 'modified', None, _('show only modified files')), |
1973 ('a', 'added', None, _('show only added files')), |
2341 ('a', 'added', None, _('show only added files')), |
1974 ('r', 'removed', None, _('show only removed files')), |
2342 ('r', 'removed', None, _('show only removed files')), |
1975 ('u', 'unknown', None, _('show only unknown (not tracked) files')), |
2343 ('u', 'unknown', None, _('show only unknown (not tracked) files')), |
1976 ('n', 'no-status', None, _('hide status prefix')), |
2344 ('n', 'no-status', None, _('hide status prefix')), |
1977 ('0', 'print0', None, _('end filenames with NUL')), |
2345 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')), |
1978 ('I', 'include', [], _('include path in search')), |
2346 ('I', 'include', [], _('include names matching the given patterns')), |
1979 ('X', 'exclude', [], _('exclude path from search'))], |
2347 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
1980 _("hg status [OPTION]... [FILE]...")), |
2348 _("hg status [OPTION]... [FILE]...")), |
1981 "tag": |
2349 "tag": |
1982 (tag, |
2350 (tag, |
1983 [('l', 'local', None, _('make the tag local')), |
2351 [('l', 'local', None, _('make the tag local')), |
1984 ('m', 'message', "", _('commit message')), |
2352 ('m', 'message', "", _('message for tag commit log entry')), |
1985 ('t', 'text', "", _('commit message (deprecated: use -m)')), |
2353 ('t', 'text', "", _('commit message (deprecated: use -m)')), |
1986 ('d', 'date', "", _('date code')), |
2354 ('d', 'date', "", _('record datecode as commit date')), |
1987 ('u', 'user', "", _('user'))], |
2355 ('u', 'user', "", _('record user as commiter'))], |
1988 _('hg tag [OPTION]... NAME [REV]')), |
2356 _('hg tag [OPTION]... NAME [REV]')), |
1989 "tags": (tags, [], _('hg tags')), |
2357 "tags": (tags, [], _('hg tags')), |
1990 "tip": (tip, [], _('hg tip')), |
2358 "tip": (tip, [], _('hg tip')), |
1991 "unbundle": |
2359 "unbundle": |
1992 (unbundle, |
2360 (unbundle, |
1994 _('hg unbundle FILE')), |
2362 _('hg unbundle FILE')), |
1995 "undo": (undo, [], _('hg undo')), |
2363 "undo": (undo, [], _('hg undo')), |
1996 "^update|up|checkout|co": |
2364 "^update|up|checkout|co": |
1997 (update, |
2365 (update, |
1998 [('b', 'branch', "", _('checkout the head of a specific branch')), |
2366 [('b', 'branch', "", _('checkout the head of a specific branch')), |
1999 ('m', 'merge', None, _('allow merging of conflicts')), |
2367 ('m', 'merge', None, _('allow merging of branches')), |
2000 ('C', 'clean', None, _('overwrite locally modified files'))], |
2368 ('C', 'clean', None, _('overwrite locally modified files'))], |
2001 _('hg update [-b TAG] [-m] [-C] [REV]')), |
2369 _('hg update [-b TAG] [-m] [-C] [REV]')), |
2002 "verify": (verify, [], _('hg verify')), |
2370 "verify": (verify, [], _('hg verify')), |
2003 "version": (show_version, [], _('hg version')), |
2371 "version": (show_version, [], _('hg version')), |
2004 } |
2372 } |
2005 |
2373 |
2006 globalopts = [ |
2374 globalopts = [ |
2007 ('R', 'repository', "", _('repository root directory')), |
2375 ('R', 'repository', "", _("repository root directory")), |
2008 ('', 'cwd', '', _('change working directory')), |
2376 ('', 'cwd', '', _("change working directory")), |
2009 ('y', 'noninteractive', None, _('run non-interactively')), |
2377 ('y', 'noninteractive', None, _("do not prompt, assume 'yes' for any required answers")), |
2010 ('q', 'quiet', None, _('quiet mode')), |
2378 ('q', 'quiet', None, _("suppress output")), |
2011 ('v', 'verbose', None, _('verbose mode')), |
2379 ('v', 'verbose', None, _("enable additional output")), |
2012 ('', 'debug', None, _('debug mode')), |
2380 ('', 'debug', None, _("enable debugging output")), |
2013 ('', 'debugger', None, _('start debugger')), |
2381 ('', 'debugger', None, _("start debugger")), |
2014 ('', 'traceback', None, _('print traceback on exception')), |
2382 ('', 'traceback', None, _("print traceback on exception")), |
2015 ('', 'time', None, _('time how long the command takes')), |
2383 ('', 'time', None, _("time how long the command takes")), |
2016 ('', 'profile', None, _('profile')), |
2384 ('', 'profile', None, _("print command execution profile")), |
2017 ('', 'version', None, _('output version information and exit')), |
2385 ('', 'version', None, _("output version information and exit")), |
2018 ('h', 'help', None, _('display help and exit')), |
2386 ('h', 'help', None, _("display help and exit")), |
2019 ] |
2387 ] |
2020 |
2388 |
2021 norepo = ("clone init version help debugancestor debugconfig debugdata" |
2389 norepo = ("clone init version help debugancestor debugconfig debugdata" |
2022 " debugindex debugindexdot paths") |
2390 " debugindex debugindexdot paths") |
2023 |
2391 |