B
    lz]                 @   s  d dl mZ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 d dl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mZ ddlmZ ddlmZmZmZmZmZm Z  ddl!m"Z" ddl#m$Z$ ee%Z&eddZ'dd Z(dddZ)dddZ*d ddZ+d!ddZ,dS )"    )absolute_importdivisionprint_functionunicode_literals)
namedtuple)	getLoggerN)abspath)shlex_split_unicode)CalledProcessErrorPIPEPopen   )wrap_subprocess_call   )TRACE)ACTIVE_SUBPROCESSES)dals)ensure_binarystring_typesencode_argumentson_winencode_environment
isiterable)rm_rf)contextResponse)stdoutstderrrcc             C   s   t d| ||||f S )Nzp
    $ %s
    ==> cwd: %s <==
    ==> exit code: %d <==
    ==> stdout <==
    %s
    ==> stderr <==
    %s
    )r   )command_strcwdr   r   r    r!   8lib/python3.7/site-packages/conda/gateways/subprocess.py_format_output   s    r#   c       	      C   s   t ttj|tjtjdk| \}}t||p*|dtt|d}| \}}|d k	rpdt	j
kr`t| ntd| t|dr|jddd	}t|dr|jddd	}|||jfS )
Nr   F)r    Zuniversal_newlinesr   r   envZCONDA_TEST_SAVE_TEMPSz4CONDA_TEST_SAVE_TEMPS :: retaining pip run_script {}decodezutf-8replace)errors)r   r   r   Zroot_prefixZdev	verbosityr   r   communicateosenvironr   logZwarningformathasattrr%   
returncode)	argsprefixr$   r    Zscript_callerZcommand_argsZprocessr   r   r!   r!   r"   any_subprocess'   s"    



r2   Tc             C   sZ  t |r
|ntj}|dkr tjnt|}t| s8t| } t| t	rF| nd
| }td| tt| |ttt|d}t| t|t	rt|n|}|j|d\}}	t|dr|jddd	}t|	dr|	jddd	}	|j}
t| |r|
d
ksttrt|||
||	}|r4|
d
kr4t| t|
| |dttrJt| t||	t|
S )zsThis utility function should be preferred for all conda subprocessing.
    It handles multiple tricky details.
    N zexecuting>> %s)r    stdinr   r   r$   )inputr%   zutf-8r&   )r'   r   )output) r   r*   r+   sysr1   r   r   r	   
isinstancer   joinr,   debugr   r   r   r   addr   r)   r.   r%   r/   removeZisEnabledForr   r#   infor
   Ztracer   int)commandr$   pathr4   raise_on_errorr    r   pr   r   r   Zformatted_outputr!   r!   r"   subprocess_call<   s2    





rC   c             C   s@   g }|r| d |r | d x|D ]}|| kr&| |= q&W d S )N)Z
PYTHONPATHZ
PYTHONHOME)Z
CONDA_ROOTZCONDA_PROMPT_MODIFIERZ	CONDA_EXEZCONDA_DEFAULT_ENV)extend)r$   clean_pythonclean_condaZdelskeyr!   r!   r"   _subprocess_clean_env\   s    


rH   c             C   s(   t j }t||| t| ||||dS )N)r$   r@   r4   rA   )r*   r+   copyrH   rC   )r?   r@   r4   rA   rE   rF   r$   r!   r!   r"   subprocess_call_with_clean_envh   s    
rJ   )NN)NNNT)TT)NNTTT)-Z
__future__r   r   r   r   collectionsr   Zloggingr   r*   os.pathr   Zconda._vendor.auxlib.compatr	   r7   
subprocessr
   r   r   Zutilsr   r    r   Z_vendor.auxlib.ishr   Zcommon.compatr   r   r   r   r   r   Zgateways.disk.deleter   Zbase.contextr   __name__r,   r   r#   r2   rC   rH   rJ   r!   r!   r!   r"   <module>   s,    


 
 