U
    b                     @   s*  d dl mZmZmZmZ d dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZmZmZ d dl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 ddlmZ dd	lmZ dd
lmZ ddl m!Z! dd Z"dd Z#dd Z$dd Z%e&dej'Z(dd Z)dd Z*d#ddZ+d$ddZ,dd  Z-d!d" Z.dS )%    )absolute_importdivisionprint_functionunicode_literalsN)abspathbasenamedirnameisdirisfileislinkjoin   )EntityEncoder)CONDA_PACKAGE_EXTENSION_V1PREFIX_PLACEHOLDER)context)paths_equal)
PrefixData)rmtree)	untrackedc              	   C   sn   t  }|D ]&}t| |}|t| t| q
t|tddD ](}zt| W q@ t	k
rf   Y q@X q@dS )z*
    Remove files for a given prefix.
    T)keyreverseN)
setr   addr   osunlinksortedlenrmdirOSError)prefixfilesZdst_dirsfZdstpath r$   5lib/python3.8/site-packages/conda/cli/main_package.pyremove   s    
r&   c                 C   s   t j}| jr>| jD ]&}t|D ]}td|| f  qqd S td| | jr`t|t| d S | jrt	t|}tdt
|  |D ]}t| qd S t|| j | jt| jd d S )Nz	%-50s  %sz	# prefix:z# untracked files: %d)nameversionbuild_number)r   Ztarget_prefixwhichwhich_packageprintZdist_strresetr&   r   r   r   make_tarbz2pkg_namelowerZpkg_versionintZ	pkg_build)argsparserr    r#   precr!   fnr$   r$   r%   execute(   s*    


r6   c                 C   s2   t |  D ] }|d |krt|d   S qd S )Nr'   r(   )r   iter_recordsstr)r    r'   infor$   r$   r%   get_installed_versionE   s    r:   c              	   C   sP   t | |tjtjt|t|g d}|rLd| |d  |d< |d d|  |S )N)r'   r(   platformZarchr)   builddependszpy%d%d_r<   r=   zpython %d.%d*)dictr   r;   Z	arch_namer1   r8   append)r'   r(   r)   requires_pydr$   r$   r%   create_infoL   s    	rB   z^#!.+$c              	   C   s   t |dddkrdS t |}| }W 5 Q R X t|}|rNd| ksRdS tjdt |dd}t| t|}t |d	}|	| W 5 Q R X t
|td
d dS )Nrbr   z#!Fpythonz#!%s/bin/python   )countwZ755   T)openreadshebang_patmatchgroupsubr   r   r   writer   chmodr1   )tmp_dirr#   ZfidatamZtmp_pathfor$   r$   r%   fix_shebang]   s     


 rU   c           	   	   C   s   t |d}t| tt |dd}|D ]}||d  q*W 5 Q R X tt |dd}tj||ddtd W 5 Q R X |rtt |d	d}|D ]}||d  qW 5 Q R X t|D ]}| 	t ||d
|  qd S )Nr9   r!   rG   
z
index.jsonr   T)indentZ	sort_keyscls
has_prefixzinfo/)
r   r   mkdirrI   rO   jsondumpr   listdirr   )	trQ   r!   rY   r9   Zinfo_dirrT   r"   r5   r$   r$   r%   _add_info_dirp   s    

r_   c                 C   s  t |}g }g }t }t|d}td}	|D ]}
|
ds\|
ds\d|
ks\|
dkrdt	|
t
| |
}|
drt||rt
|t|}||
 |||
 |	|
d |	d t|rt|}t|tr|	t|d n
|	| |drN|d	|
|f  q2t|r2|	t|d
  |dr2|d|
  q2|	 |d< |rj|| t||||| |  t| |S )z
    create a conda package with `files` (in `prefix` and `info` metadata)
    at `tar_path`, and return a list of warning strings
    zw:bz2Zsha1/\ zbin/zutf-8    z(found symlink to absolute path: %s -> %srC   z	.egg-linkzfound egg link: %sZ	file_hash)r   tempfileZmkdtemptarfilerI   hashlibnew
startswithendswithAssertionErrorr   rU   r   r?   r   updateencoder   r   readlink
isinstancer8   bytesr
   rJ   Z	hexdigestr_   closer   )r    r!   r9   Ztar_pathZupdate_infowarningsrY   rQ   r^   hr"   r#   linkr$   r$   r%   create_conda_pkg   sF    

,







rt   unknown0.0c           	      C   s   |d krt | }tdt|  t|dkr8td d S tdd |D rt| d}|d k	s`ttdd |d d d	D }nd
}t||||}d| t	 }t
| ||| td t| |S )Nz# files: %dr   z# failed: nothing to doc                 s   s   | ]}d |kV  qdS )z/site-packages/Nr$   .0r"   r$   r$   r%   	<genexpr>   s     zmake_tarbz2.<locals>.<genexpr>rD   c                 s   s   | ]}t |V  qd S N)r1   )rx   xr$   r$   r%   ry      s        .Fz%(name)s-%(version)s-%(build)sz	# success)r   r,   r   anyr:   rj   tuplesplitrB   r   rt   )	r    r'   r(   r)   r!   Zpython_versionr@   r9   Z	tarbz2_fnr$   r$   r%   r.      s"    
"r.   c                 #   sl   t   t dkr0ddlm} |d  t D ]*}t fdd|d pXdD r<|V  q<dS )	z
    given the path (of a (presumably) conda installed file) iterate over
    the conda packages the file came from.  Usually the iteration yields
    only one package.
    Nr   )CondaVerificationErrorz)could not determine conda prefix from: %sc                 3   s   | ]}t t| V  qd S rz   )r   r   rw   r#   r    r$   r%   ry      s     z which_package.<locals>.<genexpr>r!   r$   )r   which_prefix
exceptionsr   r   r7   r~   )r#   r   r4   r$   r   r%   r+      s     r+   c                 C   s8   t | }tt|dr|S |t|kr*dS t|}qdS )z
    given the path (to a (presumably) conda installed file) return the
    environment prefix in which the file in located
    z
conda-metaN)r   r	   r   r   r   r$   r$   r%   r      s    r   )N)ru   rv   r   N)/Z
__future__r   r   r   r   rf   r[   r   os.pathr   r   r   r	   r
   r   r   rere   rd   Zauxlib.entityr   Zbase.constantsr   r   Zbase.contextr   Zcommon.pathr   Zcore.prefix_datar   Zgateways.disk.deleter   Zmiscr   r&   r6   r:   rB   compileMrK   rU   r_   rt   r.   r+   r   r$   r$   r$   r%   <module>   s6   $
+  
