
    wBft!                        d Z ddlZddlZddlZddlZddlZddlZddlmZm	Z	m
Z
 ddlmZmZmZmZmZmZmZ de
defdZd Zd	e	d
edefdZd Zd Z ej2                  dej4                        Zd Zd ZddZddZd Z d Z!y)zdCLI implementation for `conda package`.

Provides some low-level tools for creating conda packages.
    N)ArgumentParser	Namespace_SubParsersAction)abspathbasenamedirnameisdirisfileislinkjoinsub_parsersreturnc                    ddl m} d}|}d} | j                  	 d!|||d|} ||       |j                  dd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
dd       |j	                  d        |S )"N   )add_parser_prefixz/Create low-level conda packages. (EXPERIMENTAL) )helpdescriptionepilogz-wz--whichPATH+storezEGiven some file's PATH, print which conda package the file came from.)metavarnargsactionr   z-rz--reset
store_truez$Remove all untracked files and exit.)r   r   z-uz--untrackedz%Display all untracked files and exit.z
--pkg-nameunknownz4Designate package name of the package being created.)r   defaultr   z--pkg-version0.0z7Designate package version of the package being created.z--pkg-buildr   z<Designate package build number of the package being created.zconda.cli.main_package.execute)func)package)helpersr   
add_parseradd_argumentset_defaults)r   kwargsr   summaryr   r   ps          6lib/python3.12/site-packages/conda/cli/main_package.pyconfigure_parserr*      s   *?GKF			
 	A aNNT   NN3	   NN4	   NNC	   NNF	   NNK	   NN8N9H    c                    t               }|D ]=  }t        | |      }|j                  t        |             t	        j
                  |       ? t        |t        d      D ]  }	 t	        j                  |        y# t        $ r Y 'w xY w)z Remove files for a given prefix.T)keyreverseN)
setr   addr   osunlinksortedlenrmdirOSError)prefixfilesdst_dirsfdstpaths         r)   remover=   L   s|    uH 61oWS\"
		#
 xS$7 	HHTN  		s   #A;;	BBargsparserc                 :   ddl m} ddlm} |j                  }| j
                  rA| j
                  D ]1  }t        |      D ]!  }t        |dd|j                                # 3 yt        d|       | j                  rt        | ||             y| j                  r;t         ||            }t        dt        |      z         |D ]  }t        |        yt        || j                  j                         | j                   t#        | j$                        	       y)
N   context	untracked50z  r   z	# prefix:z# untracked files: %d)nameversionbuild_number)base.contextrC   miscrE   target_prefixwhichwhich_packageprintdist_strresetr=   r3   r4   make_tarbz2pkg_namelowerpkg_versionint	pkg_build)	r>   r?   rC   rE   r7   r<   precr8   fns	            r)   executerZ   [   s    & ""FzzJJ 	=D%d+ =T4==?;<=	= 	+vzzvy()~~y()%E
23 	B"I	]]  "  (	 r+   c                 v    ddl m}  ||       j                         D ]  }|d   |k(  st        |d         c S  y )NrA   
PrefixDatarG   rH   )core.prefix_datar]   iter_recordsstr)r7   rG   r]   infos       r)   get_installed_versionrb   }   sB    -6"//1 (<4tI''( r+   c           
          ddl m} t        | ||j                  |j                  t        |      t        |      g       }|r%d|z  |d   z   |d<   |d   j                  d|z         |S )NrA   rB   )rG   rH   platformarchrI   builddependszpy%d%d_rf   rg   zpython %d.%d*)rJ   rC   dictrd   	arch_namerV   r`   append)rG   rH   rI   requires_pyrC   ds         r)   create_inform      sr    &!!&,	A +-7;'
	)Ok9:Hr+   z^#!.+$c                    ddl m} t        |d      j                  d      dk7  ryt        |      5 }|j                         }d d d        t        j                        }|rd|j                         v syt        j                  d|z  |d	      }t        | t        |            }t        |d
      5 }|j                  |       d d d        t        j                  |t        dd             y# 1 sw Y   xY w# 1 sw Y   6xY w)NrA   )PREFIX_PLACEHOLDERrbz#!Fpythonz#!%s/bin/pythonr   )countw755   T)base.constantsro   openreadshebang_patmatchgroupsubr   r   writer1   chmodrV   )tmp_dirr<   ro   fidatamtmp_pathfos           r)   fix_shebangr      s    3D$Q4'	d rwwy$A(aggi'??,/AA4q?QDGXd^,H	h	 
HHXs5!}%  s   C+0C7+C47D c                 n   ddl m} t        |d      }t        j                  |       t        t        |d      d      5 }|D ]  }|j                  |dz           	 d d d        t        t        |d      d      5 }t        j                  ||dd|	       d d d        |r;t        t        |d
      d      5 }|D ]  }|j                  |dz           	 d d d        t        j                  |      D ]!  }	| j                  t        ||	      d|	z          # y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   [xY w)NrA   )EntityEncoderra   r8   rs   
z
index.jsonT)indent	sort_keyscls
has_prefixzinfo/)auxlib.entityr   r   r1   mkdirrw   r}   jsondumplistdirr0   )
tr   r8   r   ra   r   info_dirr   r:   rY   s
             r)   _add_info_dirr      s%   -GV$HHHX	d8W%s	+ r 	AHHQX	 
d8\*C	0 IB		$1-HI $x.4 	# #T"#	# jj" 0	d8R 'B,/0 I I	# 	#s#   D9D4D+DD(+D4c                    ddl m} t        |      }g }g }t        j                         }t        j                  |d      }	t        j                  d      }
|D ]  }|j                  d      s|j                  d      s	d|v s|dk(  rJ |       t        | |      }|j                  d      r2t        ||      r&t        |t        |            }|j                  |       |	j                  ||       |
j!                  |j#                  d	             |
j!                  d
       t%        |      r~t'        j(                  |      }t+        |t,              r|
j!                  t/        |d	             n|
j!                  |       |j                  d      s8|j                  d| d|        Qt1        |      s^|
j!                  t        |d      j3                                |j                  d      s|j                  d|z          |
j5                         |d<   |r ||       t7        |	||||       |	j9                           ||       |S )z5Create a conda package and return a list of warnings.rA   )rmtreezw:bz2sha1/\r   zbin/zutf-8    z found symlink to absolute path: z -> rp   z	.egg-linkzfound egg link: %s	file_hash)gateways.disk.deleter   r3   tempfilemkdtemptarfilerw   hashlibnew
startswithendswithr   r   r   rj   r0   updateencoder   r1   readlink
isinstancer`   bytesr
   rx   	hexdigestr   close)r7   r8   ra   tar_pathupdate_infor   warningsr   r   r   hr:   r<   links                 r)   create_conda_pkgr      s   -5MEHJ GXw'AFA :LL%CDAIbTSTTQFA<<K$>$0Da 	dA	'"#	$<;;t$D$$tW-.s#"B1#T$ PQD\HHT$%**,-}}[) 4q 89):, DD!WeZ6GGI
7OOr+   c                    ddl m} ddlm} | ||       }t	        dt        |      z         t        |      dk(  rt	        d       y t        d |D              r5t        | d      }|J t        d	 |d d
 j                  d      D              }nd}t        ||||      }	 dj                  di |	|z   }
t        | ||	|
       t	        d       t	        |
       |
S )NrA   )CONDA_PACKAGE_EXTENSION_V1rD   z# files: %dr   z# failed: nothing to doc              3   $   K   | ]  }d |v  
 yw)z/site-packages/N ).0r:   s     r)   	<genexpr>zmake_tarbz2.<locals>.<genexpr>   s     
1a!
1s   rq   c              3   2   K   | ]  }t        |        y wN)rV   )r   xs     r)   r   zmake_tarbz2.<locals>.<genexpr>   s     JqCFJs      .Fz{name}-{version}-{build}z	# successr   )rv   r   rK   rE   rO   r4   anyrb   tuplesplitrm   formatr   )r7   rG   rH   rI   r8   r   rE   python_versionrk   ra   	tarbz2_fns              r)   rR   rR      s    ; }&!	-#e*
$%
5zQ'(

15
11.vx@)))JN2A,>,D,DS,IJJtWlK@D2+22:T:>XXIVUD)4	+	)r+   c              #       K   ddl m ddlm} t	                t               ddlm}  |d z         |      j                         D ]$  }t         fd|d   xs d	D              s!| & yw)
zReturn the package containing the path.

    Provided the path of a (presumably) conda installed file, iterate over
    the conda packages the file came from. Usually the iteration yields
    only one package.
    rA   )paths_equalr\   N)CondaVerificationErrorz)could not determine conda prefix from: %sc              3   D   K   | ]  } t        |              y wr   )r   )r   r:   r<   r   r7   s     r)   r   z which_package.<locals>.<genexpr>  s     Oa{4?D1Os    r8   r   )
common.pathr   r^   r]   r   which_prefix
exceptionsr   r_   r   )r<   r]   r   rX   r   r7   s   `   @@r)   rN   rN     su      *-4=D$F~7$%PSW%WXX6"//1 O4=;NBOOJs   A,A92A9c                 ~    t        |       }	 t        t        |d            r|S |t        |      k(  ryt        |      }2)zReturn the prefix for the provided path.

    Provided the path of a (presumably) conda installed file, return the
    environment prefix in which the file in located.
    z
conda-metaN)r   r	   r   r   )r<   r7   s     r)   r   r     sA     T]F
fl+,MWV_$ r+   r   )r   r   r   N)"__doc__r   r   r1   rer   r   argparser   r   r   os.pathr   r   r   r	   r
   r   r   r*   r=   rV   rZ   rb   rm   compileMry   r   r   r   rR   rN   r   r   r+   r)   <module>r      s   
   	 	   A A K K K7"3 7. 7t) ^  D$ bjjBDD)(0*&R4,!r+   