
nWc           @   s?  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	 Z	 d  d l
 Z
 d  d l Z d  d l m Z d  d l m Z y d  d l Z Wn  e k
 r d  d l j Z n Xd  d l m Z m Z e e d d d  Z d   Z d	   Z d
   Z d   Z d   Z e   Z  d d  Z! d   Z" d d  Z# d   Z$ d   Z% d e& f d     YZ' d e' f d     YZ( d e( f d     YZ) d e' f d     YZ* d d  Z+ d e& f d     YZ, d e, f d     YZ- d  e, f d!     YZ. e/ d" k r;x# e+ e j0 d#  D] Z1 e1 GHq)Wn  d S($   iN(   t   log(   t   unicode(   t   unescape(   t   Popent   PIPEi    c      	   C   sl   y; t  |  d | d | d t j d k } | j   | } Wn t k
 rO d SXt | |  } | j | f S(   Nt   stdoutt   stderrt   shellt   win32i   t    (   i   R	   (   t   _Popent   syst   platformt   communicatet   OSErrort   decode_as_stringt
   returncode(   t   argsR   R   t   encodingt   streamt   proct   data(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   _run_command   s    c         C   sK   |  j  d  d } d j g  | j D]! } | j | j k r# | j ^ q#  S(   Nt   schedulei    R	   (   t   getElementsByTagNamet   joint
   childNodest   nodeTypet	   TEXT_NODEt	   nodeValue(   t   entryR   t   t(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   _get_entry_schedule0   s    	c         C   sK   |  j  d  d } d j g  | j D]! } | j | j k r# | j ^ q#  S(   Nt   propertyi    R	   (   R   R   R   R   R   R   (   t   targett   property_textR   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   _get_target_property7   s    	c         C   s+   t  j d k  r! |  j d  } n |  } | S(   Ni   i    s   utf-8(   i   i    (   R   t   version_infot   encode(   t   decoded_strR   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   _get_xml_data>   s    c         G   s6   |  s |  d k r# t  j j |   St  j j |  |  S(   Nt   .(   t   ost   pathR   (   t   prefixt   suffix(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   joinpathG   s    c          C   s   yL t  j   }  |  s" |  d k r5 t  j   d }  n  |  rK t j |   n  Wn  t  j t f k
 rn d  }  n Xt j	 d k } |  s d d g | S|  j
 d  r | r d S|  Sd  S(   Ns   US-ASCIIi   t   darwins   utf-8s   mac-(   t   localet   getpreferredencodingt   getdefaultlocalet   codecst   lookupt   Errort   LookupErrort   NoneR   R   t
   startswith(   R   t   is_osx(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   determine_console_encodingL   s    
c         C   sL   | d k r t } n  t |  t  s6 |  j |  }  n  t j d |   }  |  S(   s  
    Decode the console or file output explicitly using getpreferredencoding.
    The text paraemeter should be a encoded string, if not no decode occurs
    If no encoding is given, getpreferredencoding is used.  If encoding is
    specified, that is used instead.  This would be needed for SVN --xml
    output.  Unicode is explicitly put in composed NFC form.

    --xml should be UTF-8 (SVN Issue 2938) the discussion on the Subversion
    DEV List from 2007 seems to indicate the same.
    t   NFCN(   R7   t   _console_encodingt
   isinstanceR   t   decodet   unicodedatat	   normalize(   t   textR   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   i   s    	c         C   s   t  j j j t |    } t   } x| | D]t \ } } | d k r+ | j d k r+ | j |  t |  j	 d  s | j
 | j d  | j d  f  q q+ q+ W| d S(   s+   Parse the entries from a recursive info xmlt   START_ELEMENTR   t   deleteR+   t   kindi   (   t   xmlt   domt   pulldomt   parseStringR(   t   listt   nodeNamet
   expandNodeR    R8   t   appendt   getAttribute(   R'   t   doct   entriest   eventt   node(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   parse_dir_entries   s    	R	   c   	      C   s  t  j j |  } t  j j |  } t j j j t |    } t	   } x | D] \ } } | d k rO | j
 d k rO | j |  t  j j | j d   } t  j j |  j |  r | t |  d } n  t |  } x- t |  D] } | j t | |   q WqO qO W| S(   s!   Parse a propget svn:externals xmlRB   R"   R+   i   (   R*   R+   t   normpatht   normcaseRE   RF   RG   RH   R(   RI   RJ   RK   RM   R8   t   lenR$   t   parse_external_propRL   R.   (	   R'   R,   RN   t	   externalsRP   RQ   R+   R   t   external(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   parse_externals_xml   s    	!c         C   s   g  } x |  j    D] } | j   } | s1 q n  t j d k  rR | j d  } n  t j |  } t j d k  r g  | D] } | j d  ^ qw } n  t j	 | d  d r | d } n
 | d } t
 | d d } | j t j j |   q W| S(   s   
    Parse the value of a retrieved svn:externals entry.

    possible token setups (with quotng and backscaping in laters versions)
        URL[@#] EXT_FOLDERNAME
        [-r#] URL EXT_FOLDERNAME
        EXT_FOLDERNAME [-r#] URL
    i   i    s   utf-8iR   (   i   i    (   i   i    (   t
   splitlinest   lstripR   R%   R&   t   shlext   splitR>   t   urlparset   urlsplitR   RL   R*   R+   RS   (   t   linesRW   t   linet   xRX   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyRV      s     	%
c   	      C   s   t  } t |  d  } d } z x t | j d  D] } | j   } t |  d k r1 | \ } } | j t |   } | d k r | | k r t } q | d k r | r Pq q1 q1 WWd  | j	   X| S(   Nt   rtR	   i   t   Kt   V(
   t   Falset   opent   itert   readlineR]   RU   t   readt   intt   Truet   close(	   t   filenamet   keyt   foundt   fR   Ra   t   partsRD   t   length(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   parse_prop_file   s    	t   SvnInfoc           B   s   e  Z d  Z e d    Z e j d e j  Z e	 d d   Z
 d d  Z d   Z e d    Z e d    Z d	   Z d
   Z e d  Z d   Z d   Z RS(   s   
    Generic svn_info object.  No has little knowledge of how to extract
    information.  Use cls.load to instatiate according svn version.

    Paths are not filesystem encoded.
    c          C   s?   t  d d d g  \ }  } |  d k r7 | r7 | j   Sd Sd  S(   Nt   svns	   --versions   --quieti    R	   (   R   t   strip(   t   codeR   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   get_svn_version   s    
s!   (?:([\-0-9]+):)?(\d+)([a-z]*)\s*$R	   c   	      C   s^  t  j j |  } t d d | g  \ } } t  j j | d  } t  j j t  j j | d   p t  j j t  j j | d   p t  j j t  j j | d   } t |  j   j d   } y t d   | d	  D  } Wn t	 k
 r t   } n X| st
 |  S| s$| s$| d k  r>t j d t  t |  S| d k  rTt |  St |  S(   NRv   t   infos   .svnRO   s	   dir-propss   dir-prop-baseR)   c         s   s   |  ] } t  |  Vq d  S(   N(   Rk   (   t   .0Rb   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pys	   <genexpr>  s    i   i   i   s?   No SVN 1.3+ command found: falling back on pre 1.7 .svn parsingi   (   i   i   (   i   i   (   R*   R+   RS   R   R   t   isfilet   tupleRy   R]   t
   ValueErrorRu   t   warningst   warnt   DeprecationWarningt   SvnFileInfot	   Svn13Infot	   Svn15Info(	   t   clst   dirnamet   normdirRx   R   t   svn_dirt   has_svnt   svn_versiont   base_svn_version(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   load   s(    !!!
	

c         C   s   | |  _  d  |  _ d  |  _ d  S(   N(   R+   R7   t   _entriest
   _externals(   t   selfR+   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   __init__  s    		c         C   sh   t  d d |  j g  \ } } | r5 t j d  d S|  j j |  } | r` t | j d   Sd Sd S(   s<   Retrieve the directory revision informatino using svnversiont
   svnversions   -cs   svnversion failedi    i   N(   R   R+   R    R   t   revision_ret   matchRk   t   group(   R   Rx   R   t   parsed(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   get_revision  s    c         C   s(   |  j  d  k r! |  j   |  _  n  |  j  S(   N(   R   R7   t   get_entries(   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyRO   (  s    c         C   s(   |  j  d  k r! |  j   |  _  n  |  j  S(   N(   R   R7   t   get_externals(   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyRW   .  s    c         c   s   x |  j  D] } | Vq
 Wd S(   sR   
        Iterate over the svn:external references in the repository path.
        N(   RW   (   R   t   item(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   iter_externals4  s    c         c   s8   x1 |  j  D]& \ } } | j   d k r
 | Vq
 q
 Wd S(   sR   
        Iterate over the non-deleted file entries in the repository path
        t   fileN(   RO   t   lower(   R   R   RD   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt
   iter_files;  s    c         c   sI   | r |  j  Vn  x1 |  j D]& \ } } | j   d k r | Vq q Wd S(   sR   
        Iterate over the non-deleted file entries in the repository path
        t   dirN(   R+   RO   R   (   R   t   include_rootR   RD   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt	   iter_dirsC  s
    c         C   s   g  S(   N(    (   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   M  s    c         C   s   g  S(   N(    (   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   P  s    (   t   __name__t
   __module__t   __doc__t   staticmethodRy   t   ret   compilet   IR   t   classmethodR   R   R   R!   RO   RW   R   R   Rl   R   R   R   (    (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyRu      s   			
	R   c           B   s   e  Z d    Z d   Z RS(   c         C   sK   t  d d d d |  j g d d \ } } | rA t j d  g  St |  S(   NRv   Rz   s   -Rs   --xmlR   s   utf-8s   svn info failed(   R   R+   R    t   debugRR   (   R   Rx   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   U  s    c         C   s   d d d g } g  } x |  j    D] } t | | g d d \ } } | d k rd t j d  g  SxK t |  D]= } | r t j j | |  } n  | j t j j	 |   qq Wq" W| S(   NRv   t   propgets   svn:externalsR   s   utf-8i    s   svn propget failed(
   R   R   R    R   RV   R*   R+   R   RL   RS   (   R   t   cmdt   resultt   folderRx   R`   RX   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   _  s    !(   R   R   R   R   (    (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   T  s   	
R   c           B   s   e  Z d    Z RS(   c         C   si   d d d |  j  d d g } t | d d \ } } | rJ t j d  g  St | d	 t j  j |  j   S(
   NRv   R   s   svn:externalss   -Rs   --xmlR   s   utf-8s   svn propget failedR,   (   R+   R   R    R   RY   R*   t   abspath(   R   R   Rx   R`   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   s  s    (   R   R   R   (    (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   r  s   R   c           B   sA   e  Z d  d  Z d   Z d   Z d   Z d   Z d   Z RS(   R	   c         C   s,   t  t |   j |  d  |  _ d  |  _ d  S(   N(   t   superR   R   R7   t   _directoriest	   _revision(   R   R+   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   ~  s    	c         c   s   t  | d d  } t j j |  r t j |  } | t | j   f Vx | j   D]x } t	 |  } t  | |  } t j j |  r | t
 d  f VqT t j j |  rT x |  j |  D] } | Vq WqT qT Wn  d  S(   Ns   .svnRO   (   R.   R*   R+   R|   t   SVNEntriesFileR   Rf   t   parse_revisiont   get_undeleted_recordsR   Rl   R7   t   isdirt	   _walk_svn(   R   t   baset
   entry_fileRO   R+   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    c         C   s   t    } d } xa |  j |  j  D]M \ } } } | rM | j | d f  q" | j | d f  t | |  } q" W| |  _ | |  _ d  S(   Ni    R   R   (   RI   R   R+   RL   t   maxR   R   (   R   RO   t   revR+   R|   t   dir_rev(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   _build_entries  s    	"	c         C   s#   |  j  d  k r |  j   n  |  j  S(   N(   R   R7   R   (   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    c         C   s#   |  j  d  k r |  j   n  |  j  S(   N(   R   R7   R   (   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    c         C   s   d d g d d g g } g  } x |  j    D] } d  } x8 | D]0 } t | |  } t j j |  r> | } q> q> W| d  k	 r+ t | d  } t | d d } | j t	 |   q+ q+ W| S(   Ns   .svns   dir-prop-bases	   dir-propss   svn:externalsR   s   utf-8(
   R   R7   R.   R*   R+   R|   Rt   R   t   extendRV   (   R   t
   prop_filesRW   R   t	   prop_filet	   rel_partsRn   t   ext_prop(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    	(   R   R   R   R   R   R   R   R   (    (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   |  s   				c         c   sq   t  j |   } x | j   D] } | Vq Wx? | j   D]1 } t  j |  } x | j   D] } | VqZ Wq8 Wd  S(   N(   Ru   R   R   R   (   R   Rz   R+   t   sub_infot   sub_path(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt
   svn_finder  s    	R   c           B   s8   e  Z d    Z e d    Z e d    Z d   Z RS(   c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    c         C   sI   t  j j | d d  } t |  } z t j |  } Wd  | j   X| S(   Ns   .svnRO   (   R*   R+   R   Rg   R   Rj   Rm   (   t   class_R   Rn   Rq   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    c         C   s5   | j    } | j d  } t t g | }  |  |  S(   Ns   <?xml(   Rj   R8   t   SVNEntriesFileTextt   SVNEntriesFileXML(   R   t   fileobjR   t   is_xml(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyRj     s    c         C   s   |  j    d g } t |  S(   Ni    (   t   parse_revision_numbersR   (   R   t   all_revs(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    (   R   R   R   R   R   Rj   R   (    (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s   	
R   c           B   sY   e  Z i d  d 6d d 6d d 6Z d   Z d   Z d   Z d	   Z d
   Z d   Z RS(   i   s   1.4.xi	   s   1.5.xi
   s   1.6.xc         C   s   |  j  S(   N(   t   sections(   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   __get_cached_sections  s    c         C   s   d } |  j  j |  } g  t t j |  D] } | ^ q+ } yE t | d j d   } | |  j j   k r t	 j
 d |  n  Wn t k
 r d  SX| |  _ |  j |  _ |  j S(   Ns   
i    s   Unknown subversion verson %d(   R   R]   t   mapt   strRZ   Rk   t   popt   known_svn_versionst   valuesR    R   R~   R   t(   _SVNEntriesFileText__get_cached_sectionst   get_sections(   R   t   SECTION_DIVIDERR   Rb   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    %	c         C   s   t  |  j    S(   N(   t   boolR   (   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   is_valid  s    c         C   s   |  j    d d S(   Ni    i   (   R   (   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   get_url  s    c         C   sO   d } g  |  j    D]2 } t |  | k r | | r t | |  ^ q } | S(   Ni	   (   R   RU   Rk   (   R   t   revision_line_numbert   sectiont   rev_numbers(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s     c         C   s<   d   } g  |  j    D] } | |  r | d ^ q } | S(   Nc         S   s0   |  o/ |  d o/ t  |   d k  p/ |  d d k S(   Ni    i   i   RC   (   RU   (   t   s(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   <lambda>  s    i    (   R   (   R   t	   undeletedR   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s
    	(	   R   R   R   R   R   R   R   R   R   (    (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s   
					
R   c           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s   t  S(   N(   Rl   (   R   (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    c         C   s(   t  j d  } | j |  j  j d  S(   s   Get repository URLs   url="([^"]+)"i   (   R   R   t   searchR   R   (   R   t   urlre(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s    c         C   sA   t  j d  } g  | j |  j  D] } t | j d   ^ q" S(   Ns   committed-rev="(\d+)"i   (   R   R   t   finditerR   Rk   R   (   R   t   revret   m(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   !  s    c         C   sM   t  j d t  j  } g  | j |  j  D] } t | j d   ^ q( } | S(   Ns%   name="([^"]+)"(?![^>]+deleted="true")i   (   R   R   R   R   R   R   R   (   R   t   entries_patternR   t   results(    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR   (  s    1(   R   R   R   R   R   R   (    (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyR     s   			t   __main__i   (2   R*   R   R   t	   distutilsR    t   xml.dom.pulldomRE   R\   R0   R3   R?   R   t   setuptools.compatR   t   xml.sax.saxutilsR   R^   t   ImportErrort   urllib.parset   parset
   subprocessR   R
   R   t   _PIPER7   R   R    R$   R(   R.   R:   R<   R   RR   RY   RV   Rt   t   objectRu   R   R   R   R   R   R   R   R   t   argvt   name(    (    (    s;   /var/www/html/venv/build/setuptools/setuptools/svn_utils.pyt   <module>   sN   									$	t
B3