U
    @{?^ü  ã                   @   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Zd dlmZ d dlmZ d dlZeZG dd	„ d	ejeƒZG d
d„ dƒZdS )é    )Úconvert_path)Úlog)ÚDistutilsErrorÚDistutilsOptionErrorN)Úsix)Ú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ÚuzUninstall this source package)z	egg-path=Nz-Set the path to be used in the .egg-link filer
   Fc                 C   s2   | j rd| _|  ¡  |  ¡  n|  ¡  |  ¡  d S )NT)r
   Zmulti_versionÚuninstall_linkZuninstall_namespacesÚinstall_for_developmentZwarn_deprecated_options©Úself© r   ú</usr/lib/python3/dist-packages/setuptools/command/develop.pyÚrun    s    
zdevelop.runc                 C   s&   d | _ d | _t | ¡ d | _d| _d S )NÚ.)r
   Úegg_pathr   Úinitialize_optionsÚ
setup_pathZalways_copy_fromr   r   r   r   r   )   s
    
zdevelop.initialize_optionsc                 C   s  |   d¡}|jr,d}|j|jf}t|| ƒ‚|jg| _t | ¡ |  ¡  |  	¡  | j
 t d¡¡ |jd }tj | j|¡| _|j| _| jd kr tj |j¡| _t | j¡}t tj | j| j¡¡}||krØtd| ƒ‚tj|t |tj |j¡¡|jd| _|  | 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 ©Zproject_name)Úget_finalized_commandZbroken_egg_infor   r   Zegg_nameÚargsr   Úfinalize_optionsZexpand_basedirsZexpand_dirsZpackage_indexÚscanÚglobÚosÚpathÚjoinÚinstall_dirÚegg_linkÚegg_baser   ÚabspathÚpkg_resourcesÚnormalize_pathr   ZDistributionÚPathMetadataÚdistÚ_resolve_setup_pathr   )r   ZeiÚtemplater   Zegg_link_fnÚtargetr   r   r   r   r   0   sF    




ÿÿÿýýzdevelop.finalize_optionsc                 C   sn   |   tjd¡ d¡}|tjkr0d| d¡d  }t tj 	|||¡¡}|t tj¡krjt
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!   r   Zpath_to_setupZresolvedr   r   r   r)   Z   s    
ÿ
ýzdevelop._resolve_setup_pathc              	   C   sH  t jsžt| jddƒrž| jddd |  d¡ |  d¡}t |j	¡}| jd|d |  d¡ | jddd |  d¡ |  d¡}|| _
|| j_t ||j¡| j_n"|  d¡ | jdd	d |  d¡ |  ¡  tjrà|  tj¡ d t_|  ¡  t d
| j| j¡ | js0t| jdƒ}| | j
d | j ¡ W 5 Q R X |  d | j| j ¡ d S )NZuse_2to3FZbuild_pyr   )Zinplacer   )r#   Z	build_extr-   zCreating %s (link to %s)ÚwÚ
)r   ZPY2ÚgetattrÚdistributionZreinitialize_commandZrun_commandr   r%   r&   Z	build_libr   r(   Úlocationr'   r   Z	_providerZinstall_site_pyÚ
setuptoolsZbootstrap_install_fromr   Zinstall_namespacesr   Úinfor"   r#   Údry_runÚopenÚwriter   Zprocess_distributionZno_deps)r   Zbpy_cmdZ
build_pathZei_cmdÚfr   r   r   r   n   s:    




 ÿ


 zdevelop.install_for_developmentc                 C   s¢   t j | j¡rzt d| j| j¡ t| jƒ}dd„ |D ƒ}| ¡  || j	g| j	| j
gfkrht d|¡ d S | jszt  | j¡ | jsŒ|  | j¡ | jjržt d¡ d S )NzRemoving %s (link to %s)c                 S   s   g | ]}|  ¡ ‘qS r   )r0   )Ú.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   r9   r#   r;   Úcloser   r   Úwarnr:   ÚunlinkZ
update_pthr(   r6   Úscripts)r   Zegg_link_fileÚcontentsr   r   r   r   ž   s     

ÿzdevelop.uninstall_linkc              
   C   s€   || j k	rt | |¡S |  |¡ | jjp*g D ]N}tj t	|ƒ¡}tj 
|¡}t |¡}| ¡ }W 5 Q R X |  ||||¡ q,d S ©N)r(   r   Úinstall_egg_scriptsÚinstall_wrapper_scriptsr6   rE   r   r   r$   r   ÚbasenameÚior;   ÚreadZinstall_script)r   r(   Úscript_nameZscript_pathZstrmZscript_textr   r   r   rH   °   s    

zdevelop.install_egg_scriptsc                 C   s   t |ƒ}t | |¡S rG   )ÚVersionlessRequirementr   rI   ©r   r(   r   r   r   rI   Â   s    zdevelop.install_wrapper_scriptsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zdescriptionr   Zuser_optionsZboolean_optionsZcommand_consumes_argumentsr   r   r   Ústaticmethodr)   r   r   rH   rI   r   r   r   r   r	      s"   þ	*
0r	   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	rN   a©  
    Adapt a pkg_resources.Distribution to simply return the project
    name as the 'requirement' so that scripts will work across
    multiple versions.

    >>> from pkg_resources import Distribution
    >>> 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 rG   )Ú_VersionlessRequirement__distrO   r   r   r   Ú__init__Ö   s    zVersionlessRequirement.__init__c                 C   s   t | j|ƒS rG   )r5   rU   )r   Únamer   r   r   Ú__getattr__Ù   s    z"VersionlessRequirement.__getattr__c                 C   s   | j S rG   r   r   r   r   r   Úas_requirementÜ   s    z%VersionlessRequirement.as_requirementN)rP   rQ   rR   rS   rV   rX   rY   r   r   r   r   rN   Ç   s   rN   )Zdistutils.utilr   Z	distutilsr   Zdistutils.errorsr   r   r   r   rK   Zsetuptools.externr   r%   Zsetuptools.command.easy_installr   r8   r   ÚtypeZ__metaclass__ZDevelopInstallerr	   rN   r   r   r   r   Ú<module>   s    6