B
    '\                 @   s(  d dl mZmZmZmZ d dlmZ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Zd dlmZ d dlmZm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% ddl&m'Z' e	e(Z)e*dZ+G dd de,Z-dd Z.dddZ/dddZ0dddZ1dS )     )absolute_importdivisionprint_functionunicode_literals)EINVALEXDEV)	getLoggerN)dirnameisdirsplitbasenamejoinexists)move)PopenPIPE   )exp_backoff_fnmkdir_pmkdir_p_sudo_safe)rm_rf)lexists   )context)on_win)expand)NotWritableErrors   ^(#!((?:\\ |[^ \n\r])+)(.*))c               @   s   e Zd ZdS )CancelOperationN)__name__
__module____qualname__ r!   r!   9lib/python3.7/site-packages/conda/gateways/disk/update.pyr      s   r   c             C   sv   d }z^t t| d}td|  | }|d y||| |  W n tk
r^   Y nX W d |rp|	  X d S )Nzrb+z"in-place update path locked for %sr   )
r   openlogtracereadseekwritetruncater   close)Zfile_full_pathcallbackfhdatar!   r!   r"   update_file_in_place_as_binary   s    

r.   Fc          
   C   s0  t |r|rt| t | r td| | yt| | W n tk
r } ztrt| t|krtj	
| rttjd}t|d}t|rt| \}}t|}tdd||||gttd}	|	 \}
}ntd| n0|jttfkr
td| ||j t| | n W d d }~X Y nX ntd	|  d S )
Nzrenaming %s => %sZcondabinzrename_tmp.batzcmd.exez/C)stdoutstderrzx{} is missing.  Conda was not installed correctly or has been corrupted.  Please file an issue on the conda github repo.zHCould not rename %s => %s due to errno [%s]. Falling back to copy/unlinkz.cannot rename; source path does not exist '%s')r   r   r$   r%   osrenameEnvironmentErrorr   r	   pathisfiler   r   Zconda_prefixr   r   r   r   r   Zcommunicatedebugformaterrnor   r   r   )source_pathdestination_pathforceeZcondabin_dirZrename_scriptZ_dirnameZ_src_fnZ_dest_fnpr/   r0   r!   r!   r"   r2   3   s2    



r2   c             C   s   t t| || d S )N)r   r2   )r9   r:   r;   r!   r!   r"   backoff_renameW   s    r>   c          
   C   s*  yt | } td|  t| r.t| d  dS t| }t|sZ|rZ|rPt| qjt	| ntt| sjt
yt| d}W n    Y ndX |  |rtstjdd k	rttjd }ttjdd}td|||  t| || dS W n8 ttfk
r$ } zt| |j|d	W d d }~X Y nX d S )
Nztouching path %sTaZSUDO_UIDZSUDO_GIDzchowning %s:%s %sF)Z	caused_by)r   r$   r%   r   r1   utimer	   r
   r   r   AssertionErrorr#   r*   r   environgetintchownIOErrorOSErrorr   r8   )r4   mkdirZ	sudo_safedirpathr,   Zuidgidr<   r!   r!   r"   touch[   s2    

rL   )F)F)FF)2Z
__future__r   r   r   r   r8   r   r   Zloggingr   r1   os.pathr	   r
   r   r   r   r   reZshutilr   
subprocessr   r    r   r   r   deleter   linkr   Zbase.contextr   Zcommon.compatr   Zcommon.pathr   
exceptionsr   r   r$   compileZSHEBANG_REGEX	Exceptionr   r.   r2   r>   rL   r!   r!   r!   r"   <module>   s*    

$
