î
Ó^ÝV8
  ã               @   sj   d  d l  m Z d  d l Z d  d l Z d d l m Z m Z m Z m Z m	 Z	 Gd d „  d e ƒ Z
 d S)é    )Úabsolute_importNé   )ÚLockBaseÚ	NotLockedÚ	NotMyLockÚLockTimeoutÚAlreadyLockedc               @   sg   e  Z d  Z d Z d d d d „ Z d d d „ Z d d	 „  Z d
 d „  Z d d „  Z d d „  Z	 d S)ÚSymlinkLockFilez'Lock access to a file using symlink(2).TNc             C   s6   t  j |  | | | ƒ t j j |  j ƒ d |  _ d  S)Nr   )r   Ú__init__ÚosÚpathÚsplitÚunique_name)Úselfr   ÚthreadedÚtimeout© r   úC/tmp/pip-build-9m6vxulb/pip/pip/_vendor/lockfile/symlinklockfile.pyr
      s    zSymlinkLockFile.__init__c             C   s  | d  k	 r | n |  j  } t j ƒ  } | d  k	 rL | d k rL | | 7} n  xÀ y t j |  j |  j ƒ Wn› t k
 r|  j ƒ  r‰ d  S| d  k	 rß t j ƒ  | k rß | d k rÉ t d |  j	 ƒ ‚ qß t
 d |  j	 ƒ ‚ n  t j | d  k	 rû | d n d ƒ YqO Xd  SqO Wd  S)Nr   z&Timeout waiting to acquire lock for %sz%s is already lockedé
   gš™™™™™¹?)r   Útimer   Úsymlinkr   Ú	lock_fileÚOSErrorÚi_am_lockingr   r   r   Úsleep)r   r   Úend_timer   r   r   Úacquire   s$    (zSymlinkLockFile.acquirec             C   sX   |  j  ƒ  s" t d |  j ƒ ‚ n" |  j ƒ  sD t d |  j ƒ ‚ n  t j |  j ƒ d  S)Nz%s is not lockedz%s is locked, but not by me)Ú	is_lockedr   r   r   r   r   Úunlinkr   )r   r   r   r   Úrelease6   s
    zSymlinkLockFile.releasec             C   s   t  j j |  j ƒ S)N)r   r   Úislinkr   )r   r   r   r   r   =   s    zSymlinkLockFile.is_lockedc             C   s.   t  j j |  j ƒ o- t  j |  j ƒ |  j k S)N)r   r   r    r   Úreadlinkr   )r   r   r   r   r   @   s    zSymlinkLockFile.i_am_lockingc             C   s,   t  j j |  j ƒ r( t  j |  j ƒ n  d  S)N)r   r   r    r   r   )r   r   r   r   Ú
break_lockD   s    zSymlinkLockFile.break_lock)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r   r"   r   r   r   r   r	   
   s   #r	   )Ú
__future__r   r   r   Ú r   r   r   r   r   r	   r   r   r   r   Ú<module>   s   (