3 \\A@sddlZddlZddlZddlZddlZddlZyddlZ[dZWnek rZdZYnXyddl Z [ dZ Wnek rdZ YnXyddl Z [ dZ Wnek rdZ YnXyddl mZWnek rdZYnXyddlmZWnek rdZYnXdddd d d d d dddddddddddddddddgZGdddeZGd ddeZGd!ddeZGd"ddeZGd#d$d$eZGd%d&d&eZdd)dZd*d+Zdd,d-dZdd,d.dZeed/rdd,d0d1Znd2d1Zdd,d3d Z dd,d4d Z!dd,d5d Z"d6dZ#dde"dfd7d Z$d8d9Z%d:d;Z&ej'ejej(ej)hej*kozej+ej,kozejej-kZ.ddZ1e"fd?d Z2d@dAZ3dBdCZ4dDdEZ5ddGdHZ6ddIdJZ7dKe6dgdMfiZ8ere6dgdNfe8dO<e7gdPfe8dQ<e re6dgdSfe8dT<e r,e6dgdVfe8dW<dXdZ9ddZdZ:d[dZ;dd\dZdd`dZ?dadZ@dbdcZAdddeZBdfdgZCdhgeCgdMfdigeBgdPfdjZDerdkdlgeCgdNfeDdO<e rdmdngeCgdSfeDdT<e rdodpgeCgdVfeDdW<dqdrZEddsdZFeedtrLejGduejHdvdwZIdxeIjJ_KdyeIjL_KdzeIjM_Kd{duZNn2ejOd|kr~ddlPZPejGduejHdvdwZId}duZNdd~dZQdddZRejSejTBdfddZUdS)NTF)getpwnam)getgrnam copyfileobjcopyfilecopymodecopystatcopycopy2copytreemovermtreeErrorSpecialFileError ExecError make_archiveget_archive_formatsregister_archive_formatunregister_archive_formatget_unpack_formatsregister_unpack_formatunregister_unpack_formatunpack_archiveignore_patternschownwhichget_terminal_size SameFileErrorc@s eZdZdS)r N)__name__ __module__ __qualname__r r /usr/lib64/python3.6/shutil.pyr 7sc@s eZdZdS)rN)rrrr r r r!r:sc@s eZdZdS)rN)rrrr r r r!r=sc@s eZdZdS)rN)rrrr r r r!rAsc@s eZdZdS) ReadErrorN)rrrr r r r!r"Dsr"c@s eZdZdS) RegistryErrorN)rrrr r r r!r#Gsr#icCs$x|j|}|sP|j|qWdS)N)readwrite)fsrcfdstZlengthZbufr r r!rLs  c CsXttjdr0ytjj||Stk r.dSXtjjtjj|tjjtjj|kS)NsamefileF)hasattrospathr)OSErrornormcaseabspath)srcdstr r r! _samefileTs r2)follow_symlinkscCst||rtdj||xL||gD]@}ytj|}Wntk rJYq$Xtj|jr$td|q$W| rtj j |rtj tj ||n6t |d&}t |d}t||WdQRXWdQRX|S)Nz{!r} and {!r} are the same filez`%s` is a named piperbwb)r2rformatr+statr-S_ISFIFOst_moderr,islinksymlinkreadlinkopenr)r0r1r3fnstr'r(r r r!r`s    cCsz| r>tjj|r>tjj|r>ttdr8tjtj}}q\dSnttdrXtjtj}}ndS||}||tj|j dS)Nlchmodchmod) r+r,r:r*lstatr@r7rAS_IMODEr9)r0r1r3Z stat_funcZ chmod_funcr?r r r!r}s   listxattrcCsytj||d}Wn4tk rF}z|jtjtjfkr8dSd}~XnXxn|D]f}y&tj|||d}tj||||dWqNtk r}z|jtjtjtjfkrWYdd}~XqNXqNWdS)N)r3) r+rDr-errnoENOTSUPZENODATAgetxattrsetxattrZEPERM)r0r1r3namesenamevaluer r r! _copyxattrs  rMcOsdS)Nr )argskwargsr r r!rMsc s6ddddd|p,tjj|o*tjj| }|r@fdd}n fdd}|d||d}tj|j}|d ||j|jf|dy|d |||dWntk rYnXt |d r$y|d ||j |dWnPt k r"}z2x*dD] }t t |r|j t t |krPqWWYdd}~XnXt|||ddS)N)nsr3cWsdS)Nr )rPr3rNr r r!_nopszcopystat.._nopcs tt|S)N)getattrr+)rK)rQr r!lookupszcopystat..lookupcstt|}|tjkr|SS)N)rRr+supports_follow_symlinks)rKr>)rQr r!rSs  r7)r3utimerAst_flagsZchflags EOPNOTSUPPrF)rWrF)r+r,r:r7rCr9 st_atime_ns st_mtime_nsNotImplementedErrorr*rVr-rErRrM) r0r1r3ZfollowrSr?modewhyerrr )rQr!rs,      cCsBtjj|r"tjj|tjj|}t|||dt|||d|S)N)r3)r+r,isdirjoinbasenamerr)r0r1r3r r r!rs cCsBtjj|r"tjj|tjj|}t|||dt|||d|S)N)r3)r+r,r^r_r`rr)r0r1r3r r r!r s csfdd}|S)Ncs,g}xD]}|jtj||q Wt|S)N)extendfnmatchfilterset)r,rI ignored_namespattern)patternsr r!_ignore_patternss z)ignore_patterns.._ignore_patternsr )rgrhr )rgr!r s cCstj|}|dk r|||}nt}tj|g}xB|D]8} | |krJq:tjj|| } tjj|| } ytjj| rtj| } |rtj| | t | | | dn.onerrorcWsdS)Nr )rNr r r!rysz%Cannot call rmtree on a symbolic link)_use_fd_functions isinstancebytesr+fsdecoderB Exceptionrsrtr=r}r,r~rrrxr-r:rrv)r, ignore_errorsryrfdr r r!r s<      cCs&tjjtjjpd}tjj|j|S)N)r+r,sepaltsepr`rstrip)r,rr r r! _basenamesrc Cs|}tjj|rTt||r*tj||dStjj|t|}tjj|rTtd|ytj||Wnt k rtjj |rtj |}tj ||tj |nTtjj|rt||rtd||ft|||ddt|n|||tj |YnX|S)Nz$Destination path '%s' already existsz.Cannot move a directory '%s' into itself '%s'.T)rprn)r+r,r^r2renamer_rrkr r-r:r<r;rw _destinsrcr r )r0r1rpZreal_dstrrr r r!r s2              cCsVtjj|}tjj|}|jtjjs2|tjj7}|jtjjsL|tjj7}|j|S)N)r+r,r/endswithr startswith)r0r1r r r!r8s    rc CsNtdks|dkrdSy t|}Wntk r8d}YnX|dk rJ|dSdS)N)rKeyError)rKresultr r r!_get_gidAs  rc CsNtdks|dkrdSy t|}Wntk r8d}YnX|dk rJ|dSdS)Nr)rr)rKrr r r!_get_uidMs  rgzipc s"|dkrd}nDtr |dkr d}n2tr2|dkr2d}n trD|dkrDd}ntdj|ddl} |rfd |nd} |d | } tjj| } | rtjj |  r|dk r|j d | |stj | |dk r|j d t t fd d} |s| j| d|}z|j|| dWd|jX| S)NrrZgzbzip2bz2xzzCbad value for 'compress', or compression format not supported : {0}r.z.tarz creating %szCreating tar archivecs,dk r|_|_dk r(|_|_|S)N)gidZgnameuiduname)Ztarinfo)rgroupownerrr r! _set_uid_gidsz#_make_tarball.._set_uid_gidzw|%s)rc)_ZLIB_SUPPORTED_BZ2_SUPPORTED_LZMA_SUPPORTED ValueErrorr6tarfiler+r,dirnamerkinforjrrr=addr) base_namebase_dircompressverbosedry_runrrloggerZtar_compressionrZ compress_extZ archive_name archive_dirrtarr )rrrrr! _make_tarballYs<          rc Cs|ddl}|d}tjj|}|rPtjj| rP|dk rB|jd||sPtj||dk rf|jd|||sx|j|d|jd}tjj |} | tj kr|j | | |dk r|jd| xtj |D]\} } } xFt | D]:} tjj tjj| | } |j | | |dk r|jd| qWxT| D]L} tjj tjj| | } tjj| r|j | | |dk r|jd| qWqWWdQRX|S)Nrz.zipz creating %sz#creating '%s' and adding '%s' to itw)Z compressionz adding '%s')zipfiler+r,rrkrrjZipFileZ ZIP_DEFLATEDnormpathcurdirr&walksortedr_isfile)rrrrrrZ zip_filenamerZzfr,dirpathZdirnames filenamesrKr r r! _make_zipfiles@             rrrzuncompressed tar filezgzip'ed tar-fileZgztarzZIP fileziprzbzip2'ed tar-fileZbztarrzxz'ed tar-fileZxztarcCsddtjD}|j|S)NcSsg|]\}}||dfqS)rr ).0rKregistryr r r! sz'get_archive_formats..)_ARCHIVE_FORMATSitemssort)formatsr r r!rs rcCsz|dkr g}t|s td|t|ttfs6tdx0|D](}t|ttf s\t|dkr|dk r$|jd|tjj|}|s>tj||dkrLtj}||d} y t|} Wn tk rt d|YnX| d} x| dD]\} }|| | <qW|dkr|| d<|| d<z| ||f| }Wd|dk r|dk r|jd | tj| X|S) Nzchanging into '%s')rrzunknown archive format '%s'rrrrzchanging back to '%s') r+getcwddebugr,r/chdirrrrr)rr6Zroot_dirrrrrrrZsave_cwdrO format_infofuncargvalr|r r r!rs6        cCsddtjD}|j|S)NcSs"g|]\}}||d|dfqS)rr )rrKrr r r!r6sz&get_unpack_formats..)_UNPACK_FORMATSrr)rr r r!r0s c Csvi}x.tjD]"\}}x|dD] }|||<q WqWx,|D]$}||kr:d}t||||fq:Wt|srtddS)Nrz!%s is already registered for "%s"z*The registered function must be a callable)rrr#rr) extensionsrrZexisting_extensionsrKrext extensionmsgr r r!_check_unpack_options;s rcCs,|dkr g}t|||||||ft|<dS)N)rr)rKrrrrr r r!rMs cCs t|=dS)N)r)rKr r r!rcscCs&tjj|}tjj|s"tj|dS)N)r+r,rr^rj)r,rr r r!_ensure_directorygs  rc Csddl}|j|std||j|}zx|jD]}|j}|jds4d|krRq4tjj |f|j d}|spq4t ||j ds4|j |j}t|d}z|j|Wd|j~Xq4WWd|jXdS)Nrz%s is not a zip file/z..r5)rZ is_zipfiler"rZinfolistr|rr+r,r_splitrrr%r=r&r) r| extract_dirrrrrKtargetdatafr r r!_unpack_zipfilems*       rcCsXddl}y|j|}Wn"|jk r8td|YnXz|j|Wd|jXdS)Nrz/%s is not a compressed or uncompressed tar file)rr=ZTarErrorr"Z extractallr)r|rrZtarobjr r r!_unpack_tarfilesrz.tarz.zip)rrz.tar.gzz.tgzz.tar.bz2z.tbz2z.tar.xzz.txzcCs:x4tjD](\}}x|dD]}|j|r|SqWq WdS)Nr)rrr)r|rKrrr r r!_find_unpack_formats   rc Cs|dkrtj}|dk rhy t|}Wn"tk rFtdj|YnX|d}|||ft|dnHt|}|dkrtdj|t|d}tt|d}|||f|dS)NzUnknown unpack format '{0}'rrzUnknown archive format '{0}') r+rrrrr6dictrr")r|rr6rrrOr r r!rs  statvfs disk_usageZusageztotal used freezTotal space in byteszUsed space in byteszFree space in bytescCs@tj|}|j|j}|j|j}|j|j|j}t|||S)N)r+rf_bavailf_frsizef_blocksf_bfree_ntuple_diskusage)r,r?freetotalusedr r r!rs    ntcCs"tj|\}}||}t|||S)N)rZ _getdiskusager)r,rrrr r r!rscCs|dkr|dkrtd|}|}|dkr.d}n(t|trVt|}|dkrVtdj||dkrdd}n(t|tst|}|dkrtdj|tj |||dS)Nzuser and/or group must be setrzno such user: {!r}zno such group: {!r}r) rrrmr LookupErrorr6intrr+r)r,userrZ_userZ_groupr r r!rs"  PcCsyttjd}Wnttfk r.d}YnXyttjd}Wnttfk r^d}YnX|dksp|dkrytjtjj}Wn$t tt fk rtj |}YnX|dkr|j }|dkr|j }tj ||fS)NZCOLUMNSrZLINES)rr+environrrrrs __stdout__filenoAttributeErrorr- terminal_sizecolumnslines)Zfallbackrrsizer r r!rs$  c s"dd}tjjr&||r"SdS|dkr>tjjdtj}|sFdS|jtj}tj dkrtj |krt|j dtj tjjddjtj}t fdd |Drg}q‡fd d |D}ng}t }xT|D]L}tjj|}||kr|j|x(|D] } tjj|| } || |r| SqWqWdS) NcSs&tjj|o$tj||o$tjj| S)N)r+r,rkaccessr^)r>r[r r r! _access_checkXszwhich.._access_checkPATHZwin32rZPATHEXTrc3s |]}jj|jVqdS)N)lowerr)rr)cmdr r! uszwhich..csg|] }|qSr r )rr)r r r!rxszwhich..)r+r,rrgetdefpathrpathseprsplatformrinsertanyrdr.rr_) r r[r,rZpathextfilesseendirZnormdirZthefilerKr )r r!rKs8            @)r)FN)rrrNNN)rrN)rN)rr)rr)rr)Nr)NNrrNNN)Nr)NN)NNrr)r)Vr+rsr7rb collectionsrEzlibr ImportErrorrrZlzmarpwdrZgrpr__all__r-r rrrr"rr#rr2rrr*rMrrr rr rvrr=rwrxsupports_dir_fdri supports_fdrTrr Zavoids_symlink_attacksrr rrrrrrrrrrrrrrrrrrrrrl namedtuplerr__doc__rrrrKrrrF_OKX_OKrr r r r!s          :  Y!,   5 8    @ -     6  "        %        -