comparison mercurial/debugcommands.py @ 50928:d718eddf01d9

safehasattr: drop usage in favor of hasattr The two functions should now be equivalent at least in their usage in core.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 31 Aug 2023 23:56:15 +0200
parents 0ab3956540a6
children 18c8c18993f0
comparison
equal deleted inserted replaced
50927:7a8ea1397816 50928:d718eddf01d9
1280 1280
1281 data = {} 1281 data = {}
1282 if opts.get(b'old'): 1282 if opts.get(b'old'):
1283 1283
1284 def doit(pushedrevs, remoteheads, remote=remote): 1284 def doit(pushedrevs, remoteheads, remote=remote):
1285 if not util.safehasattr(remote, 'branches'): 1285 if not hasattr(remote, 'branches'):
1286 # enable in-client legacy support 1286 # enable in-client legacy support
1287 remote = localrepo.locallegacypeer(remote.local()) 1287 remote = localrepo.locallegacypeer(remote.local())
1288 if remote_revs: 1288 if remote_revs:
1289 r = remote._repo.filtered(b'debug-discovery-remote-filter') 1289 r = remote._repo.filtered(b'debug-discovery-remote-filter')
1290 remote._repo = r 1290 remote._repo = r
1480 fm = ui.formatter(b'debugextensions', opts) 1480 fm = ui.formatter(b'debugextensions', opts)
1481 for extname, extmod in sorted(exts, key=operator.itemgetter(0)): 1481 for extname, extmod in sorted(exts, key=operator.itemgetter(0)):
1482 isinternal = extensions.ismoduleinternal(extmod) 1482 isinternal = extensions.ismoduleinternal(extmod)
1483 extsource = None 1483 extsource = None
1484 1484
1485 if util.safehasattr(extmod, '__file__'): 1485 if hasattr(extmod, '__file__'):
1486 extsource = pycompat.fsencode(extmod.__file__) 1486 extsource = pycompat.fsencode(extmod.__file__)
1487 elif getattr(sys, 'oxidized', False): 1487 elif getattr(sys, 'oxidized', False):
1488 extsource = pycompat.sysexecutable 1488 extsource = pycompat.sysexecutable
1489 if isinternal: 1489 if isinternal:
1490 exttestedwith = [] # never expose magic string to users 1490 exttestedwith = [] # never expose magic string to users
1720 1720
1721 fm = ui.formatter(b'debugformat', opts) 1721 fm = ui.formatter(b'debugformat', opts)
1722 if fm.isplain(): 1722 if fm.isplain():
1723 1723
1724 def formatvalue(value): 1724 def formatvalue(value):
1725 if util.safehasattr(value, 'startswith'): 1725 if hasattr(value, 'startswith'):
1726 return value 1726 return value
1727 if value: 1727 if value:
1728 return b'yes' 1728 return b'yes'
1729 else: 1729 else:
1730 return b'no' 1730 return b'no'
1945 @command(b'debugindexstats', []) 1945 @command(b'debugindexstats', [])
1946 def debugindexstats(ui, repo): 1946 def debugindexstats(ui, repo):
1947 """show stats related to the changelog index""" 1947 """show stats related to the changelog index"""
1948 repo.changelog.shortest(repo.nullid, 1) 1948 repo.changelog.shortest(repo.nullid, 1)
1949 index = repo.changelog.index 1949 index = repo.changelog.index
1950 if not util.safehasattr(index, 'stats'): 1950 if not hasattr(index, 'stats'):
1951 raise error.Abort(_(b'debugindexstats only works with native code')) 1951 raise error.Abort(_(b'debugindexstats only works with native code'))
1952 for k, v in sorted(index.stats().items()): 1952 for k, v in sorted(index.stats().items()):
1953 ui.write(b'%s: %d\n' % (k, v)) 1953 ui.write(b'%s: %d\n' % (k, v))
1954 1954
1955 1955
1981 err, 1981 err,
1982 ) 1982 )
1983 1983
1984 # Python 1984 # Python
1985 pythonlib = None 1985 pythonlib = None
1986 if util.safehasattr(os, '__file__'): 1986 if hasattr(os, '__file__'):
1987 pythonlib = os.path.dirname(pycompat.fsencode(os.__file__)) 1987 pythonlib = os.path.dirname(pycompat.fsencode(os.__file__))
1988 elif getattr(sys, 'oxidized', False): 1988 elif getattr(sys, 'oxidized', False):
1989 pythonlib = pycompat.sysexecutable 1989 pythonlib = pycompat.sysexecutable
1990 1990
1991 fm.write( 1991 fm.write(
2063 b'+'.join(hgver.split(b'+')[1:]), 2063 b'+'.join(hgver.split(b'+')[1:]),
2064 ) 2064 )
2065 2065
2066 # compiled modules 2066 # compiled modules
2067 hgmodules = None 2067 hgmodules = None
2068 if util.safehasattr(sys.modules[__name__], '__file__'): 2068 if hasattr(sys.modules[__name__], '__file__'):
2069 hgmodules = os.path.dirname(pycompat.fsencode(__file__)) 2069 hgmodules = os.path.dirname(pycompat.fsencode(__file__))
2070 elif getattr(sys, 'oxidized', False): 2070 elif getattr(sys, 'oxidized', False):
2071 hgmodules = pycompat.sysexecutable 2071 hgmodules = pycompat.sysexecutable
2072 2072
2073 fm.write( 2073 fm.write(
2647 repo.unfiltered(), b'debugnodemap', file_, pycompat.byteskwargs(opts) 2647 repo.unfiltered(), b'debugnodemap', file_, pycompat.byteskwargs(opts)
2648 ) 2648 )
2649 if isinstance(r, (manifest.manifestrevlog, filelog.filelog)): 2649 if isinstance(r, (manifest.manifestrevlog, filelog.filelog)):
2650 r = r._revlog 2650 r = r._revlog
2651 if opts['dump_new']: 2651 if opts['dump_new']:
2652 if util.safehasattr(r.index, "nodemap_data_all"): 2652 if hasattr(r.index, "nodemap_data_all"):
2653 data = r.index.nodemap_data_all() 2653 data = r.index.nodemap_data_all()
2654 else: 2654 else:
2655 data = nodemap.persistent_data(r.index) 2655 data = nodemap.persistent_data(r.index)
2656 ui.write(data) 2656 ui.write(data)
2657 elif opts['dump_disk']: 2657 elif opts['dump_disk']: