
Qc           @   s  d  d l  Z  d  d l Z d  d l m Z m Z m Z m Z m Z m Z d  d l	 m
 Z
 d  d l m Z m Z d  d l m Z d  d l m Z d  d l Z d   Z d d  Z d	 e f d
     YZ d e f d     YZ g  d d  Z d d  Z d d  Z d   Z d   Z d   Z d   Z d   Z d   Z  e d  Z! e d  Z" d   Z# d   Z$ d   Z% d   Z& d   Z' d   Z( d   Z) d   Z* d    Z+ d!   Z, d"   Z- d# e f d$     YZ. d% e j f d&     YZ/ d S('   iN(   t   matcht   patcht   scmutilt   errort   uit   util(   t   _(   t   hext   nullid(   t   ErrorResponse(   t   HTTP_NOT_FOUNDc         C   sd   |  d d k r d |  }  n  |  d d k r: |  d  }  n  t  j j |   } | d k r\ d S| d S(   Ni    t   /i(   t   ost   patht   dirname(   t   pt   up(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR      s    c         c   s   | ru | V| d k r1 | d k r1 d } | Vn  |  d k sC t   | d k sU t   x |  | k rq |  d 9}  qX Wn  x& t r d |  Vd |  V|  d 9}  qx Wd  S(   Ni   i(   i2   i    i
   i   i   (   t   AssertionErrort   True(   t   stept	   firststep(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   _navseq   s    			t   revnavc           B   s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C   s   | j  |  _ d S(   sU   Navigation generation object

        :repo: repo object we generate nav for
        N(   t	   changelogt   _revlog(   t   selft   repo(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   __init__,   s    c         C   s   |  j    d k	 S(   s,   return True if any revision to navigate overN(   t   _firstt   None(   R   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   __nonzero__4   s    c         C   s0   y t  |  j  j   SWn t k
 r+ d SXd S(   s1   return the minimum non-filtered changeset or NoneN(   t   iterR   t   nextt   StopIterationR   (   R   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR   8   s    c         C   s   t  |  j j |   S(   N(   R   R   t   node(   R   t   rev(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR   ?   s    c            s  |  s i d d 6d d 6f Sg  } xI t  d |  D]8 } | | k rG Pn  | j | |  | j | |  q1 W| j   |  j   } d | |  j |  f g  g   x | D] } | |  j k r q n  | | k  o | k  n r j d t | |  |  j |  f  n  d | k  o'| k  n r  j d t | |  |  j |  f  q q W j d  d	     i    f d
   d 6   f d   d 6f S(   s  computes label and revision id for navigation link

        :pos: is the revision relative to which we generate navigation.
        :pagelen: the size of each navigation page
        :limit: how far shall we link

        The return is:
            - a single element tuple
            - containing a dictionary with a `before` and `after` key
            - values are generator functions taking arbitrary number of kwargs
            - yield items are dictionaries with `label` and `node` keys
        t   beforet   afteri   s   (%i)s   +%di    s   -%dt   tipc         S   s   i |  d d 6|  d d 6S(   Ni    t   labeli   R"   (    (   t   i(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   <lambda>i   s    c             s     f d    D S(   Nc         3   s   |  ] }   |  Vq d  S(   N(    (   t   .0R(   (   t   data(    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pys	   <genexpr>j   s    (    (   t   map(   R+   t	   navbefore(    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR)   j   s    c             s     f d    D S(   Nc         3   s   |  ] }   |  Vq d  S(   N(    (   R*   R(   (   R+   (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pys	   <genexpr>k   s    (    (   R,   (   R+   t   navafter(    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR)   k   s    (    (    (   R&   R&   (   R   t   appendt   sortR   R   R   t   abs(   R   t   post   pagelent   limitt   targetst   ft   firstR#   (    (   R+   R.   R-   s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   genB   s.    
-1	(   t   __name__t
   __module__R   R   R   R   R8   (    (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR   *   s
   				t
   filerevnavc           B   s   e  Z d    Z d   Z RS(   c         C   s(   | j    j |  _ | j |  |  _ d S(   s   Navigation generation object

        :repo: repo object we generate nav for
        :path: path of the file we generate nav for
        N(   t
   unfilteredR   t
   _changelogt   fileR   (   R   R   R   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR   o   s    c         C   s"   t  |  j j |  j j |    S(   N(   R   R=   R"   R   t   linkrev(   R   R#   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR   z   s    (   R9   R:   R   R   (    (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR;   m   s   	c         c   s   g  |  D] } | j    t k r | ^ q }  t |   d k rW |  d j   | k rW d  Sx |  D] } i | j   d 6| j   d 6} | j   | d <| j   | d <| j   | d <| j   | d <t	 j
 | d	  r | j   | d
 <n  | Vq^ Wd  S(   Ni   i    R"   R#   t   usert   datet   descriptiont   branchR   R>   (   R"   R   t   lenR#   R   R@   RA   RB   RC   R   t   safehasattrR   (   t   siblingst   hiderevt   st   d(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt	   _siblings~   s    +( c         C   s   t  |  j   |  S(   N(   RJ   t   parents(   t   ctxt   hide(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyRK      s    c         C   s   t  |  j   |  S(   N(   RJ   t   children(   RL   RM   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyRN      s    c         C   s:   |  j    } | r6 t d | d d t | d   g Sg  S(   NR>   i    R"   i   (   t   renamedt   dictR   (   t   fctxt   r(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt
   renamelink   s    $c         C   s'   g  |  j  |  D] } i | d 6^ q S(   Nt   name(   t   nodetags(   R   R"   R(   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   nodetagsdict   s    c         C   s'   g  |  j  |  D] } i | d 6^ q S(   NRT   (   t   nodebookmarks(   R   R"   R(   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   nodebookmarksdict   s    c         C   so   g  } | j    } y |  j |  } Wn t j k
 rA d  } n X| | j   k rk | j i | d 6 n  | S(   NRT   (   RC   t	   branchtipR   t   RepoLookupErrorR   R"   R/   (   R   RL   t   branchesRC   t
   branchnode(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   nodebranchdict   s    
c         C   s{   g  } | j    } y |  j |  } Wn t j k
 rA d  } n X| d k rw | | j   k rw | j i | d 6 n  | S(   Nt   defaultRT   (   RC   RY   R   RZ   R   R"   R/   (   R   RL   R[   RC   R\   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   nodeinbranch   s    
c         C   s9   g  } |  j    } | d k r5 | j i | d 6 n  | S(   NR^   RT   (   RC   R/   (   RL   R[   RC   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   nodebranchnodefault   s
    c         k   s2   x+ |  j  |  D] } | | d | | Vq Wd  S(   Nt   tag(   RU   (   R   t   tmplt   t1R"   t   argst   t(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   showtag   s    c         k   s2   x+ |  j  |  D] } | | d | | Vq Wd  S(   Nt   bookmark(   RW   (   R   Rb   Rc   R"   Rd   Re   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   showbookmark   s    c         C   s%   | j  d  } t j |  j d |  S(   NR   t    (   t   lstripR   t	   canonpatht   root(   R   R   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt	   cleanpath   s    c         C   sW   y |  | } WnB t  j k
 rR |  j } |  | j | j | j |    } n X| S(   N(   R   t	   RepoErrort   manifestR?   R#   t   lookup(   R   t   changeidRL   t   man(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   changeidctx   s    	)c         C   s   d } d | j  k rU | j  d d } | j d  } | d k rx | | d } qx n# d | j  k rx | j  d d } n  t |  |  S(   NR&   R"   i    t   :ii   Ro   (   t   formt   findRs   (   R   t   reqRq   t   ipos(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt	   changectx   s    c         C   sY   d | j  k rU | j  d d } | j d  } | d k rU | |  } t |  |  Sn  d  S(   NR"   i    Rt   i(   Ru   Rv   Rs   R   (   R   Rw   Rq   Rx   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   basechangectx   s    
c         C   s   d | j  k r! t t d   n  t |  | j  d d  } d | j  k r^ | j  d d } n2 d | j  k r | j  d d } n t t d   y |  | | } Wn) t j k
 r |  j | d | } n X| S(   NR>   s   file not giveni    R"   t   filenodes   node or filenode not givent   fileid(   Ru   R	   R
   Rm   R   Rn   t   filectx(   R   Rw   R   Rq   RQ   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR}      s    c         c   sV   x/ | |  D]# } |  d d t  |  d | Vq Wt |  | k rR |  d  Vn  d  S(   Nt   filedifflinkR"   R>   t   fileellipses(   R   RD   (   Rb   t   filesR"   t   maxR6   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   listfilediffs   s    !c         #   s  d   } |   }   f d   }	 | rH t  j |  j |  j   |  }
 n t  j |  j |  j    }
 t j |  j d t } | d  k r | j
   } | r | d j   p t } n | j   } | j   } g  } x t j |  | | |
 d | D] } | j d  rT| rT| j   }   d d | j   d	 | d
 |	 d j |  |  Vg  } n  | j d  r| d k rd j | j t  d  } n  | j |  q W| j   }   d d | j   d	 | d
 |	 d j |  |  Vd  S(   Nc          s   s&   d }  x t  r! |  V|  d 7}  q	 Wd  S(   Ni   (   R   (   t   start(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   countgen  s    	c      
   3   s   x t  |  j t   D] \ } } d | | d f } | j d  rN d } n6 | j d  rf d } n | j d  r~ d } n d	 }   | d
 | d d | d d | Vq Wd  S(   Ns   %d.%di   t   +t   difflineplust   -t   difflineminust   @t
   difflineatt   difflinet   linet   lineids   l%st
   linenumbers   % 8s(   t	   enumeratet
   splitlinesR   t
   startswith(   t   difft   blocknot   linenot   lt   ltype(   Rb   (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   prettyprintlines  s    "				
t	   untrustedi    t   optsR   t	   diffblockt   parityR   t   linesRi   t   rawi   (   R    t   exactRl   t   getcwdt   alwaysR   t   diffoptsR   R   R   RK   R"   R   R   R   R    t   joinR   R/   (   R   Rb   RL   t   basectxR   R   t   styleR   t
   blockcountR   t   mR   RK   t   node1t   node2t   blockt   chunkR   (    (   Rb   s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   diffs   s2    		!%	c         #   s    f d         f d   } t  j d    } | d k  re  d d | | j    Vn4 x1 | j d |  D] }  d d | |  Vqx Wd S(   s>   Generator function that provides side-by-side comparison data.c            s~   | r d | p d } | | r) d | p, d 7}   d d |  d | d d | pQ d d	 | p^ d d
 d | pm d d | pz d S(   Ns   l%sRi   s   r%st   comparisonlinet   typeR   t   leftlinenumbers   % 6st   leftlinet   rightlinenumbert	   rightline(    (   R   t
   leftlinenoR   t   rightlinenoR   R   (   Rb   (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   compline6  s    	c   
      3   sZ  xS|  D]K\ } } } } } | | } | | } t  | |  } xZ t |  D]L }	   d | d | |	 d d  | |	 d | |	 d d  | |	  VqL W| | k r x t | | |  D]4 }	   d | d |	 d d  |	 d d  d d   Vq Wq | | k r xL t | | |  D]4 }	   d | d d  d d  d |	 d d  |	  VqWq q Wd  S(   NR   R   i   R   R   R   (   t   mint   xrangeR   (
   t   opcodesR   t   llot   lhit   rlot   rhit   len1t   len2t   countR(   (   R   t	   leftlinest
   rightlines(    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   getblockA  s0    




i    t   comparisonblockR   t   nN(   t   difflibt   SequenceMatcherR   t   get_opcodest   get_grouped_opcodes(   Rb   t   contextR   R   R   RH   t   oc(    (   R   R   R   Rb   s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   compare3  s     c         c   sg   t  j t j |  j |    } t  j |  \ } } } } } x! t rb | | | | | | f VqB Wd S(   s3   Generator function that provides the diffstat data.N(   R   t   diffstatdataR   t	   iterlinesR   t   diffstatsumR   (   RL   R   t   statst   maxnamet   maxtotalt   addtotalt   removetotalt   binary(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   diffstatgenb  s    !	c         C   s;   |  j    \ } } } } } } t d  t |  | | f S(   s#   Return a short summary of the diff.s5    %d files changed, %d insertions(+), %d deletions(-)
(   R    R   RD   (   t   statgenR   R   R   R   R   R   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   diffsummaryj  s    	c         #   s   | j    \ } }   } } } | j   }	   f d   }
 d } x | D] \ } } } } | |	 k rj d pm d } | | } | d 7} |  | d | j   d | d | d	 | d
 |
 |  d |
 |  d | j    VqF Wd S(   s5   Return a diffstat template for each file in the diff.c            s"     d k r d St  |     d S(   Ni    id   (   t   float(   R(   (   R   (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   pctw  s    i    t   diffstatlinkt   diffstatnolinki   R"   R>   t   filenot   totalt   addpctt	   removepctR   N(   R    R   R   (   Rb   RL   R   R   R   R   R   R   R   R   R   R   t   filenamet   addst   removest   isbinaryt   templateR   (    (   R   s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   diffstatq  s    

!t   sessionvarsc           B   s8   e  Z d  d  Z d   Z d   Z d   Z d   Z RS(   t   ?c         C   s   | |  _  | |  _ d  S(   N(   R   t   vars(   R   R   R   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR     s    	c         C   s   |  j  | S(   N(   R   (   R   t   key(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   __getitem__  s    c         C   s   | |  j  | <d  S(   N(   R   (   R   R   t   value(    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   __setitem__  s    c         C   s   t  t j |  j  |  j  S(   N(   R   t   copyR   R   (   R   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   __copy__  s    c         c   sY   |  j  } xI t |  j j    D]2 \ } } i | d 6t |  d 6| d 6Vd } q Wd  S(   NRT   R   t	   separatort   &(   R   t   sortedR   t	   iteritemst   str(   R   R   R   R   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   __iter__  s    	" (   R9   R:   R   R   R   R   R   (    (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR     s
   			t   wsgiuic           B   s   e  Z d    Z RS(   c         C   s   d S(   NiP   (    (   R   (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt	   termwidth  s    (   R9   R:   R   (    (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR     s   (0   R   R   t	   mercurialR    R   R   R   R   R   t   mercurial.i18nR   t   mercurial.nodeR   R   t   commonR	   R
   R   R   R   R   t   objectR   R;   RJ   RK   RN   RS   RV   RX   R]   R_   R`   Rf   Rh   Rm   Rs   Ry   Rz   R}   R   R   R   R   R   R   R   R   (    (    (    s;   /sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt   <module>	   sD   .	
C											
			4	/			