U
    b@                     @   s  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	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 dd
lmZ 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m Z m!Z! ddl"m#Z#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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@mAZA ddlBmCZC ddlDmEZE ddlFmGZG eeHZIedZJd'ddZKd(ddZLdd  ZMd)d!d"ZNd*d$d#ZOd+d%d&ZPdS ),    )absolute_importdivisionprint_functionunicode_literals)	getLoggerN)abspathbasenameexistsisdirisfilejoin   )common)check_non_admin   )
CondaError)dals)ROOT_ENV_NAMEDepsModifierUpdateModifierREPODATA_FN)contextlocate_prefix_by_name)NULL)paths_equalis_package_file)calculate_channel_urls	get_index)
PrefixData)_get_solver_class)CondaExitZeroCondaImportErrorCondaOSErrorCondaSystemExitCondaValueError"DirectoryNotACondaEnvironmentErrorDirectoryNotFoundError
DryRunExitEnvironmentLocationNotFoundNoBaseEnvironmentErrorPackageNotInstalledErrorPackagesNotFoundErrorTooManyArgumentsErrorUnsatisfiableErrorSpecsConfigurationConflictError)mkdir_p)delete_trashpath_is_clean)	clone_envexplicittouch_nonadmin)	MatchSpec)revert_actions)ResolvePackageNotFoundzconda.stderrFc                 C   s|   t | }d }|tkrd| }t| rTt| rLdtdd t| D krLd S d|  }|rbt||d| krxt	d|   d S )Nz#'%s' is a reserved environment name
conda-metac                 s   s   | ]}|j V  qd S N)name).0entry r=   0lib/python3.8/site-packages/conda/cli/install.py	<genexpr>,   s     zcheck_prefix.<locals>.<genexpr>zprefix already exists: %s zsWARNING: A space was detected in your requested environment path
'%s'
Spaces in paths can sometimes be problematic.)
r   r   r	   r
   tupleosscandirr$   	stderrlogZwarning)prefixjsonr:   errorr=   r=   r>   check_prefix&   s    $
rH   c                 C   s~   t j| kr$t| }t|s,t| nt| }|sHtd|  td|  t||| ||d\}}|rztj	|t
|||d d S )NzSource:      %szDestination: %s)verbosequiet
index_args)actionsuntracked_files
src_prefix
dst_prefix)rB   sepr   r
   r&   r   printr2   r   stdout_json_successlist)Zsrc_argrO   rF   rJ   rK   rN   rL   rM   r=   r=   r>   clone9   s(    


rT   c                 C   s$   t js t js td|  }t| d S )Nz
        #
        # To activate this environment, use
        #
        #     $ conda activate %s
        #
        # To deactivate an active environment, use
        #
        #     $ conda deactivate
        )r   rJ   rF   r   rQ   )Zenv_name_or_prefixmessager=   r=   r>   print_activateS   s
    	
rV   c                 C   s2   z
t | W S  tk
r,   td|  |Y nX d S )Nz#expected revision number, not: '%s')int
ValueErrorr$   )argrF   r=   r=   r>   get_revisionb   s    
rZ   installc                 C   s  t   t  t jrd| _t|dk}t|dk}t|dk}t|dk}t j}|rbt|t jd t j	rz|t j
krztd|r| js| jst jtjkstd|sLt|rt| tt|d	d
st|t jrt qt|st|n n`t| drD| jrDzt| W n4 tk
r@ } ztd| |dW 5 d}~X Y nX nt|dd | jD }	|r| j sdd |	D }
t j!D ]2}|"dd#ddd }||
kr~|	$| q~| j%t j&| j'| j( | j)d}t*dd |	D }|r|t+|	kr
t,|	|t j- d dS tdg }| jr| jD ]@}z|.t/j0|t jd W n t1k
r`   t2dY nX q$d|krt,||t j- |d dS |.t/j3|	t jd |r| j4rt5| j4t jd n|r| js|	std|r:t jtjkr:t6|}|D ]>}t7|}|j8st2d| |9|j:dst;||j:q|r| j<r| jrjt=dt+| jt>| jd t<| j<|t jt j-|d! t?| t@| j:r| j:n| dS | j}|st j}tA|kr|$tA t| d"o| jtBk}| s| jtjCtjDfko | }|D ]}z|r\| j4r\tE|d# |d$ d|d% |d& |d' ||d(}tF|t5| j4|}ntG }||t j&t jH||| jId)}t j}|s|r| jtBkrtjC}t jJ}|rt jJptKjD}|jL||t jMpt jN|p||d* kd+}W  qW q tOtPfk
rf } zP||d* krTtQ|tPr(|n,tRtS|d# |d$ d|d% d,}tP|jT|W 5 d}~X Y q tUtVtWfk
r } ztX|d-d.s|t| d"s||d* kr|n|rFz*|jL|tjDt jMpt jN||d* kd+}W n` tUtVtWfk
rB } z:|jYr d/|jYd kr tZt[|||d* kr2|W 5 d}~X Y nX nB||d* kr`W Y 2qn(|jYrd/|jYd krtZt[||W 5 d}~X Y nX qt\||| | dS )0z7
    conda install, conda update, and conda create
    )zrepodata.jsonZcreateupdater[   remove)rF   z*cannot use CONDA_FORCE_32BIT=1 in base envzAno package names supplied
# Example: conda update -n myenv scipy
r8   historymkdirzCould not create directory: %s)Z	caused_byNc                 S   s   g | ]}| d qS )z"')stripr;   sr=   r=   r>   
<listcomp>   s     zinstall.<locals>.<listcomp>c                 S   s$   g | ]}| d dddd qS )r@   =r   r   )replacesplit)r;   pkgr=   r=   r>   rc      s     r@   rd   r   r   )	use_cachechannel_urlsunknownprepend	use_localc                 s   s   | ]}t |V  qd S r9   )r   ra   r=   r=   r>   r?      s     zinstall.<locals>.<genexpr>)rI   z6cannot mix specifications with conda package filenameszcError reading file, file should be a text file containing packages 
conda create --help for detailsz	@EXPLICIT)rI   rK   zCtoo few arguments, must supply command line package specs or --filez@Invalid spec for 'conda update': %s
Use 'conda install' instead.z(did not expect any arguments for --clone)rF   rJ   rK   update_modifierri   rk   rl   rh   rj   )ri   rk   platformrl   rh   rj   rE   repodata_fn)Zspecs_to_addro   command)deps_modifierrm   force_reinstallZshould_retry_solve)ri   rk   rn   rl   Zallow_retryTzcould not import)]r   Zvalidate_configurationr   Zuse_only_tar_bz2repodata_fnsboolZtarget_prefixrH   rF   Zforce_32bitZroot_prefixr$   fileZpackagesrm   r   Z
UPDATE_ALLr
   r0   r   r   r   Zconda_prefixr)   r1   r%   hasattrr_   r/   EnvironmentErrorr"   r(   Zno_default_packagesZcreate_default_packagesre   rf   appendZuse_index_cacheZchannelsrj   Zoverride_channelsrl   sumlenr3   rJ   extendr   Zspecs_from_urlUnicodeErrorr   Zspecs_from_argsZrevisionrZ   r   r5   Zis_name_only_specgetr:   r*   rT   r,   rS   r4   rV   r   r   ZFREEZE_INSTALLEDZUPDATE_SPECSr   r6   r   Zsubdirscmdrr   r   Zsolve_for_transactionrs   Zforcer7   r+   
isinstancerA   r   Z_formatted_chainsr-   
SystemExitr.   getattrargsr!   str
handle_txn)r   parserrp   newenvZisupdateZ	isinstallZisremoverE   eZargs_packagesZargs_packages_namesZdefault_pkgZdefault_pkg_namerK   Znum_cpZspecsZfpathZprefix_dataspecrt   Zargs_set_update_modifierZ_should_retry_unfrozenro   indexunlink_link_transactionZ
SolverTypeZsolverrm   rr   Zchannels_urlsr=   r=   r>   r[   i   sL   

$






   

c              
   C   s  | j r:|rt|jn$|s:tjr.tjdd ntd d S tjsR|   t	  n(tj
rz|  d }tj||dd t z"|   tjrtd|   W n, tk
r } ztd|W 5 d }~X Y nX |rt| t|jr|jn| tjr|  d }tj||d	 d S )
Nz)All requested packages already installed.)rU   z-
# All requested packages already installed.
r   T)rE   rL   dry_runzUPackage caches prepared. UnlinkLinkTransaction cancelled with --download-only option.ZExiting)rE   rL   )Znothing_to_dor+   Zpackage_namesr   rF   r   rR   rQ   Zprint_transaction_summaryZ
confirm_ynr   Z_make_legacy_action_groupsr'   Zdownload_and_extractZdownload_onlyr    Zexecuter   r#   r4   rV   r:   )r   rE   r   r   Z	remove_oprL   r   r=   r=   r>   r   G  s8    
r   )F)FFN)F)r[   )F)QZ
__future__r   r   r   r   Zloggingr   rB   os.pathr   r   r	   r
   r   r    r   r   r   Z
auxlib.ishr   Zbase.constantsr   r   r   r   Zbase.contextr   r   Zcommon.constantsr   Zcommon.pathr   r   Z
core.indexr   r   Zcore.prefix_datar   Z
core.solver   
exceptionsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   Zgateways.disk.creater/   Zgateways.disk.deleter0   r1   Zmiscr2   r3   r4   Zmodels.match_specr5   Zplanr6   Zresolver7   __name__logrD   rH   rT   rV   rZ   r[   r   r=   r=   r=   r>   <module>   s<    D



 _