
§|jb  ã               @   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 Gd	 d
 „  d
 e j e ƒ Z Gd d „  d e ƒ Z d S)é    )Úconvert_path)Úlog)ÚDistutilsErrorÚDistutilsOptionErrorN)Úsix)ÚDistributionÚPathMetadataÚnormalize_path)Úeasy_install)Ú
namespacesc               @   s™   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 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   sA   |  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-5c7ija6t/setuptools/setuptools/command/develop.pyÚrun   s    		

zdevelop.runc             C   s5   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 rä t j j | j ƒ |  _ t |  j ƒ } t t j j |  j |  j ƒ ƒ } | | k r0t d | ƒ ‚ t | t | t j j | j ƒ ƒ d | j ƒ|  _ |  j j t j d ƒ } | t j k r¡d | j d ƒ d	 } | |  _ t t j j |  j |  j | ƒ ƒ } | t t j ƒ k rþt d
 | t t 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ú/z../é   zGCan't get a consistent path to setup script from installation directory)Ú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ÚreplaceÚsepÚcurdirÚcountr   )r   ÚeiÚtemplater"   Zegg_link_fnÚtargetr   Úpr   r   r   r#   .   sF    	


	$zdevelop.finalize_optionsc             C   sµ  t  j rÛ t |  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 r4|  j t j ƒ d  t _ |  j ƒ  t j d
 |  j |  j ƒ |  j s—t |  j d ƒ �" } | j |  j	 d |  j ƒ Wd  QRX|  j d  |  j
 |  j ƒ d  S)NZuse_2to3FÚbuild_pyZinplacer   r   r-   Ú	build_extr   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   \   s4    	
		
	"zdevelop.install_for_developmentc             C   sá   t  j j |  j ƒ r« t j d |  j |  j ƒ t |  j ƒ } d d „  | Dƒ } | j ƒ  | |  j	 g |  j	 |  j
 g f k r’ t j d | ƒ d  S|  j s« t  j |  j ƒ |  j sÄ |  j |  j ƒ |  j j rÝ t j d ƒ d  S)NzRemoving %s (link to %s)c             S   s   g  |  ] } | j  ƒ  ‘ q Sr   )Úrstrip)Ú.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   rE   r-   rG   Úcloser   r   ÚwarnrF   Ú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]k } t j j t	 | ƒ ƒ } t j j
 | ƒ } t j | ƒ � } | j ƒ  } Wd  QRX|  j | | | | ƒ q? Wd  S)N)r/   r
   Úinstall_egg_scriptsÚinstall_wrapper_scriptsr>   rS   r(   r)   r.   r   ÚbasenameÚiorG   Ú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#   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=   re   )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   rf   rh   ri   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
   rD   r   ZDevelopInstallerr   Úobjectr]   r   r   r   r   Ú<module>   s   ¤