U .e @sddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z ddlmZddlmZerdd lmZmZGd d d eZd d ZddZddZeddZe dddZe reddZn eejZdS)N)contextmanager)NamedTemporaryFile)retry)PY2) get_path_uid)cast)MYPY_CHECK_RUNNING)BinaryIOIteratorc@seZdZeddZdS)NamedTemporaryFileResultcCsdSN)selfr r B/usr/lib/python3.8/site-packages/pip/_internal/utils/filesystem.pyfileszNamedTemporaryFileResult.fileN)__name__ __module__ __qualname__propertyrr r r rr sr cCsttdsdSd}||krtj|rntdkr^z t|}Wntk rTYdSX|dkSt|tjSq|tj |}}qdS)NgeteuidTrF) hasattrospathlexistsrrOSErroraccessW_OKdirname)rZpreviousZpath_uidr r rcheck_path_owners    rc Csrzt||Wn\ttfk rl||fD]8}z t|}Wntk rPYq,X|r,td|q,YnXdS)zWrap shutil.copy2() but map errors copying socket files to SpecialFileError as expected. See also https://bugs.python.org/issue37700. z`%s` is a socketN)shutilZcopy2rIOError is_socketZSpecialFileError)srcdestfZis_socket_filer r r copy2_fixed5s  r%cCstt|jSr )statS_ISSOCKrlstatst_mode)rr r rr!Msr!c csbtdtj|tj|dd8}td|}z |VW5|jt|j XW5QRXdS)zGiven a path to a file, open a temp file next to it securely and ensure it is written to disk after the context reaches its end. Fz.tmp)deletedirprefixsuffixr N) rrrrbasenamerrflushfsyncfileno)rr$resultr r radjacent_tmp_fileRs     r3i)Zstop_max_delayZ wait_fixedcCs@zt||Wn*tk r:t|t||YnXdSr )rrenamerremove)r"r#r r rreplaceis  r7)rZos.pathrr& contextlibrZtempfilerZpip._vendor.retryingrZpip._vendor.sixrZpip._internal.utils.compatrZpip._internal.utils.miscrZpip._internal.utils.typingrtypingr r r rr%r!r3Z_replace_retryr7r r r rs.