3
ûâde*&  ã            
   @   s0  d dl Z d dlZd dl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 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jeƒZG d
d„ de	ƒZ ddddddf fe
ee!  e"e"e
ee!  e"e"ee! ee! dœdd„Z#ee!dœdd„Z$ee dœdd„Z%G dd„ dƒZ&dS )é    N)Ú	ContainerÚDictÚIterableÚIteratorÚListÚ
NamedTupleÚOptionalÚSet)Úcanonicalize_name)ÚVersion)Ú
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e dS )Ú_EditableInfoN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚrequirementr   Úcomments© r   r   ú>/tmp/pip-build-red6nood/pip/pip/_internal/operations/freeze.pyr      s   
r   F)r   Ú
local_onlyÚ	user_onlyÚpathsÚisolatedÚexclude_editableÚskipÚreturnc             c   st  i }t |ƒj|f |d�}x,|D ]$}	tj|	ƒ}
|r8|
jr8q|
||
j< qW | �r6tƒ }tjt	ƒ}�xŽ| D �]„}t
|ƒ��p}�xf|D �]\}|jƒ  s¦|jƒ jdƒs¦|jdƒrÈ|jƒ }||kr~|j|ƒ |V  q~|jdƒsÞ|jdƒ�r$|jdƒ� rü|dd … jƒ }n|tdƒd … jƒ jdƒ}t||d�}nttjd|ƒjƒ |d�}|j�sbtjd||jƒ ƒ tjdƒ q~t|jƒ}||k�r´||j �s¢tjd|tjd|ƒjƒ |jƒ n||j j|ƒ q~t|| ƒjƒ V  ||= ||j j|ƒ q~W W d Q R X qdW x@|jƒ D ]4\}}t|ƒdk�røtjd|djtt|ƒƒƒƒ �qøW dV  x8t|jƒ dd„ d�D ] }|j|k�rLt|ƒjƒ V  �qLW d S )N)r   r"   r   ú#ú-rú--requirementú-fú--find-linksú-iú--index-urlú--preú--trusted-hostú--process-dependency-linksú--extra-index-urlú--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 jƒ S )N)ÚnameÚlower)Úxr   r   r   Ú<lambda>Ž   s    zfreeze.<locals>.<lambda>)Úkey)r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   ) r   Ziter_installed_distributionsÚFrozenRequirementÚ	from_distÚeditableÚcanonical_nameÚsetÚcollectionsÚdefaultdictÚlistÚopenÚstripÚ
startswithÚrstripÚaddÚlenÚlstripr   r   r   Úsubr4   ÚloggerÚinfor
   ÚwarningÚappendr   ÚitemsÚjoinÚsortedÚvalues)r   r   r   r   r    r!   r"   ÚinstallationsÚdistsÚdistÚreqÚemitted_optionsZ	req_filesÚreq_file_pathÚreq_fileÚlineÚline_reqZline_req_canonical_namer4   ÚfilesÚinstallationr   r   r   Úfreeze   s”    	




          





"r\   )rS   r#   c             C   s0   t | jtƒr| j› d| j› �S | j› d| j› �S )Nz==z===)Ú
isinstanceÚversionr   Úraw_name)rS   r   r   r   Ú_format_as_name_version“   s    r`   c             C   s’  | j }|st‚tjjtjj|ƒƒ}ddlm}m}m	} |j
|ƒ}|dkrtt| ƒ}tjd||ƒ t|d|› d�gd�S t|ƒj}y|j|| jƒ}	W nÚ |k
rÄ   t| ƒ}t|d|› d	|› d�gd�S  |k
�r }
 z0t| ƒ}t|d|› d
|› d�d|
j› d�gd�S d}
~
X nh tk
�r<   tjd||jƒ t|g d�S  tk
�rj } ztjd|ƒ W Y dd}~X nX t|	g d�S tj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ÚabspathZpip._internal.vcsra   rb   rc   Zget_backend_for_dirr`   rI   Údebugr   Útyper   Úget_src_requirementr_   Úurlr   rK   r4   r   )rS   rf   Úlocationra   rb   rc   Úvcs_backendÚdisplayZvcs_namerT   ÚexÚexcr   r   r   Ú_get_editable_info™   sR    

ru   c               @   sL   e Zd Zf feeeee ddœdd„Zeed dœdd„ƒZ	edœd	d
„Z
dS )r9   N)r4   rT   r;   r   r#   c             C   s&   || _ t|ƒ| _|| _|| _|| _d S )N)r4   r
   r<   rT   r;   r   )Úselfr4   rT   r;   r   r   r   r   Ú__init__Ü   s
    
zFrozenRequirement.__init__)rS   r#   c             C   sN   |j }|rt|ƒ\}}n$g }|j}|r4t||jƒ}nt|ƒ}| |j|||d�S )N)r   )r;   ru   Ú
direct_urlr   r_   r`   )ÚclsrS   r;   rT   r   rx   r   r   r   r:   é   s    zFrozenRequirement.from_dist)r#   c             C   s4   | j }| jrd|› �}djt| jƒt|ƒg ƒd S )Nz-e Ú
)rT   r;   rN   r@   r   r   )rv   rT   r   r   r   Ú__str__ú   s    
zFrozenRequirement.__str__)r   r   r   r   Úboolr   rw   Úclassmethodr   r:   r{   r   r   r   r   r9   Û   s
   r9   )'r>   Úloggingrh   Útypingr   r   r   r   r   r   r   r	   Úpip._vendor.packaging.utilsr
   Zpip._vendor.packaging.versionr   Zpip._internal.exceptionsr   r   Zpip._internal.metadatar   r   Zpip._internal.req.constructorsr   r   Zpip._internal.req.req_filer   Z&pip._internal.utils.direct_url_helpersr   Ú	getLoggerr   rI   r   r   r|   r\   r`   ru   r9   r   r   r   r   Ú<module>   s.   (
&qB