ó
ŸçƒQc           @   sž   d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d „  Z	 d „  Z
 d „  Z e a d „  Z e d „ Z d S(   iÿÿÿÿ(   t   _Nc      
   C   sT  |  j  t d ƒ | | f ƒ t j ƒ  } | } t j | d ƒ s | j d ƒ }	 |	 d k r~ t j t d ƒ | | f ƒ ‚ n  | |	  }
 t j } t j	 ƒ  rá t
 j j |
 ƒ \ } } | rá | rá t j | g t _ | }
 qá n  y$ t j ƒ  t |
 ƒ } t j ƒ  Wnô t k
 rût j t j t j f } y t d |
 ƒ } t j ƒ  Wqüt k
 r÷t j ƒ  t j t j t j f } |  j rœ|  j t d ƒ ƒ n  |  j | ƒ |  j rÈ|  j t d ƒ ƒ n  |  j | ƒ t j t d	 ƒ | |
 f ƒ ‚ qüXn X| t _ y1 x* | j d ƒ d
 D] } t | | ƒ } qWWn0 t k
 rht j t d ƒ | | f ƒ ‚ n Xt j | d ƒ s t j t d ƒ | | f ƒ ‚ q n  zú y` t j t j t j f } |  j |  j |  j t _ t _ t _ | d |  d | d | |  } Wn“ t k
 r‚  n€ t  k
 r˜} t! | t j ƒ ra|  j t d ƒ | | j" d f ƒ n |  j t d ƒ | | f ƒ | rŠ‚  n  |  j ƒ  t# SXWd | \ t _ t _ t _ t j ƒ  | } | } t! | t$ j% ƒ rô| j& d | j' } n  |  j( d d | | | ƒ X| rP| r6t j t d ƒ | ƒ ‚ n  |  j t d ƒ | ƒ n  | S(   sŸ  call python hook. hook is callable object, looked up as
    name in python module. if callable returns "true", hook
    fails, else passes. if hook raises exception, treated as
    hook failure. exception propagates if throw is "true".

    reason for "true" meaning "hook failed" is so that
    unmodified commands (e.g. mercurial.commands.update) can
    be run as hooks without wrappers to convert return values.s   calling hook %s: %s
t   __call__t   .iÿÿÿÿs)   %s hook is invalid ("%s" not in a module)s   hgext_%ss,   exception from first failed import attempt:
s-   exception from second failed import attempt:
s*   %s hook is invalid (import of "%s" failed)i   s(   %s hook is invalid ("%s" is not defined)s)   %s hook is invalid ("%s" is not callable)t   uit   repot   hooktypes   error: %s hook failed: %s
i    s'   error: %s hook raised an exception: %s
Nt
   pythonhooks,   pythonhook-%s: %s finished in %0.2f seconds
s   %s hook faileds   warning: %s hook failed
()   t   noteR    t   timet   utilt   safehasattrt   rfindt   Abortt   syst   patht
   mainfrozent   ost   splitt   demandimportt   disablet
   __import__t   enablet   ImportErrort   exc_typet	   exc_valuet   exc_tracebackt   tracebackflagt   warnt	   tracebackt   getattrt   AttributeErrort   stdoutt   stderrt   stdint   foutt   ferrt   fint   KeyboardInterruptt	   Exceptiont
   isinstancet   argst   Truet   typest   FunctionTypet
   __module__t   __name__t   log(   R   R   t   namet   hnamet   funcnameR(   t   throwt	   starttimet   objt   dt   modnamet   oldpathst   modpatht   modfilet   e1t   e2t   pt   oldt   rt   exct   durationt   readablefunc(    (    s2   /sys/lib/python2.7/site-packages/mercurial/hook.pyt   _pythonhook   s”    

	

			&"
	c      	   C   sÒ  |  j  t d ƒ | | f ƒ t j ƒ  } i  } x‹ | j ƒ  D]} \ } }	 t j |	 d ƒ rf |	 ƒ  }	 n  t |	 t ƒ r¥ d d j d „  t	 |	 j ƒ  ƒ Dƒ ƒ d }	 n  |	 | d | j
 ƒ  <q< W| rÏ | j }
 n t j ƒ  }
 d | k r| d j d	 ƒ rt j | d
 | d |
 d |  ƒ} n$ t j | d
 | d |
 d |  j ƒ} t j ƒ  | } |  j d d | | | ƒ | rÎt j | ƒ \ } } | r®t j t d ƒ | | f ƒ ‚ n  |  j t d ƒ | | f ƒ n  | S(   Ns   running hook %s: %s
R   t   {s   , c         s   s   |  ] } d  | Vq d S(   s   %r: %rN(    (   t   .0t   i(    (    s2   /sys/lib/python2.7/site-packages/mercurial/hook.pys	   <genexpr>y   s    t   }t   HG_t   HG_URLs   remote:httpt   environt   cwdt   outt   exthooks)   exthook-%s: %s finished in %0.2f seconds
s
   %s hook %ss   warning: %s hook %s
(   R   R    R   t	   iteritemsR	   R
   R'   t   dictt   joint   sortedt   uppert   rootR   t   getcwdt
   startswitht   systemR"   R.   t   explainexitR   R   (   R   R   R/   t   cmdR(   R2   R3   t   envt   kt   vRJ   R>   R@   t   desc(    (    s2   /sys/lib/python2.7/site-packages/mercurial/hook.pyt   _exthookm   s2    &
$$" c   	      C   s    g  } xh |  j  d ƒ D]W \ } } | j d ƒ s |  j d d | d ƒ } | j | t | ƒ | | f ƒ q q Wg  t | ƒ D] \ } } } } | | f ^ q~ S(   Nt   hookst   prioritys   priority.%si    (   t   configitemsRT   t	   configintt   appendt   lenRP   (	   R   R]   R/   RW   R^   R<   t   oRY   RZ   (    (    s2   /sys/lib/python2.7/site-packages/mercurial/hook.pyt	   _allhooks   s    'c         C   s
   |  a  d  S(   N(   t	   _redirect(   t   state(    (    s2   /sys/lib/python2.7/site-packages/mercurial/hook.pyt   redirect™   s    c         K   s  |  j  s t St } d } z:x3t |  ƒ D]%\ } } | j d ƒ d | k s) | r[ q) n  | d k ró t ró yi t j j ƒ  }	 t j j ƒ  }
 |	 d k rÕ |
 d k rÕ t j j	 ƒ  t
 j |	 ƒ } t
 j |
 |	 ƒ n  Wqó t t f k
 rï qó Xn  t j | d ƒ r,t |  | | | | | | ƒ p&| } q) | j d ƒ r-| j d ƒ d k rö| d j d d	 ƒ \ } } t j | ƒ } | rœt
 j j | j | ƒ } n  y t j | d
 | ƒ } Wn+ t k
 rã|  j t d ƒ | ƒ ‚  n Xt | | ƒ } n | d j ƒ  } t |  | | | | | | ƒ p'| } q) t  |  | | | | | ƒ pK| } q) WWd  t rˆ| d k rˆt
 j | |	 ƒ t
 j! | ƒ n  X| S(   NiÿÿÿÿR   i    R   s   python:t   :i   i   i   s	   hghook.%ss   loading %s hook failed:
("   t	   callhookst   FalseRd   R   Re   R   t
   __stdout__t   filenot
   __stderr__t   flushR   t   dupt   dup2t   OSErrorR   R	   R
   RB   RT   t   countt   rsplitt
   expandpathR   RO   RR   t
   extensionst   loadpathR&   t   writeR    R   t   stripR\   t   close(   R   R   R/   R2   R(   R>   t	   oldstdoutR0   RW   t   stdoutnot   stderrnoR   t   modt   hookfn(    (    s2   /sys/lib/python2.7/site-packages/mercurial/hook.pyt   hook   sN    	 '')(   t   i18nR    R   R   R   R*   Ru   R	   R   RB   R\   Rd   Rj   Re   Rg   R   (    (    (    s2   /sys/lib/python2.7/site-packages/mercurial/hook.pyt   <module>   s   0$	a	#		