
|_                 @   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-3_sjtvrs/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=N6formats for source distribution (comma-separated list)z	keep-tempkz1keep the distribution tree around after creating zarchive file(s)	dist-dir=dFdirectory 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)zRead 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   