U
    „~$hs&  ã                   @   sF  d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZ d d	lmZ d d
lm Z  e !e"¡Z#G dd„ deƒZ$deee%  e&e&eee%  e&e&ee% e	e%ddf dœdd„Z'ee%dœdd„Z(ee$dœdd„Z)edd�G dd„ dƒƒZ*dS )é    N)Ú	dataclassÚfield)Ú	ContainerÚDictÚ	GeneratorÚIterableÚListÚ
NamedTupleÚOptionalÚSet)ÚNormalizedNameÚcanonicalize_name)ÚInvalidVersion)Ú
BadCommandÚInstallationError)ÚBaseDistributionÚget_environment)Úinstall_req_from_editableÚinstall_req_from_line)Ú
COMMENT_RE)Ú%direct_url_as_pep440_direct_referencec                   @   s"   e Zd ZU eed< ee ed< dS )Ú_EditableInfoÚrequirementÚcommentsN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   © r   r   úC/tmp/pip-unpacked-wheel-g27rp152/pip/_internal/operations/freeze.pyr      s   
r   Fr   )r   Ú
local_onlyÚ	user_onlyÚpathsÚisolatedÚexclude_editableÚskipÚreturnc                 c   sX  i }t |ƒj|d|d�}|D ]$}	t |	¡}
|r6|
jr6q|
||
j< q| �rtƒ }t t	¡}| D �]z}t
|ƒ��f}|D �]X}| ¡ r˜| ¡  d¡s˜| d¡rº| ¡ }||krr| |¡ |V  qr| d¡sÐ| d¡�r| d¡rì|dd …  ¡ }n|tdƒd …  ¡  d¡}t||d	�}ntt d
|¡ ¡ |d	�}|j�sRt d|| ¡ ¡ t d¡ qrt|jƒ}||k�r¤||j �s’t d|t d
|¡ ¡ |j¡ n||j  |¡ qrt|| ƒ ¡ V  ||= ||j  |¡ qrW 5 Q R X q\| ¡ D ]4\}}t|ƒdk�rât d|d tt|ƒƒ¡¡ �qâdV  t| ¡ dd„ d�D ] }|j|k�r2t|ƒ ¡ V  �q2d S )Nr   )r!   r&   r"   ú#)z-rz--requirementz-fz--find-linksz-iz--index-urlz--prez--trusted-hostz--process-dependency-linksz--extra-index-urlz--use-featurez-ez
--editableé   ú=)r$   Ú zWSkipping line in requirement file [%s] because it's not clear what it would install: %sz9  (add #egg=PackageName to the URL to avoid this warning)zBRequirement file [%s] contains %s, but package %r is not installedé   z+Requirement %s included multiple times [%s]z, z7## The following requirements were added by pip freeze:c                 S   s
   | j  ¡ S ©N)ÚnameÚlower)Úxr   r   r    Ú<lambda>�   ó    zfreeze.<locals>.<lambda>)Úkey) r   Ziter_installed_distributionsÚFrozenRequirementÚ	from_distÚeditableÚcanonical_nameÚsetÚcollectionsÚdefaultdictÚlistÚopenÚstripÚ
startswithÚrstripÚaddÚlenÚlstripr   r   r   Úsubr.   ÚloggerÚinfor   ÚwarningÚappendr   ÚitemsÚjoinÚsortedÚvalues)r   r!   r"   r#   r$   r%   r&   ZinstallationsÚdistsÚdistÚreqZemitted_optionsZ	req_filesZreq_file_pathÚreq_fileÚlineZline_reqZline_req_canonical_namer.   ÚfilesZinstallationr   r   r    Úfreeze   s–    	ý




ÿþÿý

þþüÿ

ûýrR   ©rM   r'   c                 C   sF   z
| j }W n& tk
r0   | j› d| j› � Y S X | j› d|› �S d S )Nz===z==)Úversionr   Úraw_nameZraw_version)rM   Údist_versionr   r   r    Ú_format_as_name_version”   s
    
rW   c              
   C   s¤  | j }|st‚tj tj |¡¡}ddlm}m}m	} | 
|¡}|dkrtt| ƒ}t d||¡ t|d|› d�gd�S t|ƒj}z| || j¡}	W nì |k
rÈ   t| ƒ}t|d|› d	|› d�gd� Y S  |k
�r }
 z8t| ƒ}t|d|› d
|› d�d|
j› d�gd� W Y ¢S d}
~
X Y nl tk
�rN   t d||j¡ t|g d� Y S  tk
�r| } zt d|¡ W 5 d}~X Y nX t|	g d�S t d|¡ t|dgd�S )za
    Compute and return values (req, comments) for use in
    FrozenRequirement.from_dist().
    r   )ÚRemoteNotFoundErrorÚRemoteNotValidErrorÚvcsNz1No VCS found for editable requirement "%s" in: %rz,# Editable install with no version control (ú))r   r   z# Editable z install with no remote (z
 install (z4) with either a deleted local remote or invalid URI:z# 'ú'zPcannot determine version of editable source in %s (%s command not found in path)z6Error when trying to get requirement for VCS system %sz-Could not determine repository location of %sz-## !! Could not determine repository location)Úeditable_project_locationÚAssertionErrorÚosÚpathÚnormcaseÚabspathÚpip._internal.vcsrX   rY   rZ   Úget_backend_for_dirrW   rD   Údebugr   Útyper   Úget_src_requirementrU   Úurlr   rF   r.   r   )rM   r]   ÚlocationrX   rY   rZ   Úvcs_backendZdisplayZvcs_namerN   ÚexÚexcr   r   r    Ú_get_editable_infož   s`    
ýþ
þ
ýþüþrm   T)Úfrozenc                   @   sp   e Zd ZU eed< eed< eed< eed�Ze	e ed< e
edœdd„ƒZeed d	œd
d„ƒZedœdd„ZdS )r4   r.   rN   r6   )Údefault_factoryr   )r'   c                 C   s
   t | jƒS r-   )r   r.   )Úselfr   r   r    r7   ç   s    z FrozenRequirement.canonical_namerS   c                 C   sN   |j }|rt|ƒ\}}n$g }|j}|r4t||jƒ}nt|ƒ}| |j|||d�S )N)r   )r6   rm   Ú
direct_urlr   rU   rW   )ÚclsrM   r6   rN   r   rq   r   r   r    r5   ë   s    zFrozenRequirement.from_distc                 C   s4   | j }| jrd|› �}d t| jƒt|ƒg ¡d S )Nz-e Ú
)rN   r6   rI   r;   r   r   )rp   rN   r   r   r    Ú__str__ü   s    
zFrozenRequirement.__str__N)r   r   r   r   r   Úboolr   Útupler   r   Úpropertyr   r7   Úclassmethodr   r5   rt   r   r   r   r    r4   à   s   
r4   )NFFNFFr   )+r9   Úloggingr_   Zdataclassesr   r   Útypingr   r   r   r   r   r	   r
   r   Úpip._vendor.packaging.utilsr   r   Zpip._vendor.packaging.versionr   Úpip._internal.exceptionsr   r   Zpip._internal.metadatar   r   Úpip._internal.req.constructorsr   r   Zpip._internal.req.req_filer   Z&pip._internal.utils.direct_url_helpersr   Ú	getLoggerr   rD   r   r   ru   rR   rW   rm   r4   r   r   r   r    Ú<module>   sD   (
       ù

øy
B