289 ui.write("%s%s\n" % (indent_string, hex(node))) |
289 ui.write("%s%s\n" % (indent_string, hex(node))) |
290 chain = node |
290 chain = node |
291 |
291 |
292 def _debugobsmarkers(ui, part, indent=0, **opts): |
292 def _debugobsmarkers(ui, part, indent=0, **opts): |
293 """display version and markers contained in 'data'""" |
293 """display version and markers contained in 'data'""" |
|
294 opts = pycompat.byteskwargs(opts) |
294 data = part.read() |
295 data = part.read() |
295 indent_string = ' ' * indent |
296 indent_string = ' ' * indent |
296 try: |
297 try: |
297 version, markers = obsolete._readmarkers(data) |
298 version, markers = obsolete._readmarkers(data) |
298 except error.UnknownVersion as exc: |
299 except error.UnknownVersion as exc: |
509 ui.write("\n") |
510 ui.write("\n") |
510 |
511 |
511 @command('debugdata', cmdutil.debugrevlogopts, _('-c|-m|FILE REV')) |
512 @command('debugdata', cmdutil.debugrevlogopts, _('-c|-m|FILE REV')) |
512 def debugdata(ui, repo, file_, rev=None, **opts): |
513 def debugdata(ui, repo, file_, rev=None, **opts): |
513 """dump the contents of a data file revision""" |
514 """dump the contents of a data file revision""" |
|
515 opts = pycompat.byteskwargs(opts) |
514 if opts.get('changelog') or opts.get('manifest') or opts.get('dir'): |
516 if opts.get('changelog') or opts.get('manifest') or opts.get('dir'): |
515 if rev is not None: |
517 if rev is not None: |
516 raise error.CommandError('debugdata', _('invalid arguments')) |
518 raise error.CommandError('debugdata', _('invalid arguments')) |
517 file_, rev = None, file_ |
519 file_, rev = None, file_ |
518 elif rev is None: |
520 elif rev is None: |
565 of how much extra data we need to read/seek across to read |
567 of how much extra data we need to read/seek across to read |
566 the delta chain for this revision |
568 the delta chain for this revision |
567 :``extraratio``: extradist divided by chainsize; another representation of |
569 :``extraratio``: extradist divided by chainsize; another representation of |
568 how much unrelated data is needed to load this delta chain |
570 how much unrelated data is needed to load this delta chain |
569 """ |
571 """ |
|
572 opts = pycompat.byteskwargs(opts) |
570 r = cmdutil.openrevlog(repo, 'debugdeltachain', file_, opts) |
573 r = cmdutil.openrevlog(repo, 'debugdeltachain', file_, opts) |
571 index = r.index |
574 index = r.index |
572 generaldelta = r.version & revlog.FLAG_GENERALDELTA |
575 generaldelta = r.version & revlog.FLAG_GENERALDELTA |
573 |
576 |
574 def revinfo(rev): |
577 def revinfo(rev): |
677 _('use old-style discovery with non-heads included')), |
680 _('use old-style discovery with non-heads included')), |
678 ] + cmdutil.remoteopts, |
681 ] + cmdutil.remoteopts, |
679 _('[-l REV] [-r REV] [-b BRANCH]... [OTHER]')) |
682 _('[-l REV] [-r REV] [-b BRANCH]... [OTHER]')) |
680 def debugdiscovery(ui, repo, remoteurl="default", **opts): |
683 def debugdiscovery(ui, repo, remoteurl="default", **opts): |
681 """runs the changeset discovery protocol in isolation""" |
684 """runs the changeset discovery protocol in isolation""" |
|
685 opts = pycompat.byteskwargs(opts) |
682 remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl), |
686 remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl), |
683 opts.get('branch')) |
687 opts.get('branch')) |
684 remote = hg.peer(repo, opts, remoteurl) |
688 remote = hg.peer(repo, opts, remoteurl) |
685 ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl)) |
689 ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl)) |
686 |
690 |
738 doit(localrevs, remoterevs) |
742 doit(localrevs, remoterevs) |
739 |
743 |
740 @command('debugextensions', cmdutil.formatteropts, [], norepo=True) |
744 @command('debugextensions', cmdutil.formatteropts, [], norepo=True) |
741 def debugextensions(ui, **opts): |
745 def debugextensions(ui, **opts): |
742 '''show information about active extensions''' |
746 '''show information about active extensions''' |
|
747 opts = pycompat.byteskwargs(opts) |
743 exts = extensions.extensions(ui) |
748 exts = extensions.extensions(ui) |
744 hgver = util.version() |
749 hgver = util.version() |
745 fm = ui.formatter('debugextensions', opts) |
750 fm = ui.formatter('debugextensions', opts) |
746 for extname, extmod in sorted(exts, key=operator.itemgetter(0)): |
751 for extname, extmod in sorted(exts, key=operator.itemgetter(0)): |
747 isinternal = extensions.ismoduleinternal(extmod) |
752 isinternal = extensions.ismoduleinternal(extmod) |
820 """retrieves a bundle from a repo |
825 """retrieves a bundle from a repo |
821 |
826 |
822 Every ID must be a full-length hex node id string. Saves the bundle to the |
827 Every ID must be a full-length hex node id string. Saves the bundle to the |
823 given file. |
828 given file. |
824 """ |
829 """ |
|
830 opts = pycompat.byteskwargs(opts) |
825 repo = hg.peer(ui, opts, repopath) |
831 repo = hg.peer(ui, opts, repopath) |
826 if not repo.capable('getbundle'): |
832 if not repo.capable('getbundle'): |
827 raise error.Abort("getbundle() not supported by target repository") |
833 raise error.Abort("getbundle() not supported by target repository") |
828 args = {} |
834 args = {} |
829 if common: |
835 if common: |
889 [('f', 'format', 0, _('revlog format'), _('FORMAT'))], |
895 [('f', 'format', 0, _('revlog format'), _('FORMAT'))], |
890 _('[-f FORMAT] -c|-m|FILE'), |
896 _('[-f FORMAT] -c|-m|FILE'), |
891 optionalrepo=True) |
897 optionalrepo=True) |
892 def debugindex(ui, repo, file_=None, **opts): |
898 def debugindex(ui, repo, file_=None, **opts): |
893 """dump the contents of an index file""" |
899 """dump the contents of an index file""" |
|
900 opts = pycompat.byteskwargs(opts) |
894 r = cmdutil.openrevlog(repo, 'debugindex', file_, opts) |
901 r = cmdutil.openrevlog(repo, 'debugindex', file_, opts) |
895 format = opts.get('format', 0) |
902 format = opts.get('format', 0) |
896 if format not in (0, 1): |
903 if format not in (0, 1): |
897 raise error.Abort(_("unknown format %d") % format) |
904 raise error.Abort(_("unknown format %d") % format) |
898 |
905 |
943 |
950 |
944 @command('debugindexdot', cmdutil.debugrevlogopts, |
951 @command('debugindexdot', cmdutil.debugrevlogopts, |
945 _('-c|-m|FILE'), optionalrepo=True) |
952 _('-c|-m|FILE'), optionalrepo=True) |
946 def debugindexdot(ui, repo, file_=None, **opts): |
953 def debugindexdot(ui, repo, file_=None, **opts): |
947 """dump an index DAG as a graphviz dot file""" |
954 """dump an index DAG as a graphviz dot file""" |
|
955 opts = pycompat.byteskwargs(opts) |
948 r = cmdutil.openrevlog(repo, 'debugindexdot', file_, opts) |
956 r = cmdutil.openrevlog(repo, 'debugindexdot', file_, opts) |
949 ui.write(("digraph G {\n")) |
957 ui.write(("digraph G {\n")) |
950 for i in r: |
958 for i in r: |
951 node = r.node(i) |
959 node = r.node(i) |
952 pp = r.parents(node) |
960 pp = r.parents(node) |
959 def debuginstall(ui, **opts): |
967 def debuginstall(ui, **opts): |
960 '''test Mercurial installation |
968 '''test Mercurial installation |
961 |
969 |
962 Returns 0 on success. |
970 Returns 0 on success. |
963 ''' |
971 ''' |
|
972 opts = pycompat.byteskwargs(opts) |
964 |
973 |
965 def writetemp(contents): |
974 def writetemp(contents): |
966 (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-") |
975 (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-") |
967 f = os.fdopen(fd, pycompat.sysstr("wb")) |
976 f = os.fdopen(fd, pycompat.sysstr("wb")) |
968 f.write(contents) |
977 f.write(contents) |
1127 """test whether node ids are known to a repo |
1136 """test whether node ids are known to a repo |
1128 |
1137 |
1129 Every ID must be a full-length hex node id string. Returns a list of 0s |
1138 Every ID must be a full-length hex node id string. Returns a list of 0s |
1130 and 1s indicating unknown/known. |
1139 and 1s indicating unknown/known. |
1131 """ |
1140 """ |
|
1141 opts = pycompat.byteskwargs(opts) |
1132 repo = hg.peer(ui, opts, repopath) |
1142 repo = hg.peer(ui, opts, repopath) |
1133 if not repo.capable('known'): |
1143 if not repo.capable('known'): |
1134 raise error.Abort("known() not supported by target repository") |
1144 raise error.Abort("known() not supported by target repository") |
1135 flags = repo.known([bin(s) for s in ids]) |
1145 flags = repo.known([bin(s) for s in ids]) |
1136 ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags]))) |
1146 ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags]))) |
1344 _('[OBSOLETED [REPLACEMENT ...]]')) |
1354 _('[OBSOLETED [REPLACEMENT ...]]')) |
1345 def debugobsolete(ui, repo, precursor=None, *successors, **opts): |
1355 def debugobsolete(ui, repo, precursor=None, *successors, **opts): |
1346 """create arbitrary obsolete marker |
1356 """create arbitrary obsolete marker |
1347 |
1357 |
1348 With no arguments, displays the list of obsolescence markers.""" |
1358 With no arguments, displays the list of obsolescence markers.""" |
|
1359 |
|
1360 opts = pycompat.byteskwargs(opts) |
1349 |
1361 |
1350 def parsenodeid(s): |
1362 def parsenodeid(s): |
1351 try: |
1363 try: |
1352 # We do not use revsingle/revrange functions here to accept |
1364 # We do not use revsingle/revrange functions here to accept |
1353 # arbitrary node identifiers, possibly not present in the |
1365 # arbitrary node identifiers, possibly not present in the |
1556 If merge tool is chosen before matching against |
1568 If merge tool is chosen before matching against |
1557 ``merge-patterns``, this command can't show any helpful |
1569 ``merge-patterns``, this command can't show any helpful |
1558 information, even with --debug. In such case, information above is |
1570 information, even with --debug. In such case, information above is |
1559 useful to know why a merge tool is chosen. |
1571 useful to know why a merge tool is chosen. |
1560 """ |
1572 """ |
|
1573 opts = pycompat.byteskwargs(opts) |
1561 overrides = {} |
1574 overrides = {} |
1562 if opts['tool']: |
1575 if opts['tool']: |
1563 overrides[('ui', 'forcemerge')] = opts['tool'] |
1576 overrides[('ui', 'forcemerge')] = opts['tool'] |
1564 ui.note(('with --tool %r\n') % (opts['tool'])) |
1577 ui.note(('with --tool %r\n') % (opts['tool'])) |
1565 |
1578 |
1677 [('r', 'rev', '', _('revision to debug'), _('REV'))], |
1690 [('r', 'rev', '', _('revision to debug'), _('REV'))], |
1678 _('[-r REV] FILE')) |
1691 _('[-r REV] FILE')) |
1679 def debugrename(ui, repo, file1, *pats, **opts): |
1692 def debugrename(ui, repo, file1, *pats, **opts): |
1680 """dump rename information""" |
1693 """dump rename information""" |
1681 |
1694 |
|
1695 opts = pycompat.byteskwargs(opts) |
1682 ctx = scmutil.revsingle(repo, opts.get('rev')) |
1696 ctx = scmutil.revsingle(repo, opts.get('rev')) |
1683 m = scmutil.match(ctx, (file1,) + pats, opts) |
1697 m = scmutil.match(ctx, (file1,) + pats, opts) |
1684 for abs in ctx.walk(m): |
1698 for abs in ctx.walk(m): |
1685 fctx = ctx[abs] |
1699 fctx = ctx[abs] |
1686 o = fctx.filelog().renamed(fctx.filenode()) |
1700 o = fctx.filelog().renamed(fctx.filenode()) |
1694 [('d', 'dump', False, _('dump index data'))], |
1708 [('d', 'dump', False, _('dump index data'))], |
1695 _('-c|-m|FILE'), |
1709 _('-c|-m|FILE'), |
1696 optionalrepo=True) |
1710 optionalrepo=True) |
1697 def debugrevlog(ui, repo, file_=None, **opts): |
1711 def debugrevlog(ui, repo, file_=None, **opts): |
1698 """show data and statistics about a revlog""" |
1712 """show data and statistics about a revlog""" |
|
1713 opts = pycompat.byteskwargs(opts) |
1699 r = cmdutil.openrevlog(repo, 'debugrevlog', file_, opts) |
1714 r = cmdutil.openrevlog(repo, 'debugrevlog', file_, opts) |
1700 |
1715 |
1701 if opts.get("dump"): |
1716 if opts.get("dump"): |
1702 numrevs = len(r) |
1717 numrevs = len(r) |
1703 ui.write(("# rev p1rev p2rev start end deltastart base p1 p2" |
1718 ui.write(("# rev p1rev p2rev start end deltastart base p1 p2" |
1941 representation or the parsed tree respectively. |
1956 representation or the parsed tree respectively. |
1942 |
1957 |
1943 Use --verify-optimized to compare the optimized result with the unoptimized |
1958 Use --verify-optimized to compare the optimized result with the unoptimized |
1944 one. Returns 1 if the optimized result differs. |
1959 one. Returns 1 if the optimized result differs. |
1945 """ |
1960 """ |
|
1961 opts = pycompat.byteskwargs(opts) |
1946 stages = [ |
1962 stages = [ |
1947 ('parsed', lambda tree: tree), |
1963 ('parsed', lambda tree: tree), |
1948 ('expanded', lambda tree: revsetlang.expandaliases(ui, tree)), |
1964 ('expanded', lambda tree: revsetlang.expandaliases(ui, tree)), |
1949 ('concatenated', revsetlang.foldconcat), |
1965 ('concatenated', revsetlang.foldconcat), |
1950 ('analyzed', revsetlang.analyze), |
1966 ('analyzed', revsetlang.analyze), |
2186 |
2202 |
2187 @command('debugwalk', cmdutil.walkopts, _('[OPTION]... [FILE]...'), |
2203 @command('debugwalk', cmdutil.walkopts, _('[OPTION]... [FILE]...'), |
2188 inferrepo=True) |
2204 inferrepo=True) |
2189 def debugwalk(ui, repo, *pats, **opts): |
2205 def debugwalk(ui, repo, *pats, **opts): |
2190 """show how files match on given patterns""" |
2206 """show how files match on given patterns""" |
|
2207 opts = pycompat.byteskwargs(opts) |
2191 m = scmutil.match(repo[None], pats, opts) |
2208 m = scmutil.match(repo[None], pats, opts) |
2192 ui.write(('matcher: %r\n' % m)) |
2209 ui.write(('matcher: %r\n' % m)) |
2193 items = list(repo[None].walk(m)) |
2210 items = list(repo[None].walk(m)) |
2194 if not items: |
2211 if not items: |
2195 return |
2212 return |
2209 ('', 'five', '', 'five'), |
2226 ('', 'five', '', 'five'), |
2210 ] + cmdutil.remoteopts, |
2227 ] + cmdutil.remoteopts, |
2211 _('REPO [OPTIONS]... [ONE [TWO]]'), |
2228 _('REPO [OPTIONS]... [ONE [TWO]]'), |
2212 norepo=True) |
2229 norepo=True) |
2213 def debugwireargs(ui, repopath, *vals, **opts): |
2230 def debugwireargs(ui, repopath, *vals, **opts): |
|
2231 opts = pycompat.byteskwargs(opts) |
2214 repo = hg.peer(ui, opts, repopath) |
2232 repo = hg.peer(ui, opts, repopath) |
2215 for opt in cmdutil.remoteopts: |
2233 for opt in cmdutil.remoteopts: |
2216 del opts[opt[1]] |
2234 del opts[opt[1]] |
2217 args = {} |
2235 args = {} |
2218 for k, v in opts.iteritems(): |
2236 for k, v in opts.iteritems(): |