ó
œt•Pc           @   s   d  d l  m Z d  d l m Z d  d l Z d  d l Z d  d l Z d d „ Z d „  Z d „  Z	 d „  Z
 d	 d
 e d „ Z d S(   iÿÿÿÿ(   t   nullid(   t   _Ni    c         C   sG  | r |  j  | ƒ } n |  j ƒ  } i  } t j | ƒ } t ƒ  } d }	 xø | rB| j ƒ  }
 |
 | k ro qK n  | j |
 d ƒ } | |	 k rš |	 d 9}	 n  | |	 k rá |
 | k rá | j |
 ƒ | rÞ t | ƒ | k rÞ d  Sqá n  | j |
 ƒ xN |  j	 |
 ƒ D]= } | s| | k rþ | j | | d ƒ | j
 | ƒ qþ qþ WqK Wd  S(   Ni   i   (   t   headsetofconnectedst   headst   utilt   dequet   sett   popleftt
   setdefaultt   addt   lent   parentst   append(   t   dagt   nodest   samplet   alwayst   quicksamplesizeR   t   distt   visitt   seent   factort   currt   dt   p(    (    s:   /sys/lib/python2.7/site-packages/mercurial/setdiscovery.pyt   _updatesample   s0    		
c         C   sm   t  | ƒ | k r% t | ƒ d  d f S|  j | ƒ } | t  | ƒ } | d k r] | d  | f S| t ƒ  | f S(   Ni    (   R
   R   t   NoneR   (   R   R   t   sizeR   t
   desiredlen(    (    s:   /sys/lib/python2.7/site-packages/mercurial/setdiscovery.pyt   _setupsample)   s    c         C   sj   t  |  | | ƒ \ } } } | d  k r+ | S| r: d  } n | } t |  | | | d | ƒ| j | ƒ | S(   NR   (   R   R   R   t   update(   R   R   R   t   initialR   R   R   t   fromset(    (    s:   /sys/lib/python2.7/site-packages/mercurial/setdiscovery.pyt   _takequicksample4   s    	c         C   sí   t  |  | | ƒ \ } } } | d  k r+ | St |  | | | ƒ t |  j ƒ  | | | ƒ | sc t ‚ t | ƒ | k r t t j | | ƒ ƒ } nL t | ƒ | k  rÜ | t | ƒ } | j	 t j t
 | | | ƒ | ƒ ƒ n  | j	 | ƒ | S(   N(   R   R   R   t   inverset   AssertionErrorR
   R   t   randomR   R   t   list(   R   R   R   R   R   R   t   more(    (    s:   /sys/lib/python2.7/site-packages/mercurial/setdiscovery.pyt   _takefullsample@   s    *id   iÈ   c            s…  d } | j  } t j | ƒ } |  j d ƒ | d 7} | j ƒ  }	 |	 }
 | j ƒ  rz | j ƒ  } | j | j |
 ƒ ƒ ‰  np | j d ƒ rØ | j	 ƒ  } | j ƒ  } | j | j |
 ƒ ƒ } | j
 ƒ  | j } | j ‰  n | j ƒ  } g  }
 | j ƒ  t k r+| t g k rt g t | f St g t g  f S|  j t d ƒ ƒ | j | d t ƒ} t | ƒ t | ƒ k r…|  j d ƒ | t | f S|
 rÉt j ˆ  ƒ rÉ|  j t d ƒ ƒ | j |	 ƒ } | t | f S| j ƒ  } t ƒ  } t ƒ  } | j | j | ƒ ƒ | j | ƒ t } xº| rÌ|
 r¿t ‡  f d	 †  t |
 ƒ Dƒ ƒ } | j | j | | ƒ ƒ g  t |
 ƒ D] \ } } ˆ  | sg| ^ qg} | j | j | | ƒ ƒ | j | ƒ | j | ƒ n  | sÉPn  | rú|  j t d
 ƒ ƒ t | | d | ƒ}
 nS | r%|  j d ƒ t | | d | ƒ}
 n( |  j d ƒ t | | d | d t ƒ}
 | d 7} |  j  t d ƒ | d t d ƒ ƒ|  j d | t | ƒ t |
 ƒ f ƒ t! |
 ƒ }
 | j | j |
 ƒ ƒ ‰  t } qW| j" | ƒ } |  j  t d ƒ d ƒ |  j d | ƒ | r`| t g k r`| r7t j$ t d ƒ ƒ ‚ n |  j% t d ƒ ƒ t t g ƒ t | f S| t g k } | j | ƒ | | f S(   sl   Return a tuple (common, anyincoming, remoteheads) used to identify
    missing nodes from or in remote.
    i    s   query 1; heads
i   t   batchs   searching for changes
t   filterunknowns   all remote heads known locally
s   all local heads known remotely
c         3   s%   |  ] \ } } ˆ  | r | Vq d  S(   N(    (   t   .0t   it   n(   t   yesno(    s:   /sys/lib/python2.7/site-packages/mercurial/setdiscovery.pys	   <genexpr>—   s    s   sampling from both directions
R   s   taking initial sample
s   taking quick initial sample
R   t	   searchingt   unitt   queriess2   query %i; still undecided: %i, sample size is: %i
s   %d total queries
s   repository is unrelateds!   warning: repository is unrelated
N(&   t	   changelogt   dagutilt	   revlogdagt   debugR   t   localt   knownt   externalizeallt   capableR(   t   submitt   valuet   tipR    t   Truet   Falset   statusR   t   internalizeallR
   R   t   allt   notet   nodesetR   R   t   ancestorsett   difference_updatet	   enumeratet   descendantsetR'   R!   t   progressR%   R   R   t   Abortt   warn(   t   uiR5   t   remotet   initialsamplesizet   fullsamplesizet   abortwhenunrelatedt
   roundtripst   clR   t   ownheadsR   t   srvheadhashesR(   t   srvheadhashesreft   yesnoreft   srvheadst   ownheadhashest	   undecidedt   commont   missingt   fullt   commoninsampleR+   R,   t   missinginsamplet   resultt   anyincoming(    (   R-   s:   /sys/lib/python2.7/site-packages/mercurial/setdiscovery.pyt   findcommonheadsQ   s”    	

				"/	
"	
(   t   nodeR    t   i18nR   R$   R   R2   R   R   R!   R'   R<   R_   (    (    (    s:   /sys/lib/python2.7/site-packages/mercurial/setdiscovery.pyt   <module>	   s   $			