î
½1kd¿I  ã               @   sy  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 d  d l m Z y d  d l Z Wn! e k
 rß d  d l j Z Yn Xd  d l m Z m Z e e d d  d d „ Z d	 d
 „  Z d d „  Z d d „  Z d d „  Z d d „  Z  e  ƒ  Z! d d d „ Z" d d „  Z# d d d „ Z$ d d „  Z% d d „  Z& Gd d „  d e' ƒ Z( Gd  d! „  d! e( ƒ Z) Gd" d# „  d# e) ƒ Z* Gd$ d% „  d% e( ƒ Z+ d d& d' „ Z, Gd( d) „  d) e' ƒ Z- Gd* d+ „  d+ e- ƒ Z. Gd, d- „  d- e- ƒ Z/ e0 d. k rux( e, e j1 d/ ƒ D] Z2 e3 e2 ƒ q^Wn  d S)0é    N)Úlog)Úunicode)ÚTemporaryDirectory)Úunescape)ÚPopenÚPIPEc             C   sp   y; t  |  d | d | d t j d k ƒ} | j ƒ  | } Wn t k
 rS d SYn Xt | | ƒ } | j | f S)NÚstdoutÚstderrÚshellÚwin32é   Ú )r   r   )Ú_PopenÚsysÚplatformÚcommunicateÚOSErrorÚdecode_as_stringÚ
returncode)Úargsr   r	   ÚencodingÚstreamÚprocÚdata© r   úJ/var/www/pythonscrapper/code/venv/build/setuptools/setuptools/svn_utils.pyÚ_run_command   s    	r   c             C   s0   |  j  d ƒ d } d j d d „  | j Dƒ ƒ S)NÚscheduler   r   c             S   s+   g  |  ]! } | j  | j k r | j ‘ q Sr   )ÚnodeTypeÚ	TEXT_NODEÚ	nodeValue)Ú.0Útr   r   r   ú
<listcomp>2   s   	z'_get_entry_schedule.<locals>.<listcomp>)ÚgetElementsByTagNameÚjoinÚ
childNodes)Úentryr   r   r   r   Ú_get_entry_schedule0   s    r(   c             C   s0   |  j  d ƒ d } d j d d „  | j Dƒ ƒ S)NÚpropertyr   r   c             S   s+   g  |  ]! } | j  | j k r | j ‘ q Sr   )r   r   r    )r!   r"   r   r   r   r#   9   s   	z(_get_target_property.<locals>.<listcomp>)r$   r%   r&   )ÚtargetZproperty_textr   r   r   Ú_get_target_property7   s    r+   c             C   s+   t  j d k  r! |  j d ƒ } n |  } | S)Né   r   zutf-8)r,   r   )r   Úversion_infoÚencode)Údecoded_strr   r   r   r   Ú_get_xml_data>   s    r0   c             G   s6   |  s |  d k r# t  j j | Œ  St  j j |  | Œ S)NÚ.)ÚosÚpathr%   )ÚprefixÚsuffixr   r   r   ÚjoinpathG   s    r6   c              C   s´   yL t  j ƒ  }  |  s" |  d k r5 t  j ƒ  d }  n  |  rK t j |  ƒ n  Wn! t  j t f k
 ro d  }  Yn Xt j d k } |  s“ d d g | S|  j	 d ƒ r¬ | r¬ d S|  Sd  S)NzUS-ASCIIr   Údarwinzutf-8zmac-)
ÚlocaleÚgetpreferredencodingÚgetdefaultlocaleÚcodecsÚlookupÚErrorÚLookupErrorr   r   Ú
startswith)r   Úis_osxr   r   r   Údetermine_console_encodingL   s    rA   c             C   sL   | d k r t  } n  t |  t ƒ s6 |  j | ƒ }  n  t j d |  ƒ }  |  S)aï  
    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.
    NZNFC)Ú_console_encodingÚ
isinstancer   ÚdecodeÚunicodedataÚ	normalize)Útextr   r   r   r   r   i   s    	r   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 d … S)z+Parse the entries from a recursive info xmlÚSTART_ELEMENTr'   Údeleter3   Úkindr   N)ÚxmlÚdomÚpulldomÚparseStringr0   ÚlistÚnodeNameÚ
expandNoder(   r?   ÚappendÚgetAttribute)r/   ÚdocÚentriesÚeventÚnoder   r   r   Úparse_dir_entries�   s    	rX   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 d … } n  t | ƒ } x- t | ƒ D] } | j t | | ƒ ƒ qï WqO qO W| S)z!Parse a propget svn:externals xmlrH   r*   r3   r   N)r2   r3   ÚnormpathÚnormcaserK   rL   rM   rN   r0   rO   rP   rQ   rS   r?   Úlenr+   Úparse_external_proprR   r6   )	r/   r4   rT   Ú	externalsrV   rW   r3   r   Úexternalr   r   r   Úparse_externals_xml�   s    	!r_   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† d d „  | Dƒ } n  t j | d
 ƒ d rª | d } n
 | d } t	 | d d ƒ} | j
 t j j | ƒ ƒ q W| S)zê
    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
    r,   r   zutf-8c             S   s   g  |  ] } | j  d  ƒ ‘ q S)zutf-8)rD   )r!   Úxr   r   r   r#   ½   s   	 z'parse_external_prop.<locals>.<listcomp>r   r   )r,   r   )r,   r   éÿÿÿÿra   )Ú
splitlinesÚlstripr   r-   r.   ÚshlexÚsplitÚurlparseÚurlsplitr   rR   r2   r3   rY   )Úlinesr]   Úliner^   r   r   r   r\   ¨   s     	
r\   c       	   
   C   sÇ   d } t  |  d ƒ } d } zš x“ t | j d ƒ D] } | j ƒ  } t | ƒ d k r1 | \ } } | j t | ƒ ƒ } | d k r— | | k r— d } q° | d k r° | r° Pq° q1 q1 WWd  | j ƒ  X| S)NFÚrtr   é   ÚKTÚV)ÚopenÚiterÚreadlinere   r[   ÚreadÚintÚclose)	ÚfilenameÚkeyÚfoundÚfr   ri   ÚpartsrJ   Úlengthr   r   r   Úparse_prop_fileÌ   s    	rz   c               @   sÐ   e  Z d  Z d Z e d d „  ƒ Z e j d e j ƒ Z	 e
 d d d „ ƒ Z d d d	 „ Z d
 d „  Z e d d „  ƒ Z e d d „  ƒ Z d d „  Z d d „  Z d d d „ Z d d „  Z d d „  Z d S)ÚSvnInfoz¸
    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   sW   t  ƒ  �( }  t d d |  d d g ƒ \ } } Wd  QX| d k rO | rO | j ƒ  Sd Sd  S)NÚsvnz--config-dirz	--versionz--quietr   r   )r   r   Ústrip)ÚtempdirÚcoder   r   r   r   Úget_svn_versionè   s    
zSvnInfo.get_svn_versionz!(?:([\-0-9]+):)?(\d+)([a-z]*)\s*$r   c       
      C   sE  t  j j | ƒ } t ƒ  �( } t d d | d | g ƒ \ } } Wd  QXt  j j | d ƒ } | p t  j j t  j j | d ƒ ƒ } t |  j ƒ  j	 d ƒ ƒ } y' t d d „  | d  d	 … Dƒ ƒ }	 Wn t
 k
 rá t ƒ  }	 Yn X| sò t | ƒ S| s|	 s|	 d k  r%t j d t ƒ t | ƒ S|	 d k  r;t | ƒ St | ƒ S)Nr|   z--config-dirÚinfoz.svnrU   r1   c             s   s   |  ] } t  | ƒ Vq d  S)N)rr   )r!   r`   r   r   r   ú	<genexpr>  s    zSvnInfo.load.<locals>.<genexpr>rk   r   r,   z?No SVN 1.3+ command found: falling back on pre 1.7 .svn parsingé   )r   r,   )r   rƒ   )r2   r3   rY   r   r   r%   ÚisfileÚtupler€   re   Ú
ValueErrorr{   ÚwarningsÚwarnÚDeprecationWarningÚSvnFileInfoÚ	Svn13InfoÚ	Svn15Info)
ÚclsÚdirnameÚnormdirr~   r   r   Zsvn_dirZ	is_svn_wdÚsvn_versionZbase_svn_versionr   r   r   Úload   s,    !'
	

zSvnInfo.loadc             C   s   | |  _  d  |  _ d  |  _ d  S)N)r3   Ú_entriesÚ
_externals)Úselfr3   r   r   r   Ú__init__)  s    		zSvnInfo.__init__c             C   sh   t  d d |  j g ƒ \ } } | r5 t j d ƒ d S|  j j | ƒ } | r` t | j d ƒ ƒ Sd Sd S)z<Retrieve the directory revision informatino using svnversionZ
svnversionz-czsvnversion failedr   rk   N)r   r3   r   rˆ   Úrevision_reÚmatchrr   Úgroup)r”   r   r   Úparsedr   r   r   Úget_revision.  s    zSvnInfo.get_revisionc             C   s(   |  j  d  k r! |  j ƒ  |  _  n  |  j  S)N)r’   Úget_entries)r”   r   r   r   rU   ;  s    zSvnInfo.entriesc             C   s(   |  j  d  k r! |  j ƒ  |  _  n  |  j  S)N)r“   Úget_externals)r”   r   r   r   r]   A  s    zSvnInfo.externalsc             c   s   x |  j  D] } | Vq
 Wd S)zR
        Iterate over the svn:external references in the repository path.
        N)r]   )r”   Úitemr   r   r   Úiter_externalsG  s    zSvnInfo.iter_externalsc             c   s8   x1 |  j  D]& \ } } | j ƒ  d k r
 | Vq
 q
 Wd S)zR
        Iterate over the non-deleted file entries in the repository path
        ÚfileN)rU   Úlower)r”   r�   rJ   r   r   r   Ú
iter_filesN  s    zSvnInfo.iter_filesTc             c   sI   | r |  j  Vn  x1 |  j D]& \ } } | j ƒ  d k r | Vq q Wd S)zR
        Iterate over the non-deleted file entries in the repository path
        ÚdirN)r3   rU   r    )r”   Zinclude_rootr�   rJ   r   r   r   Ú	iter_dirsV  s
    zSvnInfo.iter_dirsc             C   s   g  S)Nr   )r”   r   r   r   r›   `  s    zSvnInfo.get_entriesc             C   s   g  S)Nr   )r”   r   r   r   rœ   c  s    zSvnInfo.get_externalsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr€   ÚreÚcompileÚIr–   Úclassmethodr‘   r•   rš   r)   rU   r]   rž   r¡   r£   r›   rœ   r   r   r   r   r{   à   s   (
r{   c               @   s(   e  Z d  Z d d „  Z d d „  Z d S)r‹   c             C   sK   t  d d d d |  j g d d ƒ\ } } | rA t j d ƒ g  St | ƒ S)Nr|   r�   z-Rz--xmlr   zutf-8zsvn info failed)r   r3   r   ÚdebugrX   )r”   r   r   r   r   r   r›   h  s    zSvn13Info.get_entriesc             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)Nr|   Úpropgetzsvn:externalsr   zutf-8r   zsvn propget failed)
r£   r   r   rˆ   r\   r2   r3   r%   rR   rY   )r”   ÚcmdÚresultÚfolderr   rh   r^   r   r   r   rœ   r  s    !zSvn13Info.get_externalsN)r¤   r¥   r¦   r›   rœ   r   r   r   r   r‹   g  s   
r‹   c               @   s   e  Z d  Z d d „  Z d S)rŒ   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)
Nr|   r®   zsvn:externalsz-Rz--xmlr   zutf-8zsvn propget failedr4   )r3   r   r   r­   r_   r2   Úabspath)r”   r¯   r   rh   r   r   r   rœ   †  s    zSvn15Info.get_externalsN)r¤   r¥   r¦   rœ   r   r   r   r   rŒ   …  s   rŒ   c                   sa   e  Z d  Z d ‡  f d d † Z d d „  Z d d „  Z d d	 „  Z d
 d „  Z d d „  Z ‡  S)rŠ   r   c                s,   t  t |  ƒ j | ƒ d  |  _ d  |  _ d  S)N)ÚsuperrŠ   r•   Z_directoriesÚ	_revision)r”   r3   )Ú	__class__r   r   r•   ‘  s    	zSvnFileInfo.__init__c             c   s×   t  | d d ƒ } t j j | ƒ rÓ t j | ƒ } | d | j ƒ  f Vx‰ | j ƒ  D]x } t | ƒ } t  | | ƒ } t j j | ƒ r˜ | d d  f VqT t j j	 | ƒ rT x |  j
 | ƒ D] } | Vqº WqT qT Wn  d  S)Nz.svnrU   FT)r6   r2   r3   r„   ÚSVNEntriesFiler‘   Úparse_revisionÚget_undeleted_recordsr   ÚisdirÚ	_walk_svn)r”   ÚbaseÚ
entry_filerU   r3   r�   r   r   r   rº   –  s    zSvnFileInfo._walk_svnc             C   s‰   t  ƒ  } d } xa |  j |  j ƒ D]M \ } } } | rM | j | d f ƒ q" | j | d f ƒ t | | ƒ } q" W| |  _ | |  _ d  S)Nr   rŸ   r¢   )rO   rº   r3   rR   Úmaxr’   r´   )r”   rU   Úrevr3   r„   Zdir_revr   r   r   Ú_build_entries¤  s    	"	zSvnFileInfo._build_entriesc             C   s#   |  j  d  k r |  j ƒ  n  |  j  S)N)r’   r¿   )r”   r   r   r   r›   ²  s    zSvnFileInfo.get_entriesc             C   s#   |  j  d  k r |  j ƒ  n  |  j  S)N)r´   r¿   )r”   r   r   r   rš   ·  s    zSvnFileInfo.get_revisionc             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)Nz.svnzdir-prop-basez	dir-propszsvn:externalsr   zutf-8)	r£   r6   r2   r3   r„   rz   r   Úextendr\   )r”   Z
prop_filesr]   rŽ   Z	prop_fileZ	rel_partsrt   Zext_propr   r   r   rœ   ¼  s    	zSvnFileInfo.get_externals)	r¤   r¥   r¦   r•   rº   r¿   r›   rš   rœ   r   r   )rµ   r   rŠ   �  s   rŠ   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)r{   r‘   r¡   rž   )rŽ   r�   r3   Zsub_infoZsub_pathr   r   r   Ú
svn_finderÑ  s    	rÁ   c               @   sL   e  Z d  Z d d „  Z e d d „  ƒ Z e d d „  ƒ Z d d „  Z d	 S)
r¶   c             C   s   | |  _  d  S)N)r   )r”   r   r   r   r   r•   ß  s    zSVNEntriesFile.__init__c          
   C   sI   t  j j | d d ƒ } t | ƒ } z t j | ƒ } Wd  | j ƒ  X| S)Nz.svnrU   )r2   r3   r%   rn   r¶   rq   rs   )Úclass_r»   rt   rw   r°   r   r   r   r‘   â  s    zSVNEntriesFile.loadc             C   s5   | j  ƒ  } | j d ƒ } t t g | }  |  | ƒ S)Nz<?xml)rq   r?   ÚSVNEntriesFileTextÚSVNEntriesFileXML)rÂ   Úfileobjr   Zis_xmlr   r   r   rq   ì  s    zSVNEntriesFile.readc             C   s   |  j  ƒ  d g } t | ƒ S)Nr   )Úparse_revision_numbersr½   )r”   Zall_revsr   r   r   r·   ó  s    zSVNEntriesFile.parse_revisionN)r¤   r¥   r¦   r•   r¬   r‘   rq   r·   r   r   r   r   r¶   Þ  s   
r¶   c               @   ss   e  Z d  Z i d d 6d d 6d d 6Z d d „  Z d	 d
 „  Z d d „  Z d d „  Z d d „  Z d d „  Z	 d S)rÃ   é   z1.4.xé	   z1.5.xé
   z1.6.xc             C   s   |  j  S)N)Úsections)r”   r   r   r   Z__get_cached_sectionsÿ  s    z(SVNEntriesFileText.__get_cached_sectionsc             C   s±   d } |  j  j | ƒ } d d „  t t j | ƒ Dƒ } yE t | d j d ƒ ƒ } | |  j j ƒ  k r{ t	 j
 d | ƒ n  Wn t k
 r” d  SYn X| |  _ |  j |  _ |  j S)Nz
c             S   s   g  |  ] } | ‘ q Sr   r   )r!   r`   r   r   r   r#     s   	 z3SVNEntriesFileText.get_sections.<locals>.<listcomp>r   zUnknown subversion verson %d)r   re   ÚmapÚstrrb   rr   ÚpopÚknown_svn_versionsÚvaluesr   rˆ   r†   rÊ   Ú(_SVNEntriesFileText__get_cached_sectionsÚget_sections)r”   ZSECTION_DIVIDERrÊ   r�   r   r   r   rÑ     s    		zSVNEntriesFileText.get_sectionsc             C   s   t  |  j ƒ  ƒ S)N)ÚboolrÑ   )r”   r   r   r   Úis_valid  s    zSVNEntriesFileText.is_validc             C   s   |  j  ƒ  d d S)Nr   é   )rÑ   )r”   r   r   r   Úget_url  s    zSVNEntriesFileText.get_urlc                s)   d ‰  ‡  f d d †  |  j  ƒ  Dƒ } | S)NrÈ   c                s<   g  |  ]2 } t  | ƒ ˆ  k r | ˆ  r t | ˆ  ƒ ‘ q Sr   )r[   rr   )r!   Úsection)Úrevision_line_numberr   r   r#     s   	z=SVNEntriesFileText.parse_revision_numbers.<locals>.<listcomp>)rÑ   )r”   Zrev_numbersr   )r×   r   rÆ     s    z)SVNEntriesFileText.parse_revision_numbersc                s/   d d „  ‰  ‡  f d d †  |  j  ƒ  Dƒ } | S)Nc             S   s0   |  o/ |  d o/ t  |  ƒ d k  p/ |  d d k S)Nr   é   rƒ   rI   )r[   )Úsr   r   r   Ú<lambda>"  s    z:SVNEntriesFileText.get_undeleted_records.<locals>.<lambda>c                s&   g  |  ] } ˆ  | ƒ r | d  ‘ q S)r   r   )r!   rÖ   )Ú	undeletedr   r   r#   $  s   	z<SVNEntriesFileText.get_undeleted_records.<locals>.<listcomp>)rÑ   )r”   r°   r   )rÛ   r   r¸   !  s    z(SVNEntriesFileText.get_undeleted_recordsN)
r¤   r¥   r¦   rÎ   rÐ   rÑ   rÓ   rÕ   rÆ   r¸   r   r   r   r   rÃ   ø  s   

rÃ   c               @   s@   e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 S)
rÄ   c             C   s   d S)NTr   )r”   r   r   r   rÓ   ,  s    zSVNEntriesFileXML.is_validc             C   s(   t  j d ƒ } | j |  j ƒ j d ƒ S)zGet repository URLzurl="([^"]+)"r   )r©   rª   Úsearchr   r˜   )r”   Zurlrer   r   r   rÕ   /  s    zSVNEntriesFileXML.get_urlc             C   s,   t  j d ƒ } d d „  | j |  j ƒ Dƒ S)Nzcommitted-rev="(\d+)"c             S   s%   g  |  ] } t  | j d  ƒ ƒ ‘ q S)r   )rr   r˜   )r!   Úmr   r   r   r#   7  s   	z<SVNEntriesFileXML.parse_revision_numbers.<locals>.<listcomp>)r©   rª   Úfinditerr   )r”   Zrevrer   r   r   rÆ   4  s    	z(SVNEntriesFileXML.parse_revision_numbersc             C   s8   t  j d t  j ƒ } d d „  | j |  j ƒ Dƒ } | S)Nz%name="([^"]+)"(?![^>]+deleted="true")c             S   s%   g  |  ] } t  | j d  ƒ ƒ ‘ q S)r   )r   r˜   )r!   r—   r   r   r   r#   ?  s   	z;SVNEntriesFileXML.get_undeleted_records.<locals>.<listcomp>)r©   rª   r«   rÞ   r   )r”   Zentries_patternÚresultsr   r   r   r¸   ;  s    	z'SVNEntriesFileXML.get_undeleted_recordsN)r¤   r¥   r¦   rÓ   rÕ   rÆ   r¸   r   r   r   r   rÄ   +  s   rÄ   Ú__main__r   )4r2   r©   r   Ú	distutilsr   Zxml.dom.pulldomrK   rd   r8   r;   rE   r‡   Zsetuptools.compatr   Zsetuptools.py31compatr   Úxml.sax.saxutilsr   rf   ÚImportErrorÚurllib.parseÚparseÚ
subprocessr   r   r   Z_PIPEr   r(   r+   r0   r6   rA   rB   r   rX   r_   r\   rz   Úobjectr{   r‹   rŒ   rŠ   rÁ   r¶   rÃ   rÄ   r¤   ÚargvÚnameÚprintr   r   r   r   Ú<module>   sP   		$‡
B3