B
    XM\/                 @   s8  d dl mZmZmZmZ d dlm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	 Zyd dlZd
d ejj_W n ek
r   Y nX e
ee
dkZe
ee
dkZe
ee
dkZe
ee
dkZe
ee
dkZerd dlmZmZmZmZ nd dl mZmZmZmZ eee  ZZZeZyd dlm!Z! W n" ek
rb   d dl"m!Z! Y nX e!Z!d dlm#Z#m$Z$m%Z% d dlm&Z&m'Z' d dlm(Z(m)Z)m*Z*m+Z+m,Z, d dlm-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dlm4Z4 d dlm5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dlm<Z< d dlm=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlmDZD d dlmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL d dlmMZM e#Z#e$e%e&e'f\Z$Z%Z&Z'e(e*e,  Z(Z*Z,e-e.e/e0f\Z-Z.Z/Z0e1e2e3  Z1Z2Z3e4e5e6  Z4Z5Z6e7e8 Z7Z8e9e:e;  Z9Z:Z;e=e>e?e@f\Z=Z>Z?Z@eAeBeC  ZAZBZCeEeGeHeIeJf\ZEZGZHZIZJeKeL ZKZLe<eDeM  Z<ZDZMd dlNmOZO d dlPmQZQmRZR eOZOeQeR ZQZReErrd dlSZSnd dlTZSeSZSd d lmUZUmVZV eUeV ZUZVd d!lmWZW eWeUeV  ZWZUZVed"d#ZXed"d$ZYed"d%ZZed"d&Z[ed"d'Z\ed"d(Z]ed"d)Z^ed*d+Z_ed*d,Z`ed*d-Zaed*d.Zbed/d0Zce`jdZde`jeZee`jfZfe`jgZge`jhZheie`jjZje`jkZle`jmZme`jnZne`joZoe`jpZpd1d Zqeeae`Zrese`d2re`jtni Zuevd3ejwevd4< eb  d5d Zxe`jyZyeXeYereZf\ZXZYZrZZe[e_e\  Z[Z_Z\e]e^ Z]Z^G d6d7 d7ezZ{G d8d9 d9e|Z}d:d; Z~d<d= Zd>d? Zejwd@dZdS )A    )absolute_importdivisionprint_functionunicode_literals)partialN)lstat)parse_version)import_module)__version__c             C   s2   yt td|S  tk
r,   t t| |S X d S )Nzconda.exports)getattrr	   AttributeError)moduleattr r   :lib/python3.7/site-packages/conda_build/conda_interface.pytry_exports   s    r   c             C   s   d S )Nr   )xr   r   r   <lambda>   s    r   z4.3.0a0z4.4.0a0z4.5.0a0z4.6.0a0z4.7.0a0)display_actionsexecute_actionsexecute_planinstall_actions)	_toposort)TmpDownloaddownloadhandle_proxy_407)	untrackedwalk_prefix)	MatchSpecNoPackagesFoundResolveUnsatisfiablenormalized_version)human_byteshashsum_filemd5_filememoizedunix_path_to_winwin_path_to_unixurl_path)	get_index)	CompleterInstalledPackagesadd_parser_channelsadd_parser_prefixspecs_from_argsspec_from_linespecs_from_url)ArgumentParser)	is_linkedlinkedlinked_dataprefix_placeholderrm_rfsymlink_condapackage_cache)CondaSession)PY3StringIOinput	iteritemslchmodstring_types	text_typeTemporaryDirectory)VersionOrder)ProgressiveFetchExtract)DistIndexRecord)FileModePathType)EntityEncoderzconda.exceptions
CondaErrorCondaHTTPError	LinkError	LockErrorNoPackagesFoundErrorPaddingErrorUnsatisfiableErrorzconda.base.contextnon_x86_linux_machinescontext
get_prefixreset_contextzconda.models.channelget_conda_build_local_urlc               C   s
   t tjS )N)listrR   Zchannelsr   r   r   r   r      s    conda_buildZfalseZCONDA_ALLOW_SOFTLINKSc               C   s   t t pg S )N)rV   rU   r   r   r   r   r      s    c               @   sH   e Zd ZdZdd Zedd Zedd Zedd	 Zed
d Z	dS )CrossPlatformStLinkNc             C   s
   |  |S )N)st_nlink)selfpathr   r   r   __call__   s    zCrossPlatformStLink.__call__c             C   s   | j d kr|   |  |S )N)	_st_nlink_initialize)clsr[   r   r   r   rY      s    
zCrossPlatformStLink.st_nlinkc             C   s
   t |jS )N)r   rY   )r_   r[   r   r   r   _standard_st_nlink   s    z&CrossPlatformStLink._standard_st_nlinkc       
   	   C   s   |  |}|dkr|S d}d}d}| |||d |dd }|d krXddlm} |d| |  }| ||}	| | |	dkrddlm} |d| |jS d S )Nr   l              )WinErrorz8Could not determine determine number of hardlinks for %sz+Could not determine file information for %s)r`   
CreateFilectypesrc   BY_HANDLE_FILE_INFORMATIONGetFileInformationByHandleCloseHandlenNumberOfLinks)
r_   r[   rY   ZGENERIC_READZFILE_SHARE_READZOPEN_EXISTINGZhfilerc   inforvr   r   r   _windows_st_nlink   s&    



z%CrossPlatformStLink._windows_st_nlinkc                s   t jdkr| j| _ndd l}ddlm} ddlm m}m	} |j
jj| _|j  |j  |g| j_|| j_|j
jj| _|g| j_|| j_G  fddd|jG  fddd|j}|| _|j
jj| _|||g| j_|| j_| j| _d S )	Nntr   )POINTER)DWORDHANDLEBOOLc                   s   e Zd Zd fd fgZdS )z1CrossPlatformStLink._initialize.<locals>.FILETIMEZdwLowDateTimeZdwHighDateTimeN)__name__
__module____qualname___fields_r   )ro   r   r   FILETIME   s   rv   c                   sL   e Zd Zd fdfdfdfd fd fd fd fd	 fd
 fg
ZdS )zCCrossPlatformStLink._initialize.<locals>.BY_HANDLE_FILE_INFORMATIONZdwFileAttributesZftCreationTimeZftLastAccessTimeZftLastWriteTimeZdwVolumeSerialNumberZnFileSizeHighZnFileSizeLowri   ZnFileIndexHighZnFileIndexLowN)rr   rs   rt   ru   r   )ro   rv   r   r   rf      s   rf   )osnamer`   r]   re   rn   Zctypes.wintypesro   rp   rq   ZwindllZkernel32ZCreateFileWrd   Z	c_wchar_pZc_void_pZargtypesZrestyperh   Z	Structurerf   rg   rl   )r_   re   rn   rp   rq   rf   r   )ro   rv   r   r^      s(    


zCrossPlatformStLink._initialize)
rr   rs   rt   r]   r\   classmethodrY   r`   rl   r^   r   r   r   r   rX      s   rX   c               @   s   e Zd ZdS )SignatureErrorN)rr   rs   rt   r   r   r   r   rz      s   rz   c             #   sz   ddl m m  tdkr4td x@tD ]4}t|}t fdd|d 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.
    r   )abspathjoinNz)could not determine conda prefix from: %sc             3   s    | ]} |kV  qd S )Nr   ).0f)r{   r|   r[   prefixr   r   	<genexpr>   s    z which_package.<locals>.<genexpr>files)os.pathr{   r|   which_prefixRuntimeErrorr4   r3   any)r[   distmetar   )r{   r|   r[   r   r   which_package   s    
 r   c             C   sh   ddl m}m}m}m} || }d}x>|dk rb|||dr>P |||krPd}P ||}|d7 }q&W |S )z
    given the path (to a (presumably) conda installed file) return the
    environment prefix in which the file in located
    r   )r{   r|   isdirdirname   z
conda-metaNra   )r   r{   r|   r   r   )r[   r{   r|   r   r   r   Z	iterationr   r   r   r     s    
r   c                s`   ddl m} ||}t| }i }x:|D ]2  fdd|D }t|dkrP|d nd| < q&W |S )zoPrimarily used by conda-forge, but may be useful in general for checking when a package
    needs to be updatedr   )ensure_listc                sH   g | ]@}| d dd ddd  kr| d dd ddd qS )z::ra   -   r   )splitrsplit)r}   r   )pkgr   r   
<listcomp>   s    z)get_installed_version.<locals>.<listcomp>ra   N)Zconda_build.utilsr   r4   len)r   Zpkgsr   Zlinked_pkgsZversionsZ	vers_instr   )r   r   get_installed_version  s    
 r   ZCONDA_PATH_BACKUP)Z
__future__r   r   r   r   	functoolsr   rw   r   Zpkg_resourcesr   	importlibr	   Zcondar
   ZCONDA_VERSIONr   Zconda.cli.commonZclicommonZensure_use_localImportErrorZconda_43Zconda_44Zconda_45Zconda_46Zconda_47Zconda.exportsr   r   r   r   Z
conda.planr   Zconda.toposortr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   Zconda.core.package_cacherD   Zconda.models.distrE   rF   ZconfigparserZConfigParserrG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   Zcontext_get_prefixrT   rU   Zbinstar_uploadbitsZconda_privateZdefault_pythonZ	envs_dirsrV   Z	pkgs_dirsplatformZcc_platformZroot_dirZroot_writableZsubdirZcreate_default_packagesZget_rc_urlsrS   hasattrrW   Zcc_conda_buildstrenvironZget_local_urlsZ	arch_nameobjectrX   	Exceptionrz   r   r   r   getZenv_path_backup_var_existsr   r   r   r   <module>   s   $$$(



















Y