comparison mercurial/revlogutils/debug.py @ 49269:69983adfed06

debugindex: introduce a concept of "verbose-only" column We are about to add a bunch of new column and most of them are probably only relevant to --verbose. We add some more testing of the `--verbose` mode in a sidedata context.
author Pierre-Yves DAVID <pierre-yves.david@octobus.net>
date Wed, 01 Jun 2022 00:54:19 +0200
parents a321304269cf
children 251650844331
comparison
equal deleted inserted replaced
49268:a321304269cf 49269:69983adfed06
20 20
21 21
22 class _column_base: 22 class _column_base:
23 """constains the definition of a revlog column 23 """constains the definition of a revlog column
24 24
25 name: the column header, 25 name: the column header,
26 value_func: the function called to get a value, 26 value_func: the function called to get a value,
27 size: the width of the column. 27 size: the width of the column,
28 verbose_only: only include the column in verbose mode.
28 """ 29 """
29 30
30 def __init__(self, name, value_func, size=None): 31 def __init__(self, name, value_func, size=None, verbose=False):
31 self.name = name 32 self.name = name
32 self.value_func = value_func 33 self.value_func = value_func
33 if size is not NODE_SIZE: 34 if size is not NODE_SIZE:
34 if size is None: 35 if size is None:
35 size = 8 # arbitrary default 36 size = 8 # arbitrary default
36 size = max(len(name), size) 37 size = max(len(name), size)
37 self._size = size 38 self._size = size
39 self.verbose_only = verbose
38 40
39 def get_size(self, node_size): 41 def get_size(self, node_size):
40 if self._size is NODE_SIZE: 42 if self._size is NODE_SIZE:
41 return node_size 43 return node_size
42 else: 44 else:
43 return self._size 45 return self._size
44 46
45 47
46 def debug_column(name, size=None): 48 def debug_column(name, size=None, verbose=False):
47 """decorated function is registered as a column 49 """decorated function is registered as a column
48 50
49 name: the name of the column, 51 name: the name of the column,
50 size: the expected size of the column. 52 size: the expected size of the column.
51 """ 53 """
53 def register(func): 55 def register(func):
54 entry = _column_base( 56 entry = _column_base(
55 name=name, 57 name=name,
56 value_func=func, 58 value_func=func,
57 size=size, 59 size=size,
60 verbose=verbose,
58 ) 61 )
59 INDEX_ENTRY_DEBUG_COLUMN.append(entry) 62 INDEX_ENTRY_DEBUG_COLUMN.append(entry)
60 return entry 63 return entry
61 64
62 return register 65 return register
111 114
112 fm = formatter 115 fm = formatter
113 116
114 header_pieces = [] 117 header_pieces = []
115 for column in INDEX_ENTRY_DEBUG_COLUMN: 118 for column in INDEX_ENTRY_DEBUG_COLUMN:
119 if column.verbose_only and not ui.verbose:
120 continue
116 size = column.get_size(idlen) 121 size = column.get_size(idlen)
117 name = column.name 122 name = column.name
118 header_pieces.append(name.rjust(size)) 123 header_pieces.append(name.rjust(size))
119 124
120 fm.plain(b' '.join(header_pieces) + b'\n') 125 fm.plain(b' '.join(header_pieces) + b'\n')
124 for rev in revlog: 129 for rev in revlog:
125 fm.startitem() 130 fm.startitem()
126 entry = index[rev] 131 entry = index[rev]
127 first = True 132 first = True
128 for column in INDEX_ENTRY_DEBUG_COLUMN: 133 for column in INDEX_ENTRY_DEBUG_COLUMN:
134 if column.verbose_only and not ui.verbose:
135 continue
129 if not first: 136 if not first:
130 fm.plain(b' ') 137 fm.plain(b' ')
131 first = False 138 first = False
132 139
133 size = column.get_size(idlen) 140 size = column.get_size(idlen)