
    wBf@/                    6   d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ erddlmZmZmZ ddl
mZmZ  ee      Zdd	Zdd
ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZd dZddZ	 	 	 	 	 	 	 	 	 	 	 	 d!dZ d Z!d"dZ"y)#zCLI implementation for `conda clean`.

Removes cached package tarballs, index files, package metadata, temporary files, and log files.
    )annotationsN)	getLogger)isdirjoin)TYPE_CHECKING)ArgumentParser	Namespace_SubParsersAction)AnyIterablec                
   ddl m} ddlm} ddlm} d}|} |d      } | j                  	 d$|||d|}|j                  d	      }	|	j                  d
ddd       |	j                  dddd       |	j                  dddd       |	j                  dddd       |	j                  dddd       |	j                  ddt        j                  |d       |	j                  dd dd!        ||       |j                  d"#       |S )%N   )dals   )ExtendConstAction)add_output_and_prompt_optionsz"Remove unused packages and caches.z@
        Examples::

            conda clean --tarballs
        )helpdescriptionepilogzRemoval Targetsz-az--all
store_truezNRemove index cache, lock files, unused cache packages, tarballs, and logfiles.)actionr   z-iz--index-cachezRemove index cache.z-pz
--packageszRemove unused packages from writable package caches. WARNING: This does not check for packages installed using symlinks back to the package cache.z-tz
--tarballszRemove cached package tarballs.z-fz--force-pkgs-dirszRemove *all* writable package caches. This option is not included with the --all flag. WARNING: This will break environments with packages installed using symlinks back to the package cache.z-cz--tempfileszRemove temporary files that could not be deleted earlier due to being in-use.  The argument for the --tempfiles flag is a path (or list of paths) to the environment(s) where the tempfiles should be found and removed.)constr   r   z-lz
--logfileszRemove log files.zconda.cli.main_clean.execute)func)clean)
auxlib.ishr   actionsr   helpersr   
add_parseradd_argument_groupadd_argumentsysprefixset_defaults)
sub_parserskwargsr   r   r   summaryr   r   premoval_target_optionss
             4lib/python3.12/site-packages/conda/cli/main_clean.pyconfigure_parserr*      sx   !*62GK	F 				
 	A 112CD'']	 (  ''"	 (  ''.	 (  ''.	 (  ''%	 (  ''jj N ( 
 '' 	 (  "!$NN6N7H    c                    t        | }	 t        j                  |      }|j                  dkD  rt        |j
                  S # t        $ r%}|  | j                  d| d|        t        d }~ww xY w)Nr   z	WARNING: z: )r   oslstatst_nlinkNotImplementedErrorst_sizeOSErrorappend)warningspartspathstates        r)   	_get_sizer9   j   sw    <Dxx~ ==1%%||  ")D6A3/0 "!"s   A   	A.	 A))A.c                h    | j                         D ci c]  \  }}|t        |       c}}S c c}}w N)itemstuple)	pkg_sizespkgs_dirpkgss      r)   _get_pkgs_dirsrA   ~   s*    8A8IJnhHeDk!JJJs   .c                B    t        d | j                         D              S )Nc              3  N   K   | ]  }t        |j                                 y wr;   sumvalues.0r@   s     r)   	<genexpr>z"_get_total_size.<locals>.<genexpr>   s     Ads4;;=!As   #%rD   )r>   s    r)   _get_total_sizerJ      s    Ai.>.>.@AAAr+   c                   ddl m} t        | }	  ||      r| s$|r!t        d|        y | st        d|        y y y y # t        $ r9}| st        d| d|       nt
        j                  d|       Y d }~y Y d }~y d }~ww xY w)Nr   )rm_rfzRemoved z*WARNING: cannot remove, file permissions: 
z%r)gateways.disk.deleterL   r   printr2   loginfo)quietverboser5   rL   r6   r8   s         r)   _rm_rfrT      s    ,<D
;W'(>tfEF  %5  >tfBqeLMHHT1 Ns   ? ? 	B*A<<Bc                 P   ddl m} m} g }i }t               D ]f  }t	        t        j                  |            \  }}}|D ]=  }|j                  g | |      s	 t        |||      }||j                  |i       |<   ? h ||t        |      t        |      dS # t        $ r Y fw xY w)Nr   )CONDA_PACKAGE_EXTENSIONSCONDA_PACKAGE_PARTSr4   r4   r>   	pkgs_dirs
total_size)base.constantsrV   rW   find_pkgs_dirsnextr-   walkendswithr9   
setdefaultr0   rA   rJ   )	rV   rW   r4   r>   r?   _tarstarsizes	            r)   find_tarballsrf      s    NH+-I"$ ?"''(+,
1d 	?C<< Q": Q=P QR? 3B ;?	$$Xr237	??" #I.%i0	  ' s   B	B%$B%c                    g i } t               D ]  }t        t        j                  |            \  }}}|D ]`  }t	        t        ||d            s	 t        fdt        j                  t        ||            D              }|| j                  |i       |<   b  | t        |       t        |       dS # t        $ r Y w xY w)NrQ   c              3  P   K   | ]  \  }}}|D ]  }t        ||          yw)rX   N)r9   )rH   rootrb   filesfiler4   s        r)   rI   zfind_pkgs.<locals>.<genexpr>   s@      &a %  dD8<<<s   #&rY   )r]   r^   r-   r_   r   r   rE   ra   r0   rA   rJ   )r>   r?   rb   r@   pkgre   r4   s         @r)   	find_pkgsrm      s    H+-I"$ ?"''(+,
4 	?ChV45	? *,''$x2E*F  ;?	$$Xr237	??* #I.%i0	  ' s   1B55	C Cc          
     @   ddl m} ddlm}	 ddlm}
 |s|r|D ]  }t        |        t        d |j                         D              s|st        d| d       y |s|rt        d	| d
       |j                         D ]h  \  }}t        d|        t        ddt        |      z          |j                         D ]  \  }}t        d|dd |	|      d         t                j t        d       t        d |	|      d       t                n;t        d |j                         D              }t        d| d |	|       d| d       |ry |j                  r|j                  s |
        |j                         D ]  \  }}|D ]  }t        ||||         y )Nr   context)human_bytesr   
confirm_ync              3      K   | ]  }|  y wr;    rG   s     r)   rI   zrm_pkgs.<locals>.<genexpr>   s     3t3s   zThere are no unused  to remove.Will remove the following :z  -  - z<40 z>10z-----------------zTotal: c              3  2   K   | ]  }t        |        y wr;   )lenrG   s     r)   rI   zrm_pkgs.<locals>.<genexpr>   s     AdD	As   Will remove z (z) .rR   rS   )base.contextrp   utilsrq   commonrs   rO   anyrF   r<   r}   rE   json
always_yesrT   )rZ   r4   r[   r>   rR   rS   dry_runnamerp   rq   rs   warningr?   r@   rl   re   counts                    r)   rm_pkgsr      s    '#"X 	G'N	 3	 0 0 233(k:;.tfA67"+//"3 $8*o&3X./01!% DICDS	;t+<S*ABCD (OGK
3C89:GAi.>.>.@AAELr+j*A)B"TF!LM<<w11#//+ @$ 	@C8Sw?	@@r+   c                 z    g } t               D ]+  }t        |d      }t        |      s| j                  |       - | S )Ncache)r]   r   r   r3   )rj   r?   r6   s      r)   find_index_cacher     s?    E"$ Hg&;LL	
 Lr+   c                     ddl m}  | j                         D cg c]$  }t        |j                        s|j                  & c}S c c}w )Nr   )PackageCacheData)core.package_cache_datar   writable_cachesr   r?   )r   pcs     r)   r]   r]     s<    : />>@E"++DV  s
   AAc           	        ddl m} g }t        t        | xs t        j
                  g            D ]T  }t        j                  |      D ]:  \  }}}|D ]/  }|j                  |      s|j                  t        ||             1 < V |S )Nr   )CONDA_TEMP_EXTENSIONS)r\   r   sortedsetr!   r"   r-   r_   r`   r3   r   )pathsr   	tempfilesr6   ri   rb   rj   rk   s           r)   find_tempfilesr     s    6Is50SZZL12 3 ggdm 	3ND!U 3}}%:;  dD!123	33 r+   c            
     $   ddl m}  g }t               D ]f  }t        ||       }t	        |      s	 t        t        j                  |            \  }}}|j                  |D cg c]  }t        ||       c}       h |S c c}w # t        $ r Y {w xY w)Nr   )CONDA_LOGS_DIR)
r\   r   r]   r   r   r^   r-   r_   extendStopIteration)r   rj   r?   r6   rb   logsrP   s          r)   find_logfilesr   (  s    /E"$ Hn-T{	bggdm,JAq$LLT:c$tS/:; L ; 		s#   1B A>
3B>B	BBc               N   ddl m} ddlm} | s|st	        d| d       y |sL|r/t	        d| d       | D ]  }t	        d	|         t	                nt	        d
t        |        d| d       |ry |j                  r|j                  s |        | D ]  }t        |||        y )Nr   ro   r   rr   zThere are no rv   rw   rx   rz   r~   r{   r   r   )	r   rp   r   rs   rO   r}   r   r   rT   )r<   rR   rS   r   r   rp   rs   items           r)   rm_itemsr   =  s     '"M${34.tfA67 %TFm$%GLUAdV156<<w11 3t5'23r+   c                   ddl m} ddi}|j                  xs |j                  |j                  |j
                  d}| j                  r!t               x|d<   }t        |fi |ddi |S | j                  sJ| j                  s>| j                  s2| j                  s&| j                  s| j                  sdd	lm}  |d
      | j                  s| j                  r t#               x|d<   }t%        di ||ddi | j                  s| j                  r!t'               }d|i|d<   t        |fi |ddi | j                  s| j                  r t)               x|d<   }	t%        di |	|ddi | j                  s| j                  r*t+        | j                        x|d<   }
t        |
fi |ddi | j                  s| j                  rt-               x|d<   }t        |fi |ddi |S )Nr   ro   successT)rR   rS   r   rZ   r   zpackage cache(s))ArgumentErrorzDAt least one removal target must be given. See 'conda clean --help'.tarballsz
tarball(s)rj   index_cachezindex cache(s)packagesz
package(s)r   ztempfile(s)logfilesz
logfile(s)ru   )r   rp   r   rR   rS   r   force_pkgs_dirsr]   r   allr   r   r   r   r   
exceptionsr   rf   r   r   rm   r   r   )argsparserrp   json_resultr%   rZ   r   rc   r   r@   tmpsr   s               r)   _executer   _  s   &d#K.????F /=/??K 9>f>+=>  	====>>==.R
 	
 }})68J$4$4&4|4488 "&-u%5M"8&8'78}})24J$4$4&4|4~~*8*HHK 444m4}})68J$33l3r+   c                    ddl m} ddlm} t	        | |      }|j
                  r ||       | j                  rddlm} |y)Nr   ro   r   )stdout_json)
DryRunExitr   )	r   rp   r   r   r   r   r   r   r   )r   r   rp   r   r   r   s         r)   executer     s6    &#4(K||K ||+r+   )r$   r
   returnr   )r5   strr4   zlist[str] | Noner   int)r>   dict[str, dict[str, int]]r   zdict[str, tuple[str, ...]])r>   r   r   r   )r5   r   rR   boolrS   r   r   None)r   zdict[str, Any])rZ   zdict[str, tuple[str]]r4   	list[str]r[   r   r>   r   rR   r   rS   r   r   r   r   r   r   r   )r   r   )r   zIterable[str]r   r   )r<   r   rR   r   rS   r   r   r   r   r   r   r   )r   r	   r   r   r   r   )#__doc__
__future__r   r-   r!   loggingr   os.pathr   r   typingr   argparser   r	   r
   r   r   __name__rP   r*   r9   rA   rJ   rT   rf   rm   r   r   r]   r   r   r   r   r   ru   r+   r)   <module>r      s   
 # 	 
    EE$Pf(KB":>/@$/@/@ /@ )	/@ /@ /@ /@ /@ 
/@d"*33 3 	3
 3 3 
3D5pr+   