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))