ó
U³úVc           @@  s¬   d  d l  m Z d  d l Z d  d l Z d  d l Z d d l m Z d d l m Z m	 Z	 m
 Z
 m Z d „  Z d „  Z d „  Z e a d	 „  Z e d
 „ Z e d „ Z d S(   i    (   t   absolute_importNi   (   t   _(   t   demandimportt   errort
   extensionst   utilc      
   C@  s  t  | ƒ r) | } | j d | j } nA| j d ƒ } | d k rf t j t d ƒ | | f ƒ ‚ n  | |  }	 t j }
 t	 j
 ƒ  rÉ t j j |	 ƒ \ } } | rÉ | rÉ t j | g t _ | }	 qÉ n  t j ƒ  ø y t |	 ƒ } Wnà t k
 rÈt j t j t j f } y t d |	 ƒ } WqÉt k
 rÄt j t j t j f } |  j ri|  j t d ƒ ƒ n  |  j | ƒ |  j r•|  j t d ƒ ƒ n  |  j | ƒ t j t d ƒ | |	 f ƒ ‚ qÉXn XWd QX|
 t _ y1 x* | j d ƒ d	 D] } t | | ƒ } qïWWn0 t k
 r;t j t d
 ƒ | | f ƒ ‚ n Xt  | ƒ sjt j t d ƒ | | f ƒ ‚ n  |  j t d ƒ | | f ƒ t j ƒ  } zí y` t j t j t j f } |  j |  j |  j  t _ t _ t _ | d |  d | d | |  } Wn† t! k
 r~} t" | t j# ƒ rA|  j t d ƒ | | j$ d f ƒ n |  j t d ƒ | | f ƒ | rj‚  n  |  j ƒ  t% t% f SXWd | \ t _ t _ t _ t j ƒ  | } |  j& d d | | | ƒ X| r| rít j' t d ƒ | ƒ ‚ n  |  j t d ƒ | ƒ n  | t( f 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.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)Ni   s(   %s hook is invalid ("%s" is not defined)s)   %s hook is invalid ("%s" is not callable)s   calling hook %s: %s
t   uit   repot   hooktypes   error: %s hook failed: %s
i    s'   error: %s hook raised an exception: %s
t
   pythonhooks,   pythonhook-%s: %s finished in %0.2f seconds
s   %s hook faileds   warning: %s hook failed
()   t   callablet
   __module__t   __name__t   rfindR   t   HookLoadErrorR   t   syst   pathR   t
   mainfrozent   ost   splitR   t   deactivatedt
   __import__t   ImportErrort   exc_typet	   exc_valuet   exc_tracebackt   tracebackflagt   warnt	   tracebackt   getattrt   AttributeErrort   notet   timet   stdoutt   stderrt   stdint   foutt   ferrt   fint	   Exceptiont
   isinstancet   Abortt   argst   Truet   logt	   HookAbortt   False(   R   R   t   namet   hnamet   funcnameR+   t   throwt   objt   dt   modnamet   oldpathst   modpatht   modfilet   e1t   e2t   pt	   starttimet   oldt   rt   exct   duration(    (    s2   /usr/lib/python2.7/dist-packages/mercurial/hook.pyt   _pythonhook   sŽ    
	
							 &"
c         C@  sÍ  |  j  t d ƒ | | f ƒ t j ƒ  } i  } | d  k	 r| | j ƒ  } | j j | ƒ | r| | j ƒ  r| | j | d <q| n  x… | j	 ƒ  D]w \ }	 }
 t
 |
 ƒ r­ |
 ƒ  }
 n  t |
 t ƒ rì d d j d „  t |
 j	 ƒ  ƒ Dƒ ƒ d }
 n  |
 | d |	 j ƒ  <q‰ W| r| j } n t j ƒ  } |  j | d | d	 | ƒ} 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
t
   HG_PENDINGt   {s   , c         s@  s   |  ] } d  | Vq d S(   s   %r: %rN(    (   t   .0t   i(    (    s2   /usr/lib/python2.7/dist-packages/mercurial/hook.pys	   <genexpr>ˆ   s    t   }t   HG_t   environt   cwdt   exthooks)   exthook-%s: %s finished in %0.2f seconds
s
   %s hook %ss   warning: %s hook %s
(   R    R   R!   t   Nonet   currenttransactiont   dirstatet   writet   writependingt   roott	   iteritemsR   R)   t   dictt   joint   sortedt   upperR   t   getcwdt   systemR-   R   t   explainexitR   R.   R   (   R   R   R0   t   cmdR+   R3   R=   t   envt   trt   kt   vRJ   R?   RA   t   desc(    (    s2   /usr/lib/python2.7/dist-packages/mercurial/hook.pyt   _exthookt   s8    &
" 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   configitemst
   startswitht	   configintt   appendt   lenRU   (	   R   Ra   R0   RZ   Rb   R<   t   oR]   R^   (    (    s2   /usr/lib/python2.7/dist-packages/mercurial/hook.pyt	   _allhooksœ   s    'c         C@  s
   |  a  d  S(   N(   t	   _redirect(   t   state(    (    s2   /usr/lib/python2.7/dist-packages/mercurial/hook.pyt   redirect¥   s    c   
      K@  s¸   |  j  s t Sg  } xO t |  ƒ D]A \ } } | j d ƒ d | k r  | r  | j | | f ƒ q  q  Wt |  | | | d | | } t }	 x( | D]  \ } } | | d p­ |	 }	 q W|	 S(   NR   i    R3   (   t	   callhooksR/   Ri   R   Rf   t   runhooks(
   R   R   R0   R3   R+   Ra   R1   RZ   t   resR?   (    (    s2   /usr/lib/python2.7/dist-packages/mercurial/hook.pyt   hook©   s    	c      	   K@  sk  i  } d } z%x| D]\ } }	 | 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 |	 ƒ rí t |  | | | |	 | | ƒ \ } } n"|	 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 |  | | | | | | ƒ \ } } n! t |  | | |	 | | ƒ } t } | | f | | <t j j ƒ  q WWd  t  rf| d k rft j | |
 ƒ t j | ƒ n  X| S(
   Niÿÿÿÿi    s   python:t   :i   i   i   s	   hghook.%ss   loading %s hook failed:
(    Rj   R   t
   __stdout__t   filenot
   __stderr__t   flushR   t   dupt   dup2t   OSErrorR   R   RB   Rd   t   countt   rsplitR   t
   expandpathR   RT   RQ   R   t   loadpathR(   RO   R   R   t   stripR`   R/   R#   t   close(   R   R   R0   Ra   R3   R+   Ro   t	   oldstdoutR1   RZ   t   stdoutnot   stderrnoR?   t   raisedR   t   modt   hookfn(    (    s2   /usr/lib/python2.7/dist-packages/mercurial/hook.pyRn   ¸   sN    '(   t
   __future__R    R   R   R!   t   i18nR   t    R   R   R   R   RB   R`   Ri   R/   Rj   Rl   Rp   Rn   (    (    (    s2   /usr/lib/python2.7/dist-packages/mercurial/hook.pyt   <module>   s   "	^	(		