Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/debugcommands.py @ 50543:1b73868d17cf
cli: make debugnodemap capable of inspecting an arbitrary nodemap
This lets us inspect the manifest nodemap and individual directory
nodemaps when treemanifest is used.
author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
---|---|
date | Thu, 18 May 2023 18:45:54 +0100 |
parents | f0d2b18f0274 |
children | 1a4f54574e3d |
comparison
equal
deleted
inserted
replaced
50542:39ed7b2953bb | 50543:1b73868d17cf |
---|---|
48 dirstateutils, | 48 dirstateutils, |
49 encoding, | 49 encoding, |
50 error, | 50 error, |
51 exchange, | 51 exchange, |
52 extensions, | 52 extensions, |
53 filelog, | |
53 filemerge, | 54 filemerge, |
54 filesetlang, | 55 filesetlang, |
55 formatter, | 56 formatter, |
56 hg, | 57 hg, |
57 httppeer, | 58 httppeer, |
58 localrepo, | 59 localrepo, |
59 lock as lockmod, | 60 lock as lockmod, |
60 logcmdutil, | 61 logcmdutil, |
62 manifest, | |
61 mergestate as mergestatemod, | 63 mergestate as mergestatemod, |
62 metadata, | 64 metadata, |
63 obsolete, | 65 obsolete, |
64 obsutil, | 66 obsutil, |
65 pathutil, | 67 pathutil, |
2598 ui.write(b'\n') | 2600 ui.write(b'\n') |
2599 | 2601 |
2600 | 2602 |
2601 @command( | 2603 @command( |
2602 b'debugnodemap', | 2604 b'debugnodemap', |
2603 [ | 2605 ( |
2604 ( | 2606 cmdutil.debugrevlogopts |
2605 b'', | 2607 + [ |
2606 b'dump-new', | 2608 ( |
2607 False, | 2609 b'', |
2608 _(b'write a (new) persistent binary nodemap on stdout'), | 2610 b'dump-new', |
2609 ), | 2611 False, |
2610 (b'', b'dump-disk', False, _(b'dump on-disk data on stdout')), | 2612 _(b'write a (new) persistent binary nodemap on stdout'), |
2611 ( | 2613 ), |
2612 b'', | 2614 (b'', b'dump-disk', False, _(b'dump on-disk data on stdout')), |
2613 b'check', | 2615 ( |
2614 False, | 2616 b'', |
2615 _(b'check that the data on disk data are correct.'), | 2617 b'check', |
2616 ), | 2618 False, |
2617 ( | 2619 _(b'check that the data on disk data are correct.'), |
2618 b'', | 2620 ), |
2619 b'metadata', | 2621 ( |
2620 False, | 2622 b'', |
2621 _(b'display the on disk meta data for the nodemap'), | 2623 b'metadata', |
2622 ), | 2624 False, |
2623 ], | 2625 _(b'display the on disk meta data for the nodemap'), |
2624 ) | 2626 ), |
2625 def debugnodemap(ui, repo, **opts): | 2627 ] |
2628 ), | |
2629 _(b'-c|-m|FILE REV'), | |
2630 ) | |
2631 def debugnodemap(ui, repo, file_=None, **opts): | |
2626 """write and inspect on disk nodemap""" | 2632 """write and inspect on disk nodemap""" |
2633 if opts.get('changelog') or opts.get('manifest') or opts.get('dir'): | |
2634 if file_ is not None: | |
2635 raise error.CommandError(b'debugnodemap', _(b'invalid arguments')) | |
2636 elif file_ is None: | |
2637 opts['changelog'] = True | |
2638 r = cmdutil.openstorage( | |
2639 repo.unfiltered(), b'debugnodemap', file_, pycompat.byteskwargs(opts) | |
2640 ) | |
2641 if isinstance(r, manifest.manifestrevlog) or isinstance(r, filelog.filelog): | |
2642 r = r._revlog | |
2627 if opts['dump_new']: | 2643 if opts['dump_new']: |
2628 unfi = repo.unfiltered() | 2644 if util.safehasattr(r.index, "nodemap_data_all"): |
2629 cl = unfi.changelog | 2645 data = r.index.nodemap_data_all() |
2630 if util.safehasattr(cl.index, "nodemap_data_all"): | |
2631 data = cl.index.nodemap_data_all() | |
2632 else: | 2646 else: |
2633 data = nodemap.persistent_data(cl.index) | 2647 data = nodemap.persistent_data(r.index) |
2634 ui.write(data) | 2648 ui.write(data) |
2635 elif opts['dump_disk']: | 2649 elif opts['dump_disk']: |
2636 unfi = repo.unfiltered() | 2650 nm_data = nodemap.persisted_data(r) |
2637 cl = unfi.changelog | |
2638 nm_data = nodemap.persisted_data(cl) | |
2639 if nm_data is not None: | 2651 if nm_data is not None: |
2640 docket, data = nm_data | 2652 docket, data = nm_data |
2641 ui.write(data[:]) | 2653 ui.write(data[:]) |
2642 elif opts['check']: | 2654 elif opts['check']: |
2643 unfi = repo.unfiltered() | 2655 nm_data = nodemap.persisted_data(r) |
2644 cl = unfi.changelog | |
2645 nm_data = nodemap.persisted_data(cl) | |
2646 if nm_data is not None: | 2656 if nm_data is not None: |
2647 docket, data = nm_data | 2657 docket, data = nm_data |
2648 return nodemap.check_data(ui, cl.index, data) | 2658 return nodemap.check_data(ui, r.index, data) |
2649 elif opts['metadata']: | 2659 elif opts['metadata']: |
2650 unfi = repo.unfiltered() | 2660 nm_data = nodemap.persisted_data(r) |
2651 cl = unfi.changelog | |
2652 nm_data = nodemap.persisted_data(cl) | |
2653 if nm_data is not None: | 2661 if nm_data is not None: |
2654 docket, data = nm_data | 2662 docket, data = nm_data |
2655 ui.write((b"uid: %s\n") % docket.uid) | 2663 ui.write((b"uid: %s\n") % docket.uid) |
2656 ui.write((b"tip-rev: %d\n") % docket.tip_rev) | 2664 ui.write((b"tip-rev: %d\n") % docket.tip_rev) |
2657 ui.write((b"tip-node: %s\n") % hex(docket.tip_node)) | 2665 ui.write((b"tip-node: %s\n") % hex(docket.tip_node)) |