ó
œt•Pc           @   sx   d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d „  Z e d „ Z d e	 f d „  ƒ  YZ
 d „  Z d S(   iÿÿÿÿ(   t   _Nc            s   ‡  f d †  } | S(   Nc            s7   |  j  d k r' t j t d ƒ ƒ ‚ n  ˆ  |  | | Ž S(   Ni    s;   cannot use transaction when it is already committed/aborted(   t   countt   errort   AbortR    (   t   selft   argst   kwds(   t   func(    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   _active   s    	(    (   R   R   (    (   R   s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   active   s    c         C   sô   xà | D]Ø \ } } } | s# | r{ y* | | d ƒ } | j  | ƒ | j ƒ  Wqß t k
 rw | t d ƒ | ƒ ‚  qß Xq y0 | | ƒ } | j }	 | j ƒ  t j |	 ƒ Wq t t f k
 rÞ }
 |
 j t j	 k rß ‚  qß q Xq Wt j |  ƒ d  S(   Nt   as   failed to truncate %s
(
   t   truncatet   closet   IOErrorR    t   namet   utilt   unlinkt   OSErrort   errnot   ENOENT(   t   journalt   reportt   openert   entriesR   t   ft   ot   ignoret   fpt   fnt   inst(    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt	   _playback   s$    
	
t   transactionc           B   s¹   e  Z d d d  „ Z d „  Z e d „  ƒ Z e d „  ƒ Z e d d „ ƒ Z e d „  ƒ Z	 e d d „ ƒ Z
 e d „  ƒ Z d „  Z d	 „  Z e d
 „  ƒ Z e d „  ƒ Z d „  Z RS(   c         C   s“   d |  _  d |  _ | |  _ | |  _ | |  _ g  |  _ i  |  _ | |  _ g  |  _ t	 j
 |  j d ƒ |  _ | d  k	 r t j |  j | d @ƒ n  d  S(   Ni   t   wi¶  (   R   t   usagesR   R   t   afterR   t   mapR   t   _queueR   t	   posixfilet   filet   Nonet   ost   chmod(   R   R   R   R   R"   t
   createmode(    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   __init__0   s    									c         C   s   |  j  r |  j ƒ  n  d  S(   N(   R   t   _abort(   R   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   __del__?   s    	c         C   s   |  j  j g  ƒ d  S(   N(   R$   t   append(   R   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt
   startgroupC   s    c         C   st   |  j  j ƒ  } d j g  | D] } d | d | d f ^ q ƒ } |  j j | ƒ |  j j | ƒ |  j j ƒ  d  S(   Nt    s   %s %d
i    i   (   R$   t   popt   joinR   t   extendR&   t   writet   flush(   R   t   qt   xt   d(    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   endgroupG   s
    4c         C   s›   | |  j  k r d  S|  j r= |  j d j | | | f ƒ d  S|  j j | | | f ƒ t |  j ƒ d |  j  | <|  j j d | | f ƒ |  j j ƒ  d  S(   Niÿÿÿÿi   s   %s %d
(   R#   R$   R.   R   t   lenR&   R4   R5   (   R   R&   t   offsett   data(    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   addO   s    	c         C   s%   | |  j  k r! |  j |  j  | Sd  S(   N(   R#   R   R'   (   R   R&   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   find]   s    c         C   sl   | |  j  k r t | ƒ ‚ n  |  j  | } | | | f |  j | <|  j j d | | f ƒ |  j j ƒ  d S(   sn   
        replace can only replace already committed entries
        that are not pending in the queue
        s   %s %d
N(   R#   t   KeyErrorR   R&   R4   R5   (   R   R&   R;   R<   t   index(    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   replacec   s    c         C   s"   |  j  d 7_  |  j d 7_ |  S(   Ni   (   R   R!   (   R   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   nestq   s    c         C   sP   |  j  d k r! |  j d 8_ n  |  j  d k rL |  j d k rL |  j ƒ  n  d  S(   Ni    i   (   R   R!   R,   (   R   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   releasew   s    c         C   s   |  j  d k S(   Ni    (   R   (   R   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   running~   s    c         C   sƒ   |  j  d 8_  |  j  d k r" d S|  j j ƒ  g  |  _ |  j rN |  j ƒ  n  t j j |  j ƒ rv t	 j
 |  j ƒ n  d |  _ d S(   s   commit the transactioni   i    N(   R   R&   R   R   R"   R(   t   patht   isfileR   R   R   R'   (   R   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyR      s    		c         C   s   |  j  ƒ  d S(   s   abort the transaction (generally called on error, or when the
        transaction is not explicitly committed before going out of
        scope)N(   R,   (   R   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   abort   s    c         C   sÐ   d |  _  d |  _ |  j j ƒ  z  |  j sK |  j rG t j |  j ƒ n  d  S|  j t	 d ƒ ƒ y9 t
 |  j |  j |  j |  j t ƒ |  j t	 d ƒ ƒ Wn$ t k
 r½ |  j t	 d ƒ ƒ n XWd  d  |  _ Xd  S(   Ni    s   transaction abort!
s   rollback completed
s(   rollback failed - please run hg recover
(   R   R!   R&   R   R   R   R   R   R   R    R   R   t   Falset	   ExceptionR'   (   R   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyR,   –   s     				N(   t   __name__t
   __module__R'   R+   R-   R	   R/   R9   R=   R>   RA   RB   RC   RD   R   RG   R,   (    (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyR   /   s   			c   	      C   s„   g  } t  j | ƒ } | j ƒ  } | j ƒ  x? | D]7 } | j d ƒ \ } } | j | t | ƒ d  f ƒ q2 Wt | | |  | ƒ d  S(   Nt    (	   R   R%   t	   readlinesR   t   splitR.   t   intR'   R   (	   R   R&   R   R   R   t   linest   lR   R   (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   rollback­   s    
 (   t   i18nR    R(   R   R   R   R	   t   TrueR   t   objectR   RR   (    (    (    s9   /sys/lib/python2.7/site-packages/mercurial/transaction.pyt   <module>   s   	~