
    si/                    d   S r SSKJr  SSKrSSKrSSKJr  SSKJrJ	r	  SSK
Jr  \(       a  SSKJrJrJr  SSKJr  SS	K
Jr  \" \5      rSS
 jrSS jrSS jrSS jrSS jrSS jrSS jr                  SS jrS S jrS S jrS!S jrS S jr             S"S jr!S r"S#S jr#g)$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)Iterable)Anyc                   SSK Jn  SSKJn  SSKJn  SnUnU" S5      nU R                  "  S$UUUS.UD6nUR                  S	5      n	U	R                  S
SSSS9  U	R                  SSSSS9  U	R                  SSSSS9  U	R                  SSSSS9  U	R                  SSSSS9  U	R                  SS[        R                  USS9  U	R                  SS SS!S9  U" U5        UR                  S"S#9  U$ )%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.13/site-packages/conda/cli/main_clean.pyconfigure_parserr*      sv   !*62GK	F 				
 	A 112CD'']	 (  ''"	 (  ''.	 (  ''.	 (  ''%	 (  ''jj N ( 
 '' 	 (  "!$NN6N7H    c                    [        U6 n [        R                  " U5      nUR                  S:  a  [        eUR
                  $ ! [         a&  nU c  e U R                  SU SU 35        [        eS nAff = f)Nr   z	WARNING: z: )r   oslstatst_nlinkNotImplementedErrorst_sizeOSErrorappend)warningspartspathstates        r)   	_get_sizer9   k   sw    <Dxx~ ==1%%||  ")D6A3/0 "!"s   A 
A2!A--A2c                l    U R                  5        VVs0 s H  u  pU[        U5      _M     snn$ s  snnf N)itemstuple)	pkg_sizespkgs_dirpkgss      r)   _get_pkgs_dirsrA      s.    8A8IJ8InhHeDk!8IJJJs   0c                B    [        S U R                  5        5       5      $ )Nc              3  T   #    U  H  n[        UR                  5       5      v   M      g 7fr;   sumvalues.0r@   s     r)   	<genexpr>"_get_total_size.<locals>.<genexpr>   s      A.@ds4;;=!!.@s   &(rD   )r>   s    r)   _get_total_sizerK      s    Ai.>.>.@AAAr+   c                <   SSK Jn  [        U6 n U" U5      (       a  U (       d  U(       a  [        SU 35        g g g U (       d  [        SU 35        g g ! [         a>  nU (       d  [        SU SU< 35         S nAg [
        R                  SU5         S nAg S nAff = f)Nr   )rm_rfzRemoved z*WARNING: cannot remove, file permissions: 
z%r)gateways.disk.deleterM   r   printr2   loginfo)quietverboser5   rM   r6   r8   s         r)   _rm_rfrU      s    ,<D
;;W'( %5>tfEF  >tfBqeLMMHHT1	s"   )A A 
BB;BBc                    SSK Jn   SSKJn  / n0 n[	        5        H  n[        [        R                  " U5      5      u    pVU HU  nUR                  U 5      nUR                  R                  U5      (       d  M6   [        XGUS9n	XR                  U0 5      U'   MW     M     UU[        U5      [        U5      S.$ ! [         a     M  f = f)Nr   )PARTIAL_EXTENSIONcontextr4   r4   r>   	pkgs_dirs
total_size)base.constantsrW   base.contextrY   find_pkgs_dirsnextr-   walkremovesuffixplugin_managerhas_package_extensionr9   
setdefaultr0   rA   rK   )
rW   rY   r4   r>   r?   _filesfilepackagesizes
             r)   find_tarballsrl      s    2&H+-I"$2778,-1D''(9:G))??HH@ (C <@$$Xr248  %$ #I.%i0	  ' s   9
B88
CCc                   ^ / m0 n [        5        H  n[        [        R                  " U5      5      u  p#nU Hf  n[	        [        XS5      5      (       d  M   [        U4S j[        R                  " [        X5      5       5       5      nXPR                  U0 5      U'   Mh     M     TU [        U 5      [        U 5      S.$ ! [         a     M  f = f)NrR   c              3  R   >#    U  H  u  pnU  H  n[        XTS 9v   M     M     g7f)rZ   N)r9   )rH   rootrg   rh   ri   r4   s        r)   rI   find_pkgs.<locals>.<genexpr>   s0      *F % d8< % =*Fs   $'r[   )r`   ra   r-   rb   r   r   rE   rf   r0   rA   rK   )r>   r?   rg   r@   pkgrk   r4   s         @r)   	find_pkgsrr      s    H+-I"$"''(+,
ChV455	? *,''$x2E*F  ;?$$Xr237  %* #I.%i0	  ' s   2B>>
CCc          
        SSK Jn  SSKJn	  SSKJn
  U(       d  U(       a  U H  n[        U5        M     [        S UR                  5        5       5      (       d  U(       d  [        SU S35        g U(       d  U(       a  [        SU S	35        UR                  5        Hi  u  p[        S
U 35        [        S
S[        U5      -   35        UR                  5        H  u  p[        SUS SU
" U5      S 35        M      [        5         Mk     [        S5        [        SU
" U5      S 35        [        5         O;[        S UR                  5        5       5      n[        SU SU
" U5       SU S35        U(       a  g UR                  (       a  UR                  (       d  U	" 5         UR                  5        H  u  pU H  n[        XXES9  M     M     g )Nr   rX   
confirm_yn)human_bytesc              3  $   #    U  H  ov   M     g 7fr;    rG   s     r)   rI   rm_pkgs.<locals>.<genexpr>   s     3 2t 2s   zThere are no unused  to remove.Will remove the following :z  -  - z<40 z>10z-----------------zTotal: c              3  8   #    U  H  n[        U5      v   M     g 7fr;   )lenrG   s     r)   rI   ry      s     A.@dD		.@s   Will remove z (z) .rS   rT   )r_   rY   	reportersru   utilsrv   rP   anyrF   r<   r   rE   json
always_yesrU   )r\   r4   r]   r>   rS   rT   dry_runnamerY   ru   rv   warningr?   r@   rq   rk   counts                    r)   rm_pkgsr      s    '&#XG'N   3	 0 0 2333(k:;.tfA67"+//"38*o&3X./01!%ICDS	;t+<S*ABC ". #4 (OGK
3C89:GAi.>.>.@AAELr+j*A)B"TF!LM<<w11#//+C8?  ,r+   c                     / n [        5        H2  n[        US5      n[        U5      (       d  M!  U R                  U5        M4     U $ )Ncache)r`   r   r   r3   )rh   r?   r6   s      r)   find_index_cacher     s<    E"$Hg&;;LL	 %
 Lr+   c                     SSK Jn   U R                  5        Vs/ s H+  n[        UR                  5      (       d  M  UR                  PM-     sn$ s  snf )Nr   )PackageCacheData)core.package_cache_datar   writable_cachesr   r?   )r   pcs     r)   r`   r`     sC    : />>@@E"++DV@  s
   AAc           	     2   SSK Jn  / n[        [        U =(       d    [        R
                  /5      5       H^  n[        R                  " U5       HA  u  pEnU H5  nUR                  U5      (       d  M  UR                  [        XG5      5        M7     MC     M`     U$ )Nr   )CONDA_TEMP_EXTENSIONS)r^   r   sortedsetr!   r"   r-   rb   endswithr3   r   )pathsr   	tempfilesr6   ro   rg   rh   ri   s           r)   find_tempfilesr     sw    6Is50SZZL12 ggdmNDU}}%:;;  d!12  , 3 r+   c            
     :   SSK Jn   / n[        5        Hn  n[        X 5      n[	        U5      (       d  M    [        [        R                  " U5      5      u    pEUR                  U Vs/ s H  n[        X65      PM     sn5        Mp     U$ s  snf ! [         a     M  f = f)Nr   )CONDA_LOGS_DIR)
r^   r   r`   r   r   ra   r-   rb   extendStopIteration)r   rh   r?   r6   rg   logsrQ   s          r)   find_logfilesr   +  s    /E"$H-T{{	bggdm,JAqLLT:Tc$t/T:; % L ; 		s#   1B%B
:BB
BBc                  SSK Jn  SSKJn  U (       d  U(       d  [	        SU S35        g U(       dS  U(       a1  [	        SU S35        U  H  n[	        SU 35        M     [	        5         O[	        S	[        U 5       S
U S35        U(       a  g UR                  (       a  UR                  (       d  U" 5         U  H  n[        XqUS9  M     g )Nr   rX   rt   zThere are no rz   r{   r|   r~   r   r   r   r   )	r_   rY   r   ru   rP   r   r   r   rU   )r<   rS   rT   r   r   rY   ru   items           r)   rm_itemsr   @  s     '&M${34.tfA67TFm$ GLUAdV156<<w11t'2 r+   c                |   SSK Jn  SS0nUR                  =(       d    UR                  UR                  UR
                  S.nU R                  (       a!  [        5       =US'   n[        U40 UDSS0D6  U$ U R                  (       dc  U R                  (       dR  U R                  (       dA  U R                  (       d0  U R                  (       d  U R                  (       d  SS	KJn  U" S
5      eU R                  (       d  U R                  (       a   [#        5       =US'   n[%        S0 UDUDSS0D6  U R                  (       d  U R                  (       a!  ['        5       nSU0US'   [        U40 UDSS0D6  U R                  (       d  U R                  (       a   [)        5       =US'   n	[%        S0 U	DUDSS0D6  U R                  (       d  U R                  (       a*  [+        U R                  5      =US'   n
[        U
40 UDSS0D6  U R                  (       d  U R                  (       a  [-        5       =US'   n[        U40 UDSS0D6  U$ )Nr   rX   successT)rS   rT   r   r\   r   zpackage cache(s))ArgumentErrorzDAt least one removal target must be given. See 'conda clean --help'.tarballsz
tarball(s)rh   index_cachezindex cache(s)packagesz
package(s)r   ztempfile(s)logfilesz
logfile(s)rx   )r_   rY   r   rS   rT   r   force_pkgs_dirsr`   r   allr   r   r   r   r   
exceptionsr   rl   r   r   rr   r   r   )argsparserrY   json_resultr%   r\   r   tarsr   r@   tmpsr   s               r)   _executer   b  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                    SSK Jn  SSKJn  [	        X5      nUR
                  (       a  U" U5        U R                  (       a  SSKJn  Ueg)Nr   rX   r   )stdout_json)
DryRunExitr   )	r_   rY   commonr   r   r   r   r   r   )r   r   rY   r   r   r   s         r)   executer     s4    &#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   rS   boolrT   r   r   None)r   zdict[str, Any])r\   zdict[str, tuple[str]]r4   	list[str]r]   r   r>   r   rS   r   rT   r   r   r   r   r   r   r   )r   r   )r   zIterable[str]r   r   )r<   r   rS   r   rT   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
   collections.abcr   r   __name__rQ   r*   r9   rA   rK   rU   rl   rr   r   r   r`   r   r   r   r   r   rx   r+   r)   <module>r      s#  
 # 	 
    EE(Pf(KB">>/@$/@/@ /@ )	/@ /@ /@ /@ /@ 
/@d"*33 3 	3
 3 3 
3D5pr+   