safehasattr: pass attribute name as string instead of bytes
This is a step toward replacing `util.safehasattr` usage with plain `hasattr`.
The builtin function behave poorly in Python2 but this was fixed in Python3.
These change are done one by one as they tend to have a small odd to trigger
puzzling breackage.
--- a/mercurial/help.py Thu Feb 02 17:37:51 2023 +0100
+++ b/mercurial/help.py Thu Feb 02 17:26:10 2023 +0100
@@ -810,7 +810,7 @@
doc = gettext(pycompat.getdoc(entry[0]))
if not doc:
doc = _(b"(no help text available)")
- if util.safehasattr(entry[0], b'definition'): # aliased command
+ if util.safehasattr(entry[0], 'definition'): # aliased command
source = entry[0].source
if entry[0].definition.startswith(b'!'): # shell alias
doc = _(b'shell alias for: %s\n\n%s\n\ndefined by: %s\n') % (