ó
U³úVc           @@  s§   d  d l  m Z d  d l Z d d l m Z d d l m Z d d l m Z m	 Z	 m
 Z
 m Z m Z e d „ Z d „  Z d	 „  Z e d
 d „ Z d „  Z d „  Z d S(   i    (   t   absolute_importNi   (   t   _(   t   short(   t   bundle2t   changegroupt   errort   exchanget   utilc         C@  s%  t  j |  ƒ } t  j |  | | d d | ƒ} d } |  j }	 |	 j | ƒ s[ |	 j | ƒ n  |  j d | | ƒ }
 t d „  |
 Dƒ ƒ } t j	 d j
 | ƒ ƒ j ƒ  } d | t | ƒ | d  | f } d } | d	 k rî d
 } | rd } qn | rý d } n d } t  j |  j | | | |	 d | ƒS(   s8   create a bundle with the specified revisions as a backupt   stript   versions   strip-backups   %ln::%lnc         s@  s   |  ] } | j  ƒ  Vq d  S(   N(   t   hex(   t   .0t   c(    (    s4   /usr/lib/python2.7/dist-packages/mercurial/repair.pys	   <genexpr>$   s    t    s   %s/%s-%s-%s.hgi   t   01t   HG20t   BZt   HG10BZt   HG10UNt   compressionN(   R   t   safeversiont   changegroupsubsett   vfst   isdirt   mkdirt   sett   sortedR   t   sha1t   joint	   hexdigestR   t   Nonet   writebundlet   ui(   t   repot   basest   headst   nodet   suffixt   compresst	   cgversiont   cgt	   backupdirR   t
   allcommitst	   allhashest	   totalhasht   namet   compt
   bundletype(    (    s4   /usr/lib/python2.7/dist-packages/mercurial/repair.pyt   _bundle   s*    		 	c         C@  sJ   t  ƒ  } x4 t | t |  ƒ ƒ D] } | j |  | j ƒ  ƒ q Wt | ƒ S(   s+   find out the filelogs affected by the strip(   R   t   xranget   lent   updatet   filesR   (   R!   t   striprevR4   t   x(    (    s4   /usr/lib/python2.7/dist-packages/mercurial/repair.pyt   _collectfiles4   s    	c         @  sP   t  ƒ  ‰  ‡  ‡ f d †  } | |  j ƒ x! | D] } | |  j | ƒ ƒ q/ Wˆ  S(   s<   return the changesets which will be broken by the truncationc         @  sB   |  j  ˆ ƒ \ } } ˆ  j g  | D] } |  j | ƒ ^ q" ƒ d  S(   N(   t   getstrippointR3   t   linkrev(   t   revlogR   t	   brokensett   r(   t   sR5   (    s4   /usr/lib/python2.7/dist-packages/mercurial/repair.pyt
   collectone@   s    (   R   t   manifestt   file(   R!   R4   R5   R>   t   fname(    (   R=   R5   s4   /usr/lib/python2.7/dist-packages/mercurial/repair.pyt   _collectbrokencsets=   s    	t   backupc   *      C@  s  | d k r t  } n  | j ƒ  } | j ƒ  | j } t | t ƒ rO | g } n  g  | D] } | j | ƒ ^ qV } t | ƒ } t | ƒ }	 x8 | D]0 }
 x' | j	 |
 g ƒ D] } |	 j
 | ƒ q© Wq Wt | | ƒ } t | | | ƒ } t | ƒ } x` t | d t | ƒ ƒ D]E } | |	 k r| j
 | ƒ | j | j | ƒ ƒ | j
 | ƒ qqWg  | D] } | j | ƒ ^ q[} | r¡t | j	 | ƒ ƒ } | j | ƒ n  g  | D] } | j | ƒ ^ q¨} g  |	 D] } | j | ƒ ^ qÊ} | j d |	 |	 ƒ } | r| | j ƒ  j ƒ  } n d } | j } g  } x> | D]6 } | | | j ƒ  }
 |
 |	 k r5| j | ƒ q5q5Wd  } | j } | d } | rñt | | | j ƒ  | | ƒ } | j j t d ƒ | j | ƒ ƒ | j j d d | j | ƒ ƒ n  | sý| rt | | | | d	 d
 t  ƒ} n  | j } | j  ƒ  } | d  k	 rl~ t d ƒ } t! j" | d t d ƒ ƒ‚ n  y*| j# d ƒ å } t | j$ ƒ } | j% ƒ  | j& | | ƒ | j& | | ƒ x' | D] } | j' | ƒ j& | | ƒ qÁW| j( ƒ  xn t | t | j$ ƒ ƒ D]T }  | j$ |  \ }! }" }# | j) |! d ƒ j* |" ƒ |" d k r| j+ j, |! ƒ qqWWd  QX| sq| r“|  j- t d ƒ ƒ | j. | d ƒ }$ t/ j0 |  |$ | | ƒ }% | j j1 sÊ| j j2 ƒ  n  t |% t3 j4 ƒ rG| j# d ƒ W } i d d 6d | j | ƒ d 6| _5 t3 j6 | |% | d d d d | j | ƒ ƒWd  QXn# |% j7 | d d | j | ƒ t8 ƒ | j j1 s†| j j9 ƒ  n  |$ j: ƒ  n  x" | D] } | | j ƒ  | | <qšWd  }& } z6 | j; ƒ  }& | j# d ƒ } | j< | ƒ | j: ƒ  Wd  | j= ƒ  |& j= ƒ  Xx‚ | j> ƒ  D]t \ }' }( y |' j? |( ƒ Wqt@ k
 r}) |) jA tA jB k r‘|  jC t d ƒ |' j |( ƒ t |) ƒ f ƒ q‘qXqWWn\ | rÅ|  jC t d ƒ | j | ƒ ƒ n) | rî|  jC t d ƒ | j | ƒ ƒ n  ‚  n X| s| r| j? | ƒ n  | jD ƒ  d  S(   Nt   noneR   i   s   max(parents(%ld) - (%ld))t   .iÿÿÿÿs   saved backup bundle to %s
t   backupbundlet   tempR&   s9   programming error: cannot strip from inside a transactiont   hints!   contact your extension maintainert   ai    s   adding branch
t   rbt   sources   bundle:t   urlt   repairs   error removing %s: %s
s)   strip failed, full bundle stored in '%s'
s,   strip failed, partial bundle stored in '%s'
(   RD   s   strip(E   t   Falset
   unfilteredt
   destroyingt	   changelogt
   isinstancet   strt   revt   minR   t   descendantst   addR7   RB   R1   R2   t   difference_updatet
   parentrevsR$   t   revst   firstt
   _bookmarkst   appendR   R   R0   R#   R    t   statusR   R   t   logR?   t   currenttransactionR   t   Abortt   transactiont   entriest
   startgroupR   R@   t   endgroupt   svfst   truncatet   storet   markremovedt   notet   openR   t
   readbundlet   verboset
   pushbufferR   t
   unbundle20t   hookargst   applybundlet   applyt   Truet	   popbuffert   closet   lockt   recordchanget   releaset	   undofilest   unlinkt   OSErrort   errnot   ENOENTt   warnt	   destroyed(*   R    R!   t   nodelistRC   t   topict   clR$   t	   striplistR5   t   tostripRT   t   descR4   t   saverevst	   saveheadsR<   RV   t	   savebasest
   stripbasest   newbmtargett   bmt   updatebmt   mt
   backupfileR   t	   chgrpfilet   mfstt   curtrt   msgt   trt   offsett   fnt   iR@   t   troffsett   ignoret   ft   genRv   t   undovfst   undofilet   e(    (    s4   /usr/lib/python2.7/dist-packages/mercurial/repair.pyR   J   sâ    	
	"	 """		
	


#

,c      
   C@  sf  | j  ƒ  } d | j k r2 |  j t d ƒ ƒ d S| j ƒ  "| j j } d | k rZ n  t | j ƒ } t ƒ  } t ƒ  } t	 | ƒ } xÂ | D]º } |  j
 t d ƒ | d | ƒ| | } x‹ | j ƒ  D]} }	 |	 | k rß qÇ n  | j |	 ƒ d |	 }
 d |	 } | j j |
 ƒ r"| j |
 ƒ n  | j j | ƒ rÇ | j | ƒ qÇ qÇ WqŽ W|  j
 t d ƒ d ƒ t	 | | ƒ } t	 | | ƒ } x/ t | | ƒ D] } |  j t d	 ƒ | ƒ q“Wx/ t | | ƒ D] } |  j t d
 ƒ | ƒ qÅW| sò| rI|  j t d ƒ | | f ƒ | | _ t | _ | j d ƒ  } | j | ƒ Wd QXn |  j t d ƒ ƒ Wd QXd S(   st   Rebuilds the fncache file from repo history.

    Missing entries will be added. Extra entries will be removed.
    t   fncachesE   (not rebuilding fncache because repository does not support fncache)
Nt
   irrelevantt	   changesett   totals	   data/%s.is	   data/%s.ds   removing %s
s
   adding %s
s(   %d items added, %d removed from fncache
s   fncache already up to date
(   RO   t   requirementsR~   R   Rv   Rh   Rž   R   Rc   R2   t   progressR4   RW   t   _existsR   R   t   writeRs   t   _dirtyRb   (   R    R!   t   fnct
   oldentriest
   newentriest	   seenfilest   repolenRT   t   ctxR™   R–   t   dt   addcountt   removecountt   pR“   (    (    s4   /usr/lib/python2.7/dist-packages/mercurial/repair.pyt   rebuildfncacheé   sP    		


		c         C@  s   |  j  d | | | ƒ S(   s¸   
    The revset to strip when strip is called with -B mark

    Needs to live here so extensions can use it and wrap it even when strip is
    not enabled or not present on a box.
    sm   ancestors(bookmark(%s)) - ancestors(head() and not bookmark(%s)) - ancestors(bookmark() and not bookmark(%s))(   RZ   (   R!   t   mark(    (    s4   /usr/lib/python2.7/dist-packages/mercurial/repair.pyt   stripbmrevset&  s    	(   t
   __future__R    R|   t   i18nR   R$   R   R   R   R   R   R   R   Rs   R0   R7   RB   R   R±   R³   (    (    (    s4   /usr/lib/python2.7/dist-packages/mercurial/repair.pyt   <module>	   s   (			Ÿ	=