[PATCH 2 of 8] py3: proxy posixfile objects to re-add a useful 'name' attribute on Windows

Yuya Nishihara yuya at tcha.org
Sun Sep 23 02:38:55 EDT 2018


On Sat, 22 Sep 2018 11:28:38 -0400, Matt Harbison wrote:
> # HG changeset patch
> # User Matt Harbison <matt_harbison at yahoo.com>
> # Date 1537574587 14400
> #      Fri Sep 21 20:03:07 2018 -0400
> # Node ID 0d1b3d5a92e159506c823be481cf9f57e45ec03d
> # Parent  758cf8cdf994942174238c28c8f06ece63dae2b5
> py3: proxy posixfile objects to re-add a useful 'name' attribute on Windows

> diff --git a/mercurial/windows.py b/mercurial/windows.py
> --- a/mercurial/windows.py
> +++ b/mercurial/windows.py
> @@ -128,6 +128,28 @@ def posixfile(name, mode='r', buffering=
>      try:
>          fp = osutil.posixfile(name, mode, buffering) # may raise WindowsError
>  
> +        # PyFile_FromFd() ignores the name, and seems to report fp.name as the
> +        # underlying file descriptor.
> +        if pycompat.ispy3:
> +            class fdproxy(object):
> +                def __init__(self, name, fp):
> +                    self.name = name
> +                    self._fp = fp
> +
> +                def __enter__(self):
> +                    return self._fp.__enter__()
> +
> +                def __exit__(self, exc_type, exc_value, traceback):
> +                    self._fp.__exit__(exc_type, exc_value, traceback)
> +
> +                def __iter__(self):
> +                    return iter(self._fp)
> +
> +                def __getattr__(self, name):
> +                    return getattr(self._fp, name)

Can you move the class definition to module scope? It isn't nice to create
the proxy type per posixfile() call.


More information about the Mercurial-devel mailing list