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/templatefilters.py Thu Feb 02 17:36:55 2023 +0100
+++ b/mercurial/templatefilters.py Thu Feb 02 17:37:02 2023 +0100
@@ -339,7 +339,7 @@
raise error.ProgrammingError(
b'Mercurial only does output with bytes: %r' % obj
)
- elif util.safehasattr(obj, b'keys'):
+ elif util.safehasattr(obj, 'keys'):
out = [
b'"%s": %s'
% (encoding.jsonescape(k, paranoid=paranoid), json(v, paranoid))