B
    '\`0                 @   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 ddl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$ ddl%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z; ddl<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZC ddlDmEZE eeFZGedZHd'ddZId(ddZJdd  ZKd)d!d"ZLd*d$d#ZMd+d%d&ZNdS ),    )absolute_importdivisionprint_functionunicode_literals)	getLoggerN)abspathbasenameexistsisdirisfilejoin   )common)check_non_admin   )
CondaError)dals)ROOT_ENV_NAMEUpdateModifier)contextlocate_prefix_by_name)on_win	text_type)paths_equal)calculate_channel_urls	get_index)
PrefixData)DepsModifierSolver)CondaExitZeroCondaImportErrorCondaOSErrorCondaSystemExitCondaValueError"DirectoryNotACondaEnvironmentErrorDirectoryNotFoundError
DryRunExitEnvironmentLocationNotFoundNoBaseEnvironmentErrorPackageNotInstalledErrorPackagesNotFoundErrorTooManyArgumentsErrorUnsatisfiableError)mkdir_p)delete_trashpath_is_clean)	clone_envexplicittouch_nonadmin)	MatchSpec)revert_actions)ResolvePackageNotFoundzconda.stderrFc             C   sn   t | }d }|tkrd| }t| rFt| r>dt| kr>d S d|  }|rTt||d| krjtd|   d S )Nz#'%s' is a reserved environment namez
conda-metaz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
   oslistdirr#   	stderrlogZwarning)prefixjsonnameerror r>   0lib/python3.7/site-packages/conda/cli/install.pycheck_prefix%   s    
r@   c             C   s   t j| kr$t| }t|s@t| ntjjd k	s4tt	tjj}|s\t
d|  t
d|  t||| ||d\}}|rtj|t|||d d S )NzSource:      %szDestination: %s)verbosequiet
index_args)actionsuntracked_files
src_prefix
dst_prefix)r7   sepr   r
   r%   r   Z_argparse_argscloneAssertionErrorr   printr0   r   stdout_json_successlist)Zsrc_argrG   r;   rB   rC   rF   rD   rE   r>   r>   r?   rI   8   s&    

rI   c             C   sl   t jsht jshdtjks4tjtjddd dkrBtd|  }nt	rTtd|  }ntd|  }t
| d S )	NZCONDA_SHLVLZSHELL Zfishz
            #
            # To activate this environment, use
            #
            #     $ conda activate %s
            #
            # To deactivate an active environment, use
            #
            #     $ conda deactivate
            a!  
            #
            # To activate this environment, use:
            # > activate %s
            #
            # To deactivate an active environment, use:
            # > deactivate
            #
            # * for power-users using bash, you must source
            #
            z
            #
            # To activate this environment, use:
            # > conda activate %s
            #
            # To deactivate an active environment, use:
            # > conda deactivate
            #
            )r   rB   r;   r7   environpathsplitgetr   r   rK   )Zenv_name_or_prefixmessager>   r>   r?   print_activateS   s    (	

rU   c             C   s0   yt | S  tk
r*   td|  |Y nX d S )Nz#expected revision number, not: '%s')int
ValueErrorr#   )argr;   r>   r>   r?   get_revisiony   s    rY   installc          
   C   s  t   t  t|dk}t|dk}t|dk}|rBt| | t j}|rZt|t jd t j	rr|t j
krrtd|r| js| jst jtjkstd| |s<t|rt| tt|ddst|t jrt qt|st|n nT| jr4yt| W n4 tk
r0 } ztd	| |d
W dd}~X Y nX nt|dd | jD }|r| jsdd |D }	x<t j D ]2}
|
!dd"ddd }||	krp|#|
 qpW | j$t j%| j&| j' | j(d}t)dd |D }|r|t*|krt+||t j, d dS tdg }| jrxJ| jD ]@}y|-tj.|t jd W n t/k
rV   t0dY nX qW d|krt+||t j, |d dS |-tj1|t jd |r| j2rt3| j2t jd n|r| js|std|r6t jtjkr6t4|}xF|D ]>}t5|}|j6st0d| |7|j8dst9||j8qW |r| j:r| jrft;dt*| jt<| jdt:| j:|t jt j,|d t=| t>| j8r| j8n| dS y|r| j2rt?|d |d  d|d! |d" |d# |d$}t@|t3| j2|}nH|rt jAp tBjC}nt jA}tD|t j%t jE|d%}|jF|t jGp0t jHd&}W n tIk
r } z0tJtK|d |d  d|d! d'}tL|jM|W dd}~X Y nN tNtOfk
r } z*|jPrd(|jPd krtQtR| W dd}~X Y nX tS||| | dS ))z7
    conda install, conda update, and conda create
    ZcreateupdaterZ   )r;   z*cannot use CONDA_FORCE_32BIT=1 in base envzno package names supplied
# If you want to update to a newer version of Anaconda, type:
#
# $ conda update --prefix %s anaconda
z
conda-metahistoryzCould not create directory: %s)Z	caused_byNc             S   s   g | ]}| d qS )z"')strip).0sr>   r>   r?   
<listcomp>   s    zinstall.<locals>.<listcomp>c             S   s$   g | ]}| d dddd qS )r6   =r   r   )replacerR   )r^   pkgr>   r>   r?   r`      s    r6   ra   r   r   )	use_cachechannel_urlsunknownprepend	use_localc             s   s   | ]}| d V  qdS )z.tar.bz2N)endswith)r^   r_   r>   r>   r?   	<genexpr>   s    zinstall.<locals>.<genexpr>)rA   z6cannot mix specifications with conda package filenameszcError reading file, file should be a text file containing packages 
conda create --help for detailsz	@EXPLICIT)rA   rC   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)r;   rB   rC   re   rg   rh   rd   rf   )re   rg   platformrh   rd   rf   r:   )Zspecs_to_add)deps_modifierforce_reinstall)re   rg   rk   rh   zcould not import)Tr   Zvalidate_configurationr   boolr   Zensure_name_or_prefixZtarget_prefixr@   r;   Zforce_32bitZroot_prefixr#   fileZpackagesZupdate_modifierr   Z
UPDATE_ALLr
   r.   r   r   r   Zconda_prefixr(   r/   r$   mkdirr-   EnvironmentErrorr!   r'   Zno_default_packagesZcreate_default_packagesrb   rR   appendZuse_index_cacheZchannelsrf   Zoverride_channelsrh   sumlenr1   rB   extendZspecs_from_urlUnicodeErrorr   Zspecs_from_argsZrevisionrY   r   r3   Zis_name_only_specrS   r<   r)   rI   r+   rM   r2   rU   r   r4   rl   r   ZUPDATE_SPECSr   ZsubdirsZsolve_for_transactionrm   Zforcer5   tupler   r*   Z_formatted_chainsr,   
SystemExitargsr    r   
handle_txn)ry   parserZcommandnewenvZisupdateZ	isinstallr:   eZargs_packagesZargs_packages_namesZdefault_pkgZdefault_pkg_namerC   Znum_cpZspecsZfpathZprefix_dataspecindexunlink_link_transactionrl   ZsolverZchannels_urlsr>   r>   r?   rZ      s    

$



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 y"|   tjrtd|   W n, tk
r } ztd|W d 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.)rT   z-
# All requested packages already installed.
r   T)r:   rD   dry_runzUPackage caches prepared. UnlinkLinkTransaction cancelled with --download-only option.ZExiting)r:   rD   )Znothing_to_dor*   Zpackage_namesr   r;   r   rL   rK   Zprint_transaction_summaryZ
confirm_ynr   Z_make_legacy_action_groupsr&   Zdownload_and_extractZdownload_onlyr   Zexecuterx   r"   r2   rU   r<   )r   r:   ry   r|   Z	remove_oprD   r}   r>   r>   r?   rz     s8    
rz   )F)FFN)F)rZ   )F)OZ
__future__r   r   r   r   Zloggingr   r7   os.pathr   r   r	   r
   r   r   rN   r   r   r   Z_vendor.auxlib.ishr   Zbase.constantsr   r   Zbase.contextr   r   Zcommon.compatr   r   Zcommon.pathr   Z
core.indexr   r   Zcore.prefix_datar   Z
core.solver   r   
exceptionsr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   Zgateways.disk.creater-   Zgateways.disk.deleter.   r/   Zmiscr0   r1   r2   Zmodels.match_specr3   Zplanr4   Zresolver5   __name__logr9   r@   rI   rU   rY   rZ   rz   r>   r>   r>   r?   <module>   s<    @

&

 