[PATCH 6 of 6] debugcommands: move 'debugrevlog' in the new module
Augie Fackler
raf at durin42.com
Tue Feb 14 13:39:03 EST 2017
On Tue, Feb 14, 2017 at 07:36:23PM +0100, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
> # Date 1486026160 -3600
> # Thu Feb 02 10:02:40 2017 +0100
> # Node ID 9e0fc045b53a2a6d875913514903f5555386fff8
> # Parent 63c9196e60144b261decc768ad13958dfd15fd4e
> # EXP-Topic debugcommands
> debugcommands: move 'debugrevlog' in the new module
Queued these, thanks.
>
> diff -r 63c9196e6014 -r 9e0fc045b53a mercurial/commands.py
> --- a/mercurial/commands.py Thu Feb 02 10:01:54 2017 +0100
> +++ b/mercurial/commands.py Thu Feb 02 10:02:40 2017 +0100
> @@ -11,7 +11,6 @@ import difflib
> import errno
> import os
> import re
> -import string
> import time
>
> from .i18n import _
> @@ -47,7 +46,6 @@ from . import (
> patch,
> phases,
> pycompat,
> - revlog,
> revset,
> scmutil,
> server,
> @@ -1858,226 +1856,6 @@ def copy(ui, repo, *pats, **opts):
> with repo.wlock(False):
> return cmdutil.copy(ui, repo, pats, opts)
>
> - at command('debugrevlog', debugrevlogopts +
> - [('d', 'dump', False, _('dump index data'))],
> - _('-c|-m|FILE'),
> - optionalrepo=True)
> -def debugrevlog(ui, repo, file_=None, **opts):
> - """show data and statistics about a revlog"""
> - r = cmdutil.openrevlog(repo, 'debugrevlog', file_, opts)
> -
> - if opts.get("dump"):
> - numrevs = len(r)
> - ui.write(("# rev p1rev p2rev start end deltastart base p1 p2"
> - " rawsize totalsize compression heads chainlen\n"))
> - ts = 0
> - heads = set()
> -
> - for rev in xrange(numrevs):
> - dbase = r.deltaparent(rev)
> - if dbase == -1:
> - dbase = rev
> - cbase = r.chainbase(rev)
> - clen = r.chainlen(rev)
> - p1, p2 = r.parentrevs(rev)
> - rs = r.rawsize(rev)
> - ts = ts + rs
> - heads -= set(r.parentrevs(rev))
> - heads.add(rev)
> - try:
> - compression = ts / r.end(rev)
> - except ZeroDivisionError:
> - compression = 0
> - ui.write("%5d %5d %5d %5d %5d %10d %4d %4d %4d %7d %9d "
> - "%11d %5d %8d\n" %
> - (rev, p1, p2, r.start(rev), r.end(rev),
> - r.start(dbase), r.start(cbase),
> - r.start(p1), r.start(p2),
> - rs, ts, compression, len(heads), clen))
> - return 0
> -
> - v = r.version
> - format = v & 0xFFFF
> - flags = []
> - gdelta = False
> - if v & revlog.REVLOGNGINLINEDATA:
> - flags.append('inline')
> - if v & revlog.REVLOGGENERALDELTA:
> - gdelta = True
> - flags.append('generaldelta')
> - if not flags:
> - flags = ['(none)']
> -
> - nummerges = 0
> - numfull = 0
> - numprev = 0
> - nump1 = 0
> - nump2 = 0
> - numother = 0
> - nump1prev = 0
> - nump2prev = 0
> - chainlengths = []
> -
> - datasize = [None, 0, 0]
> - fullsize = [None, 0, 0]
> - deltasize = [None, 0, 0]
> - chunktypecounts = {}
> - chunktypesizes = {}
> -
> - def addsize(size, l):
> - if l[0] is None or size < l[0]:
> - l[0] = size
> - if size > l[1]:
> - l[1] = size
> - l[2] += size
> -
> - numrevs = len(r)
> - for rev in xrange(numrevs):
> - p1, p2 = r.parentrevs(rev)
> - delta = r.deltaparent(rev)
> - if format > 0:
> - addsize(r.rawsize(rev), datasize)
> - if p2 != nullrev:
> - nummerges += 1
> - size = r.length(rev)
> - if delta == nullrev:
> - chainlengths.append(0)
> - numfull += 1
> - addsize(size, fullsize)
> - else:
> - chainlengths.append(chainlengths[delta] + 1)
> - addsize(size, deltasize)
> - if delta == rev - 1:
> - numprev += 1
> - if delta == p1:
> - nump1prev += 1
> - elif delta == p2:
> - nump2prev += 1
> - elif delta == p1:
> - nump1 += 1
> - elif delta == p2:
> - nump2 += 1
> - elif delta != nullrev:
> - numother += 1
> -
> - # Obtain data on the raw chunks in the revlog.
> - chunk = r._chunkraw(rev, rev)[1]
> - if chunk:
> - chunktype = chunk[0]
> - else:
> - chunktype = 'empty'
> -
> - if chunktype not in chunktypecounts:
> - chunktypecounts[chunktype] = 0
> - chunktypesizes[chunktype] = 0
> -
> - chunktypecounts[chunktype] += 1
> - chunktypesizes[chunktype] += size
> -
> - # Adjust size min value for empty cases
> - for size in (datasize, fullsize, deltasize):
> - if size[0] is None:
> - size[0] = 0
> -
> - numdeltas = numrevs - numfull
> - numoprev = numprev - nump1prev - nump2prev
> - totalrawsize = datasize[2]
> - datasize[2] /= numrevs
> - fulltotal = fullsize[2]
> - fullsize[2] /= numfull
> - deltatotal = deltasize[2]
> - if numrevs - numfull > 0:
> - deltasize[2] /= numrevs - numfull
> - totalsize = fulltotal + deltatotal
> - avgchainlen = sum(chainlengths) / numrevs
> - maxchainlen = max(chainlengths)
> - compratio = 1
> - if totalsize:
> - compratio = totalrawsize / totalsize
> -
> - basedfmtstr = '%%%dd\n'
> - basepcfmtstr = '%%%dd %s(%%5.2f%%%%)\n'
> -
> - def dfmtstr(max):
> - return basedfmtstr % len(str(max))
> - def pcfmtstr(max, padding=0):
> - return basepcfmtstr % (len(str(max)), ' ' * padding)
> -
> - def pcfmt(value, total):
> - if total:
> - return (value, 100 * float(value) / total)
> - else:
> - return value, 100.0
> -
> - ui.write(('format : %d\n') % format)
> - ui.write(('flags : %s\n') % ', '.join(flags))
> -
> - ui.write('\n')
> - fmt = pcfmtstr(totalsize)
> - fmt2 = dfmtstr(totalsize)
> - ui.write(('revisions : ') + fmt2 % numrevs)
> - ui.write((' merges : ') + fmt % pcfmt(nummerges, numrevs))
> - ui.write((' normal : ') + fmt % pcfmt(numrevs - nummerges, numrevs))
> - ui.write(('revisions : ') + fmt2 % numrevs)
> - ui.write((' full : ') + fmt % pcfmt(numfull, numrevs))
> - ui.write((' deltas : ') + fmt % pcfmt(numdeltas, numrevs))
> - ui.write(('revision size : ') + fmt2 % totalsize)
> - ui.write((' full : ') + fmt % pcfmt(fulltotal, totalsize))
> - ui.write((' deltas : ') + fmt % pcfmt(deltatotal, totalsize))
> -
> - def fmtchunktype(chunktype):
> - if chunktype == 'empty':
> - return ' %s : ' % chunktype
> - elif chunktype in string.ascii_letters:
> - return ' 0x%s (%s) : ' % (hex(chunktype), chunktype)
> - else:
> - return ' 0x%s : ' % hex(chunktype)
> -
> - ui.write('\n')
> - ui.write(('chunks : ') + fmt2 % numrevs)
> - for chunktype in sorted(chunktypecounts):
> - ui.write(fmtchunktype(chunktype))
> - ui.write(fmt % pcfmt(chunktypecounts[chunktype], numrevs))
> - ui.write(('chunks size : ') + fmt2 % totalsize)
> - for chunktype in sorted(chunktypecounts):
> - ui.write(fmtchunktype(chunktype))
> - ui.write(fmt % pcfmt(chunktypesizes[chunktype], totalsize))
> -
> - ui.write('\n')
> - fmt = dfmtstr(max(avgchainlen, compratio))
> - ui.write(('avg chain length : ') + fmt % avgchainlen)
> - ui.write(('max chain length : ') + fmt % maxchainlen)
> - ui.write(('compression ratio : ') + fmt % compratio)
> -
> - if format > 0:
> - ui.write('\n')
> - ui.write(('uncompressed data size (min/max/avg) : %d / %d / %d\n')
> - % tuple(datasize))
> - ui.write(('full revision size (min/max/avg) : %d / %d / %d\n')
> - % tuple(fullsize))
> - ui.write(('delta size (min/max/avg) : %d / %d / %d\n')
> - % tuple(deltasize))
> -
> - if numdeltas > 0:
> - ui.write('\n')
> - fmt = pcfmtstr(numdeltas)
> - fmt2 = pcfmtstr(numdeltas, 4)
> - ui.write(('deltas against prev : ') + fmt % pcfmt(numprev, numdeltas))
> - if numprev > 0:
> - ui.write((' where prev = p1 : ') + fmt2 % pcfmt(nump1prev,
> - numprev))
> - ui.write((' where prev = p2 : ') + fmt2 % pcfmt(nump2prev,
> - numprev))
> - ui.write((' other : ') + fmt2 % pcfmt(numoprev,
> - numprev))
> - if gdelta:
> - ui.write(('deltas against p1 : ')
> - + fmt % pcfmt(nump1, numdeltas))
> - ui.write(('deltas against p2 : ')
> - + fmt % pcfmt(nump2, numdeltas))
> - ui.write(('deltas against other : ') + fmt % pcfmt(numother,
> - numdeltas))
> -
> @command('debugrevspec',
> [('', 'optimize', None,
> _('print parsed tree after optimizing (DEPRECATED)')),
> diff -r 63c9196e6014 -r 9e0fc045b53a mercurial/debugcommands.py
> --- a/mercurial/debugcommands.py Thu Feb 02 10:01:54 2017 +0100
> +++ b/mercurial/debugcommands.py Thu Feb 02 10:02:40 2017 +0100
> @@ -12,6 +12,7 @@ import operator
> import os
> import random
> import socket
> +import string
> import sys
> import tempfile
> import time
> @@ -22,6 +23,7 @@ from .node import (
> hex,
> nullhex,
> nullid,
> + nullrev,
> short,
> )
> from . import (
> @@ -1517,6 +1519,226 @@ def debugrename(ui, repo, file1, *pats,
> else:
> ui.write(_("%s not renamed\n") % rel)
>
> + at command('debugrevlog', commands.debugrevlogopts +
> + [('d', 'dump', False, _('dump index data'))],
> + _('-c|-m|FILE'),
> + optionalrepo=True)
> +def debugrevlog(ui, repo, file_=None, **opts):
> + """show data and statistics about a revlog"""
> + r = cmdutil.openrevlog(repo, 'debugrevlog', file_, opts)
> +
> + if opts.get("dump"):
> + numrevs = len(r)
> + ui.write(("# rev p1rev p2rev start end deltastart base p1 p2"
> + " rawsize totalsize compression heads chainlen\n"))
> + ts = 0
> + heads = set()
> +
> + for rev in xrange(numrevs):
> + dbase = r.deltaparent(rev)
> + if dbase == -1:
> + dbase = rev
> + cbase = r.chainbase(rev)
> + clen = r.chainlen(rev)
> + p1, p2 = r.parentrevs(rev)
> + rs = r.rawsize(rev)
> + ts = ts + rs
> + heads -= set(r.parentrevs(rev))
> + heads.add(rev)
> + try:
> + compression = ts / r.end(rev)
> + except ZeroDivisionError:
> + compression = 0
> + ui.write("%5d %5d %5d %5d %5d %10d %4d %4d %4d %7d %9d "
> + "%11d %5d %8d\n" %
> + (rev, p1, p2, r.start(rev), r.end(rev),
> + r.start(dbase), r.start(cbase),
> + r.start(p1), r.start(p2),
> + rs, ts, compression, len(heads), clen))
> + return 0
> +
> + v = r.version
> + format = v & 0xFFFF
> + flags = []
> + gdelta = False
> + if v & revlog.REVLOGNGINLINEDATA:
> + flags.append('inline')
> + if v & revlog.REVLOGGENERALDELTA:
> + gdelta = True
> + flags.append('generaldelta')
> + if not flags:
> + flags = ['(none)']
> +
> + nummerges = 0
> + numfull = 0
> + numprev = 0
> + nump1 = 0
> + nump2 = 0
> + numother = 0
> + nump1prev = 0
> + nump2prev = 0
> + chainlengths = []
> +
> + datasize = [None, 0, 0]
> + fullsize = [None, 0, 0]
> + deltasize = [None, 0, 0]
> + chunktypecounts = {}
> + chunktypesizes = {}
> +
> + def addsize(size, l):
> + if l[0] is None or size < l[0]:
> + l[0] = size
> + if size > l[1]:
> + l[1] = size
> + l[2] += size
> +
> + numrevs = len(r)
> + for rev in xrange(numrevs):
> + p1, p2 = r.parentrevs(rev)
> + delta = r.deltaparent(rev)
> + if format > 0:
> + addsize(r.rawsize(rev), datasize)
> + if p2 != nullrev:
> + nummerges += 1
> + size = r.length(rev)
> + if delta == nullrev:
> + chainlengths.append(0)
> + numfull += 1
> + addsize(size, fullsize)
> + else:
> + chainlengths.append(chainlengths[delta] + 1)
> + addsize(size, deltasize)
> + if delta == rev - 1:
> + numprev += 1
> + if delta == p1:
> + nump1prev += 1
> + elif delta == p2:
> + nump2prev += 1
> + elif delta == p1:
> + nump1 += 1
> + elif delta == p2:
> + nump2 += 1
> + elif delta != nullrev:
> + numother += 1
> +
> + # Obtain data on the raw chunks in the revlog.
> + chunk = r._chunkraw(rev, rev)[1]
> + if chunk:
> + chunktype = chunk[0]
> + else:
> + chunktype = 'empty'
> +
> + if chunktype not in chunktypecounts:
> + chunktypecounts[chunktype] = 0
> + chunktypesizes[chunktype] = 0
> +
> + chunktypecounts[chunktype] += 1
> + chunktypesizes[chunktype] += size
> +
> + # Adjust size min value for empty cases
> + for size in (datasize, fullsize, deltasize):
> + if size[0] is None:
> + size[0] = 0
> +
> + numdeltas = numrevs - numfull
> + numoprev = numprev - nump1prev - nump2prev
> + totalrawsize = datasize[2]
> + datasize[2] /= numrevs
> + fulltotal = fullsize[2]
> + fullsize[2] /= numfull
> + deltatotal = deltasize[2]
> + if numrevs - numfull > 0:
> + deltasize[2] /= numrevs - numfull
> + totalsize = fulltotal + deltatotal
> + avgchainlen = sum(chainlengths) / numrevs
> + maxchainlen = max(chainlengths)
> + compratio = 1
> + if totalsize:
> + compratio = totalrawsize / totalsize
> +
> + basedfmtstr = '%%%dd\n'
> + basepcfmtstr = '%%%dd %s(%%5.2f%%%%)\n'
> +
> + def dfmtstr(max):
> + return basedfmtstr % len(str(max))
> + def pcfmtstr(max, padding=0):
> + return basepcfmtstr % (len(str(max)), ' ' * padding)
> +
> + def pcfmt(value, total):
> + if total:
> + return (value, 100 * float(value) / total)
> + else:
> + return value, 100.0
> +
> + ui.write(('format : %d\n') % format)
> + ui.write(('flags : %s\n') % ', '.join(flags))
> +
> + ui.write('\n')
> + fmt = pcfmtstr(totalsize)
> + fmt2 = dfmtstr(totalsize)
> + ui.write(('revisions : ') + fmt2 % numrevs)
> + ui.write((' merges : ') + fmt % pcfmt(nummerges, numrevs))
> + ui.write((' normal : ') + fmt % pcfmt(numrevs - nummerges, numrevs))
> + ui.write(('revisions : ') + fmt2 % numrevs)
> + ui.write((' full : ') + fmt % pcfmt(numfull, numrevs))
> + ui.write((' deltas : ') + fmt % pcfmt(numdeltas, numrevs))
> + ui.write(('revision size : ') + fmt2 % totalsize)
> + ui.write((' full : ') + fmt % pcfmt(fulltotal, totalsize))
> + ui.write((' deltas : ') + fmt % pcfmt(deltatotal, totalsize))
> +
> + def fmtchunktype(chunktype):
> + if chunktype == 'empty':
> + return ' %s : ' % chunktype
> + elif chunktype in string.ascii_letters:
> + return ' 0x%s (%s) : ' % (hex(chunktype), chunktype)
> + else:
> + return ' 0x%s : ' % hex(chunktype)
> +
> + ui.write('\n')
> + ui.write(('chunks : ') + fmt2 % numrevs)
> + for chunktype in sorted(chunktypecounts):
> + ui.write(fmtchunktype(chunktype))
> + ui.write(fmt % pcfmt(chunktypecounts[chunktype], numrevs))
> + ui.write(('chunks size : ') + fmt2 % totalsize)
> + for chunktype in sorted(chunktypecounts):
> + ui.write(fmtchunktype(chunktype))
> + ui.write(fmt % pcfmt(chunktypesizes[chunktype], totalsize))
> +
> + ui.write('\n')
> + fmt = dfmtstr(max(avgchainlen, compratio))
> + ui.write(('avg chain length : ') + fmt % avgchainlen)
> + ui.write(('max chain length : ') + fmt % maxchainlen)
> + ui.write(('compression ratio : ') + fmt % compratio)
> +
> + if format > 0:
> + ui.write('\n')
> + ui.write(('uncompressed data size (min/max/avg) : %d / %d / %d\n')
> + % tuple(datasize))
> + ui.write(('full revision size (min/max/avg) : %d / %d / %d\n')
> + % tuple(fullsize))
> + ui.write(('delta size (min/max/avg) : %d / %d / %d\n')
> + % tuple(deltasize))
> +
> + if numdeltas > 0:
> + ui.write('\n')
> + fmt = pcfmtstr(numdeltas)
> + fmt2 = pcfmtstr(numdeltas, 4)
> + ui.write(('deltas against prev : ') + fmt % pcfmt(numprev, numdeltas))
> + if numprev > 0:
> + ui.write((' where prev = p1 : ') + fmt2 % pcfmt(nump1prev,
> + numprev))
> + ui.write((' where prev = p2 : ') + fmt2 % pcfmt(nump2prev,
> + numprev))
> + ui.write((' other : ') + fmt2 % pcfmt(numoprev,
> + numprev))
> + if gdelta:
> + ui.write(('deltas against p1 : ')
> + + fmt % pcfmt(nump1, numdeltas))
> + ui.write(('deltas against p2 : ')
> + + fmt % pcfmt(nump2, numdeltas))
> + ui.write(('deltas against other : ') + fmt % pcfmt(numother,
> + numdeltas))
> +
> @command('debugupgraderepo', [
> ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')),
> ('', 'run', False, _('performs an upgrade')),
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list