ó
žçƒQc           @   s˜  d  Z  d d l m Z d d l m Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 Z
 d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d e j f d „  ƒ  YZ d e e j f d „  ƒ  YZ d	 e e j f d
 „  ƒ  YZ d e e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d „  Z d d e d „ Z d S(   s   Repository class for viewing uncompressed bundles.

This provides a read-only repository interface to bundles as if they
were part of the actual repository.
iÿÿÿÿ(   t   nullid(   t   _Nt   bundlerevlogc           B   sY   e  Z d  „  Z d „  Z d „  Z d „  Z d d d d „ Z d „  Z d „  Z	 d „  Z
 RS(	   c         C   s  t  j | ƒ } t j j |  | | ƒ | |  _ t |  ƒ } | d |  _ d  } t ƒ  |  _	 x¸t
 r| j | ƒ } | s{ Pn  | d } | d }	 | d }
 | d } | d } | d } t | ƒ } | j ƒ  | } | | ƒ } | |  j k r| } |  j	 j |  j | ƒ q\ n  xD |	 |
 f D]6 } | |  j k rt j | |  j t d ƒ ƒ ‚ qqW| |  j k r…t | |  j t d	 ƒ ƒ ‚ n  |  j | ƒ } t j | d
 ƒ | d | | |  j |	 ƒ |  j |
 ƒ | f } |  j j d | ƒ | |  j | <|  j	 j | ƒ | } | d 7} q\ Wd  S(   Ni   t   nodet   p1t   p2t   cst	   deltabaset   deltas   unknown parents   unknown delta basei    iÿÿÿÿ(   t   scmutilt   readonlyvfst   revlogt   __init__t   bundlet   lent
   repotiprevt   Nonet   sett
   bundlerevst   Truet
   deltachunkt   tellt   nodemapt   addt   errort   LookupErrort	   indexfileR   t   revt   offset_typet   indext   insert(   t   selft   openerR   R   t
   linkmappert   nt   chaint	   chunkdataR   R   R   R   R   R   t   sizet   startt   linkt   pt   baserevt   e(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR      sN    		





!c         C   sT   | |  j  k r" t j j |  | ƒ S|  j j |  j | ƒ ƒ |  j j |  j | ƒ ƒ S(   N(   R   R   t   _chunkR   t   seekR&   t   readt   length(   R   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR+   L   s    c         C   s³   | |  j  k rK | |  j  k rK |  j | d } | | k r |  j | ƒ Sn4 | |  j  k r | |  j  k r t j j |  | | ƒ St j |  j |  j | ƒ ƒ |  j |  j | ƒ ƒ ƒ S(   s1   return or calculate a delta between two revisionsi   (	   R   R   R+   R   t   revdifft   mdifft   textdifft   revisionR   (   R   t   rev1t   rev2t   revb(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR/   U   s    c         C   sC  t  | t ƒ r' | } |  j | ƒ } n | } |  j | ƒ } | t k rL d Sd } g  } | } x^ | |  j k r¾ |  j r |  j d | k r |  j d } Pn  | j | ƒ |  j	 | d } qa W| d k rã t
 j
 j |  | ƒ } n  x4 | r|  j | j ƒ  ƒ } t j | | g ƒ } qæ W|  j | | | ƒ | | | f |  _ | S(   sT   return an uncompressed revision of a given node or revision
        number.
        t    i   i   i   N(   t
   isinstancet   intR   R   R    R   R   t   _cachet   appendR   R   R2   R+   t   popR0   t   patchest
   _checkhash(   R   t	   nodeorrevR   R   t   textR#   t   iterrevR   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR2   b   s0    	c         C   s
   t  ‚ d  S(   N(   t   NotImplementedError(   R   R?   t   transactionR'   R   R   t   d(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   addrevision…   s    c         C   s
   t  ‚ d  S(   N(   RA   (   R   t   revsR!   RB   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   addgroup‡   s    c         C   s
   t  ‚ d  S(   N(   RA   (   R   R   t   minlink(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   strip‰   s    c         C   s
   t  ‚ d  S(   N(   RA   (   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt	   checksize‹   s    N(   t   __name__t
   __module__R   R+   R/   R2   R   RD   RF   RH   RI   (    (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR      s   	7				#		t   bundlechangelogc           B   s   e  Z d  „  Z RS(   c         C   s<   t  j  j |  | ƒ d „  } t j |  | |  j | | ƒ d  S(   Nc         S   s   |  S(   N(    (   t   x(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   <lambda>‘   s    (   t	   changelogR   R   R   (   R   R    R   R!   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR      s    	(   RJ   RK   R   (    (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyRL   Ž   s   t   bundlemanifestc           B   s   e  Z d  „  Z RS(   c         C   s3   t  j  j |  | ƒ t j |  | |  j | | ƒ d  S(   N(   t   manifestR   R   R   (   R   R    R   R!   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR   –   s    (   RJ   RK   R   (    (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyRP   •   s   t   bundlefilelogc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s?   t  j  j |  | | ƒ t j |  | |  j | | ƒ | |  _ d  S(   N(   t   filelogR   R   R   t   _repo(   R   R    t   pathR   R!   t   repo(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR   œ   s    c         C   s   |  j  j | ƒ d  S(   N(   RT   t   file(   R   t   f(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   _file¢   s    (   RJ   RK   R   RY   (    (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyRR   ›   s   	t
   bundlepeerc           B   s   e  Z d  „  Z RS(   c         C   s   t  S(   N(   t   False(   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   canpush¦   s    (   RJ   RK   R\   (    (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyRZ   ¥   s   t   bundlerepositoryc           B   s   e  Z d  „  Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z RS(   c   	      C   sÒ  d  |  _ y t j j |  | | ƒ WnR t j k
 rw t j ƒ  |  _ t j	 | |  j d ƒ t j j |  | |  j ƒ n X|  j
 j d d t ƒ | rµ d t j | ƒ d | |  _ n d | |  _ d  |  _ t j | d ƒ } t j | | ƒ |  _ |  j j ƒ  rÅt j d d d	 d
 d |  j ƒ \ } } | |  _ t j | d ƒ } zG | j d ƒ x3 t rˆ|  j j d ƒ } | sxPn  | j | ƒ qVWWd  | j ƒ  Xt j |  j d ƒ } t j | | ƒ |  _ n  i  |  _ d  S(   Ni   t   phasest   publishs   bundle:t   +t   rbt   prefixs
   hg-bundle-t   suffixs   .hg10unt   dirt   wbt   HG10UNi   i   i   (   R   t   _tempparentt	   localrepot   localrepositoryR   R   t	   RepoErrort   tempfilet   mkdtempt   instancet   uit	   setconfigR[   t   utilt
   expandpatht   _urlt	   posixfilet   changegroupt
   readbundleR   t
   compressedt   mkstempRU   t   ost   fdopent   writeR   R-   t   closet   bundlefilespos(	   R   Rn   RU   t
   bundlenameRX   t   fdtempt   tempt   fptempt   chunk(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR   ª   s<    	!			c         C   s8   |  j  j ƒ  t |  j |  j  ƒ } |  j  j ƒ  |  _ | S(   N(   R   t   changelogheaderRL   t   sopenerR   t   manstart(   R   t   c(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyRO   Ò   s    c         C   sT   |  j  j |  j ƒ |  j  j ƒ  t |  j |  j  |  j j ƒ } |  j  j ƒ  |  _	 | S(   N(
   R   R,   R„   t   manifestheaderRP   Rƒ   RO   R   R   t	   filestart(   R   t   m(    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyRQ   Ú   s
    c         C   s   |  j  |  j S(   N(   RO   R„   (   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR„   ã   s    c         C   s   |  j  |  j S(   N(   RQ   R‡   (   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR‡   è   s    c         C   s   |  j  S(   N(   Rr   (   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   urlí   s    c         C   sí   |  j  sŽ |  j j |  j ƒ xo t rŠ |  j j ƒ  } | s> Pn  | d } |  j j ƒ  |  j  | <x& t r† |  j j d  ƒ } | sa Pqa qa Wq Wn  | |  j  k rÖ |  j j |  j  | ƒ t	 |  j
 | |  j |  j j |  ƒ St j |  j
 | ƒ Sd  S(   Nt   filename(   R|   R   R,   R‡   R   t   filelogheaderR   R   R   RR   Rƒ   RO   R   RS   (   R   RX   R$   t   fnameR…   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyRW   ð   s"    		
	c         C   sR   |  j  j ƒ  |  j d k	 r/ t j |  j ƒ n  |  j rN t j |  j t	 ƒ n  d S(   s'   Close assigned bundle file immediately.N(
   R   R{   Rk   R   Rx   t   unlinkRg   t   shutilt   rmtreeR   (   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR{     s
    	c         C   s   t  S(   N(   R[   (   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   cancopy  s    c         C   s
   t  |  ƒ S(   N(   RZ   (   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   peer  s    c         C   s
   t  j ƒ  S(   N(   Rx   t   getcwd(   R   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR’     s    (   RJ   RK   R   Rh   t   unfilteredpropertycacheRO   RQ   R„   R‡   R‰   RW   R{   R   R‘   R’   (    (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyR]   ©   s   	(						c   	      C   sU  | r t  j t d ƒ ƒ ‚ n  |  j d d d ƒ } | sf t j t j ƒ  ƒ } | d  k rf d } qf n  | rÇ t j ƒ  } | | k r d } qÇ t j	 j
 | d ƒ } | j | ƒ rÇ | t | ƒ } qÇ n  t  j | ƒ } | j ƒ  } | j d k r8| j d d ƒ } t | ƒ d k r)| | d } } qE| \ } } n | | } } t |  | | ƒ S(   Ns#   cannot create new bundle repositoryR   t   mainreporootR6   R`   i   i    (   Rp   t   AbortR   t   configt   cmdutilt   findrepoRx   R’   R   RU   t   joint
   startswithR   R‰   t	   localpatht   schemet   splitR]   (	   Rn   RU   t   createt
   parentpatht   cwdt   ut   st   repopathR}   (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyRm     s.    	c            sÉ  t  j | ˆ d | d | ƒ} | \ } } }	 | sq y | rL t j | ƒ n  Wn t k
 r` n X| g  ˆ j f Sd
 ‰  d
 ‰ ˆ j ƒ  }
 | s– |
 r}ˆ j d ƒ rÃ ˆ j	 d d | d |	 ƒ} nL | d
 k rú ˆ j d ƒ rú ˆ j
 | d ƒ } d
 }	 n ˆ j | |	 d ƒ } |
 rd pd } t
 j | | | ƒ } ‰  | rId
 ‰  n  |
 s}t | j | j | ƒ }
 ‰ | j ƒ  } q}n  |
 r’|
 j ƒ  }
 n  |
 j j | |	 ƒ } ‡  ‡ ‡ f d	 †  } |
 | | f S(   sG  obtains a bundle of changes incoming from other

    "onlyheads" restricts the returned changes to those reachable from the
      specified heads.
    "bundlename", if given, stores the bundle to this file path permanently;
      otherwise it's stored to a temp file and gets deleted again when you call
      the returned "cleanupfn".
    "force" indicates whether to proceed on unrelated repos.

    Returns a tuple (local, csets, cleanupfn):

    "local" is a local repo from which to obtain the actual incoming
      changesets; it is a bundlerepo for the obtained bundle when the
      original "other" is remote.
    "csets" lists the incoming changeset node ids.
    "cleanupfn" must be called without arguments when you're done processing
      the changes; it closes both the original "other" and the one returned
      here.
    t   headst   forcet	   getbundlet   incomingt   commont   changegroupsubsett   HG10BZRf   c              s7   ˆ r ˆ j  ƒ  n  ˆ  r) t j ˆ  ƒ n  ˆ j  ƒ  d  S(   N(   R{   Rx   R   (    (   R   t
   bundlerepot   other(    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   cleanupw  s
    N(   t	   discoveryt   findcommonincomingRx   R   t   OSErrorR{   R   t   localt   capableR¦   Rt   R©   t   writebundleR]   t   baseuit   rootR¤   t
   unfilteredRO   t   findmissing(   Rn   RV   R¬   t	   onlyheadsR}   R¥   t   tmpR¨   R§   t   rheadsRh   t   cgt
   bundletypeRŒ   t   csetsR­   (    (   R   R«   R¬   s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   getremotechanges6  sB    			(    t   __doc__R   R    t   i18nR   Rx   Rk   RŽ   Rt   Rp   R0   R®   R—   R	   Rh   RO   RQ   RS   R   R   R   RL   RP   RR   t	   localpeerRZ   Ri   R]   Rm   R   R[   R¾   (    (    (    s8   /sys/lib/python2.7/site-packages/mercurial/bundlerepo.pyt   <module>   s   $HHz
n	