Show More
@@ -2501,6 +2501,117 b' def debugindexdot(ui, repo, file_=None, ' | |||||
2501 | ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i)) |
|
2501 | ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i)) | |
2502 | ui.write("}\n") |
|
2502 | ui.write("}\n") | |
2503 |
|
2503 | |||
|
2504 | @command('debugdeltachain', | |||
|
2505 | debugrevlogopts + formatteropts, | |||
|
2506 | _('-c|-m|FILE'), | |||
|
2507 | optionalrepo=True) | |||
|
2508 | def debugdeltachain(ui, repo, file_=None, **opts): | |||
|
2509 | """dump information about delta chains in a revlog | |||
|
2510 | ||||
|
2511 | Output can be templatized. Available template keywords are: | |||
|
2512 | ||||
|
2513 | rev revision number | |||
|
2514 | chainid delta chain identifier (numbered by unique base) | |||
|
2515 | chainlen delta chain length to this revision | |||
|
2516 | prevrev previous revision in delta chain | |||
|
2517 | deltatype role of delta / how it was computed | |||
|
2518 | compsize compressed size of revision | |||
|
2519 | uncompsize uncompressed size of revision | |||
|
2520 | chainsize total size of compressed revisions in chain | |||
|
2521 | chainratio total chain size divided by uncompressed revision size | |||
|
2522 | (new delta chains typically start at ratio 2.00) | |||
|
2523 | lindist linear distance from base revision in delta chain to end | |||
|
2524 | of this revision | |||
|
2525 | extradist total size of revisions not part of this delta chain from | |||
|
2526 | base of delta chain to end of this revision; a measurement | |||
|
2527 | of how much extra data we need to read/seek across to read | |||
|
2528 | the delta chain for this revision | |||
|
2529 | extraratio extradist divided by chainsize; another representation of | |||
|
2530 | how much unrelated data is needed to load this delta chain | |||
|
2531 | """ | |||
|
2532 | r = cmdutil.openrevlog(repo, 'debugdeltachain', file_, opts) | |||
|
2533 | index = r.index | |||
|
2534 | generaldelta = r.version & revlog.REVLOGGENERALDELTA | |||
|
2535 | ||||
|
2536 | def revinfo(rev): | |||
|
2537 | iterrev = rev | |||
|
2538 | e = index[iterrev] | |||
|
2539 | chain = [] | |||
|
2540 | compsize = e[1] | |||
|
2541 | uncompsize = e[2] | |||
|
2542 | chainsize = 0 | |||
|
2543 | ||||
|
2544 | if generaldelta: | |||
|
2545 | if e[3] == e[5]: | |||
|
2546 | deltatype = 'p1' | |||
|
2547 | elif e[3] == e[6]: | |||
|
2548 | deltatype = 'p2' | |||
|
2549 | elif e[3] == rev - 1: | |||
|
2550 | deltatype = 'prev' | |||
|
2551 | elif e[3] == rev: | |||
|
2552 | deltatype = 'base' | |||
|
2553 | else: | |||
|
2554 | deltatype = 'other' | |||
|
2555 | else: | |||
|
2556 | if e[3] == rev: | |||
|
2557 | deltatype = 'base' | |||
|
2558 | else: | |||
|
2559 | deltatype = 'prev' | |||
|
2560 | ||||
|
2561 | while iterrev != e[3]: | |||
|
2562 | chain.append(iterrev) | |||
|
2563 | chainsize += e[1] | |||
|
2564 | if generaldelta: | |||
|
2565 | iterrev = e[3] | |||
|
2566 | else: | |||
|
2567 | iterrev -= 1 | |||
|
2568 | e = index[iterrev] | |||
|
2569 | else: | |||
|
2570 | chainsize += e[1] | |||
|
2571 | chain.append(iterrev) | |||
|
2572 | ||||
|
2573 | chain.reverse() | |||
|
2574 | return compsize, uncompsize, deltatype, chain, chainsize | |||
|
2575 | ||||
|
2576 | fm = ui.formatter('debugdeltachain', opts) | |||
|
2577 | ||||
|
2578 | fm.plain(' rev chain# chainlen prev delta ' | |||
|
2579 | 'size rawsize chainsize ratio lindist extradist ' | |||
|
2580 | 'extraratio\n') | |||
|
2581 | ||||
|
2582 | chainbases = {} | |||
|
2583 | for rev in r: | |||
|
2584 | comp, uncomp, deltatype, chain, chainsize = revinfo(rev) | |||
|
2585 | chainbase = chain[0] | |||
|
2586 | chainid = chainbases.setdefault(chainbase, len(chainbases) + 1) | |||
|
2587 | basestart = r.start(chainbase) | |||
|
2588 | revstart = r.start(rev) | |||
|
2589 | lineardist = revstart + comp - basestart | |||
|
2590 | extradist = lineardist - chainsize | |||
|
2591 | try: | |||
|
2592 | prevrev = chain[-2] | |||
|
2593 | except IndexError: | |||
|
2594 | prevrev = -1 | |||
|
2595 | ||||
|
2596 | chainratio = float(chainsize) / float(uncomp) | |||
|
2597 | extraratio = float(extradist) / float(chainsize) | |||
|
2598 | ||||
|
2599 | fm.startitem() | |||
|
2600 | fm.write('rev chainid chainlen prevrev deltatype compsize ' | |||
|
2601 | 'uncompsize chainsize chainratio lindist extradist ' | |||
|
2602 | 'extraratio', | |||
|
2603 | '%7d %7d %8d %8d %7s %10d %10d %10d %9.5f %9d %9d %10.5f\n', | |||
|
2604 | rev, chainid, len(chain), prevrev, deltatype, comp, | |||
|
2605 | uncomp, chainsize, chainratio, lineardist, extradist, | |||
|
2606 | extraratio, | |||
|
2607 | rev=rev, chainid=chainid, chainlen=len(chain), | |||
|
2608 | prevrev=prevrev, deltatype=deltatype, compsize=comp, | |||
|
2609 | uncompsize=uncomp, chainsize=chainsize, | |||
|
2610 | chainratio=chainratio, lindist=lineardist, | |||
|
2611 | extradist=extradist, extraratio=extraratio) | |||
|
2612 | ||||
|
2613 | fm.end() | |||
|
2614 | ||||
2504 | @command('debuginstall', [], '', norepo=True) |
|
2615 | @command('debuginstall', [], '', norepo=True) | |
2505 | def debuginstall(ui): |
|
2616 | def debuginstall(ui): | |
2506 | '''test Mercurial installation |
|
2617 | '''test Mercurial installation |
@@ -80,6 +80,7 b' Show debug commands if there are no othe' | |||||
80 | debugdag |
|
80 | debugdag | |
81 | debugdata |
|
81 | debugdata | |
82 | debugdate |
|
82 | debugdate | |
|
83 | debugdeltachain | |||
83 | debugdirstate |
|
84 | debugdirstate | |
84 | debugdiscovery |
|
85 | debugdiscovery | |
85 | debugextensions |
|
86 | debugextensions | |
@@ -243,6 +244,7 b' Show all commands + options' | |||||
243 | debugdag: tags, branches, dots, spaces |
|
244 | debugdag: tags, branches, dots, spaces | |
244 | debugdata: changelog, manifest, dir |
|
245 | debugdata: changelog, manifest, dir | |
245 | debugdate: extended |
|
246 | debugdate: extended | |
|
247 | debugdeltachain: changelog, manifest, dir, template | |||
246 | debugdirstate: nodates, datesort |
|
248 | debugdirstate: nodates, datesort | |
247 | debugdiscovery: old, nonheads, ssh, remotecmd, insecure |
|
249 | debugdiscovery: old, nonheads, ssh, remotecmd, insecure | |
248 | debugextensions: template |
|
250 | debugextensions: template |
@@ -44,6 +44,32 b' Test debugindex, with and without the --' | |||||
44 | rev flag offset length size ..... link p1 p2 nodeid (re) |
|
44 | rev flag offset length size ..... link p1 p2 nodeid (re) | |
45 | 0 0000 0 3 2 .... 0 -1 -1 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 (re) |
|
45 | 0 0000 0 3 2 .... 0 -1 -1 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 (re) | |
46 |
|
46 | |||
|
47 | debugdelta chain basic output | |||
|
48 | ||||
|
49 | $ hg debugdeltachain -m | |||
|
50 | rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio | |||
|
51 | 0 1 1 -1 base 44 43 44 1.02326 44 0 0.00000 | |||
|
52 | ||||
|
53 | $ hg debugdeltachain -m -T '{rev} {chainid} {chainlen}\n' | |||
|
54 | 0 1 1 | |||
|
55 | ||||
|
56 | $ hg debugdeltachain -m -Tjson | |||
|
57 | [ | |||
|
58 | { | |||
|
59 | "chainid": 1, | |||
|
60 | "chainlen": 1, | |||
|
61 | "chainratio": 1.02325581395, | |||
|
62 | "chainsize": 44, | |||
|
63 | "compsize": 44, | |||
|
64 | "deltatype": "base", | |||
|
65 | "extradist": 0, | |||
|
66 | "extraratio": 0.0, | |||
|
67 | "lindist": 44, | |||
|
68 | "prevrev": -1, | |||
|
69 | "rev": 0, | |||
|
70 | "uncompsize": 43 | |||
|
71 | } | |||
|
72 | ] | |||
47 |
|
73 | |||
48 | Test max chain len |
|
74 | Test max chain len | |
49 | $ cat >> $HGRCPATH << EOF |
|
75 | $ cat >> $HGRCPATH << EOF |
@@ -812,6 +812,8 b' Test list of internal help commands' | |||||
812 | description |
|
812 | description | |
813 | debugdata dump the contents of a data file revision |
|
813 | debugdata dump the contents of a data file revision | |
814 | debugdate parse and display a date |
|
814 | debugdate parse and display a date | |
|
815 | debugdeltachain | |||
|
816 | dump information about delta chains in a revlog | |||
815 | debugdirstate |
|
817 | debugdirstate | |
816 | show the contents of the current dirstate |
|
818 | show the contents of the current dirstate | |
817 | debugdiscovery |
|
819 | debugdiscovery |
General Comments 0
You need to be logged in to leave comments.
Login now