U
    bY#                  
   @   s  d dl mZmZmZmZ d dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZmZmZmZmZ d dlZddlmZmZmZ dd	lmZ eeZed
d eD Zeeeeef  edddZ eeeeef f eeee f dddZ!eeeeef f edddZ"ee#e#ddddZ$eeef dddZ%eeef dddZ&eeee f eeeef  eeeeeef f e#e#e#edd	ddZ'ee ddd Z(ee dd!d"Z)ee ee d#d$d%Z*ee dd&d'Z+ee e#e#e#edd(d)d*Z,d+d, Z-d-d. Z.dS )/    )absolute_importdivisionprint_functionunicode_literals)	getLogger)lstatwalk)isdirjoin)AnyDictIterableListTupleN   )CONDA_PACKAGE_EXTENSIONSCONDA_TEMP_EXTENSIONSCONDA_LOGS_DIR)contextc                 c   s   | ]}| d V  qdS )z.partN ).0er   r   3lib/python3.8/site-packages/conda/cli/main_clean.py	<genexpr>   s     r   )partswarningsreturnc              
   G   sd   t | }zt|}W n: tk
rN } z| d kr0 | ||f W 5 d }~X Y nX |jdkr^t|jS )N   )r
   r   OSErrorappendst_nlinkNotImplementedErrorst_size)r   r   pathstatr   r   r   r   	_get_size   s     
r%   )	pkg_sizesr   c                 C   s   dd |   D S )Nc                 S   s   i | ]\}}|t |qS r   )tuple)r   pkgs_dirpkgsr   r   r   
<dictcomp>%   s      z"_get_pkgs_dirs.<locals>.<dictcomp>)itemsr&   r   r   r   _get_pkgs_dirs$   s    r-   c                 C   s   t dd |  D S )Nc                 s   s   | ]}t | V  qd S Nsumvaluesr   r)   r   r   r   r   )   s     z"_get_total_size.<locals>.<genexpr>r/   r,   r   r   r   _get_total_size(   s    r3   )r   verbose	verbosityr   c              
   G   s   ddl m} t| }z6||r6| rH|rHtd|  n| rHtd|  W nL ttfk
r } z*| rztd| d| ntd| W 5 d }~X Y nX d S )Nr   )rm_rfzRemoved z*WARNING: cannot remove, file permissions: 
z%r)Zgateways.disk.deleter6   r
   printIOErrorr   loginfo)r4   r5   r   r6   r#   r   r   r   r   _rm_rf,   s    r<   )r   c               
   C   s   g } i }t  D ]d}tt|\}}}|D ]H}|ts8q(zt||| d}W n tk
r^   Y q(X |||i |< q(q| |t|t	|dS )Nr   r   r&   	pkgs_dirs
total_size)
find_pkgs_dirsnextr   endswith_EXTSr%   r!   
setdefaultr-   r3   )r   r&   r(   _tarsZtarsizer   r   r   find_tarballs<   s"    

rI   c               
      s   g  i } t  D ]|}tt|\}}}|D ]`}tt||ds>q(z$t fddtt||D }W n tk
rv   Y q(X || |i |< q(q | t| t	| dS )Nr;   c                 3   s,   | ]$\}}}|D ]}t || d V  qqdS )r=   N)r%   )r   rootrF   filesfiler=   r   r   r   d   s    zfind_pkgs.<locals>.<genexpr>r>   )
rA   rB   r   r	   r
   r0   r!   rE   r-   r3   )r&   r(   rF   r)   pkgrH   r   r=   r   	find_pkgsW   s&    
rN   )	r?   r   r@   r&   r4   r5   dry_runnamer   c                C   s  ddl m} ddlm}	 |r6|r6|D ]\}
}t| q$tdd | D sd|r`td| d d S |rD|rtd	| d
 | D ]`\}}td|  tddt|   | D ]$\}}td|dd|	|d qt  qtd td|	|d t  n6t	dd | D }td| d|	| d| d |rNd S t
jr^t
jsd|  | D ]&\}}|D ]}t||||d qxqld S )Nr   
confirm_ynr   )human_bytesc                 s   s   | ]
}|V  qd S r.   r   r2   r   r   r   r      s     zrm_pkgs.<locals>.<genexpr>zThere are no unused  to remove.Will remove the following :z  -  - z<40 z>10z-----------------zTotal: c                 s   s   | ]}t |V  qd S r.   )lenr2   r   r   r   r      s     Will remove z (z) .r4   r5   )commonrR   ZutilsrS   r8   anyr1   r+   rZ   r0   r   json
always_yesr<   )r?   r   r@   r&   r4   r5   rO   rP   rR   rS   fnZ	exceptionr(   r)   rM   rH   countr   r   r   rm_pkgsv   s<    
 rd   c                  C   s0   g } t  D ] }t|d}t|r
| | q
| S )Ncache)rA   r
   r	   r   )rK   r(   r#   r   r   r   find_index_cache   s    

rf   c                  C   s   ddl m}  dd |  D S )Nr   PackageCacheDatac                 S   s   g | ]}t |jr|jqS r   )r	   r(   )r   Zpcr   r   r   
<listcomp>   s     
 z"find_pkgs_dirs.<locals>.<listcomp>)Zcore.package_cache_datarh   Zwritable_cachesrg   r   r   r   rA      s    rA   )pathsr   c                 C   s\   g }t t| ptjgD ]>}t|D ]0\}}}|D ] }|tsBq2|t|| q2q$q|S r.   )	sortedsetsysprefixr   rC   r   r   r
   )rj   	tempfilesr#   rJ   rF   rK   rL   r   r   r   find_tempfiles   s    
rp   c                     sZ   g } t  D ]J}t|t t s"q
tt d d g g\}}}|  fdd|D  q
| S )Nc                    s   g | ]}t  |qS r   )r
   )r   r:   r#   r   r   ri      s     z!find_logfiles.<locals>.<listcomp>)rA   r
   r   r	   rB   r   extend)rK   r(   rF   logsr   rq   r   find_logfiles   s    

rt   )r+   r4   r5   rO   rP   r   c                C   s   ddl m} | s(|r$td| d d S |rz|r`td| d | D ]}td|  qDt  ntdt|  d	| d
 |rd S tjrtjs|  | D ]}t|||d qd S )Nr   rQ   zThere are no rT   rU   rV   rX   r[   rY   r\   r]   )r^   rR   r8   rZ   r   r`   ra   r<   )r+   r4   r5   rO   rP   rR   itemr   r   r   rm_items   s$    rv   c                 C   s  ddi}t jpt j | j| jd}| jrNt  |d< }t|f|ddi |S | js| j	s| j
s| js| js| jsddlm} |d	| j	s| jrt  |d
< }tf ||ddi | j
s| jrt }d|i|d< t|f|ddi | js| jrt  |d< }tf ||ddi | js&| jrLt| j |d< }	t|	f|ddi | js\| jr~t  |d< }
t|
f|ddi |S )NZsuccessT)r4   r5   rO   r?   rP   zpackage cache(s)r   )ArgumentErrorzDAt least one removal target must be given. See 'conda clean --help'.tarballsz
tarball(s)rK   index_cachezindex cache(s)packagesz
package(s)ro   ztempfile(s)logfilesz
logfile(s))r   r`   quietr5   rO   Zforce_pkgs_dirsrA   rv   allrx   ry   rz   ro   r{   
exceptionsrw   rI   rd   rf   rN   rp   rt   )argsparserjson_resultkwargsr?   rw   rG   re   r)   Ztmpsrs   r   r   r   _execute   sP    r   c                 C   s>   ddl m} t| |}tjr$|| | jr:ddlm} |d S )Nr   )stdout_jsonr   )
DryRunExit)r^   r   r   r   r`   rO   r~   r   )r   r   r   r   r   r   r   r   execute*  s    
r   )/Z
__future__r   r   r   r   Zloggingr   osr   r   os.pathr	   r
   typingr   r   r   r   r   rm   Zbase.constantsr   r   r   Zbase.contextr   __name__r:   rD   str	Exceptionintr%   r-   r3   boolr<   rI   rN   rd   rf   rA   rp   rt   rv   r   r   r   r   r   r   <module>   sL   ,  1
!4