py3: handle sysstr conversion around get/set attr in contrib/perf
authorMatt Harbison <matt_harbison@yahoo.com>
Fri, 21 Sep 2018 20:10:36 -0400
changeset 39821 6787dc1b93a9
parent 39820 68ea1f8dcb84
child 39822 86dbeb7c9a11
py3: handle sysstr conversion around get/set attr in contrib/perf
contrib/perf.py
--- a/contrib/perf.py	Fri Sep 21 20:03:07 2018 -0400
+++ b/contrib/perf.py	Fri Sep 21 20:10:36 2018 -0400
@@ -67,9 +67,11 @@
 try:
     from mercurial import pycompat
     getargspec = pycompat.getargspec  # added to module after 4.5
+    _sysstr = pycompat.sysstr         # since 4.0 (or 2219f4f82ede)
 except (ImportError, AttributeError):
     import inspect
     getargspec = inspect.getargspec
+    _sysstr = lambda x: x             # no py3 support
 
 try:
     # 4.7+
@@ -95,7 +97,7 @@
 # available since 1.9.3 (or 94b200a11cf7)
 _undefined = object()
 def safehasattr(thing, attr):
-    return getattr(thing, attr, _undefined) is not _undefined
+    return getattr(thing, _sysstr(attr), _undefined) is not _undefined
 setattr(util, 'safehasattr', safehasattr)
 
 # for "historical portability":
@@ -340,12 +342,12 @@
         raise error.Abort((b"missing attribute %s of %s might break assumption"
                            b" of performance measurement") % (name, obj))
 
-    origvalue = getattr(obj, name)
+    origvalue = getattr(obj, _sysstr(name))
     class attrutil(object):
         def set(self, newvalue):
-            setattr(obj, name, newvalue)
+            setattr(obj, _sysstr(name), newvalue)
         def restore(self):
-            setattr(obj, name, origvalue)
+            setattr(obj, _sysstr(name), origvalue)
 
     return attrutil()