o
    ¾Ôi¥  ã                   @   s°   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
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 d dlmZ eeƒZG dd„ de
ƒZdS )é    N)ÚValues)ÚPath)Ú
WheelCache)Ú
cmdoptions)ÚRequirementCommandÚwith_cleanup)ÚSUCCESS)ÚPylockÚis_valid_pylock_file_name)Úget_build_tracker)Ú	getLogger)Úget_pip_version)ÚTempDirectoryc                   @   s<   e Zd ZdZdZddd„Zededee	 de
fd	d
„ƒZdS )ÚLockCommandaÖ  
    EXPERIMENTAL - Lock packages and their dependencies from:

    - PyPI (and other indexes) using requirement specifiers.
    - VCS project urls.
    - Local project directories.
    - Local or remote source archives.

    pip also supports locking from "requirements files", which provide an easy
    way to specify a whole environment to be installed.

    The generated lock file is only guaranteed to be valid for the current
    python version and platform.
    zô
      %prog [options] [-e] <local project path> ...
      %prog [options] <requirement specifier> [package-index-options] ...
      %prog [options] -r <requirements file> [package-index-options] ...
      %prog [options] <archive url/path> ...ÚreturnNc                 C   sb  | j  tjdddddddd¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t 	¡ ¡ | j  t 
¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ t tj| j¡}| j d|¡ | j d| j ¡ d S )	Nz--outputz-oÚoutput_fileÚpathzpylock.tomlz7Lock file name (default=pylock.toml). Use - for stdout.)ÚdestÚmetavarÚtypeÚdefaultÚhelpr   )Zcmd_optsZ
add_optionr   Z	PipOptionÚrequirementsZconstraintsZbuild_constraintsZno_depsZpreZeditableÚsrcÚignore_requires_pythonZno_build_isolationZ
use_pep517Zcheck_build_depsZconfig_settingsZ	no_binaryZonly_binaryZprefer_binaryZrequire_hashesZprogress_barZmake_option_groupZindex_groupÚparserZinsert_option_group)ÚselfZ
index_opts© r   ú;lib/python3.10/site-packages/pip/_internal/commands/lock.pyÚadd_options-   sD   ùÿþzLockCommand.add_optionsÚoptionsÚargsc              
   C   sP  t  dtƒ ¡ t  d¡ t |¡ |  |¡}| j|||jd}|  	t
ƒ ¡}t|j ddd}|  ||||¡}t|jƒ}|D ]}	d|	_q=| j|||||d| jd}
| j|
|||dd|jd	d
}|  |¡ |j|dd}|jdkrtt ¡ }nt|jƒ}t|ƒsƒt  d|¡ |j}tj|j ¡ |d ¡ }|jdkrŸt j! "|¡ t$S |j#|dd t$S )NzUsing %szspip lock is currently an experimental command. It may be removed/changed in a future release without prior warning.)r    Úsessionr   ÚinstallT)ÚdeleteÚkindZglobally_managedF)Ztemp_build_dirr    Úbuild_trackerr"   ÚfinderÚuse_user_siteÚ	verbosityzto-satisfy-only)Úpreparerr'   r    Úwheel_cacher(   Zignore_installedr   Zupgrade_strategy)Zcheck_supported_wheelsú-z!%s is not a valid lock file name.)Úbase_dirzutf-8)Úencoding)%ÚloggerÚverboser   Zwarningr   Zcheck_build_constraintsZget_default_sessionZ_build_package_finderr   Úenter_contextr   r   Zno_cleanZget_requirementsr   Z	cache_dirZpermit_editable_wheelsZmake_requirement_preparerr)   Zmake_resolverZtrace_basic_infoÚresolver   r   Úcwdr
   Úparentr	   Zfrom_install_requirementsr   ÚvaluesZas_tomlÚsysÚstdoutÚwriteÚ
write_textr   )r   r    r!   r"   r'   r&   Z	directoryZreqsr+   Zreqr*   ZresolverZrequirement_setr-   Zoutput_file_pathZpylock_tomlr   r   r   ÚrunX   sz   ÿ

ýý
ù	ø



þ
ÿþ
þzLockCommand.run)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úusager   r   r   ÚlistÚstrÚintr:   r   r   r   r   r      s    
+ r   )r6   Zoptparser   Úpathlibr   Zpip._internal.cacher   Zpip._internal.clir   Zpip._internal.cli.req_commandr   r   Zpip._internal.cli.status_codesr   Zpip._internal.models.pylockr	   r
   Z,pip._internal.operations.build.build_trackerr   Zpip._internal.utils.loggingr   Zpip._internal.utils.miscr   Zpip._internal.utils.temp_dirr   r;   r/   r   r   r   r   r   Ú<module>   s    