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/scmutil.py Thu Feb 02 17:34:33 2023 +0100
+++ b/mercurial/scmutil.py Thu Feb 02 17:34:48 2023 +0100
@@ -234,7 +234,7 @@
ui.error(_(b"abort: error: %s\n") % stringutil.forcebytestr(reason))
except (IOError, OSError) as inst:
if (
- util.safehasattr(inst, b"args")
+ util.safehasattr(inst, "args")
and inst.args
and inst.args[0] == errno.EPIPE
):