a
    ÅydX  ã                   @   sŽ   d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dl	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ƒZdS )é    )Úconvert_path)Úlog)ÚDistutilsOptionErrorN)Úeasy_install)Ú_path)Ú
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   ú9lib/python3.9/site-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d l }|  d¡}|jg| _t | ¡ |  ¡  |  ¡  | j 	t
 
d¡¡ |jd }tj | j|¡| _|j| _| jd u r†tj |j¡| _t | j¡}t tj | j| j¡¡}||kr¾td| ƒ‚|j|| |tj |j¡¡|jd| _|  | j| j| j¡| _d S )Nr   Úegg_infoz*.eggz	.egg-linkzA--egg-path must be a relative path from the install directory to ©Zproject_name)Úpkg_resourcesZget_finalized_commandZegg_nameÚargsr   Úfinalize_optionsZexpand_basedirsZexpand_dirsZpackage_indexÚscanÚglobÚosÚpathÚjoinÚinstall_dirÚegg_linkÚegg_baser   Úabspathr   Únormpathr   ZDistributionZPathMetadatar   ÚdistÚ_resolve_setup_pathr   )r   r   ZeiZegg_link_fnÚtargetr   r   r   r   r   ,   s<    




ÿÿýýzdevelop.finalize_optionsc                 C   sj   |   tjd¡ d¡}|tjkr0d| d¡d  }t tj 	|||¡¡}t tj¡}||krft
d||ƒ‚|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   r&   S   s    
ÿüzdevelop._resolve_setup_pathc                 C   s´   |   d¡ | jddd |   d¡ tjr:|  tj¡ d t_|  ¡  t d| j| j	¡ | j
sœt| jdƒ&}| | jd | j ¡ W d   ƒ n1 s’0    Y  |  d | j| j ¡ d S )Nr   Z	build_extr)   )ZinplacezCreating %s (link to %s)ÚwÚ
)Zrun_commandZreinitialize_commandÚ
setuptoolsZbootstrap_install_fromr   Zinstall_namespacesr   Úinfor!   r"   Údry_runÚopenÚwriter   r   Zprocess_distributionr%   Zno_deps)r   Úfr   r   r   r   j   s    

4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v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   )r,   )Ú.0Úliner   r   r   Ú
<listcomp>„   ó    z*develop.uninstall_link.<locals>.<listcomp>z$Link points to %s: uninstall abortedz5Note: you must uninstall or replace scripts manually!)r   r   Úexistsr!   r   r2   r"   r4   Úcloser   r   Úwarnr3   ÚunlinkZ
update_pthr%   ÚdistributionÚscripts)r   Zegg_link_fileÚcontentsr   r   r   r   €   s    
zdevelop.uninstall_linkc              	   C   s”   || j urt | |¡S |  |¡ | jjp*g D ]b}tj t	|ƒ¡}tj 
|¡}t |¡}| ¡ }W d   ƒ n1 st0    Y  |  ||||¡ q,d S ©N)r%   r   Úinstall_egg_scriptsÚinstall_wrapper_scriptsr?   r@   r   r   r#   r   ÚbasenameÚior4   ÚreadZinstall_script)r   r%   Úscript_nameZscript_pathZstrmZscript_textr   r   r   rC   ‘   s    

&zdevelop.install_egg_scriptsc                 C   s   t |ƒ}t | |¡S rB   )ÚVersionlessRequirementr   rD   ©r   r%   r   r   r   rD   £   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   rC   rD   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 )	rI   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 rB   )Ú_VersionlessRequirement__distrJ   r   r   r   Ú__init__·   s    zVersionlessRequirement.__init__c                 C   s   t | j|ƒS rB   )ÚgetattrrP   )r   Únamer   r   r   Ú__getattr__º   s    z"VersionlessRequirement.__getattr__c                 C   s   | j S rB   r   r   r   r   r   Úas_requirement½   s    z%VersionlessRequirement.as_requirementN)rK   rL   rM   rN   rQ   rT   rU   r   r   r   r   rI   ¨   s   rI   )Zdistutils.utilr   Ú	distutilsr   Zdistutils.errorsr   r   r   rF   Zsetuptools.command.easy_installr   r1   r   r   ZDevelopInstallerr   rI   r   r   r   r   Ú<module>   s    