B
    '\                 @   s2  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 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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)context)PY3)paths_equal)
PrefixData)rmtree)PREFIX_PLACEHOLDER)	untrackedc          	   C   sv   t  }x.|D ]&}t| |}|t| t| qW x:t|tddD ](}yt| W qF t	k
rl   Y qFX qFW dS )z*
    Remove files for a given prefix.
    T)keyreverseN)
setr   addr   osunlinksortedlenrmdirOSError)prefixfilesZdst_dirsfdstpath r%   5lib/python3.7/site-packages/conda/cli/main_package.pyremove   s    

r'   c             C   s   t j}| jrFx4| jD ]*}x$t|D ]}td|| f  q"W qW d S td| | jrht|t| d S | jrt	t|}tdt
|  x|D ]}t| qW d S t|| j | jt| jd d S )Nz	%-50s  %sz	# prefix:z# untracked files: %d)nameversionbuild_number)r   Ztarget_prefixZ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   x,t |  D ]}|d |krt|d S qW d S )Nr(   r)   )r   iter_recordsstr)r    r(   infor%   r%   r&   get_installed_versionF   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_infoM   s    rB   z^#!.+$c          	   C   s   t |dddkrdS t |}| }W d Q R X t|}|rNd| ksRdS tjdt |dd}t| t|}t |d	}|	| W d 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"}x|D ]}||d  q,W W d Q R X tt |dd}tj||ddtd W d Q R X |rtt |d	d"}x|D ]}||d  qW W d Q R X x(t|D ]}| 	t ||d
|  qW d 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_dirq   s    



r_   c             C   s  t |}g }g }t }t|d}td}	x(|D ]}
|
ds`|
ds`d|
ks`|
dkrht	|
t
| |
}|
drt||rt
|t|}||
 |||
 |	|
d |	d t|r"t|}trt|tr|	t|d n
|	| |drV|d	|
|f  q6t|r6|	t|d
  |dr6|d|
  q6W |	 |d< |rt|| 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   readlinkr   
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   sD    
,






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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   )rw   xr%   r%   r&   rx      s       .Fz&%(name)s-%(version)s-%(build)s.tar.bz2z	# success)
r   r,   r   anyr:   rj   tuplesplitrB   rt   )	r    r(   r)   r*   r!   Zpython_versionr@   r9   Z	tarbz2_fnr%   r%   r&   r.      s"    
"r.   c             #   sp   t   t dkr0ddlm} |d  x:t D ]*}t fdd|d pZdD r>|V  q>W 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 )N)r   r   )rw   r"   )r$   r    r%   r&   rx      s    z which_package.<locals>.<genexpr>r!   r%   )r   which_prefix
exceptionsr   r   r7   r|   )r$   r   r4   r%   )r$   r    r&   r+      s     r+   c             C   s<   t | }x.tt|dr|S |t|kr,dS t|}q
W 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&   r      s    r   )N)ru   rv   r   N)0Z
__future__r   r   r   r   rf   r[   r   os.pathr   r   r   r	   r
   r   r   rere   rd   Z_vendor.auxlib.entityr   Zbase.contextr   Zcommon.compatr   Zcommon.pathr   Zcore.prefix_datar   Zgateways.disk.deleter   Zinstallr   Zmiscr   r'   r6   r:   rB   compileMrK   rU   r_   rt   r.   r+   r   r%   r%   r%   r&   <module>   s6   $
+ 
