ó
ë’Sc           @€  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 Z d  d l Z d  d l	 Z	 d  d l	 m
 Z
 d  d l m Z d  d l m Z m Z m Z d  d l m Z d d	 l m Z d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d d „ Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   with_statementN(   t   StringIO(   t   hook(   t   FLAVORS(   t   dbt   customt	   structure(   t   formati   (   t   sharet   InvalidCommitc           B€  s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR	      s   t   format_handlerc           B€  s8   e  Z d  „  Z d d „ Z d „  Z d „  Z d „  Z RS(   c         C€  s(   | |  _  | |  _ | |  _ t |  _ d  S(   N(   t   catt   cwdt   is_toplevelt   Falset
   saw_parent(   t   selfR   R   R   (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   __init__   s    			c         C€  sf   | d  k	 rV t j | ƒ } t j | ƒ } | d  k rF | j | ƒ qV | j | ƒ n  t ƒ  |  _ d  S(   N(   t   NoneR   t   get_elementt   create_childt
   set_parentt   sett   present_props(   R   t   et   parentt   paret   elm(    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   start_element   s    c         C€  sI   t  j | ƒ } x3 | j ƒ  D]% } | |  j k r | j | ƒ q q Wd S(   s&   Remove any props that weren't present.N(   R   R   t
   list_propsR   t   remove_prop(   R   R   R   t   pname(    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   end_element$   s    c         C€  s"  | d k rŠ |  j  s( t d | ƒ ‚ n  t j | ƒ } t j | ƒ } | d  k rd | j | ƒ } n | j | ƒ | j d ƒ t |  _	 n” |  j  r¶ |  j	 r¶ t d | | f ƒ ‚ n  |  j
 j | ƒ t | t j ƒ rí | j } | j } n | j d ƒ } d } t j | ƒ j | | | ƒ d  S(   Nu   parents0   'parent' specified in non-toplevel element '%s'!u   toplevels?   'parent' not specified at start of toplevel element %s/%s.yaml!s   utf-8t   creole(   R   R	   R   R   R   R   R   t   set_orgmodet   TrueR   R   t   addt
   isinstanceR   t   Includet   extt   valt   encodet   set_prop(   R   R   t   pt   contentsR   R   t   fmt(    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   prop+   s*    		c         C€  s?   y# |  j  t j j |  j | ƒ ƒ SWn t j k
 r: d  SXd  S(   N(   R   t   ost   patht   joinR   t   pysvnt   ClientErrorR   (   R   R2   (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   get_includeE   s    #N(   R
   R   R   R   R   R"   R0   R6   (    (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR      s
   	
		t   prop_handlerc           B€  s&   e  Z d d  „ Z d „  Z d „  Z RS(   c         C€  sA   | d  k s t ‚ t j | ƒ } | d  k r= t j | ƒ n  d  S(   N(   R   t   AssertionErrorR   t   get_propt   create_prop(   R   R-   R   R0   (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR   M   s    c         C€  s   d  S(   N(    (   R   R-   (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR"   S   s    c         C€  s0   t  t j | ƒ d | ƒ t j | | ƒ ƒ d  S(   Nt   set_(   t   getattrR   R9   R   t   interpret_as_prop(   R   R-   t   aR.   (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR0   V   s    N(   R
   R   R   R   R"   R0   (    (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR7   L   s   	c         €  s   ‡  f d †  } | S(   Nc         €  sm   d d ˆ  |  g } t  j | d t  j d t  j ƒ} | j ƒ  \ } } | j d k ri t | j | ƒ ‚ n  | S(   Nt   svnlookR   t   stdoutt   stderri    (   t
   subprocesst   Popent   PIPEt   communicatet
   returncodet   EnvironmentError(   R2   t   cmdR-   t   outt   err(   t   repos(    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR   [   s    (    (   RK   R   (    (   RK   sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   make_svnlook_catZ   s    c         €  s   t  ‡  ‡ f d † } | S(   Nc         €  s¿   d d ˆ  g } ˆ d  k	 r. | d ˆ g 7} n  | |  d g 7} | rT | j d ƒ n  t j | d t j d t j ƒ} | j ƒ  \ } } | j d k r« t | j | ƒ ‚ n  d	 „  | j ƒ  Dƒ S(
   NR?   t   trees   -ts   --full-pathss   --non-recursiveR@   RA   i    c         s€  s   |  ] } t  | d  ƒ Vq d S(   s   utf-8N(   t   unicode(   t   .0R-   (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pys	   <genexpr>r   s    (	   R   t   appendRB   RC   RD   RE   RF   RG   t   split(   R2   t   non_recursiveRH   R-   RI   RJ   (   RK   t   transid(    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyRM   f   s    (   R   (   RK   RS   RM   (    (   RK   RS   sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   make_svnlook_treee   s    c         c€  sA   x: d |  k r< |  j  d d ƒ \ }  } t j |  IJ|  Vq Wd  S(   Nt   /i   (   t   rsplitt   sysRA   (   R2   t   chopped(    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   prefixesu   s    c      	   €  s…   t  j d IJt j |  | ƒ ‰  ˆ  j d ƒ } ˆ  j d ƒ } | j d ƒ rP d  St ˆ  j ƒ  | d ‡  f d †  d t |  | ƒ ƒd  S(   Ns   Starting...s
   svn:authors   svn:logs   Web EditR   c         €  s   ˆ  j  |  ƒ S(   N(   R   (   t   f(   t   trans(    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   <lambda>‰   s    RM   (	   RW   RA   R4   t   Transactiont
   revpropgett
   startswitht   apply_changest   changedRT   (   RK   RS   t   usernamet   log_message(    (   R[   sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt	   precommit{   s    !c   %      €  sy
  ‡  f d †  t  j _ t j ƒ  t t j k r: d  t _ n  g  } g  } t ƒ  } t ƒ  } t	 j
 ƒ  
t |  ƒ } x|  D]}	 | |	 \ }
 } } } | t j j k rÇ|
 d k rx| |	 ƒ D]P } | j d ƒ rí | d  } t j j } n t j j } |
 | t t f | | <q¿ Wq||
 d k r||	 j d d ƒ d } t j | ƒ } | d  k	 rÄd |	 | f } t j | ƒ | k rÁxC | g | j ƒ  D]+ } |
 t j j t t f | t j | ƒ <qŒWqÁqÄq|qx | t j j k rx |	 j d ƒ rx |	 j d d ƒ d	 } | | k s| | d	 d k r|xW | | d
 t ƒD]@ } | j d ƒ r2| | k r2d t j j t t f | | <q2q2Wq|qx qx W| j ƒ  } | j ƒ  | j d d „  ƒ | j d d „  ƒ | j d d „  ƒ | j d d „  ƒ t j d I| IJi  } xI d „  | Dƒ D]7 } t j | ƒ } | d  k	 rt j | ƒ | | <qqWx¬t | ƒ d	 k rõ| j d	 ƒ }	 | |	 \ }
 } } } t j d |
 |	 | f IJ|	 j d ƒ } t | ƒ d k oÑ| d | d d k } t } t | ƒ d	 k r|
 d) k sJt ‚ qJn  | d j d d ƒ d d k sJt | ƒ d k sJd | d	 k sJd | d	 k r\qJn  | t j j k stt ‚ | d	 d k r¶t | ƒ d k rœqJn  | d d  } t j  } n# | d j d d ƒ d	 } t j! } |
 d k rí| t j  k r| j" | ƒ qò| d k rt# d ƒ ‚ n  t | ƒ d k rN| rNt j | d ƒ } n^ t | ƒ d k r|| r|t j | d ƒ } n0 | r”t | ƒ d k s¦t | | f ƒ ‚ d  } | d  k	 rÚ| j$ | k rÚ| j% | j$ ƒ n  | j& d	 |	 ƒ qJ|
 d* k st |
 ƒ ‚ | t j! k rAt | ƒ d k  rA| rA| d k rAt } n  |
 d k rx| t j! k rx| s‡t | ƒ d k szt ‚ | d } n; | d | k st ‚ t | ƒ d k r¼| d } n d  } | d  k	 rt j | ƒ } | d  k rt# d | | f ƒ ‚ qn d  } t j | ƒ } | d  k ra| d  k	 rB| j' | ƒ qÿ| d k rÿt j( | ƒ qÿnž | | } | | k r‡| j) | ƒ nU | | k r·| | d	 d k r·| j) | ƒ n% |	 | k rÜt# d  |	 | f ƒ ‚ n  | sÿ| j* d! ƒ | j+ | ƒ n  | s1| j% | ƒ | | k r1| j) | ƒ q1n  | rxt | ƒ d k rx| j% | ƒ | | k ru| j) | ƒ quqxn  t, j- d" ƒ t. | |	 ƒ ƒ ƒ }  | t j  k rÄt/ j0 |	 t1 ƒ  d# |  ƒqJt/ j0 |	 t2 | t3 j4 j5 |	 ƒ | ƒ d# |  ƒqJWx™ | D]‘ }! |! j d d ƒ d j d d ƒ d	 } t j d$ | IJt j | ƒ } t	 j6 | ƒ | | k rr	| j) | ƒ n  | | k rý| j) | ƒ qýqýWx$ | D] } t	 j7 t j8 | ƒ ƒ q™	WxC | D]; }" t t j9 |" ƒ ƒ d	 k rÀ	t# d% |" f d& ƒ ‚ qÀ	qÀ	WxC | D]; }# t t j9 |# ƒ ƒ d	 k r
t# d' |" f d& ƒ ‚ q
q
Wt j d ƒ }$ |$ d  k ro
t# d( ƒ ‚ n  Wd  QXd  S(+   Nc           €  s   ˆ  S(   N(    (    (   Rb   (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR\      s    t   ARU   iÿÿÿÿt   Di   s
   %s/%s.yamls   .yamli    RR   t   Rt   keyc         S€  s=   |  j  d ƒ d k  p< |  j d ƒ d |  j d ƒ d d k S(   NRU   i   iÿÿÿÿiþÿÿÿs   .yaml(   t   countRQ   (   t   s(    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR\   À   s    c         S€  s   |  j  d ƒ S(   NRU   (   Ri   (   Rj   (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR\   Á   s    c         S€  s   |  j  d ƒ S(   Ns   Object/(   R_   (   Rj   (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR\   Â   s    c         S€  s   |  j  d ƒ S(   Ns   props/(   R_   (   Rj   (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR\   Ã   s    s   Keys: c         s€  sT   |  ]J } | j  d  ƒ r | j d ƒ r | j d d ƒ d j d  d ƒ d Vq d S(   s   .yamls   props/RU   i   iÿÿÿÿi    N(   t   endswithR_   RV   (   RO   t   k(    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pys	   <genexpr>É   s   s   Considering %s %s... (%s)i   iþÿÿÿt   .t   yamlt    t   propsiûÿÿÿu   Objects"   You can't delete the root element.i   iýÿÿÿs'   Parent '%s' for element '%s' undefined!sR   Path '%s' added, but the exising location for this element, '%s', was not removed!u   normals   utf-8t   infs   Deleting element %s.sF   If %s has no kids, it needs to be in the form %s.yaml, not %s/%s.yaml!i   sW   If %s has kids and is not toplevel, it needs to be in the form %s/%s.yaml, not %s.yaml!s   No root element Object!(   Re   Rg   (   Re   Rg   (:   t   bazsvnR   t   get_usernameR   t   make_svndrivenR   t   version_control_hookR   R   R   t   begin_transactiont   dictR4   t	   node_kindt   dirRk   t   fileR%   R   RV   R   R   t   _elementpatht   get_descendantst   keyst   sortRW   RA   t   lent   popRQ   R8   t   Propt   ElementRP   R	   t   enameR&   t   insertR   t   create_root_elementt   removeR$   R   t   codecst	   getreaderR   R   t   parseR7   R   R1   R2   t   dirnamet   edeletet   pdeleteR9   t   get_children(%   t   orig_changesRb   R   RM   t   delfilest   delpropst	   needskidst   needsnokidst   changest   filt   actiont   kindt   text_modt   prop_modt   contt   ckindt	   delparentR   t   parent_patht
   descendantR   t   neighborR}   t   oldpathsRƒ   R2   t   is_defR   R!   t   clst   parnamet   oldpatht   catioRZ   t   nkt   nnkt   object(    (   Rb   sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyR`   Œ   s>   
		
5" !
	
* 	*!	
!	&(    t
   __future__R    R1   RW   RB   t	   cStringIOR   R‡   R4   Rr   R   t   bazbase.flavorsR   t   bazbaseR   R   R   t   bazyamlR   t    R   t	   ExceptionR	   R§   R   R7   RL   R   RT   RY   Rd   R`   (    (    (    sY   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazsvn/precommit.pyt   <module>   s$   $8			