Patchwork [6,of,7] py3: abuse r'' to preserve str-ness of literals passed to __setattr__()

login
register
mail settings
Submitter Yuya Nishihara
Date March 26, 2017, 11:59 a.m.
Message ID <c00753c42a0b04dc72ed.1490529589@mimosa>
Download mbox | patch
Permalink /patch/19683/
State Accepted
Headers show

Comments

Yuya Nishihara - March 26, 2017, 11:59 a.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1490513592 -32400
#      Sun Mar 26 16:33:12 2017 +0900
# Node ID c00753c42a0b04dc72ed831a87945f1eb41c84c1
# Parent  5e8e48cb4f83a583515b4caaf97045b86747c499
py3: abuse r'' to preserve str-ness of literals passed to __setattr__()
Augie Fackler - March 27, 2017, 12:51 p.m.
On Sun, Mar 26, 2017 at 08:59:49PM +0900, Yuya Nishihara wrote:
> # HG changeset patch
> # User Yuya Nishihara <yuya@tcha.org>
> # Date 1490513592 -32400
> #      Sun Mar 26 16:33:12 2017 +0900
> # Node ID c00753c42a0b04dc72ed831a87945f1eb41c84c1
> # Parent  5e8e48cb4f83a583515b4caaf97045b86747c499
> py3: abuse r'' to preserve str-ness of literals passed to __setattr__()

I've taken patches 1-4 and 6. Looking at 5 now and going to compare to
my version (I did less work, it looks lik you might have managed to
save some perf)

>
> diff --git a/mercurial/demandimport.py b/mercurial/demandimport.py
> --- a/mercurial/demandimport.py
> +++ b/mercurial/demandimport.py
> @@ -76,9 +76,9 @@ class _demandmod(object):
>          else:
>              head = name
>              after = []
> -        object.__setattr__(self, "_data",
> +        object.__setattr__(self, r"_data",
>                             (head, globals, locals, after, level, set()))
> -        object.__setattr__(self, "_module", None)
> +        object.__setattr__(self, r"_module", None)
>      def _extend(self, name):
>          """add to the list of submodules to load"""
>          self._data[3].append(name)
> @@ -138,7 +138,7 @@ class _demandmod(object):
>                  if modref and getattr(modref, head, None) == self:
>                      setattr(modref, head, mod)
>
> -            object.__setattr__(self, "_module", mod)
> +            object.__setattr__(self, r"_module", mod)
>
>      def __repr__(self):
>          if self._module:
> diff --git a/mercurial/pure/osutil.py b/mercurial/pure/osutil.py
> --- a/mercurial/pure/osutil.py
> +++ b/mercurial/pure/osutil.py
> @@ -342,8 +342,8 @@ else:
>              # unfortunately, f.name is '<fdopen>' at this point -- so we store
>              # the name on this wrapper. We cannot just assign to f.name,
>              # because that attribute is read-only.
> -            object.__setattr__(self, 'name', name)
> -            object.__setattr__(self, '_file', f)
> +            object.__setattr__(self, r'name', name)
> +            object.__setattr__(self, r'_file', f)
>
>          def __iter__(self):
>              return self._file
> diff --git a/mercurial/vfs.py b/mercurial/vfs.py
> --- a/mercurial/vfs.py
> +++ b/mercurial/vfs.py
> @@ -480,7 +480,7 @@ class closewrapbase(object):
>      Do not instantiate outside of the vfs layer.
>      """
>      def __init__(self, fh):
> -        object.__setattr__(self, '_origfh', fh)
> +        object.__setattr__(self, r'_origfh', fh)
>
>      def __getattr__(self, attr):
>          return getattr(self._origfh, attr)
> @@ -507,7 +507,7 @@ class delayclosedfile(closewrapbase):
>      """
>      def __init__(self, fh, closer):
>          super(delayclosedfile, self).__init__(fh)
> -        object.__setattr__(self, '_closer', closer)
> +        object.__setattr__(self, r'_closer', closer)
>
>      def __exit__(self, exc_type, exc_value, exc_tb):
>          self._closer.close(self._origfh)
> @@ -618,7 +618,7 @@ class checkambigatclosing(closewrapbase)
>      """
>      def __init__(self, fh):
>          super(checkambigatclosing, self).__init__(fh)
> -        object.__setattr__(self, '_oldstat', util.filestat(fh.name))
> +        object.__setattr__(self, r'_oldstat', util.filestat(fh.name))
>
>      def _checkambig(self):
>          oldstat = self._oldstat
> diff --git a/mercurial/windows.py b/mercurial/windows.py
> --- a/mercurial/windows.py
> +++ b/mercurial/windows.py
> @@ -61,8 +61,8 @@ class mixedfilemodewrapper(object):
>      OPWRITE = 2
>
>      def __init__(self, fp):
> -        object.__setattr__(self, '_fp', fp)
> -        object.__setattr__(self, '_lastop', 0)
> +        object.__setattr__(self, r'_fp', fp)
> +        object.__setattr__(self, r'_lastop', 0)
>
>      def __getattr__(self, name):
>          return getattr(self._fp, name)
> @@ -74,42 +74,42 @@ class mixedfilemodewrapper(object):
>          self._fp.seek(0, os.SEEK_CUR)
>
>      def seek(self, *args, **kwargs):
> -        object.__setattr__(self, '_lastop', self.OPNONE)
> +        object.__setattr__(self, r'_lastop', self.OPNONE)
>          return self._fp.seek(*args, **kwargs)
>
>      def write(self, d):
>          if self._lastop == self.OPREAD:
>              self._noopseek()
>
> -        object.__setattr__(self, '_lastop', self.OPWRITE)
> +        object.__setattr__(self, r'_lastop', self.OPWRITE)
>          return self._fp.write(d)
>
>      def writelines(self, *args, **kwargs):
>          if self._lastop == self.OPREAD:
>              self._noopeseek()
>
> -        object.__setattr__(self, '_lastop', self.OPWRITE)
> +        object.__setattr__(self, r'_lastop', self.OPWRITE)
>          return self._fp.writelines(*args, **kwargs)
>
>      def read(self, *args, **kwargs):
>          if self._lastop == self.OPWRITE:
>              self._noopseek()
>
> -        object.__setattr__(self, '_lastop', self.OPREAD)
> +        object.__setattr__(self, r'_lastop', self.OPREAD)
>          return self._fp.read(*args, **kwargs)
>
>      def readline(self, *args, **kwargs):
>          if self._lastop == self.OPWRITE:
>              self._noopseek()
>
> -        object.__setattr__(self, '_lastop', self.OPREAD)
> +        object.__setattr__(self, r'_lastop', self.OPREAD)
>          return self._fp.readline(*args, **kwargs)
>
>      def readlines(self, *args, **kwargs):
>          if self._lastop == self.OPWRITE:
>              self._noopseek()
>
> -        object.__setattr__(self, '_lastop', self.OPREAD)
> +        object.__setattr__(self, r'_lastop', self.OPREAD)
>          return self._fp.readlines(*args, **kwargs)
>
>  def posixfile(name, mode='r', buffering=-1):
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Patch

diff --git a/mercurial/demandimport.py b/mercurial/demandimport.py
--- a/mercurial/demandimport.py
+++ b/mercurial/demandimport.py
@@ -76,9 +76,9 @@  class _demandmod(object):
         else:
             head = name
             after = []
-        object.__setattr__(self, "_data",
+        object.__setattr__(self, r"_data",
                            (head, globals, locals, after, level, set()))
-        object.__setattr__(self, "_module", None)
+        object.__setattr__(self, r"_module", None)
     def _extend(self, name):
         """add to the list of submodules to load"""
         self._data[3].append(name)
@@ -138,7 +138,7 @@  class _demandmod(object):
                 if modref and getattr(modref, head, None) == self:
                     setattr(modref, head, mod)
 
-            object.__setattr__(self, "_module", mod)
+            object.__setattr__(self, r"_module", mod)
 
     def __repr__(self):
         if self._module:
diff --git a/mercurial/pure/osutil.py b/mercurial/pure/osutil.py
--- a/mercurial/pure/osutil.py
+++ b/mercurial/pure/osutil.py
@@ -342,8 +342,8 @@  else:
             # unfortunately, f.name is '<fdopen>' at this point -- so we store
             # the name on this wrapper. We cannot just assign to f.name,
             # because that attribute is read-only.
-            object.__setattr__(self, 'name', name)
-            object.__setattr__(self, '_file', f)
+            object.__setattr__(self, r'name', name)
+            object.__setattr__(self, r'_file', f)
 
         def __iter__(self):
             return self._file
diff --git a/mercurial/vfs.py b/mercurial/vfs.py
--- a/mercurial/vfs.py
+++ b/mercurial/vfs.py
@@ -480,7 +480,7 @@  class closewrapbase(object):
     Do not instantiate outside of the vfs layer.
     """
     def __init__(self, fh):
-        object.__setattr__(self, '_origfh', fh)
+        object.__setattr__(self, r'_origfh', fh)
 
     def __getattr__(self, attr):
         return getattr(self._origfh, attr)
@@ -507,7 +507,7 @@  class delayclosedfile(closewrapbase):
     """
     def __init__(self, fh, closer):
         super(delayclosedfile, self).__init__(fh)
-        object.__setattr__(self, '_closer', closer)
+        object.__setattr__(self, r'_closer', closer)
 
     def __exit__(self, exc_type, exc_value, exc_tb):
         self._closer.close(self._origfh)
@@ -618,7 +618,7 @@  class checkambigatclosing(closewrapbase)
     """
     def __init__(self, fh):
         super(checkambigatclosing, self).__init__(fh)
-        object.__setattr__(self, '_oldstat', util.filestat(fh.name))
+        object.__setattr__(self, r'_oldstat', util.filestat(fh.name))
 
     def _checkambig(self):
         oldstat = self._oldstat
diff --git a/mercurial/windows.py b/mercurial/windows.py
--- a/mercurial/windows.py
+++ b/mercurial/windows.py
@@ -61,8 +61,8 @@  class mixedfilemodewrapper(object):
     OPWRITE = 2
 
     def __init__(self, fp):
-        object.__setattr__(self, '_fp', fp)
-        object.__setattr__(self, '_lastop', 0)
+        object.__setattr__(self, r'_fp', fp)
+        object.__setattr__(self, r'_lastop', 0)
 
     def __getattr__(self, name):
         return getattr(self._fp, name)
@@ -74,42 +74,42 @@  class mixedfilemodewrapper(object):
         self._fp.seek(0, os.SEEK_CUR)
 
     def seek(self, *args, **kwargs):
-        object.__setattr__(self, '_lastop', self.OPNONE)
+        object.__setattr__(self, r'_lastop', self.OPNONE)
         return self._fp.seek(*args, **kwargs)
 
     def write(self, d):
         if self._lastop == self.OPREAD:
             self._noopseek()
 
-        object.__setattr__(self, '_lastop', self.OPWRITE)
+        object.__setattr__(self, r'_lastop', self.OPWRITE)
         return self._fp.write(d)
 
     def writelines(self, *args, **kwargs):
         if self._lastop == self.OPREAD:
             self._noopeseek()
 
-        object.__setattr__(self, '_lastop', self.OPWRITE)
+        object.__setattr__(self, r'_lastop', self.OPWRITE)
         return self._fp.writelines(*args, **kwargs)
 
     def read(self, *args, **kwargs):
         if self._lastop == self.OPWRITE:
             self._noopseek()
 
-        object.__setattr__(self, '_lastop', self.OPREAD)
+        object.__setattr__(self, r'_lastop', self.OPREAD)
         return self._fp.read(*args, **kwargs)
 
     def readline(self, *args, **kwargs):
         if self._lastop == self.OPWRITE:
             self._noopseek()
 
-        object.__setattr__(self, '_lastop', self.OPREAD)
+        object.__setattr__(self, r'_lastop', self.OPREAD)
         return self._fp.readline(*args, **kwargs)
 
     def readlines(self, *args, **kwargs):
         if self._lastop == self.OPWRITE:
             self._noopseek()
 
-        object.__setattr__(self, '_lastop', self.OPREAD)
+        object.__setattr__(self, r'_lastop', self.OPREAD)
         return self._fp.readlines(*args, **kwargs)
 
 def posixfile(name, mode='r', buffering=-1):