B
    lz]<                 @   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 ddl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$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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z? ddl@mAZAmBZBmCZC ddlDmEZE ddlFmGZG ddlHmIZI eeJZKedZLd(ddZMd)ddZNd d! ZOd*d"d#ZPd+d%d$ZQd,d&d'ZRd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REPODATA_FN)contextlocate_prefix_by_name)	text_type)NULL)paths_equalis_package_file)calculate_channel_urls	get_index)
PrefixData)DepsModifierSolver)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   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 rA   0lib/python3.7/site-packages/conda/cli/install.pycheck_prefix'   s    
rC   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)r:   sepr   r
   r'   r   Z_argparse_argscloneAssertionErrorr   printr3   r   stdout_json_successlist)Zsrc_argrJ   r>   rE   rF   rI   rG   rH   rA   rA   rB   rL   :   s&    

rL   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   rE   r>   r   rN   )Zenv_name_or_prefixmessagerA   rA   rB   print_activateU   s    	
rR   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>   rA   rA   rB   get_revisiond   s    rV   installc             C   s  t   t  t jrd| _t|dk}t|dk}t|dk}t|dk}|rZt| | t j}|rrt	|t j
d t jr|t jkrtd|r| js| jst jtjkstd| |sZt|rt| tt|d	d
sZt|t jrt nt|st|n nT| jrRyt| W n4 tk
rN } 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r|	%| qW | 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rxJ| jD ]@}y|/tj0|t j
d W n t1k
rt   t2dY nX q8W 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|rTt jtjkrTt6|}xF|D ]>}t7|}|j8s2t2d| |9|j:dst;||j:qW |r| j<r| jrt=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 tB| d!o| jtCk}| s| jtjDtjEfko| }xx|D ]n}y|rz| j4rztF|d" |d# d|d$ |d% |d& ||d'}tG|t5| j4|}ntH|t j't jI||| jJd(}t j}|s|r| jtCkrtjD}t jK}|rt jKptLjE}|jM||t jNpt jO|p||d) kd*}P W q$ tPtQfk
rx } zP||d) krftR|tQr:|n,tStT|d" |d# d|d$ d+}tQ|jU|W dd}~X Y q$ tVtWtXfk
r } ztB| d!s||d) kr|n|rDy*|jM|tjEt jNpt jO||d) kd*}W n` tVtWtXfk
r@ } z:|jYrd,|jYd krtZt[|||d) kr0|W dd}~X Y nX n<||d) krXw$n(|jYr|d,|jYd kr|tZt[||W dd}~X Y nX q$W t\||| | dS )-z7
    conda install, conda update, and conda create
    )zrepodata.jsonZcreateupdaterW   remove)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srA   rA   rB   
<listcomp>   s    zinstall.<locals>.<listcomp>c             S   s$   g | ]}| d dddd qS )r9   =r   r   )replacesplit)r\   pkgrA   rA   rB   r^      s    r9   r_   r   r   )	use_cachechannel_urlsunknownprepend	use_localc             s   s   | ]}t |V  qd S )N)r   )r\   r]   rA   rA   rB   	<genexpr>   s    zinstall.<locals>.<genexpr>)rD   z6cannot mix specifications with conda package filenameszcError reading file, file should be a text file containing packages 
conda create --help for detailsz	@EXPLICIT)rD   rF   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>   rE   rF   update_modifierrd   rf   rg   rc   re   )rd   rf   platformrg   rc   re   r=   repodata_fn)Zspecs_to_addrk   command)deps_modifierri   force_reinstallZshould_retry_solve)rd   rf   rj   rg   zcould not import)]r   Zvalidate_configurationr   Zuse_only_tar_bz2repodata_fnsboolr   Zensure_name_or_prefixZtarget_prefixrC   r>   Zforce_32bitZroot_prefixr%   fileZpackagesri   r   Z
UPDATE_ALLr
   r1   r   r   r   Zconda_prefixr*   r2   r&   mkdirr0   EnvironmentErrorr#   r)   Zno_default_packagesZcreate_default_packagesr`   ra   appendZuse_index_cacheZchannelsre   Zoverride_channelsrg   sumlenr4   rE   extendZspecs_from_urlUnicodeErrorr   Zspecs_from_argsZrevisionrV   r   r6   Zis_name_only_specgetr?   r+   rL   r-   rP   r5   rR   r   hasattrr   ZFREEZE_INSTALLEDZUPDATE_SPECSr   r7   r    Zsubdirscmdrn   r   Zsolve_for_transactionro   Zforcer8   r,   
isinstancetupler   Z_formatted_chainsr.   
SystemExitr/   argsr"   r   
handle_txn)r   parserrl   newenvZisupdateZ	isinstallZisremover=   eZargs_packagesZargs_packages_namesZdefault_pkgZdefault_pkg_namerF   Znum_cpZspecsZfpathZprefix_dataspecrp   Zargs_set_update_modifierZ_should_retry_unfrozenrk   indexunlink_link_transactionZsolverri   rn   Zchannels_urlsrA   rA   rB   rW   k   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.)rQ   z-
# All requested packages already installed.
r   T)r=   rG   dry_runzUPackage caches prepared. UnlinkLinkTransaction cancelled with --download-only option.ZExiting)r=   rG   )Znothing_to_dor,   Zpackage_namesr   r>   r   rO   rN   Zprint_transaction_summaryZ
confirm_ynr   Z_make_legacy_action_groupsr(   Zdownload_and_extractZdownload_onlyr!   Zexecuter   r$   r5   rR   r?   )r   r=   r   r   Z	remove_oprG   r   rA   rA   rB   r   @  s8    
r   )F)FFN)F)rW   )F)SZ
__future__r   r   r   r   Zloggingr   r:   os.pathr   r   r	   r
   r   r    r   r   r   Z_vendor.auxlib.ishr   Zbase.constantsr   r   r   Zbase.contextr   r   Zcommon.compatr   Zcommon.constantsr   Zcommon.pathr   r   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.   r/   Zgateways.disk.creater0   Zgateways.disk.deleter1   r2   Zmiscr3   r4   r5   Zmodels.match_specr6   Zplanr7   Zresolver8   __name__logr<   rC   rL   rR   rV   rW   r   rA   rA   rA   rB   <module>   s>    D



 V