Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 14297:2daa5179e73f
commands: use a decorator to build table incrementally
this allows to define the table entries near the command functions
author | Adrian Buehlmann <adrian@cadifra.com> |
---|---|
date | Thu, 12 May 2011 08:14:04 +0200 |
parents | 1a791993ce59 |
children | b0f97b2589cc |
comparison
equal
deleted
inserted
replaced
14296:62e25c63fb3a | 14297:2daa5179e73f |
---|---|
15 import merge as mergemod | 15 import merge as mergemod |
16 import minirst, revset, templatefilters | 16 import minirst, revset, templatefilters |
17 import dagparser, context, simplemerge | 17 import dagparser, context, simplemerge |
18 import random, setdiscovery, treediscovery, dagutil | 18 import random, setdiscovery, treediscovery, dagutil |
19 | 19 |
20 table = {} | |
21 | |
22 command = cmdutil.command(table) | |
23 | |
24 # common command options | |
25 | |
26 globalopts = [ | |
27 ('R', 'repository', '', | |
28 _('repository root directory or name of overlay bundle file'), | |
29 _('REPO')), | |
30 ('', 'cwd', '', | |
31 _('change working directory'), _('DIR')), | |
32 ('y', 'noninteractive', None, | |
33 _('do not prompt, assume \'yes\' for any required answers')), | |
34 ('q', 'quiet', None, _('suppress output')), | |
35 ('v', 'verbose', None, _('enable additional output')), | |
36 ('', 'config', [], | |
37 _('set/override config option (use \'section.name=value\')'), | |
38 _('CONFIG')), | |
39 ('', 'debug', None, _('enable debugging output')), | |
40 ('', 'debugger', None, _('start debugger')), | |
41 ('', 'encoding', encoding.encoding, _('set the charset encoding'), | |
42 _('ENCODE')), | |
43 ('', 'encodingmode', encoding.encodingmode, | |
44 _('set the charset encoding mode'), _('MODE')), | |
45 ('', 'traceback', None, _('always print a traceback on exception')), | |
46 ('', 'time', None, _('time how long the command takes')), | |
47 ('', 'profile', None, _('print command execution profile')), | |
48 ('', 'version', None, _('output version information and exit')), | |
49 ('h', 'help', None, _('display help and exit')), | |
50 ] | |
51 | |
52 dryrunopts = [('n', 'dry-run', None, | |
53 _('do not perform actions, just print output'))] | |
54 | |
55 remoteopts = [ | |
56 ('e', 'ssh', '', | |
57 _('specify ssh command to use'), _('CMD')), | |
58 ('', 'remotecmd', '', | |
59 _('specify hg command to run on the remote side'), _('CMD')), | |
60 ('', 'insecure', None, | |
61 _('do not verify server certificate (ignoring web.cacerts config)')), | |
62 ] | |
63 | |
64 walkopts = [ | |
65 ('I', 'include', [], | |
66 _('include names matching the given patterns'), _('PATTERN')), | |
67 ('X', 'exclude', [], | |
68 _('exclude names matching the given patterns'), _('PATTERN')), | |
69 ] | |
70 | |
71 commitopts = [ | |
72 ('m', 'message', '', | |
73 _('use text as commit message'), _('TEXT')), | |
74 ('l', 'logfile', '', | |
75 _('read commit message from file'), _('FILE')), | |
76 ] | |
77 | |
78 commitopts2 = [ | |
79 ('d', 'date', '', | |
80 _('record the specified date as commit date'), _('DATE')), | |
81 ('u', 'user', '', | |
82 _('record the specified user as committer'), _('USER')), | |
83 ] | |
84 | |
85 templateopts = [ | |
86 ('', 'style', '', | |
87 _('display using template map file'), _('STYLE')), | |
88 ('', 'template', '', | |
89 _('display with template'), _('TEMPLATE')), | |
90 ] | |
91 | |
92 logopts = [ | |
93 ('p', 'patch', None, _('show patch')), | |
94 ('g', 'git', None, _('use git extended diff format')), | |
95 ('l', 'limit', '', | |
96 _('limit number of changes displayed'), _('NUM')), | |
97 ('M', 'no-merges', None, _('do not show merges')), | |
98 ('', 'stat', None, _('output diffstat-style summary of changes')), | |
99 ] + templateopts | |
100 | |
101 diffopts = [ | |
102 ('a', 'text', None, _('treat all files as text')), | |
103 ('g', 'git', None, _('use git extended diff format')), | |
104 ('', 'nodates', None, _('omit dates from diff headers')) | |
105 ] | |
106 | |
107 diffopts2 = [ | |
108 ('p', 'show-function', None, _('show which function each change is in')), | |
109 ('', 'reverse', None, _('produce a diff that undoes the changes')), | |
110 ('w', 'ignore-all-space', None, | |
111 _('ignore white space when comparing lines')), | |
112 ('b', 'ignore-space-change', None, | |
113 _('ignore changes in the amount of white space')), | |
114 ('B', 'ignore-blank-lines', None, | |
115 _('ignore changes whose lines are all blank')), | |
116 ('U', 'unified', '', | |
117 _('number of lines of context to show'), _('NUM')), | |
118 ('', 'stat', None, _('output diffstat-style summary of changes')), | |
119 ] | |
120 | |
121 similarityopts = [ | |
122 ('s', 'similarity', '', | |
123 _('guess renamed files by similarity (0<=s<=100)'), _('SIMILARITY')) | |
124 ] | |
125 | |
126 subrepoopts = [ | |
127 ('S', 'subrepos', None, | |
128 _('recurse into subrepositories')) | |
129 ] | |
130 | |
20 # Commands start here, listed alphabetically | 131 # Commands start here, listed alphabetically |
21 | 132 |
133 @command('^add', | |
134 walkopts + subrepoopts + dryrunopts, | |
135 _('[OPTION]... [FILE]...')) | |
22 def add(ui, repo, *pats, **opts): | 136 def add(ui, repo, *pats, **opts): |
23 """add the specified files on the next commit | 137 """add the specified files on the next commit |
24 | 138 |
25 Schedule files to be version controlled and added to the | 139 Schedule files to be version controlled and added to the |
26 repository. | 140 repository. |
50 m = cmdutil.match(repo, pats, opts) | 164 m = cmdutil.match(repo, pats, opts) |
51 rejected = cmdutil.add(ui, repo, m, opts.get('dry_run'), | 165 rejected = cmdutil.add(ui, repo, m, opts.get('dry_run'), |
52 opts.get('subrepos'), prefix="") | 166 opts.get('subrepos'), prefix="") |
53 return rejected and 1 or 0 | 167 return rejected and 1 or 0 |
54 | 168 |
169 @command('addremove', | |
170 similarityopts + walkopts + dryrunopts, | |
171 _('[OPTION]... [FILE]...')) | |
55 def addremove(ui, repo, *pats, **opts): | 172 def addremove(ui, repo, *pats, **opts): |
56 """add all new files, delete all missing files | 173 """add all new files, delete all missing files |
57 | 174 |
58 Add all new files and remove all missing files from the | 175 Add all new files and remove all missing files from the |
59 repository. | 176 repository. |
78 raise util.Abort(_('similarity must be a number')) | 195 raise util.Abort(_('similarity must be a number')) |
79 if sim < 0 or sim > 100: | 196 if sim < 0 or sim > 100: |
80 raise util.Abort(_('similarity must be between 0 and 100')) | 197 raise util.Abort(_('similarity must be between 0 and 100')) |
81 return cmdutil.addremove(repo, pats, opts, similarity=sim / 100.0) | 198 return cmdutil.addremove(repo, pats, opts, similarity=sim / 100.0) |
82 | 199 |
200 @command('^annotate|blame', | |
201 [('r', 'rev', '', _('annotate the specified revision'), _('REV')), | |
202 ('', 'follow', None, | |
203 _('follow copies/renames and list the filename (DEPRECATED)')), | |
204 ('', 'no-follow', None, _("don't follow copies and renames")), | |
205 ('a', 'text', None, _('treat all files as text')), | |
206 ('u', 'user', None, _('list the author (long with -v)')), | |
207 ('f', 'file', None, _('list the filename')), | |
208 ('d', 'date', None, _('list the date (short with -q)')), | |
209 ('n', 'number', None, _('list the revision number (default)')), | |
210 ('c', 'changeset', None, _('list the changeset')), | |
211 ('l', 'line-number', None, _('show line number at the first appearance')) | |
212 ] + walkopts, | |
213 _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...')) | |
83 def annotate(ui, repo, *pats, **opts): | 214 def annotate(ui, repo, *pats, **opts): |
84 """show changeset information by line for each file | 215 """show changeset information by line for each file |
85 | 216 |
86 List changes in files, showing the revision id responsible for | 217 List changes in files, showing the revision id responsible for |
87 each line | 218 each line |
152 | 283 |
153 if pieces: | 284 if pieces: |
154 for p, l in zip(zip(*pieces), lines): | 285 for p, l in zip(zip(*pieces), lines): |
155 ui.write("%s: %s" % (" ".join(p), l[1])) | 286 ui.write("%s: %s" % (" ".join(p), l[1])) |
156 | 287 |
288 @command('archive', | |
289 [('', 'no-decode', None, _('do not pass files through decoders')), | |
290 ('p', 'prefix', '', _('directory prefix for files in archive'), | |
291 _('PREFIX')), | |
292 ('r', 'rev', '', _('revision to distribute'), _('REV')), | |
293 ('t', 'type', '', _('type of distribution to create'), _('TYPE')), | |
294 ] + subrepoopts + walkopts, | |
295 _('[OPTION]... DEST')) | |
157 def archive(ui, repo, dest, **opts): | 296 def archive(ui, repo, dest, **opts): |
158 '''create an unversioned archive of a repository revision | 297 '''create an unversioned archive of a repository revision |
159 | 298 |
160 By default, the revision used is the parent of the working | 299 By default, the revision used is the parent of the working |
161 directory; use -r/--rev to specify a different revision. | 300 directory; use -r/--rev to specify a different revision. |
204 prefix = cmdutil.makefilename(repo, prefix, node) | 343 prefix = cmdutil.makefilename(repo, prefix, node) |
205 matchfn = cmdutil.match(repo, [], opts) | 344 matchfn = cmdutil.match(repo, [], opts) |
206 archival.archive(repo, dest, node, kind, not opts.get('no_decode'), | 345 archival.archive(repo, dest, node, kind, not opts.get('no_decode'), |
207 matchfn, prefix, subrepos=opts.get('subrepos')) | 346 matchfn, prefix, subrepos=opts.get('subrepos')) |
208 | 347 |
348 @command('backout', | |
349 [('', 'merge', None, _('merge with old dirstate parent after backout')), | |
350 ('', 'parent', '', _('parent to choose when backing out merge'), _('REV')), | |
351 ('t', 'tool', '', _('specify merge tool')), | |
352 ('r', 'rev', '', _('revision to backout'), _('REV')), | |
353 ] + walkopts + commitopts + commitopts2, | |
354 _('[OPTION]... [-r] REV')) | |
209 def backout(ui, repo, node=None, rev=None, **opts): | 355 def backout(ui, repo, node=None, rev=None, **opts): |
210 '''reverse effect of earlier changeset | 356 '''reverse effect of earlier changeset |
211 | 357 |
212 Prepare a new changeset with the effect of REV undone in the | 358 Prepare a new changeset with the effect of REV undone in the |
213 current working directory. | 359 current working directory. |
305 return hg.merge(repo, hex(repo.changelog.tip())) | 451 return hg.merge(repo, hex(repo.changelog.tip())) |
306 finally: | 452 finally: |
307 ui.setconfig('ui', 'forcemerge', '') | 453 ui.setconfig('ui', 'forcemerge', '') |
308 return 0 | 454 return 0 |
309 | 455 |
456 @command('bisect', | |
457 [('r', 'reset', False, _('reset bisect state')), | |
458 ('g', 'good', False, _('mark changeset good')), | |
459 ('b', 'bad', False, _('mark changeset bad')), | |
460 ('s', 'skip', False, _('skip testing changeset')), | |
461 ('e', 'extend', False, _('extend the bisect range')), | |
462 ('c', 'command', '', _('use command to check changeset state'), _('CMD')), | |
463 ('U', 'noupdate', False, _('do not update to target'))], | |
464 _("[-gbsr] [-U] [-c CMD] [REV]")) | |
310 def bisect(ui, repo, rev=None, extra=None, command=None, | 465 def bisect(ui, repo, rev=None, extra=None, command=None, |
311 reset=None, good=None, bad=None, skip=None, extend=None, | 466 reset=None, good=None, bad=None, skip=None, extend=None, |
312 noupdate=None): | 467 noupdate=None): |
313 """subdivision search of changesets | 468 """subdivision search of changesets |
314 | 469 |
481 % (rev, short(node), changesets, tests)) | 636 % (rev, short(node), changesets, tests)) |
482 if not noupdate: | 637 if not noupdate: |
483 cmdutil.bailifchanged(repo) | 638 cmdutil.bailifchanged(repo) |
484 return hg.clean(repo, node) | 639 return hg.clean(repo, node) |
485 | 640 |
641 @command('bookmarks', | |
642 [('f', 'force', False, _('force')), | |
643 ('r', 'rev', '', _('revision'), _('REV')), | |
644 ('d', 'delete', False, _('delete a given bookmark')), | |
645 ('m', 'rename', '', _('rename a given bookmark'), _('NAME')), | |
646 ('i', 'inactive', False, _('do not mark a new bookmark active'))], | |
647 _('hg bookmarks [-f] [-d] [-i] [-m NAME] [-r REV] [NAME]')) | |
486 def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, | 648 def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, |
487 rename=None, inactive=False): | 649 rename=None, inactive=False): |
488 '''track a line of development with movable markers | 650 '''track a line of development with movable markers |
489 | 651 |
490 Bookmarks are pointers to certain commits that move when | 652 Bookmarks are pointers to certain commits that move when |
577 ui.write(" %s %-25s %d:%s\n" % ( | 739 ui.write(" %s %-25s %d:%s\n" % ( |
578 prefix, bmark, repo.changelog.rev(n), hexfn(n)), | 740 prefix, bmark, repo.changelog.rev(n), hexfn(n)), |
579 label=label) | 741 label=label) |
580 return | 742 return |
581 | 743 |
744 @command('branch', | |
745 [('f', 'force', None, | |
746 _('set branch name even if it shadows an existing branch')), | |
747 ('C', 'clean', None, _('reset branch name to parent branch name'))], | |
748 _('[-fC] [NAME]')) | |
582 def branch(ui, repo, label=None, **opts): | 749 def branch(ui, repo, label=None, **opts): |
583 """set or show the current branch name | 750 """set or show the current branch name |
584 | 751 |
585 With no argument, show the current branch name. With one argument, | 752 With no argument, show the current branch name. With one argument, |
586 set the working directory branch name (the branch will not exist | 753 set the working directory branch name (the branch will not exist |
614 repo.dirstate.setbranch(label) | 781 repo.dirstate.setbranch(label) |
615 ui.status(_('marked working directory as branch %s\n') % label) | 782 ui.status(_('marked working directory as branch %s\n') % label) |
616 else: | 783 else: |
617 ui.write("%s\n" % repo.dirstate.branch()) | 784 ui.write("%s\n" % repo.dirstate.branch()) |
618 | 785 |
786 @command('branches', | |
787 [('a', 'active', False, _('show only branches that have unmerged heads')), | |
788 ('c', 'closed', False, _('show normal and closed branches'))], | |
789 _('[-ac]')) | |
619 def branches(ui, repo, active=False, closed=False): | 790 def branches(ui, repo, active=False, closed=False): |
620 """list repository named branches | 791 """list repository named branches |
621 | 792 |
622 List the repository's named branches, indicating which ones are | 793 List the repository's named branches, indicating which ones are |
623 inactive. If -c/--closed is specified, also list branches which have | 794 inactive. If -c/--closed is specified, also list branches which have |
663 rev = str(node).rjust(31 - encoding.colwidth(tag)) | 834 rev = str(node).rjust(31 - encoding.colwidth(tag)) |
664 rev = ui.label('%s:%s' % (rev, hexfunc(hn)), 'log.changeset') | 835 rev = ui.label('%s:%s' % (rev, hexfunc(hn)), 'log.changeset') |
665 tag = ui.label(tag, label) | 836 tag = ui.label(tag, label) |
666 ui.write("%s %s%s\n" % (tag, rev, notice)) | 837 ui.write("%s %s%s\n" % (tag, rev, notice)) |
667 | 838 |
839 @command('bundle', | |
840 [('f', 'force', None, _('run even when the destination is unrelated')), | |
841 ('r', 'rev', [], _('a changeset intended to be added to the destination'), | |
842 _('REV')), | |
843 ('b', 'branch', [], _('a specific branch you would like to bundle'), | |
844 _('BRANCH')), | |
845 ('', 'base', [], | |
846 _('a base changeset assumed to be available at the destination'), | |
847 _('REV')), | |
848 ('a', 'all', None, _('bundle all changesets in the repository')), | |
849 ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE')), | |
850 ] + remoteopts, | |
851 _('[-f] [-t TYPE] [-a] [-r REV]... [--base REV]... FILE [DEST]')) | |
668 def bundle(ui, repo, fname, dest=None, **opts): | 852 def bundle(ui, repo, fname, dest=None, **opts): |
669 """create a changegroup file | 853 """create a changegroup file |
670 | 854 |
671 Generate a compressed changegroup file collecting changesets not | 855 Generate a compressed changegroup file collecting changesets not |
672 known to be in another repository. | 856 known to be in another repository. |
725 if bundletype not in changegroup.bundletypes: | 909 if bundletype not in changegroup.bundletypes: |
726 raise util.Abort(_('unknown bundle type specified with --type')) | 910 raise util.Abort(_('unknown bundle type specified with --type')) |
727 | 911 |
728 changegroup.writebundle(cg, fname, bundletype) | 912 changegroup.writebundle(cg, fname, bundletype) |
729 | 913 |
914 @command('cat', | |
915 [('o', 'output', '', | |
916 _('print output to file with formatted name'), _('FORMAT')), | |
917 ('r', 'rev', '', _('print the given revision'), _('REV')), | |
918 ('', 'decode', None, _('apply any matching decode filter')), | |
919 ] + walkopts, | |
920 _('[OPTION]... FILE...')) | |
730 def cat(ui, repo, file1, *pats, **opts): | 921 def cat(ui, repo, file1, *pats, **opts): |
731 """output the current or given revision of files | 922 """output the current or given revision of files |
732 | 923 |
733 Print the specified files as they were at the given revision. If | 924 Print the specified files as they were at the given revision. If |
734 no revision is given, the parent of the working directory is used, | 925 no revision is given, the parent of the working directory is used, |
756 fp.write(data) | 947 fp.write(data) |
757 fp.close() | 948 fp.close() |
758 err = 0 | 949 err = 0 |
759 return err | 950 return err |
760 | 951 |
952 @command('^clone', | |
953 [('U', 'noupdate', None, | |
954 _('the clone will include an empty working copy (only a repository)')), | |
955 ('u', 'updaterev', '', _('revision, tag or branch to check out'), _('REV')), | |
956 ('r', 'rev', [], _('include the specified changeset'), _('REV')), | |
957 ('b', 'branch', [], _('clone only the specified branch'), _('BRANCH')), | |
958 ('', 'pull', None, _('use pull protocol to copy metadata')), | |
959 ('', 'uncompressed', None, _('use uncompressed transfer (fast over LAN)')), | |
960 ] + remoteopts, | |
961 _('[OPTION]... SOURCE [DEST]')) | |
761 def clone(ui, source, dest=None, **opts): | 962 def clone(ui, source, dest=None, **opts): |
762 """make a copy of an existing repository | 963 """make a copy of an existing repository |
763 | 964 |
764 Create a copy of an existing repository in a new directory. | 965 Create a copy of an existing repository in a new directory. |
765 | 966 |
832 update=opts.get('updaterev') or not opts.get('noupdate'), | 1033 update=opts.get('updaterev') or not opts.get('noupdate'), |
833 branch=opts.get('branch')) | 1034 branch=opts.get('branch')) |
834 | 1035 |
835 return r is None | 1036 return r is None |
836 | 1037 |
1038 @command('^commit|ci', | |
1039 [('A', 'addremove', None, | |
1040 _('mark new/missing files as added/removed before committing')), | |
1041 ('', 'close-branch', None, | |
1042 _('mark a branch as closed, hiding it from the branch list')), | |
1043 ] + walkopts + commitopts + commitopts2, | |
1044 _('[OPTION]... [FILE]...')) | |
837 def commit(ui, repo, *pats, **opts): | 1045 def commit(ui, repo, *pats, **opts): |
838 """commit the specified files or all outstanding changes | 1046 """commit the specified files or all outstanding changes |
839 | 1047 |
840 Commit changes to the given files into the repository. Unlike a | 1048 Commit changes to the given files into the repository. Unlike a |
841 centralized SCM, this operation is a local operation. See | 1049 centralized SCM, this operation is a local operation. See |
927 if ui.debugflag: | 1135 if ui.debugflag: |
928 ui.write(_('committed changeset %d:%s\n') % (int(ctx), ctx.hex())) | 1136 ui.write(_('committed changeset %d:%s\n') % (int(ctx), ctx.hex())) |
929 elif ui.verbose: | 1137 elif ui.verbose: |
930 ui.write(_('committed changeset %d:%s\n') % (int(ctx), ctx)) | 1138 ui.write(_('committed changeset %d:%s\n') % (int(ctx), ctx)) |
931 | 1139 |
1140 @command('copy|cp', | |
1141 [('A', 'after', None, _('record a copy that has already occurred')), | |
1142 ('f', 'force', None, _('forcibly copy over an existing managed file')), | |
1143 ] + walkopts + dryrunopts, | |
1144 _('[OPTION]... [SOURCE]... DEST')) | |
932 def copy(ui, repo, *pats, **opts): | 1145 def copy(ui, repo, *pats, **opts): |
933 """mark files as copied for the next commit | 1146 """mark files as copied for the next commit |
934 | 1147 |
935 Mark dest as having copies of source files. If dest is a | 1148 Mark dest as having copies of source files. If dest is a |
936 directory, copies are put in that directory. If dest is a file, | 1149 directory, copies are put in that directory. If dest is a file, |
949 try: | 1162 try: |
950 return cmdutil.copy(ui, repo, pats, opts) | 1163 return cmdutil.copy(ui, repo, pats, opts) |
951 finally: | 1164 finally: |
952 wlock.release() | 1165 wlock.release() |
953 | 1166 |
1167 @command('debugancestor', [], _('[INDEX] REV1 REV2')) | |
954 def debugancestor(ui, repo, *args): | 1168 def debugancestor(ui, repo, *args): |
955 """find the ancestor revision of two revisions in a given index""" | 1169 """find the ancestor revision of two revisions in a given index""" |
956 if len(args) == 3: | 1170 if len(args) == 3: |
957 index, rev1, rev2 = args | 1171 index, rev1, rev2 = args |
958 r = revlog.revlog(scmutil.opener(os.getcwd(), audit=False), index) | 1172 r = revlog.revlog(scmutil.opener(os.getcwd(), audit=False), index) |
967 else: | 1181 else: |
968 raise util.Abort(_('either two or three arguments required')) | 1182 raise util.Abort(_('either two or three arguments required')) |
969 a = r.ancestor(lookup(rev1), lookup(rev2)) | 1183 a = r.ancestor(lookup(rev1), lookup(rev2)) |
970 ui.write("%d:%s\n" % (r.rev(a), hex(a))) | 1184 ui.write("%d:%s\n" % (r.rev(a), hex(a))) |
971 | 1185 |
1186 @command('debugbuilddag', | |
1187 [('m', 'mergeable-file', None, _('add single file mergeable changes')), | |
1188 ('o', 'overwritten-file', None, _('add single file all revs overwrite')), | |
1189 ('n', 'new-file', None, _('add new file at each rev'))], | |
1190 _('[OPTION]... [TEXT]')) | |
972 def debugbuilddag(ui, repo, text=None, | 1191 def debugbuilddag(ui, repo, text=None, |
973 mergeable_file=False, | 1192 mergeable_file=False, |
974 overwritten_file=False, | 1193 overwritten_file=False, |
975 new_file=False): | 1194 new_file=False): |
976 """builds a repo with a given DAG from scratch in the current empty repo | 1195 """builds a repo with a given DAG from scratch in the current empty repo |
1109 tr.release() | 1328 tr.release() |
1110 | 1329 |
1111 if tags: | 1330 if tags: |
1112 repo.opener.write("localtags", "".join(tags)) | 1331 repo.opener.write("localtags", "".join(tags)) |
1113 | 1332 |
1333 @command('debugcommands', [], _('[COMMAND]')) | |
1114 def debugcommands(ui, cmd='', *args): | 1334 def debugcommands(ui, cmd='', *args): |
1115 """list all available commands and options""" | 1335 """list all available commands and options""" |
1116 for cmd, vals in sorted(table.iteritems()): | 1336 for cmd, vals in sorted(table.iteritems()): |
1117 cmd = cmd.split('|')[0].strip('^') | 1337 cmd = cmd.split('|')[0].strip('^') |
1118 opts = ', '.join([i[1] for i in vals[1]]) | 1338 opts = ', '.join([i[1] for i in vals[1]]) |
1119 ui.write('%s: %s\n' % (cmd, opts)) | 1339 ui.write('%s: %s\n' % (cmd, opts)) |
1120 | 1340 |
1341 @command('debugcomplete', | |
1342 [('o', 'options', None, _('show the command options'))], | |
1343 _('[-o] CMD')) | |
1121 def debugcomplete(ui, cmd='', **opts): | 1344 def debugcomplete(ui, cmd='', **opts): |
1122 """returns the completion list associated with the given command""" | 1345 """returns the completion list associated with the given command""" |
1123 | 1346 |
1124 if opts.get('options'): | 1347 if opts.get('options'): |
1125 options = [] | 1348 options = [] |
1140 cmdlist = cmdutil.findpossible(cmd, table) | 1363 cmdlist = cmdutil.findpossible(cmd, table) |
1141 if ui.verbose: | 1364 if ui.verbose: |
1142 cmdlist = [' '.join(c[0]) for c in cmdlist.values()] | 1365 cmdlist = [' '.join(c[0]) for c in cmdlist.values()] |
1143 ui.write("%s\n" % "\n".join(sorted(cmdlist))) | 1366 ui.write("%s\n" % "\n".join(sorted(cmdlist))) |
1144 | 1367 |
1368 @command('debugfsinfo', [], _('[PATH]')) | |
1145 def debugfsinfo(ui, path = "."): | 1369 def debugfsinfo(ui, path = "."): |
1146 """show information detected about current filesystem""" | 1370 """show information detected about current filesystem""" |
1147 util.writefile('.debugfsinfo', '') | 1371 util.writefile('.debugfsinfo', '') |
1148 ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no')) | 1372 ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no')) |
1149 ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no')) | 1373 ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no')) |
1150 ui.write('case-sensitive: %s\n' % (util.checkcase('.debugfsinfo') | 1374 ui.write('case-sensitive: %s\n' % (util.checkcase('.debugfsinfo') |
1151 and 'yes' or 'no')) | 1375 and 'yes' or 'no')) |
1152 os.unlink('.debugfsinfo') | 1376 os.unlink('.debugfsinfo') |
1153 | 1377 |
1378 @command('debugrebuildstate', | |
1379 [('r', 'rev', '', _('revision to rebuild to'), _('REV'))], | |
1380 _('[-r REV] [REV]')) | |
1154 def debugrebuildstate(ui, repo, rev="tip"): | 1381 def debugrebuildstate(ui, repo, rev="tip"): |
1155 """rebuild the dirstate as it would look like for the given revision""" | 1382 """rebuild the dirstate as it would look like for the given revision""" |
1156 ctx = cmdutil.revsingle(repo, rev) | 1383 ctx = cmdutil.revsingle(repo, rev) |
1157 wlock = repo.wlock() | 1384 wlock = repo.wlock() |
1158 try: | 1385 try: |
1159 repo.dirstate.rebuild(ctx.node(), ctx.manifest()) | 1386 repo.dirstate.rebuild(ctx.node(), ctx.manifest()) |
1160 finally: | 1387 finally: |
1161 wlock.release() | 1388 wlock.release() |
1162 | 1389 |
1390 @command('debugcheckstate', [], '') | |
1163 def debugcheckstate(ui, repo): | 1391 def debugcheckstate(ui, repo): |
1164 """validate the correctness of the current dirstate""" | 1392 """validate the correctness of the current dirstate""" |
1165 parent1, parent2 = repo.dirstate.parents() | 1393 parent1, parent2 = repo.dirstate.parents() |
1166 m1 = repo[parent1].manifest() | 1394 m1 = repo[parent1].manifest() |
1167 m2 = repo[parent2].manifest() | 1395 m2 = repo[parent2].manifest() |
1185 errors += 1 | 1413 errors += 1 |
1186 if errors: | 1414 if errors: |
1187 error = _(".hg/dirstate inconsistent with current parent's manifest") | 1415 error = _(".hg/dirstate inconsistent with current parent's manifest") |
1188 raise util.Abort(error) | 1416 raise util.Abort(error) |
1189 | 1417 |
1418 @command('showconfig|debugconfig', | |
1419 [('u', 'untrusted', None, _('show untrusted configuration options'))], | |
1420 _('[-u] [NAME]...')) | |
1190 def showconfig(ui, repo, *values, **opts): | 1421 def showconfig(ui, repo, *values, **opts): |
1191 """show combined config settings from all hgrc files | 1422 """show combined config settings from all hgrc files |
1192 | 1423 |
1193 With no arguments, print names and values of all config items. | 1424 With no arguments, print names and values of all config items. |
1194 | 1425 |
1228 else: | 1459 else: |
1229 ui.debug('%s: ' % | 1460 ui.debug('%s: ' % |
1230 ui.configsource(section, name, untrusted)) | 1461 ui.configsource(section, name, untrusted)) |
1231 ui.write('%s=%s\n' % (sectname, value)) | 1462 ui.write('%s=%s\n' % (sectname, value)) |
1232 | 1463 |
1464 @command('debugknown', [], _('REPO ID...')) | |
1233 def debugknown(ui, repopath, *ids, **opts): | 1465 def debugknown(ui, repopath, *ids, **opts): |
1234 """test whether node ids are known to a repo | 1466 """test whether node ids are known to a repo |
1235 | 1467 |
1236 Every ID must be a full-length hex node id string. Returns a list of 0s and 1s | 1468 Every ID must be a full-length hex node id string. Returns a list of 0s and 1s |
1237 indicating unknown/known. | 1469 indicating unknown/known. |
1240 if not repo.capable('known'): | 1472 if not repo.capable('known'): |
1241 raise util.Abort("known() not supported by target repository") | 1473 raise util.Abort("known() not supported by target repository") |
1242 flags = repo.known([bin(s) for s in ids]) | 1474 flags = repo.known([bin(s) for s in ids]) |
1243 ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags]))) | 1475 ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags]))) |
1244 | 1476 |
1477 @command('debugbundle', [('a', 'all', None, _('show all details'))], _('FILE')) | |
1245 def debugbundle(ui, bundlepath, all=None, **opts): | 1478 def debugbundle(ui, bundlepath, all=None, **opts): |
1246 """lists the contents of a bundle""" | 1479 """lists the contents of a bundle""" |
1247 f = url.open(ui, bundlepath) | 1480 f = url.open(ui, bundlepath) |
1248 try: | 1481 try: |
1249 gen = changegroup.readbundle(f, bundlepath) | 1482 gen = changegroup.readbundle(f, bundlepath) |
1289 ui.write("%s\n" % hex(node)) | 1522 ui.write("%s\n" % hex(node)) |
1290 chain = node | 1523 chain = node |
1291 finally: | 1524 finally: |
1292 f.close() | 1525 f.close() |
1293 | 1526 |
1527 @command('debuggetbundle', | |
1528 [('H', 'head', [], _('id of head node'), _('ID')), | |
1529 ('C', 'common', [], _('id of common node'), _('ID')), | |
1530 ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE'))], | |
1531 _('REPO FILE [-H|-C ID]...')) | |
1294 def debuggetbundle(ui, repopath, bundlepath, head=None, common=None, **opts): | 1532 def debuggetbundle(ui, repopath, bundlepath, head=None, common=None, **opts): |
1295 """retrieves a bundle from a repo | 1533 """retrieves a bundle from a repo |
1296 | 1534 |
1297 Every ID must be a full-length hex node id string. Saves the bundle to the | 1535 Every ID must be a full-length hex node id string. Saves the bundle to the |
1298 given file. | 1536 given file. |
1312 bundletype = btypes.get(bundletype) | 1550 bundletype = btypes.get(bundletype) |
1313 if bundletype not in changegroup.bundletypes: | 1551 if bundletype not in changegroup.bundletypes: |
1314 raise util.Abort(_('unknown bundle type specified with --type')) | 1552 raise util.Abort(_('unknown bundle type specified with --type')) |
1315 changegroup.writebundle(bundle, bundlepath, bundletype) | 1553 changegroup.writebundle(bundle, bundlepath, bundletype) |
1316 | 1554 |
1555 @command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]')) | |
1317 def debugpushkey(ui, repopath, namespace, *keyinfo): | 1556 def debugpushkey(ui, repopath, namespace, *keyinfo): |
1318 '''access the pushkey key/value protocol | 1557 '''access the pushkey key/value protocol |
1319 | 1558 |
1320 With two args, list the keys in the given namespace. | 1559 With two args, list the keys in the given namespace. |
1321 | 1560 |
1332 else: | 1571 else: |
1333 for k, v in target.listkeys(namespace).iteritems(): | 1572 for k, v in target.listkeys(namespace).iteritems(): |
1334 ui.write("%s\t%s\n" % (k.encode('string-escape'), | 1573 ui.write("%s\t%s\n" % (k.encode('string-escape'), |
1335 v.encode('string-escape'))) | 1574 v.encode('string-escape'))) |
1336 | 1575 |
1576 @command('debugrevspec', [], ('REVSPEC')) | |
1337 def debugrevspec(ui, repo, expr): | 1577 def debugrevspec(ui, repo, expr): |
1338 '''parse and apply a revision specification''' | 1578 '''parse and apply a revision specification''' |
1339 if ui.verbose: | 1579 if ui.verbose: |
1340 tree = revset.parse(expr)[0] | 1580 tree = revset.parse(expr)[0] |
1341 ui.note(tree, "\n") | 1581 ui.note(tree, "\n") |
1344 ui.note(newtree, "\n") | 1584 ui.note(newtree, "\n") |
1345 func = revset.match(ui, expr) | 1585 func = revset.match(ui, expr) |
1346 for c in func(repo, range(len(repo))): | 1586 for c in func(repo, range(len(repo))): |
1347 ui.write("%s\n" % c) | 1587 ui.write("%s\n" % c) |
1348 | 1588 |
1589 @command('debugsetparents', [], _('REV1 [REV2]')) | |
1349 def debugsetparents(ui, repo, rev1, rev2=None): | 1590 def debugsetparents(ui, repo, rev1, rev2=None): |
1350 """manually set the parents of the current working directory | 1591 """manually set the parents of the current working directory |
1351 | 1592 |
1352 This is useful for writing repository conversion tools, but should | 1593 This is useful for writing repository conversion tools, but should |
1353 be used with care. | 1594 be used with care. |
1362 try: | 1603 try: |
1363 repo.dirstate.setparents(r1, r2) | 1604 repo.dirstate.setparents(r1, r2) |
1364 finally: | 1605 finally: |
1365 wlock.release() | 1606 wlock.release() |
1366 | 1607 |
1608 @command('debugstate', | |
1609 [('', 'nodates', None, _('do not display the saved mtime')), | |
1610 ('', 'datesort', None, _('sort by saved mtime'))], | |
1611 _('[OPTION]...')) | |
1367 def debugstate(ui, repo, nodates=None, datesort=None): | 1612 def debugstate(ui, repo, nodates=None, datesort=None): |
1368 """show the contents of the current dirstate""" | 1613 """show the contents of the current dirstate""" |
1369 timestr = "" | 1614 timestr = "" |
1370 showdate = not nodates | 1615 showdate = not nodates |
1371 if datesort: | 1616 if datesort: |
1390 mode = '%3o' % (ent[1] & 0777) | 1635 mode = '%3o' % (ent[1] & 0777) |
1391 ui.write("%c %s %10d %s%s\n" % (ent[0], mode, ent[2], timestr, file_)) | 1636 ui.write("%c %s %10d %s%s\n" % (ent[0], mode, ent[2], timestr, file_)) |
1392 for f in repo.dirstate.copies(): | 1637 for f in repo.dirstate.copies(): |
1393 ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f)) | 1638 ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f)) |
1394 | 1639 |
1640 @command('debugsub', | |
1641 [('r', 'rev', '', | |
1642 _('revision to check'), _('REV'))], | |
1643 _('[-r REV] [REV]')) | |
1395 def debugsub(ui, repo, rev=None): | 1644 def debugsub(ui, repo, rev=None): |
1396 ctx = cmdutil.revsingle(repo, rev, None) | 1645 ctx = cmdutil.revsingle(repo, rev, None) |
1397 for k, v in sorted(ctx.substate.items()): | 1646 for k, v in sorted(ctx.substate.items()): |
1398 ui.write('path %s\n' % k) | 1647 ui.write('path %s\n' % k) |
1399 ui.write(' source %s\n' % v[0]) | 1648 ui.write(' source %s\n' % v[0]) |
1400 ui.write(' revision %s\n' % v[1]) | 1649 ui.write(' revision %s\n' % v[1]) |
1401 | 1650 |
1651 @command('debugdag', | |
1652 [('t', 'tags', None, _('use tags as labels')), | |
1653 ('b', 'branches', None, _('annotate with branch names')), | |
1654 ('', 'dots', None, _('use dots for runs')), | |
1655 ('s', 'spaces', None, _('separate elements by spaces'))], | |
1656 _('[OPTION]... [FILE [REV]...]')) | |
1402 def debugdag(ui, repo, file_=None, *revs, **opts): | 1657 def debugdag(ui, repo, file_=None, *revs, **opts): |
1403 """format the changelog or an index DAG as a concise textual description | 1658 """format the changelog or an index DAG as a concise textual description |
1404 | 1659 |
1405 If you pass a revlog index, the revlog's DAG is emitted. If you list | 1660 If you pass a revlog index, the revlog's DAG is emitted. If you list |
1406 revision numbers, they get labelled in the output as rN. | 1661 revision numbers, they get labelled in the output as rN. |
1450 usedots=dots, | 1705 usedots=dots, |
1451 maxlinewidth=70): | 1706 maxlinewidth=70): |
1452 ui.write(line) | 1707 ui.write(line) |
1453 ui.write("\n") | 1708 ui.write("\n") |
1454 | 1709 |
1710 @command('debugdata', [], _('FILE REV')) | |
1455 def debugdata(ui, repo, file_, rev): | 1711 def debugdata(ui, repo, file_, rev): |
1456 """dump the contents of a data file revision""" | 1712 """dump the contents of a data file revision""" |
1457 r = None | 1713 r = None |
1458 if repo: | 1714 if repo: |
1459 filelog = repo.file(file_) | 1715 filelog = repo.file(file_) |
1465 try: | 1721 try: |
1466 ui.write(r.revision(r.lookup(rev))) | 1722 ui.write(r.revision(r.lookup(rev))) |
1467 except KeyError: | 1723 except KeyError: |
1468 raise util.Abort(_('invalid revision identifier %s') % rev) | 1724 raise util.Abort(_('invalid revision identifier %s') % rev) |
1469 | 1725 |
1726 @command('debugdate', | |
1727 [('e', 'extended', None, _('try extended date formats'))], | |
1728 _('[-e] DATE [RANGE]')) | |
1470 def debugdate(ui, date, range=None, **opts): | 1729 def debugdate(ui, date, range=None, **opts): |
1471 """parse and display a date""" | 1730 """parse and display a date""" |
1472 if opts["extended"]: | 1731 if opts["extended"]: |
1473 d = util.parsedate(date, util.extendeddateformats) | 1732 d = util.parsedate(date, util.extendeddateformats) |
1474 else: | 1733 else: |
1477 ui.write("standard: %s\n" % util.datestr(d)) | 1736 ui.write("standard: %s\n" % util.datestr(d)) |
1478 if range: | 1737 if range: |
1479 m = util.matchdate(range) | 1738 m = util.matchdate(range) |
1480 ui.write("match: %s\n" % m(d[0])) | 1739 ui.write("match: %s\n" % m(d[0])) |
1481 | 1740 |
1741 @command('debugignore', [], '') | |
1482 def debugignore(ui, repo, *values, **opts): | 1742 def debugignore(ui, repo, *values, **opts): |
1483 """display the combined ignore pattern""" | 1743 """display the combined ignore pattern""" |
1484 ignore = repo.dirstate._ignore | 1744 ignore = repo.dirstate._ignore |
1485 if hasattr(ignore, 'includepat'): | 1745 if hasattr(ignore, 'includepat'): |
1486 ui.write("%s\n" % ignore.includepat) | 1746 ui.write("%s\n" % ignore.includepat) |
1487 else: | 1747 else: |
1488 raise util.Abort(_("no ignore patterns found")) | 1748 raise util.Abort(_("no ignore patterns found")) |
1489 | 1749 |
1750 @command('debugdiscovery', | |
1751 [('', 'old', None, _('use old-style discovery')), | |
1752 ('', 'nonheads', None, | |
1753 _('use old-style discovery with non-heads included')), | |
1754 ] + remoteopts, | |
1755 _('[-l REV] [-r REV] [-b BRANCH]... [OTHER]')) | |
1490 def debugdiscovery(ui, repo, remoteurl="default", **opts): | 1756 def debugdiscovery(ui, repo, remoteurl="default", **opts): |
1491 """runs the changeset discovery protocol in isolation""" | 1757 """runs the changeset discovery protocol in isolation""" |
1492 remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl), opts.get('branch')) | 1758 remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl), opts.get('branch')) |
1493 remote = hg.repository(hg.remoteui(repo, opts), remoteurl) | 1759 remote = hg.repository(hg.remoteui(repo, opts), remoteurl) |
1494 ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl)) | 1760 ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl)) |
1543 remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches, | 1809 remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches, |
1544 opts.get('remote_head')) | 1810 opts.get('remote_head')) |
1545 localrevs = opts.get('local_head') | 1811 localrevs = opts.get('local_head') |
1546 doit(localrevs, remoterevs) | 1812 doit(localrevs, remoterevs) |
1547 | 1813 |
1548 | 1814 @command('debugindex', |
1815 [('f', 'format', 0, _('revlog format'), _('FORMAT'))], | |
1816 _('FILE')) | |
1549 def debugindex(ui, repo, file_, **opts): | 1817 def debugindex(ui, repo, file_, **opts): |
1550 """dump the contents of an index file""" | 1818 """dump the contents of an index file""" |
1551 r = None | 1819 r = None |
1552 if repo: | 1820 if repo: |
1553 filelog = repo.file(file_) | 1821 filelog = repo.file(file_) |
1592 pr = r.parentrevs(i) | 1860 pr = r.parentrevs(i) |
1593 ui.write("% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d % 6d %s\n" % ( | 1861 ui.write("% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d % 6d %s\n" % ( |
1594 i, r.flags(i), r.start(i), r.length(i), r.rawsize(i), | 1862 i, r.flags(i), r.start(i), r.length(i), r.rawsize(i), |
1595 base, r.linkrev(i), pr[0], pr[1], short(node))) | 1863 base, r.linkrev(i), pr[0], pr[1], short(node))) |
1596 | 1864 |
1865 @command('debugindexdot', [], _('FILE')) | |
1597 def debugindexdot(ui, repo, file_): | 1866 def debugindexdot(ui, repo, file_): |
1598 """dump an index DAG as a graphviz dot file""" | 1867 """dump an index DAG as a graphviz dot file""" |
1599 r = None | 1868 r = None |
1600 if repo: | 1869 if repo: |
1601 filelog = repo.file(file_) | 1870 filelog = repo.file(file_) |
1610 ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i)) | 1879 ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i)) |
1611 if pp[1] != nullid: | 1880 if pp[1] != nullid: |
1612 ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i)) | 1881 ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i)) |
1613 ui.write("}\n") | 1882 ui.write("}\n") |
1614 | 1883 |
1884 @command('debuginstall', [], '') | |
1615 def debuginstall(ui): | 1885 def debuginstall(ui): |
1616 '''test Mercurial installation | 1886 '''test Mercurial installation |
1617 | 1887 |
1618 Returns 0 on success. | 1888 Returns 0 on success. |
1619 ''' | 1889 ''' |
1687 ui.write(_("%s problems detected," | 1957 ui.write(_("%s problems detected," |
1688 " please check your install!\n") % problems) | 1958 " please check your install!\n") % problems) |
1689 | 1959 |
1690 return problems | 1960 return problems |
1691 | 1961 |
1962 @command('debugrename', | |
1963 [('r', 'rev', '', _('revision to debug'), _('REV'))], | |
1964 _('[-r REV] FILE')) | |
1692 def debugrename(ui, repo, file1, *pats, **opts): | 1965 def debugrename(ui, repo, file1, *pats, **opts): |
1693 """dump rename information""" | 1966 """dump rename information""" |
1694 | 1967 |
1695 ctx = cmdutil.revsingle(repo, opts.get('rev')) | 1968 ctx = cmdutil.revsingle(repo, opts.get('rev')) |
1696 m = cmdutil.match(repo, (file1,) + pats, opts) | 1969 m = cmdutil.match(repo, (file1,) + pats, opts) |
1701 if o: | 1974 if o: |
1702 ui.write(_("%s renamed from %s:%s\n") % (rel, o[0], hex(o[1]))) | 1975 ui.write(_("%s renamed from %s:%s\n") % (rel, o[0], hex(o[1]))) |
1703 else: | 1976 else: |
1704 ui.write(_("%s not renamed\n") % rel) | 1977 ui.write(_("%s not renamed\n") % rel) |
1705 | 1978 |
1979 @command('debugwalk', walkopts, _('[OPTION]... [FILE]...')) | |
1706 def debugwalk(ui, repo, *pats, **opts): | 1980 def debugwalk(ui, repo, *pats, **opts): |
1707 """show how files match on given patterns""" | 1981 """show how files match on given patterns""" |
1708 m = cmdutil.match(repo, pats, opts) | 1982 m = cmdutil.match(repo, pats, opts) |
1709 items = list(repo.walk(m)) | 1983 items = list(repo.walk(m)) |
1710 if not items: | 1984 if not items: |
1714 max([len(m.rel(abs)) for abs in items])) | 1988 max([len(m.rel(abs)) for abs in items])) |
1715 for abs in items: | 1989 for abs in items: |
1716 line = fmt % (abs, m.rel(abs), m.exact(abs) and 'exact' or '') | 1990 line = fmt % (abs, m.rel(abs), m.exact(abs) and 'exact' or '') |
1717 ui.write("%s\n" % line.rstrip()) | 1991 ui.write("%s\n" % line.rstrip()) |
1718 | 1992 |
1993 @command('debugwireargs', | |
1994 [('', 'three', '', 'three'), | |
1995 ('', 'four', '', 'four'), | |
1996 ('', 'five', '', 'five'), | |
1997 ] + remoteopts, | |
1998 _('REPO [OPTIONS]... [ONE [TWO]]')) | |
1719 def debugwireargs(ui, repopath, *vals, **opts): | 1999 def debugwireargs(ui, repopath, *vals, **opts): |
1720 repo = hg.repository(hg.remoteui(ui, opts), repopath) | 2000 repo = hg.repository(hg.remoteui(ui, opts), repopath) |
1721 for opt in remoteopts: | 2001 for opt in remoteopts: |
1722 del opts[opt[1]] | 2002 del opts[opt[1]] |
1723 args = {} | 2003 args = {} |
1729 res2 = repo.debugwireargs(*vals, **args) | 2009 res2 = repo.debugwireargs(*vals, **args) |
1730 ui.write("%s\n" % res1) | 2010 ui.write("%s\n" % res1) |
1731 if res1 != res2: | 2011 if res1 != res2: |
1732 ui.warn("%s\n" % res2) | 2012 ui.warn("%s\n" % res2) |
1733 | 2013 |
2014 @command('^diff', | |
2015 [('r', 'rev', [], _('revision'), _('REV')), | |
2016 ('c', 'change', '', _('change made by revision'), _('REV')) | |
2017 ] + diffopts + diffopts2 + walkopts + subrepoopts, | |
2018 _('[OPTION]... ([-c REV] | [-r REV1 [-r REV2]]) [FILE]...')) | |
1734 def diff(ui, repo, *pats, **opts): | 2019 def diff(ui, repo, *pats, **opts): |
1735 """diff repository (or selected files) | 2020 """diff repository (or selected files) |
1736 | 2021 |
1737 Show differences between revisions for the specified files. | 2022 Show differences between revisions for the specified files. |
1738 | 2023 |
1782 diffopts = patch.diffopts(ui, opts) | 2067 diffopts = patch.diffopts(ui, opts) |
1783 m = cmdutil.match(repo, pats, opts) | 2068 m = cmdutil.match(repo, pats, opts) |
1784 cmdutil.diffordiffstat(ui, repo, diffopts, node1, node2, m, stat=stat, | 2069 cmdutil.diffordiffstat(ui, repo, diffopts, node1, node2, m, stat=stat, |
1785 listsubrepos=opts.get('subrepos')) | 2070 listsubrepos=opts.get('subrepos')) |
1786 | 2071 |
2072 @command('^export', | |
2073 [('o', 'output', '', | |
2074 _('print output to file with formatted name'), _('FORMAT')), | |
2075 ('', 'switch-parent', None, _('diff against the second parent')), | |
2076 ('r', 'rev', [], _('revisions to export'), _('REV')), | |
2077 ] + diffopts, | |
2078 _('[OPTION]... [-o OUTFILESPEC] REV...')) | |
1787 def export(ui, repo, *changesets, **opts): | 2079 def export(ui, repo, *changesets, **opts): |
1788 """dump the header and diffs for one or more changesets | 2080 """dump the header and diffs for one or more changesets |
1789 | 2081 |
1790 Print the changeset header and diffs for one or more revisions. | 2082 Print the changeset header and diffs for one or more revisions. |
1791 | 2083 |
1832 ui.note(_('exporting patch:\n')) | 2124 ui.note(_('exporting patch:\n')) |
1833 cmdutil.export(repo, revs, template=opts.get('output'), | 2125 cmdutil.export(repo, revs, template=opts.get('output'), |
1834 switch_parent=opts.get('switch_parent'), | 2126 switch_parent=opts.get('switch_parent'), |
1835 opts=patch.diffopts(ui, opts)) | 2127 opts=patch.diffopts(ui, opts)) |
1836 | 2128 |
2129 @command('^forget', walkopts, _('[OPTION]... FILE...')) | |
1837 def forget(ui, repo, *pats, **opts): | 2130 def forget(ui, repo, *pats, **opts): |
1838 """forget the specified files on the next commit | 2131 """forget the specified files on the next commit |
1839 | 2132 |
1840 Mark the specified files so they will no longer be tracked | 2133 Mark the specified files so they will no longer be tracked |
1841 after the next commit. | 2134 after the next commit. |
1868 ui.status(_('removing %s\n') % m.rel(f)) | 2161 ui.status(_('removing %s\n') % m.rel(f)) |
1869 | 2162 |
1870 repo[None].remove(forget, unlink=False) | 2163 repo[None].remove(forget, unlink=False) |
1871 return errs | 2164 return errs |
1872 | 2165 |
2166 @command('grep', | |
2167 [('0', 'print0', None, _('end fields with NUL')), | |
2168 ('', 'all', None, _('print all revisions that match')), | |
2169 ('a', 'text', None, _('treat all files as text')), | |
2170 ('f', 'follow', None, | |
2171 _('follow changeset history,' | |
2172 ' or file history across copies and renames')), | |
2173 ('i', 'ignore-case', None, _('ignore case when matching')), | |
2174 ('l', 'files-with-matches', None, | |
2175 _('print only filenames and revisions that match')), | |
2176 ('n', 'line-number', None, _('print matching line numbers')), | |
2177 ('r', 'rev', [], | |
2178 _('only search files changed within revision range'), _('REV')), | |
2179 ('u', 'user', None, _('list the author (long with -v)')), | |
2180 ('d', 'date', None, _('list the date (short with -q)')), | |
2181 ] + walkopts, | |
2182 _('[OPTION]... PATTERN [FILE]...')) | |
1873 def grep(ui, repo, pattern, *pats, **opts): | 2183 def grep(ui, repo, pattern, *pats, **opts): |
1874 """search for a pattern in specified files and revisions | 2184 """search for a pattern in specified files and revisions |
1875 | 2185 |
1876 Search revisions of files for a regular expression. | 2186 Search revisions of files for a regular expression. |
1877 | 2187 |
2060 del matches[rev] | 2370 del matches[rev] |
2061 del revfiles[rev] | 2371 del revfiles[rev] |
2062 | 2372 |
2063 return not found | 2373 return not found |
2064 | 2374 |
2375 @command('heads', | |
2376 [('r', 'rev', '', | |
2377 _('show only heads which are descendants of STARTREV'), _('STARTREV')), | |
2378 ('t', 'topo', False, _('show topological heads only')), | |
2379 ('a', 'active', False, _('show active branchheads only (DEPRECATED)')), | |
2380 ('c', 'closed', False, _('show normal and closed branch heads')), | |
2381 ] + templateopts, | |
2382 _('[-ac] [-r STARTREV] [REV]...')) | |
2065 def heads(ui, repo, *branchrevs, **opts): | 2383 def heads(ui, repo, *branchrevs, **opts): |
2066 """show current repository heads or show branch heads | 2384 """show current repository heads or show branch heads |
2067 | 2385 |
2068 With no arguments, show all repository branch heads. | 2386 With no arguments, show all repository branch heads. |
2069 | 2387 |
2132 displayer = cmdutil.show_changeset(ui, repo, opts) | 2450 displayer = cmdutil.show_changeset(ui, repo, opts) |
2133 for ctx in heads: | 2451 for ctx in heads: |
2134 displayer.show(ctx) | 2452 displayer.show(ctx) |
2135 displayer.close() | 2453 displayer.close() |
2136 | 2454 |
2455 @command('help', | |
2456 [('e', 'extension', None, _('show only help for extensions')), | |
2457 ('c', 'command', None, _('show only help for commands'))], | |
2458 _('[-ec] [TOPIC]')) | |
2137 def help_(ui, name=None, with_version=False, unknowncmd=False, full=True, **opts): | 2459 def help_(ui, name=None, with_version=False, unknowncmd=False, full=True, **opts): |
2138 """show help for a given topic or a help overview | 2460 """show help for a given topic or a help overview |
2139 | 2461 |
2140 With no arguments, print a list of commands with short help messages. | 2462 With no arguments, print a list of commands with short help messages. |
2141 | 2463 |
2447 initindent=initindent, | 2769 initindent=initindent, |
2448 hangindent=hangindent))) | 2770 hangindent=hangindent))) |
2449 else: | 2771 else: |
2450 ui.write("%s\n" % opt) | 2772 ui.write("%s\n" % opt) |
2451 | 2773 |
2774 @command('identify|id', | |
2775 [('r', 'rev', '', | |
2776 _('identify the specified revision'), _('REV')), | |
2777 ('n', 'num', None, _('show local revision number')), | |
2778 ('i', 'id', None, _('show global revision id')), | |
2779 ('b', 'branch', None, _('show branch')), | |
2780 ('t', 'tags', None, _('show tags')), | |
2781 ('B', 'bookmarks', None, _('show bookmarks'))], | |
2782 _('[-nibtB] [-r REV] [SOURCE]')) | |
2452 def identify(ui, repo, source=None, rev=None, | 2783 def identify(ui, repo, source=None, rev=None, |
2453 num=None, id=None, branch=None, tags=None, bookmarks=None): | 2784 num=None, id=None, branch=None, tags=None, bookmarks=None): |
2454 """identify the working copy or specified revision | 2785 """identify the working copy or specified revision |
2455 | 2786 |
2456 Print a summary identifying the repository state at REV using one or | 2787 Print a summary identifying the repository state at REV using one or |
2555 if bookmarks: | 2886 if bookmarks: |
2556 output.extend(ctx.bookmarks()) | 2887 output.extend(ctx.bookmarks()) |
2557 | 2888 |
2558 ui.write("%s\n" % ' '.join(output)) | 2889 ui.write("%s\n" % ' '.join(output)) |
2559 | 2890 |
2891 @command('import|patch', | |
2892 [('p', 'strip', 1, | |
2893 _('directory strip option for patch. This has the same ' | |
2894 'meaning as the corresponding patch option'), _('NUM')), | |
2895 ('b', 'base', '', _('base path'), _('PATH')), | |
2896 ('f', 'force', None, _('skip check for outstanding uncommitted changes')), | |
2897 ('', 'no-commit', None, | |
2898 _("don't commit, just update the working directory")), | |
2899 ('', 'exact', None, | |
2900 _('apply patch to the nodes from which it was generated')), | |
2901 ('', 'import-branch', None, | |
2902 _('use any branch information in patch (implied by --exact)'))] + | |
2903 commitopts + commitopts2 + similarityopts, | |
2904 _('[OPTION]... PATCH...')) | |
2560 def import_(ui, repo, patch1, *patches, **opts): | 2905 def import_(ui, repo, patch1, *patches, **opts): |
2561 """import an ordered set of patches | 2906 """import an ordered set of patches |
2562 | 2907 |
2563 Import a list of patches and commit them individually (unless | 2908 Import a list of patches and commit them individually (unless |
2564 --no-commit is specified). | 2909 --no-commit is specified). |
2715 if msgs: | 3060 if msgs: |
2716 repo.opener.write('last-message.txt', '\n* * *\n'.join(msgs)) | 3061 repo.opener.write('last-message.txt', '\n* * *\n'.join(msgs)) |
2717 finally: | 3062 finally: |
2718 release(lock, wlock) | 3063 release(lock, wlock) |
2719 | 3064 |
3065 @command('incoming|in', | |
3066 [('f', 'force', None, | |
3067 _('run even if remote repository is unrelated')), | |
3068 ('n', 'newest-first', None, _('show newest record first')), | |
3069 ('', 'bundle', '', | |
3070 _('file to store the bundles into'), _('FILE')), | |
3071 ('r', 'rev', [], _('a remote changeset intended to be added'), _('REV')), | |
3072 ('B', 'bookmarks', False, _("compare bookmarks")), | |
3073 ('b', 'branch', [], | |
3074 _('a specific branch you would like to pull'), _('BRANCH')), | |
3075 ] + logopts + remoteopts + subrepoopts, | |
3076 _('[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]')) | |
2720 def incoming(ui, repo, source="default", **opts): | 3077 def incoming(ui, repo, source="default", **opts): |
2721 """show new changesets found in source | 3078 """show new changesets found in source |
2722 | 3079 |
2723 Show new changesets found in the specified path/URL or the default | 3080 Show new changesets found in the specified path/URL or the default |
2724 pull location. These are the changesets that would have been pulled | 3081 pull location. These are the changesets that would have been pulled |
2745 return bookmarks.diff(ui, repo, other) | 3102 return bookmarks.diff(ui, repo, other) |
2746 | 3103 |
2747 ret = hg.incoming(ui, repo, source, opts) | 3104 ret = hg.incoming(ui, repo, source, opts) |
2748 return ret | 3105 return ret |
2749 | 3106 |
3107 @command('^init', remoteopts, _('[-e CMD] [--remotecmd CMD] [DEST]')) | |
2750 def init(ui, dest=".", **opts): | 3108 def init(ui, dest=".", **opts): |
2751 """create a new repository in the given directory | 3109 """create a new repository in the given directory |
2752 | 3110 |
2753 Initialize a new repository in the given directory. If the given | 3111 Initialize a new repository in the given directory. If the given |
2754 directory does not exist, it will be created. | 3112 directory does not exist, it will be created. |
2760 | 3118 |
2761 Returns 0 on success. | 3119 Returns 0 on success. |
2762 """ | 3120 """ |
2763 hg.repository(hg.remoteui(ui, opts), ui.expandpath(dest), create=1) | 3121 hg.repository(hg.remoteui(ui, opts), ui.expandpath(dest), create=1) |
2764 | 3122 |
3123 @command('locate', | |
3124 [('r', 'rev', '', _('search the repository as it is in REV'), _('REV')), | |
3125 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')), | |
3126 ('f', 'fullpath', None, _('print complete paths from the filesystem root')), | |
3127 ] + walkopts, | |
3128 _('[OPTION]... [PATTERN]...')) | |
2765 def locate(ui, repo, *pats, **opts): | 3129 def locate(ui, repo, *pats, **opts): |
2766 """locate files matching specific patterns | 3130 """locate files matching specific patterns |
2767 | 3131 |
2768 Print files under Mercurial control in the working directory whose | 3132 Print files under Mercurial control in the working directory whose |
2769 names match the given patterns. | 3133 names match the given patterns. |
2797 ui.write(((pats and m.rel(abs)) or abs), end) | 3161 ui.write(((pats and m.rel(abs)) or abs), end) |
2798 ret = 0 | 3162 ret = 0 |
2799 | 3163 |
2800 return ret | 3164 return ret |
2801 | 3165 |
3166 @command('^log|history', | |
3167 [('f', 'follow', None, | |
3168 _('follow changeset history, or file history across copies and renames')), | |
3169 ('', 'follow-first', None, | |
3170 _('only follow the first parent of merge changesets')), | |
3171 ('d', 'date', '', _('show revisions matching date spec'), _('DATE')), | |
3172 ('C', 'copies', None, _('show copied files')), | |
3173 ('k', 'keyword', [], | |
3174 _('do case-insensitive search for a given text'), _('TEXT')), | |
3175 ('r', 'rev', [], _('show the specified revision or range'), _('REV')), | |
3176 ('', 'removed', None, _('include revisions where files were removed')), | |
3177 ('m', 'only-merges', None, _('show only merges')), | |
3178 ('u', 'user', [], _('revisions committed by user'), _('USER')), | |
3179 ('', 'only-branch', [], | |
3180 _('show only changesets within the given named branch (DEPRECATED)'), | |
3181 _('BRANCH')), | |
3182 ('b', 'branch', [], | |
3183 _('show changesets within the given named branch'), _('BRANCH')), | |
3184 ('P', 'prune', [], | |
3185 _('do not display revision or any of its ancestors'), _('REV')), | |
3186 ] + logopts + walkopts, | |
3187 _('[OPTION]... [FILE]')) | |
2802 def log(ui, repo, *pats, **opts): | 3188 def log(ui, repo, *pats, **opts): |
2803 """show revision history of entire repository or files | 3189 """show revision history of entire repository or files |
2804 | 3190 |
2805 Print the revision history of the specified files or the entire | 3191 Print the revision history of the specified files or the entire |
2806 project. | 3192 project. |
2896 break | 3282 break |
2897 if displayer.flush(ctx.rev()): | 3283 if displayer.flush(ctx.rev()): |
2898 count += 1 | 3284 count += 1 |
2899 displayer.close() | 3285 displayer.close() |
2900 | 3286 |
3287 @command('manifest', | |
3288 [('r', 'rev', '', _('revision to display'), _('REV'))], | |
3289 _('[-r REV]')) | |
2901 def manifest(ui, repo, node=None, rev=None): | 3290 def manifest(ui, repo, node=None, rev=None): |
2902 """output the current or given revision of the project manifest | 3291 """output the current or given revision of the project manifest |
2903 | 3292 |
2904 Print a list of version controlled files for the given revision. | 3293 Print a list of version controlled files for the given revision. |
2905 If no revision is given, the first parent of the working directory | 3294 If no revision is given, the first parent of the working directory |
2924 ui.write("%40s " % hex(ctx.manifest()[f])) | 3313 ui.write("%40s " % hex(ctx.manifest()[f])) |
2925 if ui.verbose: | 3314 if ui.verbose: |
2926 ui.write(decor[ctx.flags(f)]) | 3315 ui.write(decor[ctx.flags(f)]) |
2927 ui.write("%s\n" % f) | 3316 ui.write("%s\n" % f) |
2928 | 3317 |
3318 @command('^merge', | |
3319 [('f', 'force', None, _('force a merge with outstanding changes')), | |
3320 ('t', 'tool', '', _('specify merge tool')), | |
3321 ('r', 'rev', '', _('revision to merge'), _('REV')), | |
3322 ('P', 'preview', None, | |
3323 _('review revisions to merge (no merge is performed)'))], | |
3324 _('[-P] [-f] [[-r] REV]')) | |
2929 def merge(ui, repo, node=None, **opts): | 3325 def merge(ui, repo, node=None, **opts): |
2930 """merge working directory with another revision | 3326 """merge working directory with another revision |
2931 | 3327 |
2932 The current working directory is updated with all changes made in | 3328 The current working directory is updated with all changes made in |
2933 the requested revision since the last common predecessor revision. | 3329 the requested revision since the last common predecessor revision. |
3006 ui.setconfig('ui', 'forcemerge', opts.get('tool', '')) | 3402 ui.setconfig('ui', 'forcemerge', opts.get('tool', '')) |
3007 return hg.merge(repo, node, force=opts.get('force')) | 3403 return hg.merge(repo, node, force=opts.get('force')) |
3008 finally: | 3404 finally: |
3009 ui.setconfig('ui', 'forcemerge', '') | 3405 ui.setconfig('ui', 'forcemerge', '') |
3010 | 3406 |
3407 @command('outgoing|out', | |
3408 [('f', 'force', None, _('run even when the destination is unrelated')), | |
3409 ('r', 'rev', [], | |
3410 _('a changeset intended to be included in the destination'), _('REV')), | |
3411 ('n', 'newest-first', None, _('show newest record first')), | |
3412 ('B', 'bookmarks', False, _('compare bookmarks')), | |
3413 ('b', 'branch', [], _('a specific branch you would like to push'), | |
3414 _('BRANCH')), | |
3415 ] + logopts + remoteopts + subrepoopts, | |
3416 _('[-M] [-p] [-n] [-f] [-r REV]... [DEST]')) | |
3011 def outgoing(ui, repo, dest=None, **opts): | 3417 def outgoing(ui, repo, dest=None, **opts): |
3012 """show changesets not found in the destination | 3418 """show changesets not found in the destination |
3013 | 3419 |
3014 Show changesets not found in the specified destination repository | 3420 Show changesets not found in the specified destination repository |
3015 or the default push location. These are the changesets that would | 3421 or the default push location. These are the changesets that would |
3031 return bookmarks.diff(ui, other, repo) | 3437 return bookmarks.diff(ui, other, repo) |
3032 | 3438 |
3033 ret = hg.outgoing(ui, repo, dest, opts) | 3439 ret = hg.outgoing(ui, repo, dest, opts) |
3034 return ret | 3440 return ret |
3035 | 3441 |
3442 @command('parents', | |
3443 [('r', 'rev', '', _('show parents of the specified revision'), _('REV')), | |
3444 ] + templateopts, | |
3445 _('[-r REV] [FILE]')) | |
3036 def parents(ui, repo, file_=None, **opts): | 3446 def parents(ui, repo, file_=None, **opts): |
3037 """show the parents of the working directory or revision | 3447 """show the parents of the working directory or revision |
3038 | 3448 |
3039 Print the working directory's parent revisions. If a revision is | 3449 Print the working directory's parent revisions. If a revision is |
3040 given via -r/--rev, the parent of that revision will be printed. | 3450 given via -r/--rev, the parent of that revision will be printed. |
3071 for n in p: | 3481 for n in p: |
3072 if n != nullid: | 3482 if n != nullid: |
3073 displayer.show(repo[n]) | 3483 displayer.show(repo[n]) |
3074 displayer.close() | 3484 displayer.close() |
3075 | 3485 |
3486 @command('paths', [], _('[NAME]')) | |
3076 def paths(ui, repo, search=None): | 3487 def paths(ui, repo, search=None): |
3077 """show aliases for remote repositories | 3488 """show aliases for remote repositories |
3078 | 3489 |
3079 Show definition of symbolic path name NAME. If no name is given, | 3490 Show definition of symbolic path name NAME. If no name is given, |
3080 show definition of all available names. | 3491 show definition of all available names. |
3126 else: | 3537 else: |
3127 ui.status(_("(run 'hg heads' to see heads)\n")) | 3538 ui.status(_("(run 'hg heads' to see heads)\n")) |
3128 else: | 3539 else: |
3129 ui.status(_("(run 'hg update' to get a working copy)\n")) | 3540 ui.status(_("(run 'hg update' to get a working copy)\n")) |
3130 | 3541 |
3542 @command('^pull', | |
3543 [('u', 'update', None, | |
3544 _('update to new branch head if changesets were pulled')), | |
3545 ('f', 'force', None, _('run even when remote repository is unrelated')), | |
3546 ('r', 'rev', [], _('a remote changeset intended to be added'), _('REV')), | |
3547 ('B', 'bookmark', [], _("bookmark to pull"), _('BOOKMARK')), | |
3548 ('b', 'branch', [], _('a specific branch you would like to pull'), | |
3549 _('BRANCH')), | |
3550 ] + remoteopts, | |
3551 _('[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]')) | |
3131 def pull(ui, repo, source="default", **opts): | 3552 def pull(ui, repo, source="default", **opts): |
3132 """pull changes from the specified source | 3553 """pull changes from the specified source |
3133 | 3554 |
3134 Pull changes from a remote repository to a local one. | 3555 Pull changes from a remote repository to a local one. |
3135 | 3556 |
3189 repo._bookmarks[b] = repo[rb[b]].node() | 3610 repo._bookmarks[b] = repo[rb[b]].node() |
3190 bookmarks.write(repo) | 3611 bookmarks.write(repo) |
3191 | 3612 |
3192 return ret | 3613 return ret |
3193 | 3614 |
3615 @command('^push', | |
3616 [('f', 'force', None, _('force push')), | |
3617 ('r', 'rev', [], | |
3618 _('a changeset intended to be included in the destination'), | |
3619 _('REV')), | |
3620 ('B', 'bookmark', [], _("bookmark to push"), _('BOOKMARK')), | |
3621 ('b', 'branch', [], | |
3622 _('a specific branch you would like to push'), _('BRANCH')), | |
3623 ('', 'new-branch', False, _('allow pushing a new branch')), | |
3624 ] + remoteopts, | |
3625 _('[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]')) | |
3194 def push(ui, repo, dest=None, **opts): | 3626 def push(ui, repo, dest=None, **opts): |
3195 """push changes to the specified destination | 3627 """push changes to the specified destination |
3196 | 3628 |
3197 Push changesets from the local repository to the specified | 3629 Push changesets from the local repository to the specified |
3198 destination. | 3630 destination. |
3275 if not result: | 3707 if not result: |
3276 result = 2 | 3708 result = 2 |
3277 | 3709 |
3278 return result | 3710 return result |
3279 | 3711 |
3712 @command('recover', []) | |
3280 def recover(ui, repo): | 3713 def recover(ui, repo): |
3281 """roll back an interrupted transaction | 3714 """roll back an interrupted transaction |
3282 | 3715 |
3283 Recover from an interrupted commit or pull. | 3716 Recover from an interrupted commit or pull. |
3284 | 3717 |
3290 """ | 3723 """ |
3291 if repo.recover(): | 3724 if repo.recover(): |
3292 return hg.verify(repo) | 3725 return hg.verify(repo) |
3293 return 1 | 3726 return 1 |
3294 | 3727 |
3728 @command('^remove|rm', | |
3729 [('A', 'after', None, _('record delete for missing files')), | |
3730 ('f', 'force', None, | |
3731 _('remove (and delete) file even if added or modified')), | |
3732 ] + walkopts, | |
3733 _('[OPTION]... FILE...')) | |
3295 def remove(ui, repo, *pats, **opts): | 3734 def remove(ui, repo, *pats, **opts): |
3296 """remove the specified files on the next commit | 3735 """remove the specified files on the next commit |
3297 | 3736 |
3298 Schedule the indicated files for removal from the repository. | 3737 Schedule the indicated files for removal from the repository. |
3299 | 3738 |
3360 | 3799 |
3361 repo[None].forget(forget) | 3800 repo[None].forget(forget) |
3362 repo[None].remove(remove, unlink=not after) | 3801 repo[None].remove(remove, unlink=not after) |
3363 return ret | 3802 return ret |
3364 | 3803 |
3804 @command('rename|move|mv', | |
3805 [('A', 'after', None, _('record a rename that has already occurred')), | |
3806 ('f', 'force', None, _('forcibly copy over an existing managed file')), | |
3807 ] + walkopts + dryrunopts, | |
3808 _('[OPTION]... SOURCE... DEST')) | |
3365 def rename(ui, repo, *pats, **opts): | 3809 def rename(ui, repo, *pats, **opts): |
3366 """rename files; equivalent of copy + remove | 3810 """rename files; equivalent of copy + remove |
3367 | 3811 |
3368 Mark dest as copies of sources; mark sources for deletion. If dest | 3812 Mark dest as copies of sources; mark sources for deletion. If dest |
3369 is a directory, copies are put in that directory. If dest is a | 3813 is a directory, copies are put in that directory. If dest is a |
3382 try: | 3826 try: |
3383 return cmdutil.copy(ui, repo, pats, opts, rename=True) | 3827 return cmdutil.copy(ui, repo, pats, opts, rename=True) |
3384 finally: | 3828 finally: |
3385 wlock.release() | 3829 wlock.release() |
3386 | 3830 |
3831 @command('resolve', | |
3832 [('a', 'all', None, _('select all unresolved files')), | |
3833 ('l', 'list', None, _('list state of files needing merge')), | |
3834 ('m', 'mark', None, _('mark files as resolved')), | |
3835 ('u', 'unmark', None, _('mark files as unresolved')), | |
3836 ('t', 'tool', '', _('specify merge tool')), | |
3837 ('n', 'no-status', None, _('hide status prefix'))] | |
3838 + walkopts, | |
3839 _('[OPTION]... [FILE]...')) | |
3387 def resolve(ui, repo, *pats, **opts): | 3840 def resolve(ui, repo, *pats, **opts): |
3388 """redo merges or set/view the merge status of files | 3841 """redo merges or set/view the merge status of files |
3389 | 3842 |
3390 Merges with unresolved conflicts are often the result of | 3843 Merges with unresolved conflicts are often the result of |
3391 non-interactive merging using the ``internal:merge`` configuration | 3844 non-interactive merging using the ``internal:merge`` configuration |
3468 util.rename(a + ".resolve", a + ".orig") | 3921 util.rename(a + ".resolve", a + ".orig") |
3469 | 3922 |
3470 ms.commit() | 3923 ms.commit() |
3471 return ret | 3924 return ret |
3472 | 3925 |
3926 @command('revert', | |
3927 [('a', 'all', None, _('revert all changes when no arguments given')), | |
3928 ('d', 'date', '', _('tipmost revision matching date'), _('DATE')), | |
3929 ('r', 'rev', '', _('revert to the specified revision'), _('REV')), | |
3930 ('', 'no-backup', None, _('do not save backup copies of files')), | |
3931 ] + walkopts + dryrunopts, | |
3932 _('[OPTION]... [-r REV] [NAME]...')) | |
3473 def revert(ui, repo, *pats, **opts): | 3933 def revert(ui, repo, *pats, **opts): |
3474 """restore individual files or directories to an earlier state | 3934 """restore individual files or directories to an earlier state |
3475 | 3935 |
3476 .. note:: | 3936 .. note:: |
3477 This command is most likely not what you are looking for. | 3937 This command is most likely not what you are looking for. |
3696 normal(f) | 4156 normal(f) |
3697 | 4157 |
3698 finally: | 4158 finally: |
3699 wlock.release() | 4159 wlock.release() |
3700 | 4160 |
4161 @command('rollback', dryrunopts) | |
3701 def rollback(ui, repo, **opts): | 4162 def rollback(ui, repo, **opts): |
3702 """roll back the last transaction (dangerous) | 4163 """roll back the last transaction (dangerous) |
3703 | 4164 |
3704 This command should be used with care. There is only one level of | 4165 This command should be used with care. There is only one level of |
3705 rollback, and there is no way to undo a rollback. It will also | 4166 rollback, and there is no way to undo a rollback. It will also |
3727 | 4188 |
3728 Returns 0 on success, 1 if no rollback data is available. | 4189 Returns 0 on success, 1 if no rollback data is available. |
3729 """ | 4190 """ |
3730 return repo.rollback(opts.get('dry_run')) | 4191 return repo.rollback(opts.get('dry_run')) |
3731 | 4192 |
4193 @command('root', []) | |
3732 def root(ui, repo): | 4194 def root(ui, repo): |
3733 """print the root (top) of the current working directory | 4195 """print the root (top) of the current working directory |
3734 | 4196 |
3735 Print the root directory of the current repository. | 4197 Print the root directory of the current repository. |
3736 | 4198 |
3737 Returns 0 on success. | 4199 Returns 0 on success. |
3738 """ | 4200 """ |
3739 ui.write(repo.root + "\n") | 4201 ui.write(repo.root + "\n") |
3740 | 4202 |
4203 @command('^serve', | |
4204 [('A', 'accesslog', '', _('name of access log file to write to'), | |
4205 _('FILE')), | |
4206 ('d', 'daemon', None, _('run server in background')), | |
4207 ('', 'daemon-pipefds', '', _('used internally by daemon mode'), _('NUM')), | |
4208 ('E', 'errorlog', '', _('name of error log file to write to'), _('FILE')), | |
4209 # use string type, then we can check if something was passed | |
4210 ('p', 'port', '', _('port to listen on (default: 8000)'), _('PORT')), | |
4211 ('a', 'address', '', _('address to listen on (default: all interfaces)'), | |
4212 _('ADDR')), | |
4213 ('', 'prefix', '', _('prefix path to serve from (default: server root)'), | |
4214 _('PREFIX')), | |
4215 ('n', 'name', '', | |
4216 _('name to show in web pages (default: working directory)'), _('NAME')), | |
4217 ('', 'web-conf', '', | |
4218 _('name of the hgweb config file (see "hg help hgweb")'), _('FILE')), | |
4219 ('', 'webdir-conf', '', _('name of the hgweb config file (DEPRECATED)'), | |
4220 _('FILE')), | |
4221 ('', 'pid-file', '', _('name of file to write process ID to'), _('FILE')), | |
4222 ('', 'stdio', None, _('for remote clients')), | |
4223 ('t', 'templates', '', _('web templates to use'), _('TEMPLATE')), | |
4224 ('', 'style', '', _('template style to use'), _('STYLE')), | |
4225 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4')), | |
4226 ('', 'certificate', '', _('SSL certificate file'), _('FILE'))], | |
4227 _('[OPTION]...')) | |
3741 def serve(ui, repo, **opts): | 4228 def serve(ui, repo, **opts): |
3742 """start stand-alone webserver | 4229 """start stand-alone webserver |
3743 | 4230 |
3744 Start a local HTTP repository browser and pull server. You can use | 4231 Start a local HTTP repository browser and pull server. You can use |
3745 this for ad-hoc sharing and browsing of repositories. It is | 4232 this for ad-hoc sharing and browsing of repositories. It is |
3832 | 4319 |
3833 service = service() | 4320 service = service() |
3834 | 4321 |
3835 cmdutil.service(opts, initfn=service.init, runfn=service.run) | 4322 cmdutil.service(opts, initfn=service.init, runfn=service.run) |
3836 | 4323 |
4324 @command('^status|st', | |
4325 [('A', 'all', None, _('show status of all files')), | |
4326 ('m', 'modified', None, _('show only modified files')), | |
4327 ('a', 'added', None, _('show only added files')), | |
4328 ('r', 'removed', None, _('show only removed files')), | |
4329 ('d', 'deleted', None, _('show only deleted (but tracked) files')), | |
4330 ('c', 'clean', None, _('show only files without changes')), | |
4331 ('u', 'unknown', None, _('show only unknown (not tracked) files')), | |
4332 ('i', 'ignored', None, _('show only ignored files')), | |
4333 ('n', 'no-status', None, _('hide status prefix')), | |
4334 ('C', 'copies', None, _('show source of copied files')), | |
4335 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')), | |
4336 ('', 'rev', [], _('show difference from revision'), _('REV')), | |
4337 ('', 'change', '', _('list the changed files of a revision'), _('REV')), | |
4338 ] + walkopts + subrepoopts, | |
4339 _('[OPTION]... [FILE]...')) | |
3837 def status(ui, repo, *pats, **opts): | 4340 def status(ui, repo, *pats, **opts): |
3838 """show changed files in the working directory | 4341 """show changed files in the working directory |
3839 | 4342 |
3840 Show status of files in the repository. If names are given, only | 4343 Show status of files in the repository. If names are given, only |
3841 files that match are shown. Files that are clean or ignored or | 4344 files that match are shown. Files that are clean or ignored or |
3924 label='status.' + state) | 4427 label='status.' + state) |
3925 if f in copy: | 4428 if f in copy: |
3926 ui.write(' %s%s' % (repo.pathto(copy[f], cwd), end), | 4429 ui.write(' %s%s' % (repo.pathto(copy[f], cwd), end), |
3927 label='status.copied') | 4430 label='status.copied') |
3928 | 4431 |
4432 @command('^summary|sum', | |
4433 [('', 'remote', None, _('check for push and pull'))], '[--remote]') | |
3929 def summary(ui, repo, **opts): | 4434 def summary(ui, repo, **opts): |
3930 """summarize working directory state | 4435 """summarize working directory state |
3931 | 4436 |
3932 This generates a brief summary of the working directory state, | 4437 This generates a brief summary of the working directory state, |
3933 including parents, branch, commit status, and available updates. | 4438 including parents, branch, commit status, and available updates. |
4086 if t: | 4591 if t: |
4087 ui.write(_('remote: %s\n') % (', '.join(t))) | 4592 ui.write(_('remote: %s\n') % (', '.join(t))) |
4088 else: | 4593 else: |
4089 ui.status(_('remote: (synced)\n')) | 4594 ui.status(_('remote: (synced)\n')) |
4090 | 4595 |
4596 @command('tag', | |
4597 [('f', 'force', None, _('force tag')), | |
4598 ('l', 'local', None, _('make the tag local')), | |
4599 ('r', 'rev', '', _('revision to tag'), _('REV')), | |
4600 ('', 'remove', None, _('remove a tag')), | |
4601 # -l/--local is already there, commitopts cannot be used | |
4602 ('e', 'edit', None, _('edit commit message')), | |
4603 ('m', 'message', '', _('use <text> as commit message'), _('TEXT')), | |
4604 ] + commitopts2, | |
4605 _('[-f] [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME...')) | |
4091 def tag(ui, repo, name1, *names, **opts): | 4606 def tag(ui, repo, name1, *names, **opts): |
4092 """add one or more tags for the current or given revision | 4607 """add one or more tags for the current or given revision |
4093 | 4608 |
4094 Name a particular revision using <name>. | 4609 Name a particular revision using <name>. |
4095 | 4610 |
4175 if opts.get('edit'): | 4690 if opts.get('edit'): |
4176 message = ui.edit(message, ui.username()) | 4691 message = ui.edit(message, ui.username()) |
4177 | 4692 |
4178 repo.tag(names, r, message, opts.get('local'), opts.get('user'), date) | 4693 repo.tag(names, r, message, opts.get('local'), opts.get('user'), date) |
4179 | 4694 |
4695 @command('tags', [], '') | |
4180 def tags(ui, repo): | 4696 def tags(ui, repo): |
4181 """list repository tags | 4697 """list repository tags |
4182 | 4698 |
4183 This lists both regular and local tags. When the -v/--verbose | 4699 This lists both regular and local tags. When the -v/--verbose |
4184 switch is used, a third column "local" is printed for local tags. | 4700 switch is used, a third column "local" is printed for local tags. |
4203 tagtype = " local" | 4719 tagtype = " local" |
4204 else: | 4720 else: |
4205 tagtype = "" | 4721 tagtype = "" |
4206 ui.write("%s%s %s%s\n" % (t, spaces, r, tagtype)) | 4722 ui.write("%s%s %s%s\n" % (t, spaces, r, tagtype)) |
4207 | 4723 |
4724 @command('tip', | |
4725 [('p', 'patch', None, _('show patch')), | |
4726 ('g', 'git', None, _('use git extended diff format')), | |
4727 ] + templateopts, | |
4728 _('[-p] [-g]')) | |
4208 def tip(ui, repo, **opts): | 4729 def tip(ui, repo, **opts): |
4209 """show the tip revision | 4730 """show the tip revision |
4210 | 4731 |
4211 The tip revision (usually just called the tip) is the changeset | 4732 The tip revision (usually just called the tip) is the changeset |
4212 most recently added to the repository (and therefore the most | 4733 most recently added to the repository (and therefore the most |
4221 """ | 4742 """ |
4222 displayer = cmdutil.show_changeset(ui, repo, opts) | 4743 displayer = cmdutil.show_changeset(ui, repo, opts) |
4223 displayer.show(repo[len(repo) - 1]) | 4744 displayer.show(repo[len(repo) - 1]) |
4224 displayer.close() | 4745 displayer.close() |
4225 | 4746 |
4747 @command('unbundle', | |
4748 [('u', 'update', None, | |
4749 _('update to new branch head if changesets were unbundled'))], | |
4750 _('[-u] FILE...')) | |
4226 def unbundle(ui, repo, fname1, *fnames, **opts): | 4751 def unbundle(ui, repo, fname1, *fnames, **opts): |
4227 """apply one or more changegroup files | 4752 """apply one or more changegroup files |
4228 | 4753 |
4229 Apply one or more compressed changegroup files generated by the | 4754 Apply one or more compressed changegroup files generated by the |
4230 bundle command. | 4755 bundle command. |
4244 bookmarks.updatecurrentbookmark(repo, wc.node(), wc.branch()) | 4769 bookmarks.updatecurrentbookmark(repo, wc.node(), wc.branch()) |
4245 finally: | 4770 finally: |
4246 lock.release() | 4771 lock.release() |
4247 return postincoming(ui, repo, modheads, opts.get('update'), None) | 4772 return postincoming(ui, repo, modheads, opts.get('update'), None) |
4248 | 4773 |
4774 @command('^update|up|checkout|co', | |
4775 [('C', 'clean', None, _('discard uncommitted changes (no backup)')), | |
4776 ('c', 'check', None, | |
4777 _('update across branches if no uncommitted changes')), | |
4778 ('d', 'date', '', _('tipmost revision matching date'), _('DATE')), | |
4779 ('r', 'rev', '', _('revision'), _('REV'))], | |
4780 _('[-c] [-C] [-d DATE] [[-r] REV]')) | |
4249 def update(ui, repo, node=None, rev=None, clean=False, date=None, check=False): | 4781 def update(ui, repo, node=None, rev=None, clean=False, date=None, check=False): |
4250 """update working directory (or switch revisions) | 4782 """update working directory (or switch revisions) |
4251 | 4783 |
4252 Update the repository's working directory to the specified | 4784 Update the repository's working directory to the specified |
4253 changeset. If no changeset is specified, update to the tip of the | 4785 changeset. If no changeset is specified, update to the tip of the |
4319 if brev in repo._bookmarks: | 4851 if brev in repo._bookmarks: |
4320 bookmarks.setcurrent(repo, brev) | 4852 bookmarks.setcurrent(repo, brev) |
4321 | 4853 |
4322 return ret | 4854 return ret |
4323 | 4855 |
4856 @command('verify', []) | |
4324 def verify(ui, repo): | 4857 def verify(ui, repo): |
4325 """verify the integrity of the repository | 4858 """verify the integrity of the repository |
4326 | 4859 |
4327 Verify the integrity of the current repository. | 4860 Verify the integrity of the current repository. |
4328 | 4861 |
4333 | 4866 |
4334 Returns 0 on success, 1 if errors are encountered. | 4867 Returns 0 on success, 1 if errors are encountered. |
4335 """ | 4868 """ |
4336 return hg.verify(repo) | 4869 return hg.verify(repo) |
4337 | 4870 |
4871 @command('version', []) | |
4338 def version_(ui): | 4872 def version_(ui): |
4339 """output version and copyright information""" | 4873 """output version and copyright information""" |
4340 ui.write(_("Mercurial Distributed SCM (version %s)\n") | 4874 ui.write(_("Mercurial Distributed SCM (version %s)\n") |
4341 % util.version()) | 4875 % util.version()) |
4342 ui.status(_( | 4876 ui.status(_( |
4345 "This is free software; see the source for copying conditions. " | 4879 "This is free software; see the source for copying conditions. " |
4346 "There is NO\nwarranty; " | 4880 "There is NO\nwarranty; " |
4347 "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" | 4881 "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" |
4348 )) | 4882 )) |
4349 | 4883 |
4350 # Command options and aliases are listed here, alphabetically | |
4351 | |
4352 globalopts = [ | |
4353 ('R', 'repository', '', | |
4354 _('repository root directory or name of overlay bundle file'), | |
4355 _('REPO')), | |
4356 ('', 'cwd', '', | |
4357 _('change working directory'), _('DIR')), | |
4358 ('y', 'noninteractive', None, | |
4359 _('do not prompt, assume \'yes\' for any required answers')), | |
4360 ('q', 'quiet', None, _('suppress output')), | |
4361 ('v', 'verbose', None, _('enable additional output')), | |
4362 ('', 'config', [], | |
4363 _('set/override config option (use \'section.name=value\')'), | |
4364 _('CONFIG')), | |
4365 ('', 'debug', None, _('enable debugging output')), | |
4366 ('', 'debugger', None, _('start debugger')), | |
4367 ('', 'encoding', encoding.encoding, _('set the charset encoding'), | |
4368 _('ENCODE')), | |
4369 ('', 'encodingmode', encoding.encodingmode, | |
4370 _('set the charset encoding mode'), _('MODE')), | |
4371 ('', 'traceback', None, _('always print a traceback on exception')), | |
4372 ('', 'time', None, _('time how long the command takes')), | |
4373 ('', 'profile', None, _('print command execution profile')), | |
4374 ('', 'version', None, _('output version information and exit')), | |
4375 ('h', 'help', None, _('display help and exit')), | |
4376 ] | |
4377 | |
4378 dryrunopts = [('n', 'dry-run', None, | |
4379 _('do not perform actions, just print output'))] | |
4380 | |
4381 remoteopts = [ | |
4382 ('e', 'ssh', '', | |
4383 _('specify ssh command to use'), _('CMD')), | |
4384 ('', 'remotecmd', '', | |
4385 _('specify hg command to run on the remote side'), _('CMD')), | |
4386 ('', 'insecure', None, | |
4387 _('do not verify server certificate (ignoring web.cacerts config)')), | |
4388 ] | |
4389 | |
4390 walkopts = [ | |
4391 ('I', 'include', [], | |
4392 _('include names matching the given patterns'), _('PATTERN')), | |
4393 ('X', 'exclude', [], | |
4394 _('exclude names matching the given patterns'), _('PATTERN')), | |
4395 ] | |
4396 | |
4397 commitopts = [ | |
4398 ('m', 'message', '', | |
4399 _('use text as commit message'), _('TEXT')), | |
4400 ('l', 'logfile', '', | |
4401 _('read commit message from file'), _('FILE')), | |
4402 ] | |
4403 | |
4404 commitopts2 = [ | |
4405 ('d', 'date', '', | |
4406 _('record the specified date as commit date'), _('DATE')), | |
4407 ('u', 'user', '', | |
4408 _('record the specified user as committer'), _('USER')), | |
4409 ] | |
4410 | |
4411 templateopts = [ | |
4412 ('', 'style', '', | |
4413 _('display using template map file'), _('STYLE')), | |
4414 ('', 'template', '', | |
4415 _('display with template'), _('TEMPLATE')), | |
4416 ] | |
4417 | |
4418 logopts = [ | |
4419 ('p', 'patch', None, _('show patch')), | |
4420 ('g', 'git', None, _('use git extended diff format')), | |
4421 ('l', 'limit', '', | |
4422 _('limit number of changes displayed'), _('NUM')), | |
4423 ('M', 'no-merges', None, _('do not show merges')), | |
4424 ('', 'stat', None, _('output diffstat-style summary of changes')), | |
4425 ] + templateopts | |
4426 | |
4427 diffopts = [ | |
4428 ('a', 'text', None, _('treat all files as text')), | |
4429 ('g', 'git', None, _('use git extended diff format')), | |
4430 ('', 'nodates', None, _('omit dates from diff headers')) | |
4431 ] | |
4432 | |
4433 diffopts2 = [ | |
4434 ('p', 'show-function', None, _('show which function each change is in')), | |
4435 ('', 'reverse', None, _('produce a diff that undoes the changes')), | |
4436 ('w', 'ignore-all-space', None, | |
4437 _('ignore white space when comparing lines')), | |
4438 ('b', 'ignore-space-change', None, | |
4439 _('ignore changes in the amount of white space')), | |
4440 ('B', 'ignore-blank-lines', None, | |
4441 _('ignore changes whose lines are all blank')), | |
4442 ('U', 'unified', '', | |
4443 _('number of lines of context to show'), _('NUM')), | |
4444 ('', 'stat', None, _('output diffstat-style summary of changes')), | |
4445 ] | |
4446 | |
4447 similarityopts = [ | |
4448 ('s', 'similarity', '', | |
4449 _('guess renamed files by similarity (0<=s<=100)'), _('SIMILARITY')) | |
4450 ] | |
4451 | |
4452 subrepoopts = [ | |
4453 ('S', 'subrepos', None, | |
4454 _('recurse into subrepositories')) | |
4455 ] | |
4456 | |
4457 table = { | |
4458 "^add": (add, walkopts + subrepoopts + dryrunopts, | |
4459 _('[OPTION]... [FILE]...')), | |
4460 "addremove": | |
4461 (addremove, similarityopts + walkopts + dryrunopts, | |
4462 _('[OPTION]... [FILE]...')), | |
4463 "^annotate|blame": | |
4464 (annotate, | |
4465 [('r', 'rev', '', | |
4466 _('annotate the specified revision'), _('REV')), | |
4467 ('', 'follow', None, | |
4468 _('follow copies/renames and list the filename (DEPRECATED)')), | |
4469 ('', 'no-follow', None, _("don't follow copies and renames")), | |
4470 ('a', 'text', None, _('treat all files as text')), | |
4471 ('u', 'user', None, _('list the author (long with -v)')), | |
4472 ('f', 'file', None, _('list the filename')), | |
4473 ('d', 'date', None, _('list the date (short with -q)')), | |
4474 ('n', 'number', None, _('list the revision number (default)')), | |
4475 ('c', 'changeset', None, _('list the changeset')), | |
4476 ('l', 'line-number', None, | |
4477 _('show line number at the first appearance')) | |
4478 ] + walkopts, | |
4479 _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...')), | |
4480 "archive": | |
4481 (archive, | |
4482 [('', 'no-decode', None, _('do not pass files through decoders')), | |
4483 ('p', 'prefix', '', | |
4484 _('directory prefix for files in archive'), _('PREFIX')), | |
4485 ('r', 'rev', '', | |
4486 _('revision to distribute'), _('REV')), | |
4487 ('t', 'type', '', | |
4488 _('type of distribution to create'), _('TYPE')), | |
4489 ] + subrepoopts + walkopts, | |
4490 _('[OPTION]... DEST')), | |
4491 "backout": | |
4492 (backout, | |
4493 [('', 'merge', None, | |
4494 _('merge with old dirstate parent after backout')), | |
4495 ('', 'parent', '', | |
4496 _('parent to choose when backing out merge'), _('REV')), | |
4497 ('t', 'tool', '', | |
4498 _('specify merge tool')), | |
4499 ('r', 'rev', '', | |
4500 _('revision to backout'), _('REV')), | |
4501 ] + walkopts + commitopts + commitopts2, | |
4502 _('[OPTION]... [-r] REV')), | |
4503 "bisect": | |
4504 (bisect, | |
4505 [('r', 'reset', False, _('reset bisect state')), | |
4506 ('g', 'good', False, _('mark changeset good')), | |
4507 ('b', 'bad', False, _('mark changeset bad')), | |
4508 ('s', 'skip', False, _('skip testing changeset')), | |
4509 ('e', 'extend', False, _('extend the bisect range')), | |
4510 ('c', 'command', '', | |
4511 _('use command to check changeset state'), _('CMD')), | |
4512 ('U', 'noupdate', False, _('do not update to target'))], | |
4513 _("[-gbsr] [-U] [-c CMD] [REV]")), | |
4514 "bookmarks": | |
4515 (bookmark, | |
4516 [('f', 'force', False, _('force')), | |
4517 ('r', 'rev', '', _('revision'), _('REV')), | |
4518 ('d', 'delete', False, _('delete a given bookmark')), | |
4519 ('m', 'rename', '', _('rename a given bookmark'), _('NAME')), | |
4520 ('i', 'inactive', False, _('do not mark a new bookmark active'))], | |
4521 _('hg bookmarks [-f] [-d] [-i] [-m NAME] [-r REV] [NAME]')), | |
4522 "branch": | |
4523 (branch, | |
4524 [('f', 'force', None, | |
4525 _('set branch name even if it shadows an existing branch')), | |
4526 ('C', 'clean', None, _('reset branch name to parent branch name'))], | |
4527 _('[-fC] [NAME]')), | |
4528 "branches": | |
4529 (branches, | |
4530 [('a', 'active', False, | |
4531 _('show only branches that have unmerged heads')), | |
4532 ('c', 'closed', False, | |
4533 _('show normal and closed branches'))], | |
4534 _('[-ac]')), | |
4535 "bundle": | |
4536 (bundle, | |
4537 [('f', 'force', None, | |
4538 _('run even when the destination is unrelated')), | |
4539 ('r', 'rev', [], | |
4540 _('a changeset intended to be added to the destination'), | |
4541 _('REV')), | |
4542 ('b', 'branch', [], | |
4543 _('a specific branch you would like to bundle'), | |
4544 _('BRANCH')), | |
4545 ('', 'base', [], | |
4546 _('a base changeset assumed to be available at the destination'), | |
4547 _('REV')), | |
4548 ('a', 'all', None, _('bundle all changesets in the repository')), | |
4549 ('t', 'type', 'bzip2', | |
4550 _('bundle compression type to use'), _('TYPE')), | |
4551 ] + remoteopts, | |
4552 _('[-f] [-t TYPE] [-a] [-r REV]... [--base REV]... FILE [DEST]')), | |
4553 "cat": | |
4554 (cat, | |
4555 [('o', 'output', '', | |
4556 _('print output to file with formatted name'), _('FORMAT')), | |
4557 ('r', 'rev', '', | |
4558 _('print the given revision'), _('REV')), | |
4559 ('', 'decode', None, _('apply any matching decode filter')), | |
4560 ] + walkopts, | |
4561 _('[OPTION]... FILE...')), | |
4562 "^clone": | |
4563 (clone, | |
4564 [('U', 'noupdate', None, | |
4565 _('the clone will include an empty working copy (only a repository)')), | |
4566 ('u', 'updaterev', '', | |
4567 _('revision, tag or branch to check out'), _('REV')), | |
4568 ('r', 'rev', [], | |
4569 _('include the specified changeset'), _('REV')), | |
4570 ('b', 'branch', [], | |
4571 _('clone only the specified branch'), _('BRANCH')), | |
4572 ('', 'pull', None, _('use pull protocol to copy metadata')), | |
4573 ('', 'uncompressed', None, | |
4574 _('use uncompressed transfer (fast over LAN)')), | |
4575 ] + remoteopts, | |
4576 _('[OPTION]... SOURCE [DEST]')), | |
4577 "^commit|ci": | |
4578 (commit, | |
4579 [('A', 'addremove', None, | |
4580 _('mark new/missing files as added/removed before committing')), | |
4581 ('', 'close-branch', None, | |
4582 _('mark a branch as closed, hiding it from the branch list')), | |
4583 ] + walkopts + commitopts + commitopts2, | |
4584 _('[OPTION]... [FILE]...')), | |
4585 "copy|cp": | |
4586 (copy, | |
4587 [('A', 'after', None, _('record a copy that has already occurred')), | |
4588 ('f', 'force', None, | |
4589 _('forcibly copy over an existing managed file')), | |
4590 ] + walkopts + dryrunopts, | |
4591 _('[OPTION]... [SOURCE]... DEST')), | |
4592 "debugancestor": (debugancestor, [], _('[INDEX] REV1 REV2')), | |
4593 "debugbuilddag": | |
4594 (debugbuilddag, | |
4595 [('m', 'mergeable-file', None, _('add single file mergeable changes')), | |
4596 ('o', 'overwritten-file', None, _('add single file all revs overwrite')), | |
4597 ('n', 'new-file', None, _('add new file at each rev')), | |
4598 ], | |
4599 _('[OPTION]... [TEXT]')), | |
4600 "debugbundle": | |
4601 (debugbundle, | |
4602 [('a', 'all', None, _('show all details')), | |
4603 ], | |
4604 _('FILE')), | |
4605 "debugcheckstate": (debugcheckstate, [], ''), | |
4606 "debugcommands": (debugcommands, [], _('[COMMAND]')), | |
4607 "debugcomplete": | |
4608 (debugcomplete, | |
4609 [('o', 'options', None, _('show the command options'))], | |
4610 _('[-o] CMD')), | |
4611 "debugdag": | |
4612 (debugdag, | |
4613 [('t', 'tags', None, _('use tags as labels')), | |
4614 ('b', 'branches', None, _('annotate with branch names')), | |
4615 ('', 'dots', None, _('use dots for runs')), | |
4616 ('s', 'spaces', None, _('separate elements by spaces')), | |
4617 ], | |
4618 _('[OPTION]... [FILE [REV]...]')), | |
4619 "debugdate": | |
4620 (debugdate, | |
4621 [('e', 'extended', None, _('try extended date formats'))], | |
4622 _('[-e] DATE [RANGE]')), | |
4623 "debugdata": (debugdata, [], _('FILE REV')), | |
4624 "debugdiscovery": (debugdiscovery, | |
4625 [('', 'old', None, | |
4626 _('use old-style discovery')), | |
4627 ('', 'nonheads', None, | |
4628 _('use old-style discovery with non-heads included')), | |
4629 ] + remoteopts, | |
4630 _('[-l REV] [-r REV] [-b BRANCH]...' | |
4631 ' [OTHER]')), | |
4632 "debugfsinfo": (debugfsinfo, [], _('[PATH]')), | |
4633 "debuggetbundle": | |
4634 (debuggetbundle, | |
4635 [('H', 'head', [], _('id of head node'), _('ID')), | |
4636 ('C', 'common', [], _('id of common node'), _('ID')), | |
4637 ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE')), | |
4638 ], | |
4639 _('REPO FILE [-H|-C ID]...')), | |
4640 "debugignore": (debugignore, [], ''), | |
4641 "debugindex": (debugindex, | |
4642 [('f', 'format', 0, _('revlog format'), _('FORMAT'))], | |
4643 _('FILE')), | |
4644 "debugindexdot": (debugindexdot, [], _('FILE')), | |
4645 "debuginstall": (debuginstall, [], ''), | |
4646 "debugknown": (debugknown, [], _('REPO ID...')), | |
4647 "debugpushkey": (debugpushkey, [], _('REPO NAMESPACE [KEY OLD NEW]')), | |
4648 "debugrebuildstate": | |
4649 (debugrebuildstate, | |
4650 [('r', 'rev', '', | |
4651 _('revision to rebuild to'), _('REV'))], | |
4652 _('[-r REV] [REV]')), | |
4653 "debugrename": | |
4654 (debugrename, | |
4655 [('r', 'rev', '', | |
4656 _('revision to debug'), _('REV'))], | |
4657 _('[-r REV] FILE')), | |
4658 "debugrevspec": | |
4659 (debugrevspec, [], ('REVSPEC')), | |
4660 "debugsetparents": | |
4661 (debugsetparents, [], _('REV1 [REV2]')), | |
4662 "debugstate": | |
4663 (debugstate, | |
4664 [('', 'nodates', None, _('do not display the saved mtime')), | |
4665 ('', 'datesort', None, _('sort by saved mtime'))], | |
4666 _('[OPTION]...')), | |
4667 "debugsub": | |
4668 (debugsub, | |
4669 [('r', 'rev', '', | |
4670 _('revision to check'), _('REV'))], | |
4671 _('[-r REV] [REV]')), | |
4672 "debugwalk": (debugwalk, walkopts, _('[OPTION]... [FILE]...')), | |
4673 "debugwireargs": | |
4674 (debugwireargs, | |
4675 [('', 'three', '', 'three'), | |
4676 ('', 'four', '', 'four'), | |
4677 ('', 'five', '', 'five'), | |
4678 ] + remoteopts, | |
4679 _('REPO [OPTIONS]... [ONE [TWO]]')), | |
4680 "^diff": | |
4681 (diff, | |
4682 [('r', 'rev', [], | |
4683 _('revision'), _('REV')), | |
4684 ('c', 'change', '', | |
4685 _('change made by revision'), _('REV')) | |
4686 ] + diffopts + diffopts2 + walkopts + subrepoopts, | |
4687 _('[OPTION]... ([-c REV] | [-r REV1 [-r REV2]]) [FILE]...')), | |
4688 "^export": | |
4689 (export, | |
4690 [('o', 'output', '', | |
4691 _('print output to file with formatted name'), _('FORMAT')), | |
4692 ('', 'switch-parent', None, _('diff against the second parent')), | |
4693 ('r', 'rev', [], | |
4694 _('revisions to export'), _('REV')), | |
4695 ] + diffopts, | |
4696 _('[OPTION]... [-o OUTFILESPEC] REV...')), | |
4697 "^forget": | |
4698 (forget, | |
4699 [] + walkopts, | |
4700 _('[OPTION]... FILE...')), | |
4701 "grep": | |
4702 (grep, | |
4703 [('0', 'print0', None, _('end fields with NUL')), | |
4704 ('', 'all', None, _('print all revisions that match')), | |
4705 ('a', 'text', None, _('treat all files as text')), | |
4706 ('f', 'follow', None, | |
4707 _('follow changeset history,' | |
4708 ' or file history across copies and renames')), | |
4709 ('i', 'ignore-case', None, _('ignore case when matching')), | |
4710 ('l', 'files-with-matches', None, | |
4711 _('print only filenames and revisions that match')), | |
4712 ('n', 'line-number', None, _('print matching line numbers')), | |
4713 ('r', 'rev', [], | |
4714 _('only search files changed within revision range'), _('REV')), | |
4715 ('u', 'user', None, _('list the author (long with -v)')), | |
4716 ('d', 'date', None, _('list the date (short with -q)')), | |
4717 ] + walkopts, | |
4718 _('[OPTION]... PATTERN [FILE]...')), | |
4719 "heads": | |
4720 (heads, | |
4721 [('r', 'rev', '', | |
4722 _('show only heads which are descendants of STARTREV'), | |
4723 _('STARTREV')), | |
4724 ('t', 'topo', False, _('show topological heads only')), | |
4725 ('a', 'active', False, | |
4726 _('show active branchheads only (DEPRECATED)')), | |
4727 ('c', 'closed', False, | |
4728 _('show normal and closed branch heads')), | |
4729 ] + templateopts, | |
4730 _('[-ac] [-r STARTREV] [REV]...')), | |
4731 "help": (help_, | |
4732 [('e', 'extension', None, _('show only help for extensions')), | |
4733 ('c', 'command', None, _('show only help for commands'))], | |
4734 _('[-ec] [TOPIC]')), | |
4735 "identify|id": | |
4736 (identify, | |
4737 [('r', 'rev', '', | |
4738 _('identify the specified revision'), _('REV')), | |
4739 ('n', 'num', None, _('show local revision number')), | |
4740 ('i', 'id', None, _('show global revision id')), | |
4741 ('b', 'branch', None, _('show branch')), | |
4742 ('t', 'tags', None, _('show tags')), | |
4743 ('B', 'bookmarks', None, _('show bookmarks'))], | |
4744 _('[-nibtB] [-r REV] [SOURCE]')), | |
4745 "import|patch": | |
4746 (import_, | |
4747 [('p', 'strip', 1, | |
4748 _('directory strip option for patch. This has the same ' | |
4749 'meaning as the corresponding patch option'), | |
4750 _('NUM')), | |
4751 ('b', 'base', '', | |
4752 _('base path'), _('PATH')), | |
4753 ('f', 'force', None, | |
4754 _('skip check for outstanding uncommitted changes')), | |
4755 ('', 'no-commit', None, | |
4756 _("don't commit, just update the working directory")), | |
4757 ('', 'exact', None, | |
4758 _('apply patch to the nodes from which it was generated')), | |
4759 ('', 'import-branch', None, | |
4760 _('use any branch information in patch (implied by --exact)'))] + | |
4761 commitopts + commitopts2 + similarityopts, | |
4762 _('[OPTION]... PATCH...')), | |
4763 "incoming|in": | |
4764 (incoming, | |
4765 [('f', 'force', None, | |
4766 _('run even if remote repository is unrelated')), | |
4767 ('n', 'newest-first', None, _('show newest record first')), | |
4768 ('', 'bundle', '', | |
4769 _('file to store the bundles into'), _('FILE')), | |
4770 ('r', 'rev', [], | |
4771 _('a remote changeset intended to be added'), _('REV')), | |
4772 ('B', 'bookmarks', False, _("compare bookmarks")), | |
4773 ('b', 'branch', [], | |
4774 _('a specific branch you would like to pull'), _('BRANCH')), | |
4775 ] + logopts + remoteopts + subrepoopts, | |
4776 _('[-p] [-n] [-M] [-f] [-r REV]...' | |
4777 ' [--bundle FILENAME] [SOURCE]')), | |
4778 "^init": | |
4779 (init, | |
4780 remoteopts, | |
4781 _('[-e CMD] [--remotecmd CMD] [DEST]')), | |
4782 "locate": | |
4783 (locate, | |
4784 [('r', 'rev', '', | |
4785 _('search the repository as it is in REV'), _('REV')), | |
4786 ('0', 'print0', None, | |
4787 _('end filenames with NUL, for use with xargs')), | |
4788 ('f', 'fullpath', None, | |
4789 _('print complete paths from the filesystem root')), | |
4790 ] + walkopts, | |
4791 _('[OPTION]... [PATTERN]...')), | |
4792 "^log|history": | |
4793 (log, | |
4794 [('f', 'follow', None, | |
4795 _('follow changeset history,' | |
4796 ' or file history across copies and renames')), | |
4797 ('', 'follow-first', None, | |
4798 _('only follow the first parent of merge changesets')), | |
4799 ('d', 'date', '', | |
4800 _('show revisions matching date spec'), _('DATE')), | |
4801 ('C', 'copies', None, _('show copied files')), | |
4802 ('k', 'keyword', [], | |
4803 _('do case-insensitive search for a given text'), _('TEXT')), | |
4804 ('r', 'rev', [], | |
4805 _('show the specified revision or range'), _('REV')), | |
4806 ('', 'removed', None, _('include revisions where files were removed')), | |
4807 ('m', 'only-merges', None, _('show only merges')), | |
4808 ('u', 'user', [], | |
4809 _('revisions committed by user'), _('USER')), | |
4810 ('', 'only-branch', [], | |
4811 _('show only changesets within the given named branch (DEPRECATED)'), | |
4812 _('BRANCH')), | |
4813 ('b', 'branch', [], | |
4814 _('show changesets within the given named branch'), _('BRANCH')), | |
4815 ('P', 'prune', [], | |
4816 _('do not display revision or any of its ancestors'), _('REV')), | |
4817 ] + logopts + walkopts, | |
4818 _('[OPTION]... [FILE]')), | |
4819 "manifest": | |
4820 (manifest, | |
4821 [('r', 'rev', '', | |
4822 _('revision to display'), _('REV'))], | |
4823 _('[-r REV]')), | |
4824 "^merge": | |
4825 (merge, | |
4826 [('f', 'force', None, _('force a merge with outstanding changes')), | |
4827 ('t', 'tool', '', _('specify merge tool')), | |
4828 ('r', 'rev', '', | |
4829 _('revision to merge'), _('REV')), | |
4830 ('P', 'preview', None, | |
4831 _('review revisions to merge (no merge is performed)'))], | |
4832 _('[-P] [-f] [[-r] REV]')), | |
4833 "outgoing|out": | |
4834 (outgoing, | |
4835 [('f', 'force', None, | |
4836 _('run even when the destination is unrelated')), | |
4837 ('r', 'rev', [], | |
4838 _('a changeset intended to be included in the destination'), | |
4839 _('REV')), | |
4840 ('n', 'newest-first', None, _('show newest record first')), | |
4841 ('B', 'bookmarks', False, _("compare bookmarks")), | |
4842 ('b', 'branch', [], | |
4843 _('a specific branch you would like to push'), _('BRANCH')), | |
4844 ] + logopts + remoteopts + subrepoopts, | |
4845 _('[-M] [-p] [-n] [-f] [-r REV]... [DEST]')), | |
4846 "parents": | |
4847 (parents, | |
4848 [('r', 'rev', '', | |
4849 _('show parents of the specified revision'), _('REV')), | |
4850 ] + templateopts, | |
4851 _('[-r REV] [FILE]')), | |
4852 "paths": (paths, [], _('[NAME]')), | |
4853 "^pull": | |
4854 (pull, | |
4855 [('u', 'update', None, | |
4856 _('update to new branch head if changesets were pulled')), | |
4857 ('f', 'force', None, | |
4858 _('run even when remote repository is unrelated')), | |
4859 ('r', 'rev', [], | |
4860 _('a remote changeset intended to be added'), _('REV')), | |
4861 ('B', 'bookmark', [], _("bookmark to pull"), _('BOOKMARK')), | |
4862 ('b', 'branch', [], | |
4863 _('a specific branch you would like to pull'), _('BRANCH')), | |
4864 ] + remoteopts, | |
4865 _('[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]')), | |
4866 "^push": | |
4867 (push, | |
4868 [('f', 'force', None, _('force push')), | |
4869 ('r', 'rev', [], | |
4870 _('a changeset intended to be included in the destination'), | |
4871 _('REV')), | |
4872 ('B', 'bookmark', [], _("bookmark to push"), _('BOOKMARK')), | |
4873 ('b', 'branch', [], | |
4874 _('a specific branch you would like to push'), _('BRANCH')), | |
4875 ('', 'new-branch', False, _('allow pushing a new branch')), | |
4876 ] + remoteopts, | |
4877 _('[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]')), | |
4878 "recover": (recover, []), | |
4879 "^remove|rm": | |
4880 (remove, | |
4881 [('A', 'after', None, _('record delete for missing files')), | |
4882 ('f', 'force', None, | |
4883 _('remove (and delete) file even if added or modified')), | |
4884 ] + walkopts, | |
4885 _('[OPTION]... FILE...')), | |
4886 "rename|move|mv": | |
4887 (rename, | |
4888 [('A', 'after', None, _('record a rename that has already occurred')), | |
4889 ('f', 'force', None, | |
4890 _('forcibly copy over an existing managed file')), | |
4891 ] + walkopts + dryrunopts, | |
4892 _('[OPTION]... SOURCE... DEST')), | |
4893 "resolve": | |
4894 (resolve, | |
4895 [('a', 'all', None, _('select all unresolved files')), | |
4896 ('l', 'list', None, _('list state of files needing merge')), | |
4897 ('m', 'mark', None, _('mark files as resolved')), | |
4898 ('u', 'unmark', None, _('mark files as unresolved')), | |
4899 ('t', 'tool', '', _('specify merge tool')), | |
4900 ('n', 'no-status', None, _('hide status prefix'))] | |
4901 + walkopts, | |
4902 _('[OPTION]... [FILE]...')), | |
4903 "revert": | |
4904 (revert, | |
4905 [('a', 'all', None, _('revert all changes when no arguments given')), | |
4906 ('d', 'date', '', | |
4907 _('tipmost revision matching date'), _('DATE')), | |
4908 ('r', 'rev', '', | |
4909 _('revert to the specified revision'), _('REV')), | |
4910 ('', 'no-backup', None, _('do not save backup copies of files')), | |
4911 ] + walkopts + dryrunopts, | |
4912 _('[OPTION]... [-r REV] [NAME]...')), | |
4913 "rollback": (rollback, dryrunopts), | |
4914 "root": (root, []), | |
4915 "^serve": | |
4916 (serve, | |
4917 [('A', 'accesslog', '', | |
4918 _('name of access log file to write to'), _('FILE')), | |
4919 ('d', 'daemon', None, _('run server in background')), | |
4920 ('', 'daemon-pipefds', '', | |
4921 _('used internally by daemon mode'), _('NUM')), | |
4922 ('E', 'errorlog', '', | |
4923 _('name of error log file to write to'), _('FILE')), | |
4924 # use string type, then we can check if something was passed | |
4925 ('p', 'port', '', | |
4926 _('port to listen on (default: 8000)'), _('PORT')), | |
4927 ('a', 'address', '', | |
4928 _('address to listen on (default: all interfaces)'), _('ADDR')), | |
4929 ('', 'prefix', '', | |
4930 _('prefix path to serve from (default: server root)'), _('PREFIX')), | |
4931 ('n', 'name', '', | |
4932 _('name to show in web pages (default: working directory)'), | |
4933 _('NAME')), | |
4934 ('', 'web-conf', '', | |
4935 _('name of the hgweb config file (see "hg help hgweb")'), | |
4936 _('FILE')), | |
4937 ('', 'webdir-conf', '', | |
4938 _('name of the hgweb config file (DEPRECATED)'), _('FILE')), | |
4939 ('', 'pid-file', '', | |
4940 _('name of file to write process ID to'), _('FILE')), | |
4941 ('', 'stdio', None, _('for remote clients')), | |
4942 ('t', 'templates', '', | |
4943 _('web templates to use'), _('TEMPLATE')), | |
4944 ('', 'style', '', | |
4945 _('template style to use'), _('STYLE')), | |
4946 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4')), | |
4947 ('', 'certificate', '', | |
4948 _('SSL certificate file'), _('FILE'))], | |
4949 _('[OPTION]...')), | |
4950 "showconfig|debugconfig": | |
4951 (showconfig, | |
4952 [('u', 'untrusted', None, _('show untrusted configuration options'))], | |
4953 _('[-u] [NAME]...')), | |
4954 "^summary|sum": | |
4955 (summary, | |
4956 [('', 'remote', None, _('check for push and pull'))], '[--remote]'), | |
4957 "^status|st": | |
4958 (status, | |
4959 [('A', 'all', None, _('show status of all files')), | |
4960 ('m', 'modified', None, _('show only modified files')), | |
4961 ('a', 'added', None, _('show only added files')), | |
4962 ('r', 'removed', None, _('show only removed files')), | |
4963 ('d', 'deleted', None, _('show only deleted (but tracked) files')), | |
4964 ('c', 'clean', None, _('show only files without changes')), | |
4965 ('u', 'unknown', None, _('show only unknown (not tracked) files')), | |
4966 ('i', 'ignored', None, _('show only ignored files')), | |
4967 ('n', 'no-status', None, _('hide status prefix')), | |
4968 ('C', 'copies', None, _('show source of copied files')), | |
4969 ('0', 'print0', None, | |
4970 _('end filenames with NUL, for use with xargs')), | |
4971 ('', 'rev', [], | |
4972 _('show difference from revision'), _('REV')), | |
4973 ('', 'change', '', | |
4974 _('list the changed files of a revision'), _('REV')), | |
4975 ] + walkopts + subrepoopts, | |
4976 _('[OPTION]... [FILE]...')), | |
4977 "tag": | |
4978 (tag, | |
4979 [('f', 'force', None, _('force tag')), | |
4980 ('l', 'local', None, _('make the tag local')), | |
4981 ('r', 'rev', '', | |
4982 _('revision to tag'), _('REV')), | |
4983 ('', 'remove', None, _('remove a tag')), | |
4984 # -l/--local is already there, commitopts cannot be used | |
4985 ('e', 'edit', None, _('edit commit message')), | |
4986 ('m', 'message', '', | |
4987 _('use <text> as commit message'), _('TEXT')), | |
4988 ] + commitopts2, | |
4989 _('[-f] [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME...')), | |
4990 "tags": (tags, [], ''), | |
4991 "tip": | |
4992 (tip, | |
4993 [('p', 'patch', None, _('show patch')), | |
4994 ('g', 'git', None, _('use git extended diff format')), | |
4995 ] + templateopts, | |
4996 _('[-p] [-g]')), | |
4997 "unbundle": | |
4998 (unbundle, | |
4999 [('u', 'update', None, | |
5000 _('update to new branch head if changesets were unbundled'))], | |
5001 _('[-u] FILE...')), | |
5002 "^update|up|checkout|co": | |
5003 (update, | |
5004 [('C', 'clean', None, _('discard uncommitted changes (no backup)')), | |
5005 ('c', 'check', None, | |
5006 _('update across branches if no uncommitted changes')), | |
5007 ('d', 'date', '', | |
5008 _('tipmost revision matching date'), _('DATE')), | |
5009 ('r', 'rev', '', | |
5010 _('revision'), _('REV'))], | |
5011 _('[-c] [-C] [-d DATE] [[-r] REV]')), | |
5012 "verify": (verify, []), | |
5013 "version": (version_, []), | |
5014 } | |
5015 | |
5016 norepo = ("clone init version help debugcommands debugcomplete" | 4884 norepo = ("clone init version help debugcommands debugcomplete" |
5017 " debugdate debuginstall debugfsinfo debugpushkey debugwireargs" | 4885 " debugdate debuginstall debugfsinfo debugpushkey debugwireargs" |
5018 " debugknown debuggetbundle debugbundle") | 4886 " debugknown debuggetbundle debugbundle") |
5019 optionalrepo = ("identify paths serve showconfig debugancestor debugdag" | 4887 optionalrepo = ("identify paths serve showconfig debugancestor debugdag" |
5020 " debugdata debugindex debugindexdot") | 4888 " debugdata debugindex debugindexdot") |