B
    '\w>                 @   sD  d dl mZmZmZmZ d dlZd dlmZmZm	Z	 d dl
mZ d dlmZ d dlZd dlmZmZmZmZmZmZ d dl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"m#Z#m!Z!m$Z$m%Z% ddl&m'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l0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE eeFZGedZHeZe/dZIe/dZJdd ZKdd ZLd d! ZMG d"d# d#eNZOd=d$d%ZPd>d'd(ZQd)d* ZRd+d, ZSd-d. ZTd/d0 ZUd1d2 ZVd3d4 ZWeEjXd&fd5d6ZYd7d8 ZZd9d: Z[d;d< Z\dS )?    )absolute_importdivisionprint_functionunicode_literalsN)EACCESELOOPEPERM)open)	getLogger)basenamedirnameisdirisfilejoinsplitext)copyfileobjcopystat   )mkdir_p)rm_rfpath_is_clean)islinklexistslinkreadlinksymlink)make_executable)touch   )run_commandCommands)
CondaError)dals)PACKAGE_CACHE_MAGIC_FILE)context)on_win)
ensure_padexpandwin_path_double_escapewin_path_ok)	json_dump)BasicClobberErrorCaseInsensitiveFileSystemErrorCondaOSErrormaybe_raiseCondaFileIOError)FileModeLinkTypezconda.stdoutlogz
# -*- coding: utf-8 -*-
import re
import sys

from %(module)s import %(import_name)s

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(%(func)s())
z
# -*- coding: utf-8 -*-
if __name__ == '__main__':
    import os
    import sys
    args = ["%(source_full_path)s"]
    if len(sys.argv) > 1:
        args += sys.argv[1:]
    os.execv(args[0], args)
c          	   C   s>   t d|  tj| ddd}t|}|| W d Q R X d S )Nzwriting json to file %swbzutf-8)modeencoding)logtracecodecsr	   r*   write)	file_pathobjfoZjson_str r<   9lib/python3.7/site-packages/conda/gateways/disk/create.pywrite_as_json_to_file@   s    r>   c       	   	   C   s   t | rttd | tdt |dd }t|||d }|d k	rdd| }ddlm} |tj	|}nd }t
j| dd	d
(}|d k	r||d	 || W d Q R X |d k	rt|  | S )N)source_pathtarget_pathr$   .r   )modulefuncimport_namez#!%s
r   )replace_long_shebangr2   zutf-8)r3   r4   )r   r.   r+   r$   splitpython_entry_point_templateZcore.portabilityrE   r0   textr7   r	   r8   decoder   )	target_full_pathpython_full_pathrB   rC   rD   ZpyscriptZshebangrE   r;   r<   r<   r=   create_python_entry_pointG   s.    
rL   c          	   C   s   t |rttd |tdt tdt| i }tt|sDtt| t	|t
d0}d|krft|d}|d|  || W d Q R X t| d S )N)r?   r@   r$   source_full_pathw "z#!%s
)r   r.   r+   r$    application_entry_point_templater(   r   r   r   r	   strr&   r8   r   )rM   rJ   rK   Zentry_pointr;   r<   r<   r=   create_application_entry_pointh   s     
rS   c                   s>   e Zd Zdd Zdd Z fddZddd	Zd
d Z  ZS )ProgressFileWrapperc             C   s.   || _ || _tdt| j| _d| _d S )Nr   r   )	progress_fileprogress_update_callbackmaxosfstatfilenost_sizeprogress_file_sizeprogress_max_pos)selffileobjrV   r<   r<   r=   __init__   s    zProgressFileWrapper.__init__c             C   s   t | j|S )N)getattrrU   )r^   namer<   r<   r=   __getattr__   s    zProgressFileWrapper.__getattr__c                s0   | drtt| || nt| j|| d S )NZ	progress_)
startswithsuperrT   __setattr__setattrrU   )r^   rb   value)	__class__r<   r=   rf      s    
zProgressFileWrapper.__setattr__c             C   s   | j |}|   |S )N)rU   readprogress_update)r^   sizedatar<   r<   r=   rk      s    zProgressFileWrapper.readc             C   s<   t | j| j }t|| j}|| _|| j }| | d S )N)rW   r]   rU   tellminr\   rV   )r^   posZrel_posr<   r<   r=   rl      s
    
z#ProgressFileWrapper.progress_update)rj   )	__name__
__module____qualname__r`   rc   rf   rk   rl   __classcell__r<   r<   )ri   r=   rT      s
   
rT   c             C   s|  |d kr| d d }t d| | t|s:t d| t| d}|rTt||}tj|d}tjrxH|	 D ]<}t
j|jst
j|jt
 srt| d|jqrW y|j|d W n@ tk
r } z |jtkrt| ||dn W d d }~X Y nX W d Q R X W d Q R X tjd	rxt
 d
krxxBt
|D ]4\}}}	x&|	D ]}
t||
}t
|d
d
 qPW q@W d S )Nizextracting %s
  to %sz9package folder {} was not empty, but we're writing there.rb)r_   zcontains unsafe path: {})path)Zpackage_locationZextract_locationZ	caused_byZlinuxr   )r5   debugr   formatr	   rT   tarfiler$   Zsafety_checksZ
getmembersrX   rw   isabsrb   realpathrd   getcwdr/   Z
extractallEnvironmentErrorerrnor   r,   sysplatformgetuidwalkr   lchown)Ztarball_full_pathZdestination_directoryrV   r_   Ztar_filemembererootdirsfilesfnpr<   r<   r=   extract_tarball   s<    


(

r   Fc             C   sp   t sdS t| dr$td dS y$ddl}|t| t|||  W n" t	k
rj   t
jddd Y nX dS )z
    Create cross-platform menu items (e.g. Windows Start Menu)

    Passes all menu config files %PREFIX%/Menu/*.json to ``menuinst.install``.
    ``remove=True`` will remove the menu items.
    N_zHEnvironment name starts with underscore '_'. Skipping menu installation.r   zmenuinst ExceptionT)exc_info)r%   r   rd   r5   warnmenuinstZinstallr   r)   	Exception	stdoutlogerror)prefixr9   remover   r<   r<   r=   	make_menu   s    
r   c          	   C   st   t | r"td| |d }t|ytd| | t| | W n0 ttfk
rn   td| | t	| | Y nX d S )Nz|
        Cannot hard link a soft link
          source: %(source_path)s
          destination: %(destination_path)s
        )r?   Zdestination_pathzcreating hard link %s => %sz%hard link failed, so copying %s => %s)
r   r"   r-   r5   r6   r   IOErrorOSErrorinfo_do_copy)srcdstmessager<   r<   r=   create_hard_link_or_copy   s    r   c             C   s,   t rdS t| o&t|  o&t| tjS d S )NF)r%   r   r   rX   accessX_OK)rw   r<   r<   r=    _is_unix_executable_using_ORIGIN   s    r   c             C   s0   t | rt| | ntd| | t| | d S )Nzsoft linking %s => %s)r   copyr5   r6   r   )r   r   r<   r<   r=   _do_softlink   s    r   c          	   C   s<   t stt| \}}t|d}|d|  W d Q R X |S )NrN   z@echo off
call "%s" %%*
)r%   AssertionErrorr   r	   r8   )r   r   Zsrc_rootr   fr<   r<   r=   create_fake_executable_softlink  s    r   c             C   sH   t s:t| r:t| }|ds:td| | t|| d S t| | d S )N/zsoft linking %s => %s)r%   r   r   rd   r5   r6   r   r   )r   r   Zsrc_points_tor<   r<   r=   r     s    

r   c          
   C   s   t d| | d}t| d(}t|d}t||| W d Q R X W d Q R X yt| | W n2 ttfk
r } zt d| W d d }~X Y nX d S )Nzcopying %s => %si  @ rv   r2   z%r)r5   r6   r	   r   r   r   r   rx   )r   r   buffer_sizeZfsrcZfdstr   r<   r<   r=   r     s     r   c          
   C   sh  |t jkrRt|rFt|sF|s0tt| |tt td|  t	| t
| d S t| sftd|  t|r|stt| |tt td|  t	| |t jkr(t| rtd|  ytd| | t| | W nN ttfk
r$ } z*td| td|| | t| | W d d }~X Y nX n<|t jkr@t| | n$|t jkrXt| | ntd| d S )	Nz-file exists, but clobbering for directory: %rzgCannot link a source that does not exist. %s
Running `conda clean --packages` may resolve your problem.zfile exists, but clobbering: %rz Cannot hard link a directory. %szhard linking %s => %sz%rzFhard-link failed. falling back to copy
  error: %r
  src: %s
  dst: %szDid not expect linktype=%r)r1   Z	directoryr   r   r.   r+   r$   r5   r   r   r   r!   hardlinkr6   r   r   r   rx   r   Zsoftlinkr   )r   r   Z	link_typeZforcer   r<   r<   r=   create_link0  s@    

r   c          
   C   s  t |}t |}t|dkr g S x&|D ]}t|r&ttd |tt q&W t \}}zxF|D ]>}tj	
||}t|dr|jt dd}t||d  q\W t| dddd	d
d|g}	t|d dkrt|dd dkr|	ddg | g|	dd< t|	 ddlm}
 |
|	|\}}}W d t| X g }xLt||D ]>\}}t|sttd}t|| ||||| n
|| qBW |S )Nr   encodereplace)errors   
z-Wiz-mZ
compileallz-qz-lz-ir   rA   r      z-j0)any_subprocessa  
            pyc file failed to compile successfully (run_command failed)
            python_exe_full_path: %s
            py_full_path: %s
            pyc_full_path: %s
            compile rc: %s
            compile stdout: %s
            compile stderr: %s
            )tuplelenr   r.   r+   r$   tempfileZmkstemprX   rw   relpathhasattrr   r   getfilesystemencodingr8   closeintrF   extendr5   r6   Zconda.gateways.subprocessr   r   zipr   r"   r   append)Zpython_exe_full_pathZpy_full_pathsZpyc_full_pathsr   Zpy_verZpyc_full_pathfdfilenamer   Zcommandr   stdoutstderrZrcZcreated_pyc_pathsZpy_full_pathr   r<   r<   r=   compile_multiple_pyc\  s@    



&

r   c          
   C   s   yHt d|  t| td}tt| td|d tt| d|d W nF ttfk
r } z$|j	t
tfkr|t d|  dS  W d d }~X Y nX dS )	Nz%creating package cache directory '%s'~T)mkdir	sudo_safeZurls)r   z*cannot create package cache directory '%s'F)r5   r6   r'   rd   r   r   r#   r   r   r   r   r   )Zpkgs_dirr   r   r<   r<   r=   create_package_cache_directory  s    r   c          
   C   s   t | d}y6td|  t| td}tt | |d|d W nF ttfk
r } z$|jt	t
fkrttd|  dS  W d d }~X Y nX dS )Nz.conda_envs_dir_testzcreating envs directory '%s'r   T)r   r   z!cannot create envs directory '%s'F)r   r5   r6   r'   rd   r   r   r   r   r   r   )Zenvs_dirZenvs_dir_magic_filer   r   r<   r<   r=   create_envs_directory  s    
r   )NN)F)]Z
__future__r   r   r   r   r7   r   r   r   r   ior	   Zloggingr
   rX   os.pathr   r   r   r   r   r   Zshutilr   r   r   rz   r    r   deleter   r   r   r   r   r   r   Zpermissionsr   updater   Zcli.python_apir   r    r!   Z_vendor.auxlib.ishr"   Zbase.constantsr#   Zbase.contextr$   Zcommon.compatr%   Zcommon.pathr&   r'   r(   r)   Zcommon.serializer*   
exceptionsr+   r,   r-   r.   r/   Zmodels.enumsr0   r1   rr   r5   r   rG   rQ   r>   rL   rS   objectrT   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   r<   r<   r=   <module>   s`    
	!
-
,8