mercurial/pycompat.py
changeset 29799 45fa8de47a0f
parent 29798 31d588fcd2b9
child 29800 178c89e8519a
--- a/mercurial/pycompat.py	Sun Aug 14 12:44:13 2016 +0900
+++ b/mercurial/pycompat.py	Sun Aug 14 12:51:21 2016 +0900
@@ -31,8 +31,22 @@
 
 if sys.version_info[0] >= 3:
     import builtins
+    import functools
     builtins.xrange = range
 
+    def _wrapattrfunc(f):
+        @functools.wraps(f)
+        def w(object, name, *args):
+            if isinstance(name, bytes):
+                name = name.decode(u'utf-8')
+            return f(object, name, *args)
+        return w
+
+    delattr = _wrapattrfunc(builtins.delattr)
+    getattr = _wrapattrfunc(builtins.getattr)
+    hasattr = _wrapattrfunc(builtins.hasattr)
+    setattr = _wrapattrfunc(builtins.setattr)
+
 stringio = io.StringIO
 empty = _queue.Empty
 queue = _queue.Queue