o
    5‘ði  ã                   @  s°   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mZ ddlmZ d	d
lmZ d dlm  mZ d dlmZ eZdddd„ZG dd„ dejƒZdS )é    )ÚannotationsN)ÚIterator)Úchain)ÚClassVaré   )Úmetadata)ÚDistributioné   )Ú_ORIGINAL_SUBCOMMANDS)ÚlogÚ Úreturnr   c                 c  s*   � t jdd�D ]}| ¡ | ƒE dH  qdS )z%Find all files under revision controlzsetuptools.file_finders)ÚgroupN)r   Úentry_pointsÚload)ÚdirnameÚep© r   úW/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/command/sdist.pyÚwalk_revctrl   s   €ÿr   c                      sö   e Zd ZU dZg d¢Zded< i Zded< g d¢Zedd	„ eD ƒƒZ	d,dd„Z
d,dd„Zd,dd„Zeejdd„ ƒƒZd,‡ fdd„Z‡ fdd„Zdd„ Zdd„ Zdd„ Zdd„ Z‡ fd d!„Zd,‡ fd"d#„Zd,d$d%„Zd,d&d'„Zd(d)„ Zd,d*d+„Z‡  ZS )-Úsdistz=Smart sdist that finds anything supported by revision control))zformats=Nz6formats for source distribution (comma-separated list))z	keep-tempÚkz@keep the distribution tree around after creating archive file(s))z	dist-dir=ÚdzFdirectory to put the source distribution archive(s) in [default: dist])zowner=Úuz@Owner name used when creating a tar file [default: current user])zgroup=ÚgzAGroup name used when creating a tar file [default: current group]r   ÚdistributionzClassVar[dict[str, str]]Únegative_opt)r   z.rstz.txtz.mdc                 c  s   � | ]}d |› �V  qdS )ÚREADMENr   )Ú.0Úextr   r   r   Ú	<genexpr>9   ó   € zsdist.<genexpr>r   ÚNonec                 C  s–   |   d¡ |  d¡}|j| _| j tj |jd¡¡ |  ¡  |  	¡ D ]}|   |¡ q"|  
¡  t| jdg ƒ}| jD ]}dd|f}||vrH| |¡ q8d S )NÚegg_infozSOURCES.txtÚ
dist_filesr   r   )Úrun_commandÚget_finalized_commandÚfilelistÚappendÚosÚpathÚjoinr#   Úcheck_readmeÚget_sub_commandsÚmake_distributionÚgetattrr   Úarchive_files)ÚselfÚei_cmdÚcmd_namer$   ÚfileÚdatar   r   r   Úrun;   s   




€ýz	sdist.runc                 C  s   t j | ¡ d S ©N)Úorigr   Úinitialize_options©r1   r   r   r   r9   N   s   zsdist.initialize_optionsc                 C  s:   |   ¡ � tj | ¡ W d  ƒ dS 1 sw   Y  dS )z%
        Workaround for #516
        N)Ú_remove_os_linkr8   r   r.   r:   r   r   r   r.   Q   s   
"ÿzsdist.make_distributionc                  c  sh   � G dd„ dƒ} t td| ƒ}zt`W n	 ty   Y nw zdV  W || ur*|t_dS dS || ur3|t_w )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)   r@   Ú	Exception)r?   Úorig_valr   r   r   r;   X   s   €ÿ
ÿzsdist._remove_os_linkc                   s   t ƒ  ¡  |  ¡  d S r7   )ÚsuperÚadd_defaultsÚ _add_defaults_build_sub_commandsr:   ©Ú	__class__r   r   rD   m   s   
zsdist.add_defaultsc                   s*   t ƒ  ¡  tj d¡r| j d¡ d S d S )Nzpyproject.toml)rC   Ú_add_defaults_optionalr)   r*   Úisfiler'   r(   r:   rF   r   r   rH   q   s   
ÿzsdist._add_defaults_optionalc                 C  s<   | j  ¡ r|  d¡}| j | ¡ ¡ |  |  |¡¡ dS dS )zgetting python filesÚbuild_pyN)r   Úhas_pure_modulesr&   r'   ÚextendÚget_source_filesÚ_add_data_filesÚ_safe_data_files©r1   rJ   r   r   r   Ú_add_defaults_pythonv   s
   

ýzsdist._add_defaults_pythonc                   sP   ˆ   d¡}t| ¡ ƒt }‡ fdd„|D ƒ}dd„ |D ƒ}ˆ j t |¡¡ d S )NÚbuildc                 3  s   � | ]}ˆ   |¡V  qd S r7   )r&   ©r   Úcr:   r   r   r    �   r!   z9sdist._add_defaults_build_sub_commands.<locals>.<genexpr>c                 s  s"   � | ]}t |d ƒr| ¡ V  qdS )rM   N)ÚhasattrrM   rS   r   r   r   r    ‚   s   €  )r&   Úsetr-   r
   r'   rL   r   Úfrom_iterable)r1   rR   Úmissing_cmdsÚcmdsÚfilesr   r:   r   rE   }   s
   
z&sdist._add_defaults_build_sub_commandsc                 C  s   |j S )að  
        Since the ``sdist`` class is also used to compute the MANIFEST
        (via :obj:`setuptools.command.egg_info.manifest_maker`),
        there might be recursion problems when trying to obtain the list of
        data_files and ``include_package_data=True`` (which in turn depends on
        the files included in the MANIFEST).

        To avoid that, ``manifest_maker`` should be able to overwrite this
        method and avoid recursive attempts to build/analyze the MANIFEST.
        )Ú
data_filesrP   r   r   r   rO   …   s   zsdist._safe_data_filesc                 C  s   | j  dd„ |D ƒ¡ dS )zA
        Add data files as found in build_py.data_files.
        c                 s  s0   � | ]\}}}}|D ]
}t j ||¡V  q
qd S r7   )r)   r*   r+   )r   Ú_Úsrc_dirÚ	filenamesÚnamer   r   r   r    –   s   € 
ýþÿz(sdist._add_data_files.<locals>.<genexpr>N)r'   rL   )r1   r[   r   r   r   rN   ’   s   þzsdist._add_data_filesc                   s0   zt ƒ  ¡  W d S  ty   t d¡ Y d S w )Nz&data_files contains unexpected objects)rC   Ú_add_defaults_data_filesÚ	TypeErrorr   Úwarnr:   rF   r   r   r`   œ   s
   ÿzsdist._add_defaults_data_filesc                   s.   t ƒ  ¡  t tj¡}| jjd| dd� d S )Nz^(\.tox|\.nox|\.venv)T)Úis_regex)rC   Úprune_file_listÚreÚescaper)   Úsepr'   Úexclude_pattern)r1   rg   rF   r   r   rd   ¢   s   
zsdist.prune_file_listc                 C  s8   | j D ]}tj |¡r d S q|  dd | j ¡ ¡ d S )Nz,standard file not found: should have one of z, )ÚREADMESr)   r*   Úexistsrb   r+   )r1   Úfr   r   r   r,   ¨   s   
ÿÿzsdist.check_readmec                 C  s^   t j | ||¡ tj |d¡}ttdƒr%tj |¡r%t |¡ |  	d|¡ |  
d¡ |¡ d S )Nz	setup.cfgr@   r#   )r8   r   Úmake_release_treer)   r*   r+   rU   rj   ÚunlinkÚ	copy_filer&   Úsave_version_info)r1   Úbase_dirrZ   Údestr   r   r   rl   ±   s   
zsdist.make_release_treec                 C  sT   t j | j¡s	dS t| jdƒ�}| ¡ }W d   ƒ |dkS 1 s!w   Y  |dkS )NFÚrbs+   # file GENERATED by distutils, do NOT edit
)r)   r*   rI   ÚmanifestÚopenÚreadline)r1   ÚfpÚ
first_liner   r   r   Ú_manifest_is_not_generated¾   s   

ÿþz sdist._manifest_is_not_generatedc              	   C  s†   t  d| j¡ t| jdƒ}|D ]-}z| d¡}W n ty)   t  |›d�¡ Y qw | ¡ }| d¡s5|s6q| j	 
|¡ q| ¡  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'rr   zUTF-8z  not UTF-8 decodable -- skippingú#N)r   Úinfors   rt   ÚdecodeÚUnicodeDecodeErrorrb   ÚstripÚ
startswithr'   r(   Úclose)r1   rs   Ú
bytes_lineÚliner   r   r   Úread_manifestÇ   s   þzsdist.read_manifest)r   r"   )r<   r=   r>   Ú__doc__Úuser_optionsÚ__annotations__r   ÚREADME_EXTENSIONSÚtupleri   r6   r9   r.   ÚstaticmethodÚ
contextlibÚcontextmanagerr;   rD   rH   rQ   rE   rO   rN   r`   rd   r,   rl   rx   r‚   Ú__classcell__r   r   rF   r   r      s2   
 





		r   )r   )r   r   )Ú
__future__r   r‰   r)   re   Úcollections.abcr   Ú	itertoolsr   Útypingr   Ú
_importlibr   Údistr   rR   r
   Údistutils.command.sdistÚcommandr   r8   Ú	distutilsr   ÚlistÚ_default_revctrlr   r   r   r   r   Ú<module>   s    