3 ig@sddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z m Z mZmZmZmZddlmZmZmZddlmZddlmZeedd d Zeedd d d ZeedddZeee ee dddZedededdZ e ej!Z!eedddZ"eedddZ#eeeedddZ$eee%e&fdddZ'eedd d!Z(eee%e&fdd"d#Z)eedd$d%Z*dS)&N)contextmanager)NamedTemporaryFile)AnyBinaryIOIteratorListUnioncast)retrystop_after_delay wait_fixed) get_path_uid) format_size)pathreturnc Cstjdksttd rdStjj|s*td}xp||krtjj|rtjdkrzy t |}Wnt k rpdSX|dkStj |tj Sq0|tjj |}}q0WdS)Nwin32geteuidTrF)sysplatformhasattrosrisabsAssertionErrorlexistsrr OSErroraccessW_OKdirname)rpreviouspath_uidr =/tmp/pip-build-88gy_88q/pip/pip/_internal/utils/filesystem.pycheck_path_owners    r")srcdestrcCsvytj||Wn`tk rpxH||gD]<}y t|}Wntk rNYq*X|r*tjd|dq*WYnXdS)zWrap shutil.copy2() but map errors copying socket files to SpecialFileError as expected. See also https://bugs.python.org/issue37700. `z ` is a socketN)shutilcopy2r is_socketSpecialFileError)r#r$fZis_socket_filer r r! copy2_fixed-s r+cCstjtj|jS)N)statS_ISSOCKrlstatst_mode)rr r r!r(Dsr()rkwargsrcksftfdtjj|tjj|dd|4}tt|}z |VWd|jtj|j XWdQRXdS)a%Return a file-like object pointing to a tmp file next to path. The file is created securely and is ensured to be written to disk after the context reaches its end. kwargs will be passed to tempfile.NamedTemporaryFile to control the way the temporary file will be opened. Fz.tmp)deletedirprefixsuffixN) rrrrbasenamer rflushfsyncfileno)rr0r*resultr r r!adjacent_tmp_fileHs     r:Tg?)reraisestopwaitcCsLx*tjj|s*tjj|}||kr$P|}qWtjdkrDtj|tjSt|S)zgCheck if a directory is writable. Uses os.access() on POSIX, tries creating files on Windows. posix)rrisdirrnamerr_test_writable_dir_win)rparentr r r!test_writable_diris  rDc sd}dxtdD]}|djfddtdD}tjj||}ytj|tjtjBtjB}Wn&tk rvYqt k rdSXtj |tj |d SqWt d dS) NZ(accesstest_deleteme_fishfingers_custard_Z$abcdefghijklmnopqrstuvwxyz0123456789 c3s|]}tjVqdS)N)randomchoice).0_)alphabetr r! sz)_test_writable_dir_win..FTz3Unexpected condition testing for writable directory) rangejoinrropenO_RDWRO_CREATO_EXCLFileExistsErrorPermissionErrorcloseunlinkr)rr5rJrAfilefdr )rKr!rB{s   rB)rpatternrcsFg}x.)rwalkfnmatchfilterextend)rrZr9rJfilesmatchesr )r[r! find_filess  rbcCstjj|rdStjj|S)Nr)rrislinkgetsize)rr r r! file_sizes recCs tt|S)N)rre)rr r r!format_file_sizesrfcCsJd}x@tj|D]2\}}}x&|D]}tjj||}|t|7}q WqW|S)Ng)rr\rrOre)rsizer[Z_dirsr`filename file_pathr r r!directory_sizes  rjcCs tt|S)N)rrj)rr r r!format_directory_sizesrk)+r]ros.pathrGr&r,r contextlibrtempfilerZtypingrrrrrr Zpip._vendor.tenacityr r r Zpip._internal.utils.compatr Zpip._internal.utils.miscrstrboolr"r+r(r:Z_replace_retryreplacerDrBrbintfloatrerfrjrkr r r r!s4