ó
a˜Qc           @   sŽ   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z d Z	 d Z
 d e f d „  ƒ  YZ d „  Z d	 „  Z d S(
   iÿÿÿÿN(   t   utilt	   wireproto(   t   HTTP_OKs   application/mercurial-0.1s   application/hg-errort   webprotoc           B   sP   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   s   | |  _  d |  _ | |  _ d  S(   Nt    (   t   reqt   responset   ui(   t   selfR   R   (    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   __init__   s    		c         C   s¿   |  j  ƒ  } i  } | j ƒ  } xƒ | D]{ } | d k rŽ i  } xA | j ƒ  D]3 } | d k rJ | | k rJ | | d | | <qJ qJ W| | d <q% | | d | | <q% Wg  | D] } | | ^ q« S(   Nt   *t   cmdi    (   t   _argst   splitt   keys(   R   t   argst	   knownargst   dataR   t   kt   start   key(    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   getargs   s    c         C   sš   |  j  j j ƒ  } g  } d } xP t rp |  j  j j d t | ƒ ƒ } | d  k rV Pn  | | g 7} | d 7} q! W| j t	 j
 d j | ƒ d t ƒƒ | S(   Ni   t   HTTP_X_HGARG_R   t   keep_blank_values(   R   t   formt   copyt   Truet   envt   gett   strt   Nonet   updatet   cgit   parse_qst   join(   R   R   t   chunkst   it   h(    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyR   "   s    	%c         C   sJ   t  |  j j d ƒ } x- t j |  j d | ƒD] } | j | ƒ q/ Wd  S(   Nt   CONTENT_LENGTHt   limit(   t   intR   R   R    t   filechunkitert   write(   R   t   fpt   lengtht   s(    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   getfile.   s    c         C   s;   |  j  j |  j  j f |  _ t j ƒ  |  j  _ |  j  _ d  S(   N(   R   t   foutt   ferrt   oldiot	   cStringIOt   StringIO(   R   (    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   redirect2   s    c         C   s1   |  j  j j ƒ  } |  j \ |  j  _ |  j  _ | S(   N(   R   R/   t   getvalueR1   R0   (   R   t   val(    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   restore5   s    c         c   sO   t  j ƒ  } x1 t r? | j d ƒ } | s. Pn  | j | ƒ Vq W| j ƒ  Vd  S(   Ni   (   t   zlibt   compressobjR   t   readt   compresst   flush(   R   t   cgt   zt   chunk(    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   groupchunks9   s    	c         C   s\   d |  j  j j d ƒ p d t j |  j  j j d d ƒ ƒ t j |  j  j j d d ƒ ƒ f S(   Ns   remote:%s:%s:%ss   wsgi.url_schemet   httpt   REMOTE_HOSTR   t   REMOTE_USER(   R   R   R   t   urllibt   quote(   R   (    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   _clientA   s    (
   t   __name__t
   __module__R	   R   R   R.   R4   R7   R@   RF   (    (    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyR      s   							c         C   s   |  t  j k S(   N(   R   t   commands(   R   (    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   iscmdG   s    c         C   sJ  t  | |  j ƒ } t j |  | | ƒ } t | t ƒ rP | j t t d | ƒg  St | t j	 ƒ ry | j t t ƒ | j
 St | t j ƒ rÄ | j ƒ  } d | j | f } | j t t d | ƒg  St | t j ƒ r| j ƒ  | j ƒ  d | j } | j t t d | ƒg  St | t j ƒ rF| j } | j t t d | ƒg  Sd  S(   Nt   bodys   %d
%ss   0
%s
(   R   R   R   t   dispatcht
   isinstanceR   t   respondR   t   HGTYPEt	   streamrest   gent   pushresR7   t   rest   pusherrt   draint   ooberrort   messaget	   HGERRTYPE(   t   repoR   R   t   pt   rspR6   (    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   callJ   s.    

	(   R    R2   R8   RD   t	   mercurialR    R   t   commonR   RO   RX   t   objectR   RJ   R\   (    (    (    s<   /sys/lib/python2.7/site-packages/mercurial/hgweb/protocol.pyt   <module>   s   08	