ó
ŸçƒQc           @   s‚   d  d l  Z  d  d l m Z d  d l Z d  d l Z d  d l Z d e f d „  ƒ  YZ d „  Z d e j	 f d „  ƒ  YZ
 e
 Z d S(   iÿÿÿÿN(   t   _t
   remotelockc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t   repo(   t   selfR   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyt   __init__   s    c         C   s   |  j  j ƒ  d  |  _  d  S(   N(   R   t   unlockt   None(   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyt   release   s    c         C   s   |  j  r |  j ƒ  n  d  S(   N(   R   R   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyt   __del__   s    	(   t   __name__t
   __module__R   R   R   (    (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR      s   		c         C   s*   t  j d |  ƒ r |  Sd |  j d d ƒ S(   s=   quote a string for the remote shell ... which we assume is shs   [a-zA-Z0-9@%_+=:,./-]*$s   '%s't   's   '\''(   t   ret   matcht   replace(   t   s(    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyt   _serverquote   s    t   sshpeerc           B   s§   e  Z e d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e	 Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z e d „ Z d „  Z d „  Z d d „ Z RS(   c   
      C   sí  | |  _  | |  _ d  |  _ |  _ |  _ t j | d t d t ƒ} | j	 d k sl | j
 sl | j d  k r |  j t j t d ƒ | ƒ ƒ n  | j |  _ | j d  k	 rÉ |  j t j t d ƒ ƒ ƒ n  | j
 |  _
 | j |  _ | j pí d |  _ |  j j d d d ƒ } |  j j d d d	 ƒ } t j | |  j
 |  j |  j ƒ } | rÓd
 | | t j d t | ƒ t |  j ƒ f ƒ f } | j t d ƒ | ƒ t j | ƒ }	 |	 d k rÓ|  j t j t d ƒ ƒ ƒ qÓn  |  j | | | | ƒ d  S(   Nt
   parsequeryt   parsefragmentt   sshs   couldn't parse location %ss   password in URL not supportedt   .t   uit	   remotecmdt   hgs   %s %s %ss
   %s init %ss   running %s
i    s   could not create remote repo(   t   _urlR   R   t   pipeot   pipeit   pipeet   utilt   urlt   Falset   schemet   hostt   patht   _abortt   errort	   RepoErrorR    t   usert   passwdt   portt   configt   sshargst
   shellquoteR   t   notet   systemt   validate_repo(
   R   R   R"   t   createt   ut   sshcmdR   t   argst   cmdt   res(    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR      s0    		(#!		#"c         C   s   |  j  S(   N(   R   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR   =   s    c   
      C   sÌ  |  j  ƒ  d | | t j d t | ƒ t |  j ƒ f ƒ f } | j t d ƒ | ƒ t j | ƒ } t j | ƒ \ |  _	 |  _
 |  _ |  _ |  j d ƒ |  j d d d d d	 d d	 f ƒ} d
 d g } d } x– | d rN| rN| j ƒ  }	 |  j ƒ  | d d k r|	 d k rPn  |	 r4| j d |	 ƒ n  | j |	 ƒ | d 8} qÕ W|  j t j t d ƒ ƒ ƒ t ƒ  |  _ xN t | ƒ D]@ }	 |	 j d ƒ r„|  j j |	 d  j d ƒ d j ƒ  ƒ Pq„q„Wd  S(   Ns   %s %s %ss   %s -R %s serve --stdios   running %s
t   hellot   betweent   pairss   %s-%st   0i(   t    t   dummyiô  iÿÿÿÿs   1
s   
s   remote: i   s#   no suitable response from remote hgs   capabilities:t   :(   t   cleanupR   R+   R   R"   R,   R    t   quotecommandt   popen4R   R   R   t
   subprocesst   _callstreamt   readlinet   readerrt   debugt   appendR#   R$   R%   t   sett   _capst   reversedt
   startswitht   updatet   split(
   R   R   R1   R2   R   R3   t   rt   linest	   max_noiset   l(    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR.   @   s4    
		#''
'c         C   s   |  j  S(   N(   RF   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyt   _capabilitiesf   s    c         C   s…   x~ t  r€ t j |  j ƒ j } | d k r. Pn  |  j j | ƒ } | sJ Pn  x0 | j ƒ  D]" } |  j j t	 d ƒ | d ƒ qW Wq Wd  S(   Ni    s   remote: s   
(
   t   TrueR   t   fstatR   t   st_sizet   readt
   splitlinesR   t   statusR    (   R   t   sizeR   RN   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyRB   i   s    	c         C   s   |  j  ƒ  | ‚ d  S(   N(   R<   (   R   t	   exception(    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR#   t   s    
c         C   s‰   |  j  d  k r d  S|  j  j ƒ  |  j j ƒ  y1 x* |  j D] } |  j j t d ƒ | ƒ q: WWn t t	 f k
 rw n X|  j j ƒ  d  S(   Ns   remote: (
   R   R   t   closeR   R   R   RU   R    t   IOErrort
   ValueError(   R   RN   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR<   x   s    !c         K   sS  |  j  j d | ƒ |  j j d | ƒ t j | \ } } | j ƒ  } i  } x= | D]5 } | d k rt | | d <PqT | | | | <| | =qT Wx¯ t | j ƒ  ƒ D]› \ } } |  j j d | t	 | ƒ f ƒ t
 | t ƒ r+x] | j ƒ  D]< \ }	 }
 |  j j d |	 t	 |
 ƒ f ƒ |  j j |
 ƒ qè Wq  |  j j | ƒ q  W|  j j ƒ  |  j S(   Ns   sending %s command
s   %s
t   *s   %s %d
(   R   RC   R   t   writet	   wireprotot   commandsRJ   t   sortedt	   iteritemst   lent
   isinstancet   dictt   flushR   (   R   R3   R2   t   _funct   namest   keyst   wireargst   kt   vt   dkt   dv(    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR@   ‡   s(    
  c         K   s   |  j  | |  |  j ƒ  S(   N(   R@   t   _recv(   R   R3   R2   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyt   _call    s    c         K   s”   |  j  | |  } | r" d | f Sx0 t rT | j d ƒ } | sD Pn  |  j | ƒ q% W|  j d d t ƒ|  j ƒ  } | r„ d | f S|  j ƒ  d f S(   NR9   i   Rd   (   Rn   RP   RS   t   _sendRm   (   R   R3   t   fpR2   RK   t   d(    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyt	   _callpush¤   s    
	
c         C   s   | S(   N(    (   R   t   stream(    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyt   _decompress³   s    c         C   sú   |  j  j ƒ  } | d k r g  } x9 t r\ |  j j ƒ  } | d k rI Pn  | j | g ƒ q$ Wt | ƒ d k r„ | d d  | d <n  |  j t j | Œ  ƒ n  |  j	 ƒ  y t
 | ƒ } Wn0 t k
 ré |  j t j t d ƒ | ƒ ƒ n X|  j  j | ƒ S(   Ns   
s   -
i    iÿÿÿÿs   unexpected response:(   R   RA   RP   R   t   extendRa   R#   R$   t   OutOfBandErrorRB   t   intRZ   t   ResponseErrorR    RS   (   R   RN   t   errt   line(    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyRm   ¶   s"    	
#c         C   sW   |  j  j d t | ƒ ƒ | r3 |  j  j | ƒ n  | rI |  j  j ƒ  n  |  j ƒ  d  S(   Ns   %d
(   R   R\   Ra   Rd   RB   (   R   t   dataRd   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyRo   Ê   s    c         C   s   |  j  d ƒ t |  ƒ S(   Nt   lock(   Rn   R   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR|   Ò   s    c         C   s   |  j  d ƒ d  S(   NR   (   Rn   (   R   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR   Ö   s    c         C   sê   |  j  d ƒ } | r8 |  j t j t d ƒ | ƒ ƒ n  x= t rw | j d ƒ } | sZ Pn  |  j j | ƒ |  j	 ƒ  q; W|  j j
 ƒ  |  j	 ƒ  |  j ƒ  } | s¥ d Sy t | ƒ SWn0 t k
 rå |  j t j t d ƒ | ƒ ƒ n Xd S(   s”   Send a changegroup to the remote server.  Return an integer
        similar to unbundle(). DEPRECATED, since it requires locking the
        remote.t   addchangegroups   push refused: %si   i   s   unexpected response:N(   Rn   R#   R$   R%   R    RP   RS   R   R\   RB   Rd   Rm   Rw   RZ   Rx   (   R   t   cgt   sourceR   R|   Rq   RK   (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR}   Ù   s$    #	
N(   R	   R
   R   R   R   R.   RO   RB   R#   R<   R   R@   Rn   Rr   Rt   Rm   Ro   R|   R   R   R}   (    (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyR      s"    		&											(   R   t   i18nR    R   R$   R]   t   objectR   R   t   wirepeerR   t   instance(    (    (    s5   /sys/lib/python2.7/site-packages/mercurial/sshpeer.pyt   <module>   s   $
	Ö