ó
€ˆtPc           @   s•   d  d l  m Z d  d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e e f d „  ƒ  YZ	 d S(   iÿÿÿÿ(   t   nullrev(   t   _t   basedagc           B   sƒ   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z	 d d „ Z
 d „  Z d	 „  Z d
 „  Z d „  Z e d „ Z RS(   sð   generic interface for DAGs

    terms:
    "ix" (short for index) identifies a nodes internally,
    "id" identifies one externally.

    All params are ixs unless explicitly suffixed otherwise.
    Pluralized params are lists or sets.
    c         C   s   d  |  _ d  S(   N(   t   Nonet   _inverse(   t   self(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   __init__   s    c         C   s
   t  ‚ d S(   s   set of all node idxsN(   t   NotImplementedError(   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   nodeset   s    c         C   s
   t  ‚ d S(   s   list of head ixsN(   R   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   heads   s    c         C   s
   t  ‚ d S(   s   list of parents ixs of ixN(   R   (   R   t   ix(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   parents#   s    c         C   s
   t  ‚ d S(   s1   inverse DAG, where parents becomes children, etc.N(   R   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   inverse'   s    c         C   s
   t  ‚ d S(   sV   
        set of all ancestors of starts (incl), but stop walk at stops (excl)
        N(   R   (   R   t   startst   stops(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   ancestorset+   s    c         C   s   |  j  ƒ  j | | ƒ S(   sX   
        set of all descendants of starts (incl), but stop walk at stops (excl)
        (   R   R   (   R   R   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   descendantset1   s    c         C   s
   t  ‚ d S(   sé   
        subset of connected list of ixs so that no node has a descendant in it

        By "connected list" we mean that if an ancestor and a descendant are in
        the list, then so is at least one path connecting them.
        N(   R   (   R   t   ixs(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   headsetofconnecteds7   s    c         C   s   |  j  | ƒ S(   s4   return a list of (or set if given a set) of node ids(   t   _externalize(   R   R
   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   externalize@   s    c         C   s2   |  j  | ƒ } t | t ƒ r( t | ƒ St | ƒ S(   s4   return a list of (or set if given a set) of node ids(   t   _externalizeallt
   isinstancet   sett   list(   R   R   t   ids(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   externalizeallD   s    
c         C   s   |  j  | ƒ S(   s4   return a list of (or set if given a set) of node ixs(   t   _internalize(   R   t   id(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   internalizeK   s    c         C   s5   |  j  | | ƒ } t | t ƒ r+ t | ƒ St | ƒ S(   s4   return a list of (or set if given a set) of node ids(   t   _internalizeallR   R   R   (   R   R   t   filterunknownR   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   internalizeallO   s    
N(   t   __name__t
   __module__t   __doc__R   R   R	   R   R   R   R   R   R   R   R   R   t   FalseR    (    (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR      s   											t
   genericdagc           B   s#   e  Z d  Z d d „ Z d „  Z RS(   s    generic implementations for DAGsc         C   s‹   | r t  | ƒ p t  ƒ  } t  ƒ  } t | ƒ } xT | r† | j ƒ  } | | k r3 | | k r3 | j | ƒ | j |  j | ƒ ƒ q3 q3 W| S(   N(   R   R   t   popt   addt   extendR   (   R   R   R   t   seent   pendingt   n(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   Z   s    		c         C   s^   t  | ƒ } | s | Sx5 | D]- } x$ |  j | ƒ D] } | j | ƒ q3 Wq W| sZ t ‚ | S(   N(   R   R   t   discardt   AssertionError(   R   R   t   hdsR+   t   p(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   e   s    N(   R!   R"   R#   R   R   R   (    (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR%   W   s   t   revlogbaseddagc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s!   generic dag interface to a revlogc         C   s,   t  j |  ƒ | |  _ d  |  _ | |  _ d  S(   N(   R   R   t   _revlogR   t   _headst   _nodeset(   R   t   revlogR   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   s   s    		c         C   s   |  j  S(   N(   R3   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   y   s    c         C   s(   |  j  d  k r! |  j ƒ  |  _  n  |  j  S(   N(   R2   R   t	   _getheads(   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR	   |   s    c         C   s   |  j  j | d S(   Ni   (   R1   t   index(   R   R
   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR      s    c         C   s+   |  j  j } g  | D] } | | d ^ q S(   Ni   (   R1   R6   (   R   R   t   idxt   i(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   ƒ   s    c         C   sC   |  j  j | ƒ } | t k r? t | |  j  j t d ƒ ƒ ‚ n  | S(   Nt   nullid(   R1   t   revR    t   LookupErrort	   indexfileR   (   R   R   R
   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   ‡   s    !c         C   s]   |  j  } | rM g  t | j j | ƒ D]$ } | d  k	 r% | t k r% | ^ q% St |  j | ƒ S(   N(   R1   t   mapt   nodemapt   getR   R    R   (   R   R   R   t   rlt   r(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   Œ   s
    	"(
   R!   R"   R#   R   R   R	   R   R   R   R   (    (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR0   p   s   						t	   revlogdagc           B   sP   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z	 d „  Z
 RS(	   s   dag interface to a revlogc         C   s)   t  j |  | t t t | ƒ ƒ ƒ ƒ d  S(   N(   R0   R   R   t   xranget   len(   R   R4   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   —   s    c         C   s,   g  |  j  j ƒ  D] } | t k r | ^ q S(   N(   R1   t   headrevsR    (   R   RA   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR5   š   s    c         C   sz   |  j  } | j } | | } | d } | t k rY | d } | t k rO | g S| | g S| d } | t k rv | g Sg  S(   Ni   i   (   R1   R6   R    (   R   R
   t   rlogR7   t   revdatat   prevt   prev2(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR      s    		




c         C   s(   |  j  d  k r! t |  ƒ |  _  n  |  j  S(   N(   R   R   t   inverserevlogdag(   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   ¬   s    c         C   sÎ   |  j  } | j } | r$ t | ƒ p* t ƒ  } t ƒ  } t | ƒ } x… | rÉ | j ƒ  } | | k rE | | k rE | j | ƒ | | } x= d d g D], }	 | |	 }
 |
 t k r“ | j |
 ƒ q“ q“ WqE qE W| S(   Ni   i   (   R1   R6   R   R   R&   R'   R    t   append(   R   R   R   RF   R7   R)   R*   R:   RG   R8   RH   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   ±   s    				

c   	      C   s“   | s t  ƒ  S|  j } | j } t  | ƒ } xU | D]M } | | } x: d d g D], } | | } | t k rO | j | ƒ qO qO Wq2 W| s t ‚ | S(   Ni   i   (   R   R1   R6   R    R,   R-   (	   R   R   RF   R7   RE   R:   RG   R8   RH   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   Â   s    		

c         C   s  g  } t  |  j | ƒ ƒ } | j d t ƒ t ƒ  } x© | rß | j ƒ  } | d k  rŒ | d } | | k rÜ | j | ƒ | j | ƒ qÜ q7 | j | d ƒ | g  |  j | ƒ D]$ } | | k r± | | k r± | ^ q± 7} q7 Wt	 | ƒ t	 | ƒ k sþ t
 ‚ | S(   s­  linearize and topologically sort a list of revisions

        The linearization process tries to create long runs of revs where
        a child rev comes immediately after its first parent. This is done by
        visiting the heads of the given revs in inverse topological order,
        and for each visited rev, visiting its second parent, then its first
        parent, then adding the rev itself to the output list.
        t   reversei    i   (   R   R   t   sortt   TrueR   R&   RK   R'   R   RD   R-   (   R   R   t   sortedt   visitt   finishedt   curR/   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt	   linearizeÑ   s     			)N(   R!   R"   R#   R   R5   R   R   R   R   R   RS   (    (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyRB   ”   s   					RJ   c           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s:   inverse of an existing revlog dag; see revlogdag.inverse()c         C   sN   t  j |  | j | j ƒ | |  _ i  |  _ g  |  _ t |  j ƒ d |  _ d  S(   Ni   (	   R0   R   R1   R3   t   _origt	   _childrent   _rootsRD   t	   _walkfrom(   R   t   orig(    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR   ñ   s
    			c   	      C   sÄ   |  j  } |  j } |  j } |  j j } x | | k r¶ | | } t } xJ | d | d g D]4 } | t k r[ | j | g  ƒ j | ƒ t	 } q[ q[ W| r© | j | ƒ n  | d 8} q* W| |  _  d  S(   Ni   i   i   (
   RW   RU   RV   R1   R6   RN   R    t
   setdefaultRK   R$   (	   R   t   walktoR:   t   cst   rootsR7   t   datat   isrootRH   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   _walktoø   s    			
c         C   s   |  j  t ƒ |  j S(   N(   R_   R    RV   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR5   	  s    c         C   sB   | d  k r g  S| |  j k r/ |  j | ƒ n  |  j j | g  ƒ S(   N(   R   RW   R_   RU   R?   (   R   R
   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR     s
    c         C   s   |  j  S(   N(   RT   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyR     s    (   R!   R"   R#   R   R_   R5   R   R   (    (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyRJ   î   s   				N(
   t   nodeR    t   i18nR   t   objectR   R%   R0   RB   RJ   (    (    (    s5   /sys/lib/python2.7/site-packages/mercurial/dagutil.pyt   <module>	   s   J$Z