B
    ãUvgÒ(  ã            	   @   sÄ   d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZmZmZ e e¡Zddd„ZG dd„ deƒZdS )é    )Úabsolute_importN)Úpkg_resourcesÚsix)Úcanonicalize_name)ÚRequirementParseError)ÚInstallationError)Úinstall_req_from_editableÚinstall_req_from_line)Ú
COMMENT_RE)Ú
deprecated)Údist_is_editableÚget_installed_distributionsÚmake_vcs_requirement_urlF© c	             c   s8  |pg }d }	|rt  |¡j}	g }
x(tjD ]}| d¡r(|
 | d¡¡ q(W x|D ]}d|krP|
 |¡ qPW x|D ]}d| V  qpW i }xbt	|d|dD ]P}yt
 ||
¡}W n$ tk
rÎ   t d|j¡ w–Y nX |rÜ|jrÜq–|||j< q–W | rötƒ }t t¡}x¨| D ]ž}t|ƒˆ}x~|D ]t}| ¡ r^| ¡  d¡s^|	rR|	|ƒs^| d¡r„| ¡ }||kr"| |¡ |V  q"| d	¡sœ| d
¡rä| d	¡rº|dd …  ¡ }n|td
ƒd …  ¡  d¡}t|||d}ntt  d|¡ ¡ ||d}|js$t !d|| ¡ ¡ t !d¡ nr|j|krj||j sXt d|t  d|¡ ¡ ¡ n||j  |¡ n,t"||j ƒ ¡ V  ||j= ||j  |¡ q"W W d Q R X qW xBt# $|¡D ]4\}}t|ƒdkr¸t d|d %t&t|ƒƒ¡¡ q¸W dV  x<t&| '¡ dd„ dD ]$}t(|jƒ|krt"|ƒ ¡ V  qW d S )Nzdependency_links.txtz#egg=z-f %sr   )Ú
local_onlyÚskipÚ	user_onlyzCould not parse requirement: %sú#)z-rz--requirementz-Zz--always-unzipz-fz--find-linksz-iz--index-urlz--prez--trusted-hostz--process-dependency-linksz--extra-index-urlz-ez
--editableé   ú=)ÚisolatedÚwheel_cacheÚ 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)zDRequirement file [%s] contains %s, but that package 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   ú@/tmp/pip-install-r_9ig3yj/pip/pip/_internal/operations/freeze.pyÚ<lambda>›   ó    zfreeze.<locals>.<lambda>)Úkey))ÚreÚcompileÚsearchr   Úworking_setÚhas_metadataÚextendÚget_metadata_linesÚappendr   ÚFrozenRequirementÚ	from_distr   ÚloggerÚwarningÚproject_nameÚeditabler   ÚsetÚcollectionsÚdefaultdictÚlistÚopenÚstripÚ
startswithÚrstripÚaddÚlenÚlstripr   r	   r
   ÚsubÚinfoÚstrr   Ú	iteritemsÚjoinÚsortedÚvaluesr   )ÚrequirementÚ
find_linksr   r   Ú
skip_regexr   r   Úexclude_editabler   Ú
skip_matchÚdependency_linksÚdistÚlinkÚinstallationsÚreqÚemitted_optionsÚ	req_filesÚreq_file_pathÚreq_fileÚlineÚline_reqr   ÚfilesÚinstallationr   r   r   Úfreeze   s¦    









&rS   c               @   sV   e Zd Zddd„Ze d¡Ze d¡Zedd„ ƒZ	edd	„ ƒZ
ed
d„ ƒZdd„ ZdS )r)   r   c             C   s   || _ || _|| _|| _d S )N)r   rJ   r.   Úcomments)Úselfr   rJ   r.   rT   r   r   r   Ú__init__¡   s    zFrozenRequirement.__init__z-r(\d+)$z-(20\d\d\d\d\d\d)$c          
   C   s¼  t j t j |j¡¡}g }ddlm}m} t|ƒr°| 	|¡r°d}y|||ƒ}W n2 t
k
r€ }	 zt d|	¡ d}W dd}	~	X Y nX |dkr¬t d|¡ | d¡ | ¡ }d}nd}| ¡ }|j}
t|
ƒd	krÞ|
d d d
ksîtd|
|f ƒ‚|
d d	 }| j |¡}| j |¡}|s|r²| d¡}|r<|ƒ  ||¡}|sZt d|¡ | d¡ nXtddddd | d| ¡ |rŠ| d	¡}nd| d	¡ }d}|  |¡}t|||ƒ}|||fS )z»
        Compute and return arguments (req, editable, comments) to pass to
        FrozenRequirement.__init__().

        This method is for use in FrozenRequirement.from_dist().
        r   )ÚvcsÚget_src_requirementTzYError when trying to get requirement for VCS system %s, falling back to uneditable formatNz-Could not determine repository location of %sz-## !! Could not determine repository locationFr   )z==z===z5Expected 1 spec with == or ===; specs = %r; dist = %rÚsvnz(Warning: cannot find svn location for %szF## FIXME: could not find svn URL in dependency_links for this package:zOSVN editable detection based on dependency links will be dropped in the future.z18.2i[  )ÚreplacementÚgone_inÚissuez3# Installing as editable to satisfy requirement %s:z{%s})ÚosÚpathÚnormcaseÚabspathÚlocationÚpip._internal.vcsrW   rX   r   Úget_backend_namer   r+   r,   r(   Úas_requirementÚspecsr8   ÚAssertionErrorÚ_rev_rer#   Ú_date_reÚget_backendÚget_locationr   ÚgroupÚegg_namer   )ÚclsrG   rF   ra   rT   rW   rX   r.   rJ   Úexcre   ÚversionÚ	ver_matchÚ
date_matchÚsvn_backendÚsvn_locationÚrevrl   r   r   r   Ú_init_args_from_distª   sl    

z&FrozenRequirement._init_args_from_distc             C   s   |   ||¡}| |jf|žŽ S )N)ru   r-   )rm   rG   rF   Úargsr   r   r   r*   ÷   s    zFrozenRequirement.from_distc             C   s,   |   ¡ }t d|¡}|r(|d | ¡ … }|S )Nz
-py\d\.\d$)rl   r!   r#   Ústart)rG   r   Úmatchr   r   r   rl   ü   s
    zFrozenRequirement.egg_namec             C   s2   | j }| jrd| }d t| jƒt|ƒg ¡d S )Nz-e %sÚ
)rJ   r.   r>   r2   rT   r<   )rU   rJ   r   r   r   Ú__str__  s    zFrozenRequirement.__str__N)r   )Ú__name__Ú
__module__Ú__qualname__rV   r!   r"   rg   rh   Úclassmethodru   r*   Ústaticmethodrl   rz   r   r   r   r   r)       s   


Mr)   )	NNNNNFNFr   ) Ú
__future__r   r0   Úloggingr]   r!   Úpip._vendorr   r   Úpip._vendor.packaging.utilsr   Zpip._vendor.pkg_resourcesr   Úpip._internal.exceptionsr   Úpip._internal.req.constructorsr   r	   Zpip._internal.req.req_filer
   Úpip._internal.utils.deprecationr   Úpip._internal.utils.miscr   r   r   Ú	getLoggerr{   r+   rS   Úobjectr)   r   r   r   r   Ú<module>   s*   
     
 