--- a/mercurial/windows.py Sun Sep 23 22:36:44 2018 -0400
+++ b/mercurial/windows.py Fri Sep 21 20:03:07 2018 -0400
@@ -123,11 +123,36 @@
object.__setattr__(self, r'_lastop', self.OPREAD)
return self._fp.readlines(*args, **kwargs)
+class fdproxy(object):
+ """Wraps osutil.posixfile() to override the name attribute to reflect the
+ underlying file name.
+ """
+ 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)
+
def posixfile(name, mode='r', buffering=-1):
'''Open a file with even more POSIX-like semantics'''
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:
+ fp = fdproxy(name, fp)
+
# The position when opening in append mode is implementation defined, so
# make it consistent with other platforms, which position at EOF.
if 'a' in mode: