Mercurial > public > mercurial-scm > hg
comparison mercurial/debugcommands.py @ 50925: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
50924:7a8ea1397816 | 50925: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']: |