73 parameter greater than 0, this compares every removed file with |
73 parameter greater than 0, this compares every removed file with |
74 every added file and records those similar enough as renames. This |
74 every added file and records those similar enough as renames. This |
75 option takes a percentage between 0 (disabled) and 100 (files must |
75 option takes a percentage between 0 (disabled) and 100 (files must |
76 be identical) as its parameter. Detecting renamed files this way |
76 be identical) as its parameter. Detecting renamed files this way |
77 can be expensive. |
77 can be expensive. |
|
78 |
|
79 Returns 0 if all files are successfully added. |
78 """ |
80 """ |
79 try: |
81 try: |
80 sim = float(opts.get('similarity') or 0) |
82 sim = float(opts.get('similarity') or 0) |
81 except ValueError: |
83 except ValueError: |
82 raise util.Abort(_('similarity must be a number')) |
84 raise util.Abort(_('similarity must be a number')) |
95 |
97 |
96 Without the -a/--text option, annotate will avoid processing files |
98 Without the -a/--text option, annotate will avoid processing files |
97 it detects as binary. With -a, annotate will annotate the file |
99 it detects as binary. With -a, annotate will annotate the file |
98 anyway, although the results will probably be neither useful |
100 anyway, although the results will probably be neither useful |
99 nor desirable. |
101 nor desirable. |
|
102 |
|
103 Returns 0 on success. |
100 """ |
104 """ |
101 if opts.get('follow'): |
105 if opts.get('follow'): |
102 # --follow is deprecated and now just an alias for -f/--file |
106 # --follow is deprecated and now just an alias for -f/--file |
103 # to mimic the behavior of Mercurial before version 1.5 |
107 # to mimic the behavior of Mercurial before version 1.5 |
104 opts['file'] = 1 |
108 opts['file'] = 1 |
174 |
178 |
175 Each member added to an archive file has a directory prefix |
179 Each member added to an archive file has a directory prefix |
176 prepended. Use -p/--prefix to specify a format string for the |
180 prepended. Use -p/--prefix to specify a format string for the |
177 prefix. The default is the basename of the archive, with suffixes |
181 prefix. The default is the basename of the archive, with suffixes |
178 removed. |
182 removed. |
|
183 |
|
184 Returns 0 on success. |
179 ''' |
185 ''' |
180 |
186 |
181 ctx = repo[opts.get('rev')] |
187 ctx = repo[opts.get('rev')] |
182 if not ctx: |
188 if not ctx: |
183 raise util.Abort(_('no working directory: please specify a revision')) |
189 raise util.Abort(_('no working directory: please specify a revision')) |
228 before starting the backout, then merges the new head with that |
234 before starting the backout, then merges the new head with that |
229 changeset afterwards. This saves you from doing the merge by hand. |
235 changeset afterwards. This saves you from doing the merge by hand. |
230 The result of this merge is not committed, as with a normal merge. |
236 The result of this merge is not committed, as with a normal merge. |
231 |
237 |
232 See :hg:`help dates` for a list of formats valid for -d/--date. |
238 See :hg:`help dates` for a list of formats valid for -d/--date. |
|
239 |
|
240 Returns 0 on success. |
233 ''' |
241 ''' |
234 if rev and node: |
242 if rev and node: |
235 raise util.Abort(_("please specify just one revision")) |
243 raise util.Abort(_("please specify just one revision")) |
236 |
244 |
237 if not rev: |
245 if not rev: |
321 If you supply a command, it will be used for automatic bisection. |
329 If you supply a command, it will be used for automatic bisection. |
322 Its exit status will be used to mark revisions as good or bad: |
330 Its exit status will be used to mark revisions as good or bad: |
323 status 0 means good, 125 means to skip the revision, 127 |
331 status 0 means good, 125 means to skip the revision, 127 |
324 (command not found) will abort the bisection, and any other |
332 (command not found) will abort the bisection, and any other |
325 non-zero exit status means the revision is bad. |
333 non-zero exit status means the revision is bad. |
|
334 |
|
335 Returns 0 on success. |
326 """ |
336 """ |
327 def print_result(nodes, good): |
337 def print_result(nodes, good): |
328 displayer = cmdutil.show_changeset(ui, repo, {}) |
338 displayer = cmdutil.show_changeset(ui, repo, {}) |
329 if len(nodes) == 1: |
339 if len(nodes) == 1: |
330 # narrowed it down to a single revision |
340 # narrowed it down to a single revision |
402 # update to next check |
412 # update to next check |
403 cmdutil.bail_if_changed(repo) |
413 cmdutil.bail_if_changed(repo) |
404 hg.clean(repo, nodes[0], show_stats=False) |
414 hg.clean(repo, nodes[0], show_stats=False) |
405 finally: |
415 finally: |
406 hbisect.save_state(repo, state) |
416 hbisect.save_state(repo, state) |
407 return print_result(nodes, good) |
417 print_result(nodes, good) |
|
418 return |
408 |
419 |
409 # update state |
420 # update state |
410 node = repo.lookup(rev or '.') |
421 node = repo.lookup(rev or '.') |
411 if good or bad or skip: |
422 if good or bad or skip: |
412 if good: |
423 if good: |
455 the parent of the working directory, negating a previous branch |
466 the parent of the working directory, negating a previous branch |
456 change. |
467 change. |
457 |
468 |
458 Use the command :hg:`update` to switch to an existing branch. Use |
469 Use the command :hg:`update` to switch to an existing branch. Use |
459 :hg:`commit --close-branch` to mark this branch as closed. |
470 :hg:`commit --close-branch` to mark this branch as closed. |
|
471 |
|
472 Returns 0 on success. |
460 """ |
473 """ |
461 |
474 |
462 if opts.get('clean'): |
475 if opts.get('clean'): |
463 label = repo[None].parents()[0].branch() |
476 label = repo[None].parents()[0].branch() |
464 repo.dirstate.setbranch(label) |
477 repo.dirstate.setbranch(label) |
483 |
496 |
484 If -a/--active is specified, only show active branches. A branch |
497 If -a/--active is specified, only show active branches. A branch |
485 is considered active if it contains repository heads. |
498 is considered active if it contains repository heads. |
486 |
499 |
487 Use the command :hg:`update` to switch to an existing branch. |
500 Use the command :hg:`update` to switch to an existing branch. |
|
501 |
|
502 Returns 0. |
488 """ |
503 """ |
489 |
504 |
490 hexfunc = ui.debugflag and hex or short |
505 hexfunc = ui.debugflag and hex or short |
491 activebranches = [repo[n].branch() for n in repo.heads()] |
506 activebranches = [repo[n].branch() for n in repo.heads()] |
492 def testactive(tag, node): |
507 def testactive(tag, node): |
536 command. This is useful when direct push and pull are not |
551 command. This is useful when direct push and pull are not |
537 available or when exporting an entire repository is undesirable. |
552 available or when exporting an entire repository is undesirable. |
538 |
553 |
539 Applying bundles preserves all changeset contents including |
554 Applying bundles preserves all changeset contents including |
540 permissions, copy/rename information, and revision history. |
555 permissions, copy/rename information, and revision history. |
|
556 |
|
557 Returns 0 on success, 1 if no changes found. |
541 """ |
558 """ |
542 revs = opts.get('rev') or None |
559 revs = opts.get('rev') or None |
543 if revs: |
560 if revs: |
544 revs = [repo.lookup(rev) for rev in revs] |
561 revs = [repo.lookup(rev) for rev in revs] |
545 if opts.get('all'): |
562 if opts.get('all'): |
581 revs, checkout = hg.addbranchrevs(repo, other, branches, revs) |
598 revs, checkout = hg.addbranchrevs(repo, other, branches, revs) |
582 o = repo.findoutgoing(other, force=opts.get('force')) |
599 o = repo.findoutgoing(other, force=opts.get('force')) |
583 |
600 |
584 if not o: |
601 if not o: |
585 ui.status(_("no changes found\n")) |
602 ui.status(_("no changes found\n")) |
586 return |
603 return 1 |
587 |
604 |
588 if revs: |
605 if revs: |
589 cg = repo.changegroupsubset(o, revs, 'bundle') |
606 cg = repo.changegroupsubset(o, revs, 'bundle') |
590 else: |
607 else: |
591 cg = repo.changegroup(o, 'bundle') |
608 cg = repo.changegroup(o, 'bundle') |
610 for the export command, with the following additions: |
627 for the export command, with the following additions: |
611 |
628 |
612 :``%s``: basename of file being printed |
629 :``%s``: basename of file being printed |
613 :``%d``: dirname of file being printed, or '.' if in repository root |
630 :``%d``: dirname of file being printed, or '.' if in repository root |
614 :``%p``: root-relative path name of file being printed |
631 :``%p``: root-relative path name of file being printed |
|
632 |
|
633 Returns 0 on success. |
615 """ |
634 """ |
616 ctx = repo[opts.get('rev')] |
635 ctx = repo[opts.get('rev')] |
617 err = 1 |
636 err = 1 |
618 m = cmdutil.match(repo, (file1,) + pats, opts) |
637 m = cmdutil.match(repo, (file1,) + pats, opts) |
619 for abs in ctx.walk(m): |
638 for abs in ctx.walk(m): |
684 d) the changeset specified with -r |
703 d) the changeset specified with -r |
685 e) the tipmost head specified with -b |
704 e) the tipmost head specified with -b |
686 f) the tipmost head specified with the url#branch source syntax |
705 f) the tipmost head specified with the url#branch source syntax |
687 g) the tipmost head of the default branch |
706 g) the tipmost head of the default branch |
688 h) tip |
707 h) tip |
|
708 |
|
709 Returns 0 on success. |
689 """ |
710 """ |
690 if opts.get('noupdate') and opts.get('updaterev'): |
711 if opts.get('noupdate') and opts.get('updaterev'): |
691 raise util.Abort(_("cannot specify both --noupdate and --updaterev")) |
712 raise util.Abort(_("cannot specify both --noupdate and --updaterev")) |
692 |
713 |
693 hg.clone(cmdutil.remoteui(ui, opts), source, dest, |
714 r = hg.clone(cmdutil.remoteui(ui, opts), source, dest, |
694 pull=opts.get('pull'), |
715 pull=opts.get('pull'), |
695 stream=opts.get('uncompressed'), |
716 stream=opts.get('uncompressed'), |
696 rev=opts.get('rev'), |
717 rev=opts.get('rev'), |
697 update=opts.get('updaterev') or not opts.get('noupdate'), |
718 update=opts.get('updaterev') or not opts.get('noupdate'), |
698 branch=opts.get('branch')) |
719 branch=opts.get('branch')) |
|
720 |
|
721 return r is None |
699 |
722 |
700 def commit(ui, repo, *pats, **opts): |
723 def commit(ui, repo, *pats, **opts): |
701 """commit the specified files or all outstanding changes |
724 """commit the specified files or all outstanding changes |
702 |
725 |
703 Commit changes to the given files into the repository. Unlike a |
726 Commit changes to the given files into the repository. Unlike a |
712 |
735 |
713 If no commit message is specified, the configured editor is |
736 If no commit message is specified, the configured editor is |
714 started to prompt you for a message. |
737 started to prompt you for a message. |
715 |
738 |
716 See :hg:`help dates` for a list of formats valid for -d/--date. |
739 See :hg:`help dates` for a list of formats valid for -d/--date. |
|
740 |
|
741 Returns 0 on success, 1 if nothing changed. |
717 """ |
742 """ |
718 extra = {} |
743 extra = {} |
719 if opts.get('close_branch'): |
744 if opts.get('close_branch'): |
720 if repo['.'].node() not in repo.branchheads(): |
745 if repo['.'].node() not in repo.branchheads(): |
721 # The topo heads set is included in the branch heads set of the |
746 # The topo heads set is included in the branch heads set of the |
734 bheads = repo.branchheads(branch) |
759 bheads = repo.branchheads(branch) |
735 |
760 |
736 node = cmdutil.commit(ui, repo, commitfunc, pats, opts) |
761 node = cmdutil.commit(ui, repo, commitfunc, pats, opts) |
737 if not node: |
762 if not node: |
738 ui.status(_("nothing changed\n")) |
763 ui.status(_("nothing changed\n")) |
739 return |
764 return 1 |
740 |
765 |
741 ctx = repo[node] |
766 ctx = repo[node] |
742 parents = ctx.parents() |
767 parents = ctx.parents() |
743 |
768 |
744 if bheads and [x for x in parents if x.node() not in bheads]: |
769 if bheads and [x for x in parents if x.node() not in bheads]: |
765 exist in the working directory. If invoked with -A/--after, the |
790 exist in the working directory. If invoked with -A/--after, the |
766 operation is recorded, but no copying is performed. |
791 operation is recorded, but no copying is performed. |
767 |
792 |
768 This command takes effect with the next commit. To undo a copy |
793 This command takes effect with the next commit. To undo a copy |
769 before that, see hg revert. |
794 before that, see hg revert. |
|
795 |
|
796 Returns 0 on success, 1 if errors are encountered. |
770 """ |
797 """ |
771 wlock = repo.wlock(False) |
798 wlock = repo.wlock(False) |
772 try: |
799 try: |
773 return cmdutil.copy(ui, repo, pats, opts) |
800 return cmdutil.copy(ui, repo, pats, opts) |
774 finally: |
801 finally: |
791 raise util.Abort(_('either two or three arguments required')) |
818 raise util.Abort(_('either two or three arguments required')) |
792 a = r.ancestor(lookup(rev1), lookup(rev2)) |
819 a = r.ancestor(lookup(rev1), lookup(rev2)) |
793 ui.write("%d:%s\n" % (r.rev(a), hex(a))) |
820 ui.write("%d:%s\n" % (r.rev(a), hex(a))) |
794 |
821 |
795 def debugcommands(ui, cmd='', *args): |
822 def debugcommands(ui, cmd='', *args): |
|
823 """list all available commands and options""" |
796 for cmd, vals in sorted(table.iteritems()): |
824 for cmd, vals in sorted(table.iteritems()): |
797 cmd = cmd.split('|')[0].strip('^') |
825 cmd = cmd.split('|')[0].strip('^') |
798 opts = ', '.join([i[1] for i in vals[1]]) |
826 opts = ', '.join([i[1] for i in vals[1]]) |
799 ui.write('%s: %s\n' % (cmd, opts)) |
827 ui.write('%s: %s\n' % (cmd, opts)) |
800 |
828 |
821 if ui.verbose: |
849 if ui.verbose: |
822 cmdlist = [' '.join(c[0]) for c in cmdlist.values()] |
850 cmdlist = [' '.join(c[0]) for c in cmdlist.values()] |
823 ui.write("%s\n" % "\n".join(sorted(cmdlist))) |
851 ui.write("%s\n" % "\n".join(sorted(cmdlist))) |
824 |
852 |
825 def debugfsinfo(ui, path = "."): |
853 def debugfsinfo(ui, path = "."): |
|
854 """show information detected about current filesystem""" |
826 open('.debugfsinfo', 'w').write('') |
855 open('.debugfsinfo', 'w').write('') |
827 ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no')) |
856 ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no')) |
828 ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no')) |
857 ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no')) |
829 ui.write('case-sensitive: %s\n' % (util.checkcase('.debugfsinfo') |
858 ui.write('case-sensitive: %s\n' % (util.checkcase('.debugfsinfo') |
830 and 'yes' or 'no')) |
859 and 'yes' or 'no')) |
877 With multiple arguments, print names and values of all config |
906 With multiple arguments, print names and values of all config |
878 items with matching section names. |
907 items with matching section names. |
879 |
908 |
880 With --debug, the source (filename and line number) is printed |
909 With --debug, the source (filename and line number) is printed |
881 for each config item. |
910 for each config item. |
|
911 |
|
912 Returns 0 on success. |
882 """ |
913 """ |
883 |
914 |
884 for f in util.rcpath(): |
915 for f in util.rcpath(): |
885 ui.debug(_('read config from: %s\n') % f) |
916 ui.debug(_('read config from: %s\n') % f) |
886 untrusted = bool(opts.get('untrusted')) |
917 untrusted = bool(opts.get('untrusted')) |
907 def debugsetparents(ui, repo, rev1, rev2=None): |
938 def debugsetparents(ui, repo, rev1, rev2=None): |
908 """manually set the parents of the current working directory |
939 """manually set the parents of the current working directory |
909 |
940 |
910 This is useful for writing repository conversion tools, but should |
941 This is useful for writing repository conversion tools, but should |
911 be used with care. |
942 be used with care. |
|
943 |
|
944 Returns 0 on success. |
912 """ |
945 """ |
913 |
946 |
914 if not rev2: |
947 if not rev2: |
915 rev2 = hex(nullid) |
948 rev2 = hex(nullid) |
916 |
949 |
998 if pp[1] != nullid: |
1031 if pp[1] != nullid: |
999 ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i)) |
1032 ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i)) |
1000 ui.write("}\n") |
1033 ui.write("}\n") |
1001 |
1034 |
1002 def debuginstall(ui): |
1035 def debuginstall(ui): |
1003 '''test Mercurial installation''' |
1036 '''test Mercurial installation |
|
1037 |
|
1038 Returns 0 on success. |
|
1039 ''' |
1004 |
1040 |
1005 def writetemp(contents): |
1041 def writetemp(contents): |
1006 (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-") |
1042 (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-") |
1007 f = os.fdopen(fd, "wb") |
1043 f = os.fdopen(fd, "wb") |
1008 f.write(contents) |
1044 f.write(contents) |
1159 files it detects as binary. With -a, diff will generate a diff |
1195 files it detects as binary. With -a, diff will generate a diff |
1160 anyway, probably with undesirable results. |
1196 anyway, probably with undesirable results. |
1161 |
1197 |
1162 Use the -g/--git option to generate diffs in the git extended diff |
1198 Use the -g/--git option to generate diffs in the git extended diff |
1163 format. For more information, read :hg:`help diffs`. |
1199 format. For more information, read :hg:`help diffs`. |
|
1200 |
|
1201 Returns 0 on success. |
1164 """ |
1202 """ |
1165 |
1203 |
1166 revs = opts.get('rev') |
1204 revs = opts.get('rev') |
1167 change = opts.get('change') |
1205 change = opts.get('change') |
1168 stat = opts.get('stat') |
1206 stat = opts.get('stat') |
1216 Use the -g/--git option to generate diffs in the git extended diff |
1254 Use the -g/--git option to generate diffs in the git extended diff |
1217 format. See :hg:`help diffs` for more information. |
1255 format. See :hg:`help diffs` for more information. |
1218 |
1256 |
1219 With the --switch-parent option, the diff will be against the |
1257 With the --switch-parent option, the diff will be against the |
1220 second parent. It can be useful to review a merge. |
1258 second parent. It can be useful to review a merge. |
|
1259 |
|
1260 Returns 0 on success. |
1221 """ |
1261 """ |
1222 changesets += tuple(opts.get('rev', [])) |
1262 changesets += tuple(opts.get('rev', [])) |
1223 if not changesets: |
1263 if not changesets: |
1224 raise util.Abort(_("export requires at least one changeset")) |
1264 raise util.Abort(_("export requires at least one changeset")) |
1225 revs = cmdutil.revrange(repo, changesets) |
1265 revs = cmdutil.revrange(repo, changesets) |
1240 This only removes files from the current branch, not from the |
1280 This only removes files from the current branch, not from the |
1241 entire project history, and it does not delete them from the |
1281 entire project history, and it does not delete them from the |
1242 working directory. |
1282 working directory. |
1243 |
1283 |
1244 To undo a forget before the next commit, see hg add. |
1284 To undo a forget before the next commit, see hg add. |
|
1285 |
|
1286 Returns 0 on success. |
1245 """ |
1287 """ |
1246 |
1288 |
1247 if not pats: |
1289 if not pats: |
1248 raise util.Abort(_('no files specified')) |
1290 raise util.Abort(_('no files specified')) |
1249 |
1291 |
1250 m = cmdutil.match(repo, pats, opts) |
1292 m = cmdutil.match(repo, pats, opts) |
1251 s = repo.status(match=m, clean=True) |
1293 s = repo.status(match=m, clean=True) |
1252 forget = sorted(s[0] + s[1] + s[3] + s[6]) |
1294 forget = sorted(s[0] + s[1] + s[3] + s[6]) |
|
1295 errs = 0 |
1253 |
1296 |
1254 for f in m.files(): |
1297 for f in m.files(): |
1255 if f not in repo.dirstate and not os.path.isdir(m.rel(f)): |
1298 if f not in repo.dirstate and not os.path.isdir(m.rel(f)): |
1256 ui.warn(_('not removing %s: file is already untracked\n') |
1299 ui.warn(_('not removing %s: file is already untracked\n') |
1257 % m.rel(f)) |
1300 % m.rel(f)) |
|
1301 errs = 1 |
1258 |
1302 |
1259 for f in forget: |
1303 for f in forget: |
1260 if ui.verbose or not m.exact(f): |
1304 if ui.verbose or not m.exact(f): |
1261 ui.status(_('removing %s\n') % m.rel(f)) |
1305 ui.status(_('removing %s\n') % m.rel(f)) |
1262 |
1306 |
1263 repo.remove(forget, unlink=False) |
1307 repo.remove(forget, unlink=False) |
|
1308 return errs |
1264 |
1309 |
1265 def grep(ui, repo, pattern, *pats, **opts): |
1310 def grep(ui, repo, pattern, *pats, **opts): |
1266 """search for a pattern in specified files and revisions |
1311 """search for a pattern in specified files and revisions |
1267 |
1312 |
1268 Search revisions of files for a regular expression. |
1313 Search revisions of files for a regular expression. |
1275 By default, grep only prints output for the first revision of a |
1320 By default, grep only prints output for the first revision of a |
1276 file in which it finds a match. To get it to print every revision |
1321 file in which it finds a match. To get it to print every revision |
1277 that contains a change in match status ("-" for a match that |
1322 that contains a change in match status ("-" for a match that |
1278 becomes a non-match, or "+" for a non-match that becomes a match), |
1323 becomes a non-match, or "+" for a non-match that becomes a match), |
1279 use the --all flag. |
1324 use the --all flag. |
|
1325 |
|
1326 Returns 0 if a match is found, 1 otherwise. |
1280 """ |
1327 """ |
1281 reflags = 0 |
1328 reflags = 0 |
1282 if opts.get('ignore_case'): |
1329 if opts.get('ignore_case'): |
1283 reflags |= re.I |
1330 reflags |= re.I |
1284 try: |
1331 try: |
1285 regexp = re.compile(pattern, reflags) |
1332 regexp = re.compile(pattern, reflags) |
1286 except Exception, inst: |
1333 except Exception, inst: |
1287 ui.warn(_("grep: invalid match pattern: %s\n") % inst) |
1334 ui.warn(_("grep: invalid match pattern: %s\n") % inst) |
1288 return None |
1335 return 1 |
1289 sep, eol = ':', '\n' |
1336 sep, eol = ':', '\n' |
1290 if opts.get('print0'): |
1337 if opts.get('print0'): |
1291 sep = eol = '\0' |
1338 sep = eol = '\0' |
1292 |
1339 |
1293 getfile = util.lrucachefunc(repo.file) |
1340 getfile = util.lrucachefunc(repo.file) |
1462 If STARTREV is specified, only those heads that are descendants of |
1511 If STARTREV is specified, only those heads that are descendants of |
1463 STARTREV will be displayed. |
1512 STARTREV will be displayed. |
1464 |
1513 |
1465 If -t/--topo is specified, named branch mechanics will be ignored and only |
1514 If -t/--topo is specified, named branch mechanics will be ignored and only |
1466 changesets without children will be shown. |
1515 changesets without children will be shown. |
|
1516 |
|
1517 Returns 0 if matching heads are found, 1 if not. |
1467 """ |
1518 """ |
1468 |
1519 |
1469 if opts.get('rev'): |
1520 if opts.get('rev'): |
1470 start = repo.lookup(opts['rev']) |
1521 start = repo.lookup(opts['rev']) |
1471 else: |
1522 else: |
1519 """show help for a given topic or a help overview |
1570 """show help for a given topic or a help overview |
1520 |
1571 |
1521 With no arguments, print a list of commands with short help messages. |
1572 With no arguments, print a list of commands with short help messages. |
1522 |
1573 |
1523 Given a topic, extension, or command name, print help for that |
1574 Given a topic, extension, or command name, print help for that |
1524 topic.""" |
1575 topic. |
|
1576 |
|
1577 Returns 0 if successful. |
|
1578 """ |
1525 option_lists = [] |
1579 option_lists = [] |
1526 textwidth = util.termwidth() - 2 |
1580 textwidth = util.termwidth() - 2 |
1527 |
1581 |
1528 def addglobalopts(aliases): |
1582 def addglobalopts(aliases): |
1529 if ui.verbose: |
1583 if ui.verbose: |
1777 |
1831 |
1778 This summary identifies the repository state using one or two |
1832 This summary identifies the repository state using one or two |
1779 parent hash identifiers, followed by a "+" if there are |
1833 parent hash identifiers, followed by a "+" if there are |
1780 uncommitted changes in the working directory, a list of tags for |
1834 uncommitted changes in the working directory, a list of tags for |
1781 this revision and a branch name for non-default branches. |
1835 this revision and a branch name for non-default branches. |
|
1836 |
|
1837 Returns 0 if successful. |
1782 """ |
1838 """ |
1783 |
1839 |
1784 if not repo and not source: |
1840 if not repo and not source: |
1785 raise util.Abort(_("There is no Mercurial repository here " |
1841 raise util.Abort(_("There is no Mercurial repository here " |
1786 "(.hg not found)")) |
1842 "(.hg not found)")) |
1872 copies in the patch in the same way as 'addremove'. |
1928 copies in the patch in the same way as 'addremove'. |
1873 |
1929 |
1874 To read a patch from standard input, use "-" as the patch name. If |
1930 To read a patch from standard input, use "-" as the patch name. If |
1875 a URL is specified, the patch will be downloaded from it. |
1931 a URL is specified, the patch will be downloaded from it. |
1876 See :hg:`help dates` for a list of formats valid for -d/--date. |
1932 See :hg:`help dates` for a list of formats valid for -d/--date. |
|
1933 |
|
1934 Returns 0 on success. |
1877 """ |
1935 """ |
1878 patches = (patch1,) + patches |
1936 patches = (patch1,) + patches |
1879 |
1937 |
1880 date = opts.get('date') |
1938 date = opts.get('date') |
1881 if date: |
1939 if date: |
2005 |
2063 |
2006 For remote repository, using --bundle avoids downloading the |
2064 For remote repository, using --bundle avoids downloading the |
2007 changesets twice if the incoming is followed by a pull. |
2065 changesets twice if the incoming is followed by a pull. |
2008 |
2066 |
2009 See pull for valid source format details. |
2067 See pull for valid source format details. |
|
2068 |
|
2069 Returns 0 if there are incoming changes, 1 otherwise. |
2010 """ |
2070 """ |
2011 limit = cmdutil.loglimit(opts) |
2071 limit = cmdutil.loglimit(opts) |
2012 source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch')) |
2072 source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch')) |
2013 other = hg.repository(cmdutil.remoteui(repo, opts), source) |
2073 other = hg.repository(cmdutil.remoteui(repo, opts), source) |
2014 ui.status(_('comparing with %s\n') % url.hidepassword(source)) |
2074 ui.status(_('comparing with %s\n') % url.hidepassword(source)) |
2075 |
2135 |
2076 If no directory is given, the current directory is used. |
2136 If no directory is given, the current directory is used. |
2077 |
2137 |
2078 It is possible to specify an ``ssh://`` URL as the destination. |
2138 It is possible to specify an ``ssh://`` URL as the destination. |
2079 See :hg:`help urls` for more information. |
2139 See :hg:`help urls` for more information. |
|
2140 |
|
2141 Returns 0 on success. |
2080 """ |
2142 """ |
2081 hg.repository(cmdutil.remoteui(ui, opts), dest, create=1) |
2143 hg.repository(cmdutil.remoteui(ui, opts), dest, create=1) |
2082 |
2144 |
2083 def locate(ui, repo, *pats, **opts): |
2145 def locate(ui, repo, *pats, **opts): |
2084 """locate files matching specific patterns |
2146 """locate files matching specific patterns |
2095 |
2157 |
2096 If you want to feed the output of this command into the "xargs" |
2158 If you want to feed the output of this command into the "xargs" |
2097 command, use the -0 option to both this command and "xargs". This |
2159 command, use the -0 option to both this command and "xargs". This |
2098 will avoid the problem of "xargs" treating single filenames that |
2160 will avoid the problem of "xargs" treating single filenames that |
2099 contain whitespace as multiple filenames. |
2161 contain whitespace as multiple filenames. |
|
2162 |
|
2163 Returns 0 if a match is found, 1 otherwise. |
2100 """ |
2164 """ |
2101 end = opts.get('print0') and '\0' or '\n' |
2165 end = opts.get('print0') and '\0' or '\n' |
2102 rev = opts.get('rev') or None |
2166 rev = opts.get('rev') or None |
2103 |
2167 |
2104 ret = 1 |
2168 ret = 1 |
2140 |
2204 |
2141 NOTE: log -p/--patch may generate unexpected diff output for merge |
2205 NOTE: log -p/--patch may generate unexpected diff output for merge |
2142 changesets, as it will only compare the merge changeset against |
2206 changesets, as it will only compare the merge changeset against |
2143 its first parent. Also, only files different from BOTH parents |
2207 its first parent. Also, only files different from BOTH parents |
2144 will appear in files:. |
2208 will appear in files:. |
|
2209 |
|
2210 Returns 0 on success. |
2145 """ |
2211 """ |
2146 |
2212 |
2147 matchfn = cmdutil.match(repo, pats, opts) |
2213 matchfn = cmdutil.match(repo, pats, opts) |
2148 limit = cmdutil.loglimit(opts) |
2214 limit = cmdutil.loglimit(opts) |
2149 count = 0 |
2215 count = 0 |
2208 If no revision is given, the first parent of the working directory |
2274 If no revision is given, the first parent of the working directory |
2209 is used, or the null revision if no revision is checked out. |
2275 is used, or the null revision if no revision is checked out. |
2210 |
2276 |
2211 With -v, print file permissions, symlink and executable bits. |
2277 With -v, print file permissions, symlink and executable bits. |
2212 With --debug, print file revision hashes. |
2278 With --debug, print file revision hashes. |
|
2279 |
|
2280 Returns 0 on success. |
2213 """ |
2281 """ |
2214 |
2282 |
2215 if rev and node: |
2283 if rev and node: |
2216 raise util.Abort(_("please specify just one revision")) |
2284 raise util.Abort(_("please specify just one revision")) |
2217 |
2285 |
2240 |
2308 |
2241 If no revision is specified, the working directory's parent is a |
2309 If no revision is specified, the working directory's parent is a |
2242 head revision, and the current branch contains exactly one other |
2310 head revision, and the current branch contains exactly one other |
2243 head, the other head is merged with by default. Otherwise, an |
2311 head, the other head is merged with by default. Otherwise, an |
2244 explicit revision with which to merge with must be provided. |
2312 explicit revision with which to merge with must be provided. |
|
2313 |
|
2314 Returns 0 on success, 1 if there are unresolved files. |
2245 """ |
2315 """ |
2246 |
2316 |
2247 if opts.get('rev') and node: |
2317 if opts.get('rev') and node: |
2248 raise util.Abort(_("please specify just one revision")) |
2318 raise util.Abort(_("please specify just one revision")) |
2249 if not node: |
2319 if not node: |
2296 Show changesets not found in the specified destination repository |
2366 Show changesets not found in the specified destination repository |
2297 or the default push location. These are the changesets that would |
2367 or the default push location. These are the changesets that would |
2298 be pushed if a push was requested. |
2368 be pushed if a push was requested. |
2299 |
2369 |
2300 See pull for details of valid destination formats. |
2370 See pull for details of valid destination formats. |
|
2371 |
|
2372 Returns 0 if there are outgoing changes, 1 otherwise. |
2301 """ |
2373 """ |
2302 limit = cmdutil.loglimit(opts) |
2374 limit = cmdutil.loglimit(opts) |
2303 dest = ui.expandpath(dest or 'default-push', dest or 'default') |
2375 dest = ui.expandpath(dest or 'default-push', dest or 'default') |
2304 dest, branches = hg.parseurl(dest, opts.get('branch')) |
2376 dest, branches = hg.parseurl(dest, opts.get('branch')) |
2305 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev')) |
2377 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev')) |
2333 Print the working directory's parent revisions. If a revision is |
2405 Print the working directory's parent revisions. If a revision is |
2334 given via -r/--rev, the parent of that revision will be printed. |
2406 given via -r/--rev, the parent of that revision will be printed. |
2335 If a file argument is given, the revision in which the file was |
2407 If a file argument is given, the revision in which the file was |
2336 last changed (before the working directory revision or the |
2408 last changed (before the working directory revision or the |
2337 argument to --rev if given) is printed. |
2409 argument to --rev if given) is printed. |
|
2410 |
|
2411 Returns 0 on success. |
2338 """ |
2412 """ |
2339 rev = opts.get('rev') |
2413 rev = opts.get('rev') |
2340 if rev: |
2414 if rev: |
2341 ctx = repo[rev] |
2415 ctx = repo[rev] |
2342 else: |
2416 else: |
2430 added those changes to the repository, you should use pull -r X |
2504 added those changes to the repository, you should use pull -r X |
2431 where X is the last changeset listed by hg incoming. |
2505 where X is the last changeset listed by hg incoming. |
2432 |
2506 |
2433 If SOURCE is omitted, the 'default' path will be used. |
2507 If SOURCE is omitted, the 'default' path will be used. |
2434 See :hg:`help urls` for more information. |
2508 See :hg:`help urls` for more information. |
|
2509 |
|
2510 Returns 0 on success, 1 if an update had unresolved files. |
2435 """ |
2511 """ |
2436 source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch')) |
2512 source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch')) |
2437 other = hg.repository(cmdutil.remoteui(repo, opts), source) |
2513 other = hg.repository(cmdutil.remoteui(repo, opts), source) |
2438 ui.status(_('pulling from %s\n') % url.hidepassword(source)) |
2514 ui.status(_('pulling from %s\n') % url.hidepassword(source)) |
2439 revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev')) |
2515 revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev')) |
2467 If -r/--rev is used, the named revision and all its ancestors will |
2543 If -r/--rev is used, the named revision and all its ancestors will |
2468 be pushed to the remote repository. |
2544 be pushed to the remote repository. |
2469 |
2545 |
2470 Please see :hg:`help urls` for important details about ``ssh://`` |
2546 Please see :hg:`help urls` for important details about ``ssh://`` |
2471 URLs. If DESTINATION is omitted, a default path will be used. |
2547 URLs. If DESTINATION is omitted, a default path will be used. |
|
2548 |
|
2549 Returns 0 if push was successful, 1 if nothing to push. |
2472 """ |
2550 """ |
2473 dest = ui.expandpath(dest or 'default-push', dest or 'default') |
2551 dest = ui.expandpath(dest or 'default-push', dest or 'default') |
2474 dest, branches = hg.parseurl(dest, opts.get('branch')) |
2552 dest, branches = hg.parseurl(dest, opts.get('branch')) |
2475 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev')) |
2553 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev')) |
2476 other = hg.repository(cmdutil.remoteui(repo, opts), dest) |
2554 other = hg.repository(cmdutil.remoteui(repo, opts), dest) |
2494 Recover from an interrupted commit or pull. |
2572 Recover from an interrupted commit or pull. |
2495 |
2573 |
2496 This command tries to fix the repository status after an |
2574 This command tries to fix the repository status after an |
2497 interrupted operation. It should only be necessary when Mercurial |
2575 interrupted operation. It should only be necessary when Mercurial |
2498 suggests it. |
2576 suggests it. |
|
2577 |
|
2578 Returns 0 if successful, 1 if nothing to recover or verify fails. |
2499 """ |
2579 """ |
2500 if repo.recover(): |
2580 if repo.recover(): |
2501 return hg.verify(repo) |
2581 return hg.verify(repo) |
2502 return 1 |
2582 return 1 |
2503 |
2583 |
2524 -A W W W R |
2604 -A W W W R |
2525 -Af R R R R |
2605 -Af R R R R |
2526 |
2606 |
2527 This command schedules the files to be removed at the next commit. |
2607 This command schedules the files to be removed at the next commit. |
2528 To undo a remove before that, see hg revert. |
2608 To undo a remove before that, see hg revert. |
2529 """ |
2609 |
2530 |
2610 Returns 0 on success, 1 if any warnings encountered. |
|
2611 """ |
|
2612 |
|
2613 ret = 0 |
2531 after, force = opts.get('after'), opts.get('force') |
2614 after, force = opts.get('after'), opts.get('force') |
2532 if not pats and not after: |
2615 if not pats and not after: |
2533 raise util.Abort(_('no files specified')) |
2616 raise util.Abort(_('no files specified')) |
2534 |
2617 |
2535 m = cmdutil.match(repo, pats, opts) |
2618 m = cmdutil.match(repo, pats, opts) |
2537 modified, added, deleted, clean = s[0], s[1], s[3], s[6] |
2620 modified, added, deleted, clean = s[0], s[1], s[3], s[6] |
2538 |
2621 |
2539 for f in m.files(): |
2622 for f in m.files(): |
2540 if f not in repo.dirstate and not os.path.isdir(m.rel(f)): |
2623 if f not in repo.dirstate and not os.path.isdir(m.rel(f)): |
2541 ui.warn(_('not removing %s: file is untracked\n') % m.rel(f)) |
2624 ui.warn(_('not removing %s: file is untracked\n') % m.rel(f)) |
|
2625 ret = 1 |
2542 |
2626 |
2543 def warn(files, reason): |
2627 def warn(files, reason): |
2544 for f in files: |
2628 for f in files: |
2545 ui.warn(_('not removing %s: file %s (use -f to force removal)\n') |
2629 ui.warn(_('not removing %s: file %s (use -f to force removal)\n') |
2546 % (m.rel(f), reason)) |
2630 % (m.rel(f), reason)) |
|
2631 ret = 1 |
2547 |
2632 |
2548 if force: |
2633 if force: |
2549 remove, forget = modified + deleted + clean, added |
2634 remove, forget = modified + deleted + clean, added |
2550 elif after: |
2635 elif after: |
2551 remove, forget = deleted, [] |
2636 remove, forget = deleted, [] |
2559 if ui.verbose or not m.exact(f): |
2644 if ui.verbose or not m.exact(f): |
2560 ui.status(_('removing %s\n') % m.rel(f)) |
2645 ui.status(_('removing %s\n') % m.rel(f)) |
2561 |
2646 |
2562 repo.forget(forget) |
2647 repo.forget(forget) |
2563 repo.remove(remove, unlink=not after) |
2648 repo.remove(remove, unlink=not after) |
|
2649 return ret |
2564 |
2650 |
2565 def rename(ui, repo, *pats, **opts): |
2651 def rename(ui, repo, *pats, **opts): |
2566 """rename files; equivalent of copy + remove |
2652 """rename files; equivalent of copy + remove |
2567 |
2653 |
2568 Mark dest as copies of sources; mark sources for deletion. If dest |
2654 Mark dest as copies of sources; mark sources for deletion. If dest |
2573 exist in the working directory. If invoked with -A/--after, the |
2659 exist in the working directory. If invoked with -A/--after, the |
2574 operation is recorded, but no copying is performed. |
2660 operation is recorded, but no copying is performed. |
2575 |
2661 |
2576 This command takes effect at the next commit. To undo a rename |
2662 This command takes effect at the next commit. To undo a rename |
2577 before that, see hg revert. |
2663 before that, see hg revert. |
|
2664 |
|
2665 Returns 0 on success, 1 if errors are encountered. |
2578 """ |
2666 """ |
2579 wlock = repo.wlock(False) |
2667 wlock = repo.wlock(False) |
2580 try: |
2668 try: |
2581 return cmdutil.copy(ui, repo, pats, opts, rename=True) |
2669 return cmdutil.copy(ui, repo, pats, opts, rename=True) |
2582 finally: |
2670 finally: |
2606 (or ``-a`` for all unresolved files) |
2694 (or ``-a`` for all unresolved files) |
2607 |
2695 |
2608 Note that Mercurial will not let you commit files with unresolved merge |
2696 Note that Mercurial will not let you commit files with unresolved merge |
2609 conflicts. You must use ``hg resolve -m ...`` before you can commit |
2697 conflicts. You must use ``hg resolve -m ...`` before you can commit |
2610 after a conflicting merge. |
2698 after a conflicting merge. |
|
2699 |
|
2700 Returns 0 on success, 1 if any files fail a resolve attempt. |
2611 """ |
2701 """ |
2612 |
2702 |
2613 all, mark, unmark, show, nostatus = \ |
2703 all, mark, unmark, show, nostatus = \ |
2614 [opts.get(o) for o in 'all mark unmark list no_status'.split()] |
2704 [opts.get(o) for o in 'all mark unmark list no_status'.split()] |
2615 |
2705 |
2644 # backup pre-resolve (merge uses .orig for its own purposes) |
2735 # backup pre-resolve (merge uses .orig for its own purposes) |
2645 a = repo.wjoin(f) |
2736 a = repo.wjoin(f) |
2646 util.copyfile(a, a + ".resolve") |
2737 util.copyfile(a, a + ".resolve") |
2647 |
2738 |
2648 # resolve file |
2739 # resolve file |
2649 ms.resolve(f, wctx, mctx) |
2740 if ms.resolve(f, wctx, mctx): |
|
2741 ret = 1 |
2650 |
2742 |
2651 # replace filemerge's .orig file with our resolve file |
2743 # replace filemerge's .orig file with our resolve file |
2652 util.rename(a + ".resolve", a + ".orig") |
2744 util.rename(a + ".resolve", a + ".orig") |
|
2745 return ret |
2653 |
2746 |
2654 def revert(ui, repo, *pats, **opts): |
2747 def revert(ui, repo, *pats, **opts): |
2655 """restore individual files or directories to an earlier state |
2748 """restore individual files or directories to an earlier state |
2656 |
2749 |
2657 (Use update -r to check out earlier revisions, revert does not |
2750 (Use update -r to check out earlier revisions, revert does not |
2681 If names are given, all files matching the names are reverted. |
2774 If names are given, all files matching the names are reverted. |
2682 If no arguments are given, no files are reverted. |
2775 If no arguments are given, no files are reverted. |
2683 |
2776 |
2684 Modified files are saved with a .orig suffix before reverting. |
2777 Modified files are saved with a .orig suffix before reverting. |
2685 To disable these backups, use --no-backup. |
2778 To disable these backups, use --no-backup. |
|
2779 |
|
2780 Returns 0 on success. |
2686 """ |
2781 """ |
2687 |
2782 |
2688 if opts["date"]: |
2783 if opts["date"]: |
2689 if opts["rev"]: |
2784 if opts["rev"]: |
2690 raise util.Abort(_("you can't specify a revision and a date")) |
2785 raise util.Abort(_("you can't specify a revision and a date")) |
2893 changes are visible for pull by other users, rolling a transaction |
2988 changes are visible for pull by other users, rolling a transaction |
2894 back locally is ineffective (someone else may already have pulled |
2989 back locally is ineffective (someone else may already have pulled |
2895 the changes). Furthermore, a race is possible with readers of the |
2990 the changes). Furthermore, a race is possible with readers of the |
2896 repository; for example an in-progress pull from the repository |
2991 repository; for example an in-progress pull from the repository |
2897 may fail if a rollback is performed. |
2992 may fail if a rollback is performed. |
2898 """ |
2993 |
2899 repo.rollback(opts.get('dry_run')) |
2994 Returns 0 on success, 1 if no rollback data is available. |
|
2995 """ |
|
2996 return repo.rollback(opts.get('dry_run')) |
2900 |
2997 |
2901 def root(ui, repo): |
2998 def root(ui, repo): |
2902 """print the root (top) of the current working directory |
2999 """print the root (top) of the current working directory |
2903 |
3000 |
2904 Print the root directory of the current repository. |
3001 Print the root directory of the current repository. |
|
3002 |
|
3003 Returns 0 on success. |
2905 """ |
3004 """ |
2906 ui.write(repo.root + "\n") |
3005 ui.write(repo.root + "\n") |
2907 |
3006 |
2908 def serve(ui, repo, **opts): |
3007 def serve(ui, repo, **opts): |
2909 """start stand-alone webserver |
3008 """start stand-alone webserver |
3093 This generates a brief summary of the working directory state, |
3196 This generates a brief summary of the working directory state, |
3094 including parents, branch, commit status, and available updates. |
3197 including parents, branch, commit status, and available updates. |
3095 |
3198 |
3096 With the --remote option, this will check the default paths for |
3199 With the --remote option, this will check the default paths for |
3097 incoming and outgoing changes. This can be time-consuming. |
3200 incoming and outgoing changes. This can be time-consuming. |
|
3201 |
|
3202 Returns 0 on success. |
3098 """ |
3203 """ |
3099 |
3204 |
3100 ctx = repo[None] |
3205 ctx = repo[None] |
3101 parents = ctx.parents() |
3206 parents = ctx.parents() |
3102 pnode = parents[0].node() |
3207 pnode = parents[0].node() |
3237 |
3342 |
3238 See :hg:`help dates` for a list of formats valid for -d/--date. |
3343 See :hg:`help dates` for a list of formats valid for -d/--date. |
3239 |
3344 |
3240 Since tag names have priority over branch names during revision |
3345 Since tag names have priority over branch names during revision |
3241 lookup, using an existing branch name as a tag name is discouraged. |
3346 lookup, using an existing branch name as a tag name is discouraged. |
|
3347 |
|
3348 Returns 0 on success. |
3242 """ |
3349 """ |
3243 |
3350 |
3244 rev_ = "." |
3351 rev_ = "." |
3245 names = [t.strip() for t in (name1,) + names] |
3352 names = [t.strip() for t in (name1,) + names] |
3246 if len(names) != len(set(names)): |
3353 if len(names) != len(set(names)): |
3291 def tags(ui, repo): |
3398 def tags(ui, repo): |
3292 """list repository tags |
3399 """list repository tags |
3293 |
3400 |
3294 This lists both regular and local tags. When the -v/--verbose |
3401 This lists both regular and local tags. When the -v/--verbose |
3295 switch is used, a third column "local" is printed for local tags. |
3402 switch is used, a third column "local" is printed for local tags. |
|
3403 |
|
3404 Returns 0 on success. |
3296 """ |
3405 """ |
3297 |
3406 |
3298 hexfunc = ui.debugflag and hex or short |
3407 hexfunc = ui.debugflag and hex or short |
3299 tagtype = "" |
3408 tagtype = "" |
3300 |
3409 |
3326 |
3435 |
3327 If you have just made a commit, that commit will be the tip. If |
3436 If you have just made a commit, that commit will be the tip. If |
3328 you have just pulled changes from another repository, the tip of |
3437 you have just pulled changes from another repository, the tip of |
3329 that repository becomes the current tip. The "tip" tag is special |
3438 that repository becomes the current tip. The "tip" tag is special |
3330 and cannot be renamed or assigned to a different changeset. |
3439 and cannot be renamed or assigned to a different changeset. |
|
3440 |
|
3441 Returns 0 on success. |
3331 """ |
3442 """ |
3332 displayer = cmdutil.show_changeset(ui, repo, opts) |
3443 displayer = cmdutil.show_changeset(ui, repo, opts) |
3333 displayer.show(repo[len(repo) - 1]) |
3444 displayer.show(repo[len(repo) - 1]) |
3334 displayer.close() |
3445 displayer.close() |
3335 |
3446 |
3336 def unbundle(ui, repo, fname1, *fnames, **opts): |
3447 def unbundle(ui, repo, fname1, *fnames, **opts): |
3337 """apply one or more changegroup files |
3448 """apply one or more changegroup files |
3338 |
3449 |
3339 Apply one or more compressed changegroup files generated by the |
3450 Apply one or more compressed changegroup files generated by the |
3340 bundle command. |
3451 bundle command. |
|
3452 |
|
3453 Returns 0 on success, 1 if an update has unresolved files. |
3341 """ |
3454 """ |
3342 fnames = (fname1,) + fnames |
3455 fnames = (fname1,) + fnames |
3343 |
3456 |
3344 lock = repo.lock() |
3457 lock = repo.lock() |
3345 try: |
3458 try: |
3419 |
3534 |
3420 This will perform an extensive check of the repository's |
3535 This will perform an extensive check of the repository's |
3421 integrity, validating the hashes and checksums of each entry in |
3536 integrity, validating the hashes and checksums of each entry in |
3422 the changelog, manifest, and tracked files, as well as the |
3537 the changelog, manifest, and tracked files, as well as the |
3423 integrity of their crosslinks and indices. |
3538 integrity of their crosslinks and indices. |
|
3539 |
|
3540 Returns 0 on success, 1 if errors are encountered. |
3424 """ |
3541 """ |
3425 return hg.verify(repo) |
3542 return hg.verify(repo) |
3426 |
3543 |
3427 def version_(ui): |
3544 def version_(ui): |
3428 """output version and copyright information""" |
3545 """output version and copyright information""" |