
§|j¼  ã               @   s³   d  d l  m Z d  d l j j Z d  d l 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 Z e Z d d d „ Z Gd	 d
 „  d
 e e j ƒ Z d S)é    )ÚlogN)Úsixé   )Úsdist_add_defaultsÚ c             c   s@   x9 t  j d ƒ D]( } x | j ƒ  |  ƒ D] } | Vq) Wq Wd S)z%Find all files under revision controlzsetuptools.file_findersN)Úpkg_resourcesÚiter_entry_pointsÚload)ÚdirnameÚepÚitem© r   ú>/tmp/pip-build-5c7ija6t/setuptools/setuptools/command/sdist.pyÚwalk_revctrl   s    r   c                   s<  e  Z d  Z d Z d- d d d d f d. g Z i  Z d/ Z d d „  Z d d „  Z d d „  Z	 d d „  Z
 e e j d d „  ƒ ƒ Z d d „  Z e j d0 k  pÛ d1 e j k oº d2 k  n pÛ d3 e j k oÙ d4 k  n Z e rê e Z d! d" „  Z ‡  f d# d$ †  Z d% d& „  Z d' d( „  Z d) d* „  Z d+ d, „  Z ‡  S)5Úsdistz=Smart sdist that finds anything supported by revision controlúformats=Nú6formats for source distribution (comma-separated list)z	keep-tempÚkz1keep the distribution tree around after creating zarchive file(s)ú	dist-dir=ÚdúFdirectory to put the source distribution archive(s) in [default: dist]ÚREADMEú
README.rstú
README.txtc             C   sÿ   |  j  d ƒ |  j d ƒ } | j |  _ |  j j t j j | j d ƒ ƒ |  j ƒ  x! |  j	 ƒ  D] } |  j  | ƒ qa Wd d  l
 } d | j j k r  |  j ƒ  |  j ƒ  t |  j d g  ƒ } x9 |  j D]. } d d | f } | | k rÉ | j | ƒ qÉ Wd  S)NÚegg_infozSOURCES.txtr   ÚcheckÚ
dist_filesr   r   )Úrun_commandÚget_finalized_commandÚfilelistÚappendÚosÚpathÚjoinr   Úcheck_readmeÚget_sub_commandsÚdistutils.commandÚcommandÚ__all__Zcheck_metadataÚmake_distributionÚgetattrÚdistributionZarchive_files)ÚselfZei_cmdÚcmd_nameÚ	distutilsr   ÚfileÚdatar   r   r   Úrun*   s     "


z	sdist.runc             C   s   t  j j |  ƒ |  j ƒ  d  S)N)Úorigr   Úinitialize_optionsÚ_default_to_gztar)r,   r   r   r   r3   D   s    zsdist.initialize_optionsc             C   s#   t  j d k r d  Sd g |  _ d  S)Né   é   r   Úbetar   Úgztar)r5   r6   r   r7   r   )ÚsysÚversion_infoÚformats)r,   r   r   r   r4   I   s    zsdist._default_to_gztarc          	   C   s(   |  j  ƒ  � t j j |  ƒ Wd QRXd S)z%
        Workaround for #516
        N)Ú_remove_os_linkr2   r   r)   )r,   r   r   r   r)   O   s    zsdist.make_distributionc              c   sq   Gd d „  d ƒ }  t  t d |  ƒ } y
 t ` Wn t k
 rC Yn Xz	 d VWd | |  k	 rl t t d | ƒ Xd S)zG
        In a context, remove and restore os.link if it exists
        c               @   s   e  Z d  Z d S)z&sdist._remove_os_link.<locals>.NoValueN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚNoValue]   s   r@   ÚlinkN)r*   r!   rA   Ú	ExceptionÚsetattr)r@   Zorig_valr   r   r   r<   V   s    
	zsdist._remove_os_linkc             C   s\   y t  j j |  ƒ WnA t k
 rW t j ƒ  \ } } } | j j j d j	 ƒ  ‚  Yn Xd  S)NÚtemplate)
r2   r   Úread_templaterB   r9   Úexc_infoÚtb_nextÚtb_frameÚf_localsÚclose)r,   Ú_Útbr   r   r   Z__read_template_hackk   s    zsdist.__read_template_hacké   é   r5   r   r   é   c                s‡   |  j  j ƒ  rƒ |  j d ƒ } |  j j | j ƒ  ƒ |  j  j sƒ x@ | j D]5 \ } ‰  } } |  j j ‡  f d d †  | Dƒ ƒ qJ Wd S)zgetting python filesÚbuild_pyc                s%   g  |  ] } t  j j ˆ  | ƒ ‘ q Sr   )r!   r"   r#   )Ú.0Úfilename)Úsrc_dirr   r   ú
<listcomp>�   s   	z.sdist._add_defaults_python.<locals>.<listcomp>N)r+   Úhas_pure_modulesr   r   ÚextendZget_source_filesZinclude_package_dataÚ
data_files)r,   rP   rK   Ú	filenamesr   )rS   r   Ú_add_defaults_python‚   s    zsdist._add_defaults_pythonc                sP   y* t  j r t j |  ƒ n t ƒ  j ƒ  Wn t k
 rK t j d ƒ Yn Xd  S)Nz&data_files contains unexpected objects)r   ÚPY2r   Ú_add_defaults_data_filesÚsuperÚ	TypeErrorr   Úwarn)r,   )Ú	__class__r   r   r[   �   s    	zsdist._add_defaults_data_filesc             C   sK   xD |  j  D] } t j j | ƒ r
 d  Sq
 W|  j d d j |  j  ƒ ƒ d  S)Nz,standard file not found: should have one of z, )ÚREADMESr!   r"   Úexistsr^   r#   )r,   Úfr   r   r   r$   ™   s    zsdist.check_readmec             C   sƒ   t  j j |  | | ƒ t j j | d ƒ } t t d ƒ ri t j j | ƒ ri t j | ƒ |  j	 d | ƒ |  j
 d ƒ j | ƒ d  S)Nz	setup.cfgrA   r   )r2   r   Úmake_release_treer!   r"   r#   Úhasattrra   ÚunlinkÚ	copy_filer   Zsave_version_info)r,   Úbase_dirÚfilesÚdestr   r   r   rc   £   s    !zsdist.make_release_treec          	   C   sT   t  j j |  j ƒ s d St j |  j d ƒ � } | j ƒ  } Wd  QRX| d j ƒ  k S)NFÚrbz+# file GENERATED by distutils, do NOT edit
)r!   r"   ÚisfileÚmanifestÚioÚopenÚreadlineÚencode)r,   ÚfpÚ
first_liner   r   r   Ú_manifest_is_not_generated°   s    z sdist._manifest_is_not_generatedc             C   s¾   t  j d |  j ƒ t |  j d ƒ } xˆ | D]€ } t j rw y | j d ƒ } Wn& t k
 rv t  j d | ƒ w, Yn X| j	 ƒ  } | j
 d ƒ s, | rœ q, |  j j | ƒ q, W| j ƒ  d S)zªRead the manifest file (named by 'self.manifest') and use it to
        fill in 'self.filelist', the list of files to include in the source
        distribution.
        zreading manifest file '%s'rj   zUTF-8z"%r not UTF-8 decodable -- skippingú#N)r   Úinforl   rn   r   ÚPY3ÚdecodeÚUnicodeDecodeErrorr^   ÚstripÚ
startswithr   r    rJ   )r,   rl   Úliner   r   r   Úread_manifestº   s    	zsdist.read_manifest)r   Nr   )r   r   r   )r   r   r   )rM   rN   rM   )r5   r   )r5   r   rO   )r5   rM   )r5   rM   r   )r=   r>   r?   Ú__doc__Úuser_optionsÚnegative_optr`   r1   r3   r4   r)   ÚstaticmethodÚ
contextlibÚcontextmanagerr<   Z_sdist__read_template_hackr9   r:   Zhas_leaky_handlerE   rY   r[   r$   rc   rs   r|   r   r   )r_   r   r      s8     		

r   )r.   r   Zdistutils.command.sdistr'   r   r2   r!   r9   rm   r�   Zsetuptools.externr   Z
py36compatr   r   ÚlistZ_default_revctrlr   r   r   r   r   Ú<module>   s   