3
en                 @   s   d dl mZ d dlmZ d dlmZmZ d dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZ d dlmZ d dlmZ d dlZG d	d
 d
ejeZG dd deZdS )    )convert_path)log)DistutilsErrorDistutilsOptionErrorN)six)DistributionPathMetadatanormalize_path)easy_install)
namespacesc               @   sv   e Zd ZdZdZejddg Zejdg Zd	Zd
d Z	dd Z
dd Zedd Zdd Zdd Zdd Zdd ZdS )developzSet up package for developmentz%install package in 'development mode'	uninstalluUninstall this source package	egg-path=N-Set the path to be used in the .egg-link fileFc             C   s2   | j rd| _| j  | j  n| j  | j  d S )NT)r   Zmulti_versionuninstall_linkZuninstall_namespacesinstall_for_developmentZwarn_deprecated_options)self r   @/tmp/pip-build-argcdawy/setuptools/setuptools/command/develop.pyrun   s    
zdevelop.runc             C   s&   d | _ d | _tj|  d | _d| _d S )N.)r   egg_pathr
   initialize_options
setup_pathZalways_copy_from)r   r   r   r   r   '   s
    
zdevelop.initialize_optionsc             C   s  | j d}|jr,d}|j|jf}t|| |jg| _tj|  | j  | j	  | j
jtjd |jd }tjj| j|| _|j| _| jd krtjj|j| _t| j}ttjj| j| j}||krtd| t|t|tjj|j|jd| _| j| j| j| j| _d S )Negg_infoz-Please rename %r to %r before using 'develop'z*.eggz	.egg-linkzA--egg-path must be a relative path from the install directory to )project_name)get_finalized_commandZbroken_egg_infor   r   egg_nameargsr
   finalize_optionsexpand_basedirsexpand_dirsZpackage_indexscanglobospathjoininstall_diregg_linkegg_baser   abspathr	   r   r   r   dist_resolve_setup_pathr   )r   eitemplater    Zegg_link_fntargetr   r   r   r   r!   .   s<    






zdevelop.finalize_optionsc             C   sh   | j tjdjd}|tjkr0d|jdd  }ttjj|||}|ttjkrdt	d|ttj|S )z
        Generate a path from egg_base back to '.' where the
        setup script resides and ensure that path points to the
        setup path from $install_dir/$egg_path.
        /z../   zGCan't get a consistent path to setup script from installation directory)
replacer&   seprstripcurdircountr	   r'   r(   r   )r+   r)   r   Zpath_to_setupZresolvedr   r   r   r.   X   s    
zdevelop._resolve_setup_pathc             C   sD  t jrt| jddr| jddd | jd | jd}t|j}| jd|d | jd | jddd | jd | jd}|| _	|| j
_t||j| j
_n"| jd | jdd	d | jd | j  tjr| jtj d t_| j  tjd
| j| j | js,t| jd}|j| j	d | j  W d Q R X | jd | j
| j  d S )NZuse_2to3Fbuild_pyr   )Zinplacer   )r+   	build_extr3   zCreating %s (link to %s)w
)r   PY3getattrdistributionreinitialize_commandrun_commandr   r	   	build_libr   r-   locationr   r   	_providerZinstall_site_py
setuptoolsZbootstrap_install_fromr
   Zinstall_namespacesr   infor*   r+   dry_runopenwriter   Zprocess_distributionno_deps)r   Zbpy_cmdZ
build_pathZei_cmdfr   r   r   r   k   s4    







 zdevelop.install_for_developmentc             C   s   t jj| jrztjd| j| j t| j}dd |D }|j  || j	g| j	| j
gfkrhtjd| d S | jszt j| j | js| j| j | jjrtjd d S )NzRemoving %s (link to %s)c             S   s   g | ]}|j  qS r   )r6   ).0liner   r   r   
<listcomp>   s    z*develop.uninstall_link.<locals>.<listcomp>z$Link points to %s: uninstall abortedz5Note: you must uninstall or replace scripts manually!)r&   r'   existsr*   r   rF   r+   rH   closer   r   warnrG   unlinkZ
update_pthr-   r?   scripts)r   Zegg_link_filecontentsr   r   r   r      s    
zdevelop.uninstall_linkc             C   s   || j k	rtj| |S | j| x^| jjp,g D ]N}tjjt	|}tjj
|}tj|}|j }W d Q R X | j|||| q.W d S )N)r-   r
   install_egg_scriptsinstall_wrapper_scriptsr?   rS   r&   r'   r,   r   basenameiorH   readZinstall_script)r   r-   script_nameZscript_pathstrmscript_textr   r   r   rU      s    

zdevelop.install_egg_scriptsc             C   s   t |}tj| |S )N)VersionlessRequirementr
   rV   )r   r-   r   r   r   rV      s    zdevelop.install_wrapper_scripts)r   r   r   )r   Nr   )__name__
__module____qualname____doc__descriptionr
   user_optionsboolean_optionsZcommand_consumes_argumentsr   r   r!   staticmethodr.   r   r   rU   rV   r   r   r   r   r      s   	*/r   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r]   az  
    Adapt a pkg_resources.Distribution to simply return the project
    name as the 'requirement' so that scripts will work across
    multiple versions.

    >>> dist = Distribution(project_name='foo', version='1.0')
    >>> str(dist.as_requirement())
    'foo==1.0'
    >>> adapted_dist = VersionlessRequirement(dist)
    >>> str(adapted_dist.as_requirement())
    'foo'
    c             C   s
   || _ d S )N)_VersionlessRequirement__dist)r   r-   r   r   r   __init__   s    zVersionlessRequirement.__init__c             C   s   t | j|S )N)r>   rf   )r   namer   r   r   __getattr__   s    z"VersionlessRequirement.__getattr__c             C   s   | j S )N)r   )r   r   r   r   as_requirement   s    z%VersionlessRequirement.as_requirementN)r^   r_   r`   ra   rg   ri   rj   r   r   r   r   r]      s   r]   )distutils.utilr   	distutilsr   Zdistutils.errorsr   r   r&   r%   rX   Zsetuptools.externr   pkg_resourcesr   r   r	   Zsetuptools.command.easy_installr
   rE   r   ZDevelopInstallerr   objectr]   r   r   r   r   <module>   s    4