U ÀÒ.e ã@sèddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z ddlmZddlmZer˜dd lmZmZGd d „d eƒZd d „Zdd„Zdd„Zedd„ƒZe dddZe rÚedd„ƒZn eejƒZdS)éN)Úcontextmanager)ÚNamedTemporaryFile)Úretry)ÚPY2)Ú get_path_uid)Úcast)ÚMYPY_CHECK_RUNNING)ÚBinaryIOÚIteratorc@seZdZedd„ƒZdS)ÚNamedTemporaryFileResultcCsdS©N©)Úselfr r úB/usr/lib/python3.8/site-packages/pip/_internal/utils/filesystem.pyÚfileszNamedTemporaryFileResult.fileN)Ú__name__Ú __module__Ú __qualname__Úpropertyrr r r rr sr cCs†ttdƒsdSd}||kr‚tj |¡rnt ¡dkr^z t|ƒ}Wntk rTYdSX|dkSt |tj¡Sq|tj  |¡}}qdS)NÚgeteuidTrF) ÚhasattrÚosÚpathÚlexistsrrÚOSErrorÚaccessÚW_OKÚdirname)rZpreviousZpath_uidr r rÚcheck_path_owners    rc Csrzt ||¡Wn\ttfk rl||fD]8}z t|ƒ}Wntk rPYq,X|r,t d|¡‚q,‚YnXdS)z“Wrap shutil.copy2() but map errors copying socket files to SpecialFileError as expected. See also https://bugs.python.org/issue37700. z`%s` is a socketN)ÚshutilZcopy2rÚIOErrorÚ is_socketZSpecialFileError)ÚsrcÚdestÚfZis_socket_filer r rÚ copy2_fixed5s  r%cCst t |¡j¡Sr )ÚstatÚS_ISSOCKrÚlstatÚst_mode)rr r rr!Msr!c csbtdtj |¡tj |¡dd8}td|ƒ}z |VW5|j ¡t |j  ¡¡XW5QRXdS)z‰Given 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)ÚdeleteÚdirÚprefixÚsuffixr N) rrrrÚbasenamerrÚflushÚfsyncÚfileno)rr$Úresultr r rÚadjacent_tmp_fileRs  ü   r3ièéú)Zstop_max_delayZ wait_fixedcCs@zt ||¡Wn*tk r:t |¡t ||¡YnXdSr )rÚrenamerÚremove)r"r#r r rÚreplaceis  r7)rZos.pathrr&Ú contextlibrZtempfilerZpip._vendor.retryingrZpip._vendor.sixrZpip._internal.utils.compatrZpip._internal.utils.miscrZpip._internal.utils.typingrÚtypingr r r rr%r!r3Z_replace_retryr7r r r rÚs.