<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    a                 @   s   d Z ddlmZm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mZ ddlmZmZ ddlmZ dd	lmZ G d
d deZi Ze ZeeG dd deZG dd deZG dd deZdZdS )z7holds locking functionality that works across processes    )absolute_importunicode_literalsN)ABCMetaabstractmethod)contextmanager)LockRLock)FileLockTimeout)add_metaclass)Pathc                   s8   e Zd Z fddZd
 fdd	Zd fdd		Z  ZS )_CountedFileLockc                s^   t j|}t j|s<yt | W n tk
r:   Y nX tt| | d| _	t
 | _d S )Nr   )ospathdirnameisdirmakedirsOSErrorsuperr   __init__countr   thread_safe)self	lock_fileparent)	__class__ E/opt/alt/python37/lib/python3.7/site-packages/virtualenv/util/lock.pyr      s    z_CountedFileLock.__init__N皙?c          	      s@   | j 0 | jdkr$tt| || |  jd7  _W d Q R X d S )Nr      )r   r   r   r   acquire)r   timeoutZpoll_interval)r   r   r   r       s    
z_CountedFileLock.acquireFc          	      sD   | j 4 | jdkr$tt| j|d t| jd d| _W d Q R X d S )Nr   )forcer   )r   r   r   r   releasemax)r   r"   )r   r   r   r#   "   s    
z_CountedFileLock.release)Nr   )F)__name__
__module____qualname__r   r    r#   __classcell__r   r   )r   r   r      s   r   c               @   sf   e Zd Zdd Zdd Zdd Zdd Zed	d
 Zedd Z	ee
dddZee
dd ZdS )PathLockBasec             C   s"   t |}| r| n|| _d S )N)r   existsresolver   )r   folderr   r   r   r   r   /   s    zPathLockBase.__init__c             C   s   d | jj| jS )Nz{}({}))formatr   r%   r   )r   r   r   r   __repr__3   s    zPathLockBase.__repr__c             C   s   t | | j| S )N)typer   )r   otherr   r   r   __div__6   s    zPathLockBase.__div__c             C   s
   |  |S )N)r1   )r   r0   r   r   r   __truediv__9   s    zPathLockBase.__truediv__c             C   s   t d S )N)NotImplementedError)r   r   r   r   	__enter__<   s    zPathLockBase.__enter__c             C   s   t d S )N)r3   )r   exc_typeexc_valexc_tbr   r   r   __exit__@   s    zPathLockBase.__exit__Fc             C   s   t d S )N)r3   )r   nameno_blockr   r   r   lock_for_keyD   s    zPathLockBase.lock_for_keyc             C   s   t d S )N)r3   )r9   r   r   r   non_reentrant_lock_for_keyI   s    z'PathLockBase.non_reentrant_lock_for_keyN)F)r%   r&   r'   r   r.   r1   r2   r   r4   r8   r   r;   r<   r   r   r   r   r)   -   s   r)   c                   sz   e Zd Z fddZdddZedd Zdd	 Zd
d Zdd Z	dddZ
edd ZedddZedd Z  ZS )ReentrantFileLockc                s   t t| | d | _d S )N)r   r=   r   _lock)r   r,   )r   r   r   r   P   s    zReentrantFileLock.__init__ c          	   C   s@   t | jd| }t |tkr.t|t|< t| S Q R X d S )Nz{}.lock)strr   r-   _store_lock_lock_storer   )r   r9   r   r   r   r   _create_lockT   s
    zReentrantFileLock._create_lockc          
   C   sF   | d k	rBt 0 | j | jdkr.t| jd  W d Q R X W d Q R X d S )Nr   )rA   r   r   rB   popr   )lockr   r   r   	_del_lock[   s
    
zReentrantFileLock._del_lockc             C   s   |  | j d S )N)rF   r>   )r   r   r   r   __del__c   s    zReentrantFileLock.__del__c             C   s   |   | _| | j d S )N)rC   r>   
_lock_file)r   r   r   r   r4   f   s    
zReentrantFileLock.__enter__c             C   s"   |  | j | | j d | _d S )N)_releaser>   rF   )r   r5   r6   r7   r   r   r   r8   j   s    zReentrantFileLock.__exit__Fc             C   sv   yt t| j W n tk
r(   Y nX y|d W n8 tk
rp   |rN td|j	 |
  |  Y nX d S )Ng-C6?z/lock file %s present, will block until released)r   r   r@   r   r   r    r
   loggingdebugr   r#   )r   rE   r:   r   r   r   rH   o   s    zReentrantFileLock._lock_filec             C   s   |    d S )N)r#   )rE   r   r   r   rI      s    zReentrantFileLock._releasec          	   c   sH   |  |}z(z| || d V  W d | | X W d | | d }X d S )N)rC   rH   rI   rF   )r   r9   r:   rE   r   r   r   r;      s    


zReentrantFileLock.lock_for_keyc          	   c   s.   t t| jd|  d V  W d Q R X d S )Nz{}.lock)r   r@   r   r-   )r   r9   r   r   r   r<      s    z,ReentrantFileLock.non_reentrant_lock_for_key)r?   )F)F)r%   r&   r'   r   rC   staticmethodrF   rG   r4   r8   rH   rI   r   r;   r<   r(   r   r   )r   r   r=   O   s   

r=   c               @   s6   e Zd Zdd Zdd ZedddZedd	 Zd
S )NoOpFileLockc             C   s   t d S )N)r3   )r   r   r   r   r4      s    zNoOpFileLock.__enter__c             C   s   t d S )N)r3   )r   r5   r6   r7   r   r   r   r8      s    zNoOpFileLock.__exit__Fc             c   s
   d V  d S )Nr   )r   r9   r:   r   r   r   r;      s    zNoOpFileLock.lock_for_keyc             c   s
   d V  d S )Nr   )r   r9   r   r   r   r<      s    z'NoOpFileLock.non_reentrant_lock_for_keyN)F)r%   r&   r'   r4   r8   r   r;   r<   r   r   r   r   rM      s
   rM   )rM   r=   r
   )__doc__
__future__r   r   rJ   r   abcr   r   
contextlibr   	threadingr   r   Zfilelockr	   r
   Zsixr   Zvirtualenv.util.pathr   r   rB   rA   objectr)   r=   rM   __all__r   r   r   r   <module>   s"   !H