§
    øÛg{9  ã                   óÎ   — d 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mZ ddlm	Z	 ddlm
Z ddlmZmZ dZ G d„ d	ej        ¦  «        Z G d
„ d¦  «        Zd„ Z G d„ d¦  «        ZdS )zµ
module defining a subversion path object based on the external
command 'svn'. This modules aims to work with svn 1.3 and higher
but might also interact well with earlier versions.
é    N)ÚpathÚprocess)Úcommon)Úsvnwc)ÚBuildcostAccessCacheÚ
AgingCacheFc                   óâ   — e Zd ZdZ ed¬¦  «        Z edd¬¦  «        Zd&d„Zd	„ Z	d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd'd„Zd„ Zd„ Zd(d„Zd)d„Zd*d„Zd„ Zd„ Zd„ Zd „ Zd!„ Zd"„ Zd&d#„Zd+d%„ZdS ),ÚSvnCommandPathzZ path implementation that offers access to (possibly remote) subversion
    repositories. é€   )Ú
maxentriesiè  g      N@)r   Ú
maxsecondsNc                 óö   — t                                | ¦  «        }t          || ¦  «        r|j        }|j        }|j        }t          j        |¦  «          |j        d¦  «        }||_        ||_        ||_        |S )Nú/)	ÚobjectÚ__new__Ú
isinstanceÚrevÚauthÚstrpathÚ	svncommonÚcheckbadcharsÚrstrip)Úclsr   r   r   Úselfs        úE/granary/edev/quantum/lib/python3.11/site-packages/py/_path/svnurl.pyr   zSvnCommandPath.__new__   sv   € Ý�~Š~˜cÑ"Ô"ˆÝ�d˜CÑ Ô ð 	 Ø”(ˆCØ”9ˆDØ”<ˆDÝÔ Ñ%Ô%Ð%ØˆtŒ{˜3ÑÔˆØˆŒØˆŒØˆŒ	Øˆó    c                 óR   — | j         dk    r
d| j        z  S d| j        ›d| j         ›d�S )Néÿÿÿÿz
svnurl(%r)zsvnurl(z, ú))r   r   ©r   s    r   Ú__repr__zSvnCommandPath.__repr__$   s8   € ØŒ8�rŠ>ˆ>Ø $¤,Ñ.Ð.ð ð (,¤| | |°T´X°X°XÐ>Ð>r   c                 óz   — | j         € | j        |g|¢R Ž S d| j         gt          |¦  «        z   } | j        |g|¢R Ž S )z9 execute an svn command, append our own url and revision Nú-r)r   Ú	_svnwriteÚlist)r   ÚcmdÚargss      r   Ú_svnwithrevzSvnCommandPath._svnwithrev*   sU   € àŒ8ÐØ!�4”> #Ð-¨Ð-Ð-Ð-Ð-à˜$œ(Ð#¥d¨4¡j¤jÑ0ˆDØ!�4”> #Ð-¨Ð-Ð-Ð-Ð-r   c                 ó4  ‡ — d|z  g}ˆ fd„|D ¦   «         }|                      |¦  «         |                     d‰                      ¦   «         z  ¦  «         d                     |¦  «        }t          rt          d|z  ¦  «         ‰                      |¦  «        }|S )z, execute an svn command, append our own url zsvn %sc                 ó@   •— g | ]}d ‰                      |¦  «        z  ‘ŒS )ú"%s")Ú_escape)Ú.0Úitemr   s     €r   ú
<listcomp>z,SvnCommandPath._svnwrite.<locals>.<listcomp>5   s*   ø€ Ð=Ð=Ð=°�˜Ÿš dÑ+Ô+Ñ+Ð=Ð=Ð=r   r+   ú z
execing %s)ÚextendÚappendÚ_encodedurlÚjoinÚDEBUGÚprintÚ_svncmdexecauth)r   r&   r'   ÚlÚstringÚouts   `     r   r$   zSvnCommandPath._svnwrite2   sœ   ø€ à˜‰^ÐˆØ=Ð=Ð=Ð=¸Ð=Ñ=Ô=ˆØ	�Š�‰ŒˆØ	�Š�˜$×*Ò*Ñ,Ô,Ñ,Ñ-Ô-Ð-à—’˜!‘”ˆÝð 	)Ý�, Ñ'Ñ(Ô(Ð(Ø×"Ò" 6Ñ*Ô*ˆØˆ
r   c                 ó¤   — t          j        ¦   «         |z   }| j        �|d| j                             ¦   «         z   z  }|                      |¦  «        S )z  execute an svn command 'as is' Nr0   )r   Ú	fixlocaler   ÚmakecmdoptionsÚ_cmdexec©r   r&   s     r   r7   zSvnCommandPath._svncmdexecauth?   sL   € åÔ!Ñ#Ô# cÑ)ˆØŒ9Ð Ø�3˜œ×1Ò1Ñ3Ô3Ñ3Ñ3ˆCØ�}Š}˜SÑ!Ô!Ð!r   c                 óV  — 	 t          j        |¦  «        }n’# t          j         j        j        $ rv t	          j        ¦   «         d         }|j                             d¦  «        dk    s|j                             d¦  «        dk    rt          j         	                    | ¦  «        ‚‚ w xY w|S )Né   zFile Existsr   zFile already exists)
r   ÚcmdexecÚpyÚErrorÚsysÚexc_infoÚerrÚfindÚerrorÚEEXIST)r   r&   r:   Úes       r   r>   zSvnCommandPath._cmdexecF   sœ   € ð	Ý”/ #Ñ&Ô&ˆCˆCøÝŒzÔ!Ô'ð 	ð 	ð 	Ý”‘”˜qÔ!ˆAØ”—
’
˜=Ñ)Ô)¨RÒ/Ð/ØœEŸJšJÐ'<Ñ=Ô=ÀÒCÐCÝ”h—o’o dÑ+Ô+Ð+Øð	øøøð ˆ
s
   ‚ —BB&c                 ó¤   — t          j        ¦   «         |z   }| j        �|d| j                             ¦   «         z   z  }|                      |¦  «        S )z9 execute an svn command, return a pipe for reading stdin Nr0   )r   r<   r   r=   Ú_popenr?   s     r   Ú_svnpopenauthzSvnCommandPath._svnpopenauthQ   sL   € åÔ!Ñ#Ô# cÑ)ˆØŒ9Ð Ø�3˜œ×1Ò1Ñ3Ô3Ñ3Ñ3ˆCØ�{Š{˜3ÑÔÐr   c                 ó*   — t          j        |¦  «        S ©N)ÚosÚpopenr?   s     r   rM   zSvnCommandPath._popenX   s   € ÝŒx˜‰}Œ}Ðr   c                 ó6   — |                       | j        ¦  «        S rP   )r,   r   r    s    r   r3   zSvnCommandPath._encodedurl[   s   € Ø�|Š|˜DœLÑ)Ô)Ð)r   c                 óœ   — | j         r| j                              ¦   «         pd }| j                             t	          |¦  «        |f¦  «         d S rP   )r   r=   Ú_lsnorevcacheÚdelentryÚstr)r   r   r   s      r   Ú_norev_delentryzSvnCommandPath._norev_delentry^   sI   € ØŒyÐ7˜TœY×5Ò5Ñ7Ô7Ð?¸4ˆØÔ×#Ò#¥S¨¡Y¤Y°Ð$5Ñ6Ô6Ð6Ð6Ð6r   Úrc                 óB  — |dvrt          d|›d�¦  «        ‚|                      d¬¦  «        sJ ‚| j        €1|                      d|                      | j        ¦  «        ›d�¦  «        S |                      d	| j        ›d
|                      | j        ¦  «        ›d�¦  «        S )z, return an opened file with the given mode. )rY   ÚrUzmode z not supportedrA   )ÚfileNz	svn cat "ú"zsvn cat -r ú ")Ú
ValueErrorÚcheckr   rN   r,   r   )r   Úmodes     r   ÚopenzSvnCommandPath.openb   sÆ   € à�|Ð#Ð#Ý�*¸¸¸Ð>Ñ?Ô?Ð?Ø�zŠz˜qˆzÑ!Ô!Ð!Ð!Ð!ØŒ8ÐØ×%Ò%Ð%Ø&*§l¢l°4´<Ñ&@Ô&@Ð&@Ð&@ð'Dñ Eô Eð Eð ×%Ò%Ð%Ø&*¤h h h°·²¸T¼\Ñ0JÔ0JÐ0JÐ0Jð'Lñ Mô Mð Mr   c                 ó(  — | j                              | j        ¦  «        }t          |¦  «        dk     r t          j                             | d¦  «        ‚t          |¦  «        dk    r | j        |i |¤ŽS  |                      d¬¦  «        j        |i |¤ŽS )zi return the directory path of the current path joined
            with any given path arguments.
        é   zbase is not validÚ )Úbasename)	r   ÚsplitÚsepÚlenrC   rI   ÚEINVALr4   Únew)r   r'   Úkwargsr8   s       r   ÚdirpathzSvnCommandPath.dirpathn   s�   € ð ŒL×Ò˜tœxÑ(Ô(ˆÝˆq‰6Œ6�AŠ:ˆ:Ý”(—/’/ $Ð(;Ñ<Ô<Ð<Ý�‰VŒV�qŠ[ˆ[Ø�4”9˜dÐ- fÐ-Ð-Ð-à-�4—8’8 R�8Ñ(Ô(Ô-¨tÐ>°vÐ>Ð>Ð>r   c                 óÂ   — |                      dd¦  «        } | j        |Ž }|                     dd|¦  «         |                      |                     ¦   «         ¦  «         |S )zz create & return the directory joined with args.
        pass a 'msg' keyword argument to set the commit message.
        Úmsgzmkdir by py lib invocationÚmkdirz-m)Úgetr4   r$   rX   rm   )r   r'   rl   Ú
commit_msgÚ
createpaths        r   rp   zSvnCommandPath.mkdir{   sd   € ð —Z’Z Ð'CÑDÔDˆ
Ø�T”Y Ð%ˆ
Ø×Ò˜W d¨JÑ7Ô7Ð7Ø×Ò˜Z×/Ò/Ñ1Ô1Ñ2Ô2Ð2ØÐr   úcopied by py lib invocationc           
      ó@  — t          |dd¦  «        � t          j                             |d¦  «        ‚|                      d|›d|                      | ¦  «        ›d|                      |¦  «        ›d�¦  «         |                      |                     ¦   «         ¦  «         dS )z. copy path to target with checkin message msg.r   Núrevisions are immutablezsvn copy -m "ú" "r]   ©ÚgetattrrC   rI   rj   r7   r,   rX   rm   ©r   Útargetro   s      r   ÚcopyzSvnCommandPath.copy…   s¢   € å�6˜5 $Ñ'Ô'Ð3Ý”(—/’/ &Ð*CÑDÔDÐDØ×ÒÐ¸C¸C¸CØ!Ÿ\š\¨$Ñ/Ô/Ð/Ð/°·²¸fÑ1EÔ1EÐ1EÐ1EðGñ 	Hô 	Hð 	Hà×Ò˜VŸ^š^Ñ-Ô-Ñ.Ô.Ð.Ð.Ð.r   úrenamed by py lib invocationc           
      ój  — t          | dd¦  «        � t          j                             | d¦  «        ‚|                      d|›d|                      | ¦  «        ›d|                      |¦  «        ›d�¦  «         |                      |                      ¦   «         ¦  «         |                      | ¦  «         dS )z6 rename this path to target with checkin message msg. r   Nrv   zsvn move -m "z" --force "rw   r]   rx   rz   s      r   ÚrenamezSvnCommandPath.rename�   s´   € å�4˜ Ñ%Ô%Ð1Ý”(—/’/ $Ð(AÑBÔBÐBØ×ÒÐØ ˜S˜S $§,¢,¨tÑ"4Ô"4Ð"4Ð"4°d·l²lÀ6Ñ6JÔ6JÐ6JÐ6JðLñ 	Mô 	Mð 	Mà×Ò˜TŸ\š\™^œ^Ñ,Ô,Ð,Ø×Ò˜TÑ"Ô"Ð"Ð"Ð"r   rA   úremoved by py lib invocationc                 ó   — | j         � t          j                             | d¦  «        ‚|                      d|›d|                      | ¦  «        ›d�¦  «         |                      |                      ¦   «         ¦  «         dS )zT remove a file or directory (or a directory tree if rec=1) with
checkin message msg.Nrv   zsvn rm -m "rw   r]   )r   rC   rI   rj   r7   r,   rX   rm   )r   Úrecro   s      r   ÚremovezSvnCommandPath.remove–   sw   € ð Œ8ÐÝ”(—/’/ $Ð(AÑBÔBÐBØ×ÒÐ°S°S°S¸$¿,º,ÀtÑ:LÔ:LÐ:LÐ:LÐMÑNÔNÐNØ×Ò˜TŸ\š\™^œ^Ñ,Ô,Ð,Ð,Ð,r   c                 ó>  — t           j                             |¦  «        }d|                      | ¦  «        ›d�d|                      |¦  «        ›d�g}| j        �dt          | j        ¦  «        g|z   }|                      dd                     |¦  «        ›�¦  «         |S )z‰ export to a local path

            topath should not exist prior to calling this, returns a
            py.path.local instance
        r]   Nr#   zsvn export r0   )rC   r   Úlocalr,   r   rW   r7   r4   )r   Útopathr'   s      r   ÚexportzSvnCommandPath.exportž   s�   € õ ”—’˜vÑ&Ô&ˆˆØŸ,š, tÑ,Ô,Ð,Ð,Ð.Ð.ØŸ,š, vÑ.Ô.Ð.Ð.Ð0ð2ˆàŒ8ÐØ�#˜dœh™-œ-Ð(¨4Ñ/ˆDØ×ÒÐ°·²¸±´°Ð@ÑAÔAÐAØˆr   c                 ón  — t          | dd¦  «        � t          j                             | d¦  «        ‚ | j        |Ž }|                     dd¦  «        }|                     d¬¦  «        D ]}|                     ¦   «         r n!Œt          j                             |d¦  «        ‚||k    rX|                     |¬	¦  «        s@|rt          j         	                    |¦  «        pt          j         
                    |¦  «        ‚|S |                     |¦  «        }|                     | j        d
¦  «        d         }t          j        j                             ¦   «         }	 |                     ||¬	¦  «         dd|                      |¦  «        z  ›d|                      |                     |¦  «        ¦  «        ›d|                     |¦  «                             ¦   «         ›d�}	|                      |	¦  «         |                      |¦  «         |                     ¦   «          n# |                     ¦   «          w xY w|S )z½ ensure that an args-joined path exists (by default as
            a file). If you specify a keyword argument 'dir=True'
            then the path is forced to be a directory path.
        r   Nrv   Údirr   T)Úreversezhas not any valid base!)r‰   rA   zsvn import -m "z	ensure %srw   r]   )ry   rC   rI   rj   r4   rq   Úpartsr`   ÚENOENTÚENOTDIRÚEISDIRÚreltorg   rh   r   r…   ÚmkdtempÚensurer,   r3   r7   rX   rƒ   )
r   r'   rl   r{   r‰   ÚxÚtocreaterf   Útempdirr&   s
             r   r‘   zSvnCommandPath.ensure¬   s
  € õ
 �4˜ Ñ%Ô%Ð1Ý”(—/’/ $Ð(AÑBÔBÐBØ�”˜DÐ!ˆØ�jŠj˜ Ñ"Ô"ˆØ—’ d�Ñ+Ô+ð 	Eð 	EˆAØ�wŠw‰yŒyð Ø�ðõ ”(—/’/ &Ð*CÑDÔDÐDØ�Š;ˆ;Ø—7’7˜s�7Ñ#Ô#ð HØÐ1�bœh×.Ò.¨qÑ1Ô1ÐGµR´X·_²_ÀQÑ5GÔ5GÐGØˆHØ—<’< ‘?”?ˆØ—>’> $¤(¨AÑ.Ô.¨qÔ1ˆÝ”'”-×'Ò'Ñ)Ô)ˆð		Ø�NŠN˜8¨ˆNÑ-Ô-Ð-Ð-à $§,¢,¨xÑ"8Ô"8Ñ8Ð8Ð8Ø—L’L §¢¨hÑ!7Ô!7Ñ8Ô8Ð8Ð8Ø—F’F˜8Ñ$Ô$×0Ò0Ñ2Ô2Ð2Ð2ð4ˆCð × Ò  Ñ%Ô%Ð%Ø× Ò  Ñ#Ô#Ð#à�NŠNÑÔÐÐøˆG�NŠNÑÔÐÐøøøØˆs   ÅB.H ÈH2c                 óB   — |                       d|¦  «        }|d d…         S )NÚpropgetr   )r(   )r   ÚnameÚress      r   Ú_propgetzSvnCommandPath._propgetÎ   s$   € Ø×Ò˜y¨$Ñ/Ô/ˆØ�3�B�3Œxˆr   c                 ó¨   — |                       d¦  «        }|                     d¦  «        }d„ |dd …         D ¦   «         }t          j        | |¦  «        S )NÚproplistú
c                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Ústrip)r-   r’   s     r   r/   z,SvnCommandPath._proplist.<locals>.<listcomp>Õ   s    € Ð.Ð.Ð.˜q�—’‘”Ð.Ð.Ð.r   rA   )r(   rg   r   ÚPropListDict)r   r˜   Úliness      r   Ú	_proplistzSvnCommandPath._proplistÒ   sR   € Ø×Ò˜zÑ*Ô*ˆØ—	’	˜$‘”ˆØ.Ð. E¨!¨"¨"¤IÐ.Ñ.Ô.ˆÝÔ% d¨EÑ2Ô2Ð2r   c                 óÂ   — |                       ¦   «         }|                     ¦   «         }| j        }|D ]\  }}||k    r|c S Œt          j                             | ¦  «        ‚)z9 return an Info structure with svn-provided information. )rm   Ú_listdir_nameinforf   rC   rI   rŒ   )r   ÚparentÚnameinfo_seqÚbnr—   Úinfos         r   r¨   zSvnCommandPath.infoØ   se   € à—’‘”ˆØ×/Ò/Ñ1Ô1ˆØŒ]ˆØ&ð 	ð 	‰JˆD�$Ø�rŠzˆzØ���ð åŒh�oŠo˜dÑ#Ô#Ð#r   c                 óô   ‡ — ˆ fd„}‰ j         r‰ j                              ¦   «         pd}‰ j        �(‰ j                             ‰ j        ‰ j        |f|¦  «        S ‰ j                             ‰ j        |f|¦  «        S )z8 return sequence of name-info directory entries of self c                  óþ  •— 	 ‰                      dd¦  «        } �nú# t          j        j        $ �râ t	          j        ¦   «         d         }|j                             d¦  «        dk    r%t          j	         
                    ‰|j        ¦  «        ‚|j                             d¦  «        dk    r%t          j	         
                    ‰|j        ¦  «        ‚|j                             d¦  «        dk    r%t          j	         
                    ‰|j        ¦  «        ‚|j                             d¦  «        dk    r%t          j	         
                    ‰|j        ¦  «        ‚|j                             d	¦  «        dk    r%t          j	         
                    ‰|j        ¦  «        ‚|j                             ¦   «                              d
¦  «        dk    r%t          j	                             ‰|j        ¦  «        ‚t          j	                             |j        ¦  «        ‚w xY w|                      d¦  «        }g }|D ]:}|r6t          |¦  «        }|j        dk    r|                     |j        |f¦  «         Œ;|                     ¦   «          |S )NÚlsú-vrA   znon-existent in that revisionr   zE200009:zFile not foundznot part of a repositoryzUnable to openzmethod not allowedrœ   ú.)r(   r   rB   rD   rE   rF   rG   rH   rC   rI   rŒ   ÚlowerÚEACCESrg   ÚInfoSvnCommandÚ_namer2   Úsort)r˜   rK   r¡   r¦   Úlsliner¨   r   s         €r   Úbuilderz1SvnCommandPath._listdir_nameinfo.<locals>.builderå   s  ø€ ð,Ø×&Ò& t¨TÑ2Ô2�‘øÝ”?Ô(ð ,ñ ,ð ,Ý”L‘N”N 1Ô%�Ø”5—:’:Ð=Ñ>Ô>À"ÒDÐDÝœ(Ÿ/š/¨$°´Ñ6Ô6Ð6Ø”U—Z’Z 
Ñ+Ô+¨rÒ1Ð1Ýœ(Ÿ/š/¨$°´Ñ6Ô6Ð6Ø”U—Z’ZÐ 0Ñ1Ô1°RÒ7Ð7Ýœ(Ÿ/š/¨$°´Ñ6Ô6Ð6Ø”U—Z’ZÐ :Ñ;Ô;¸RÒ?Ð?Ýœ(Ÿ/š/¨$°´Ñ6Ô6Ð6Ø”U—Z’ZÐ 0Ñ1Ô1°2Ò5Ð5Ýœ(Ÿ/š/¨$°´Ñ6Ô6Ð6Ø”U—[’[‘]”]×'Ò'Ð(<Ñ=Ô=¸rÒAÐAÝœ(Ÿ/š/¨$°´Ñ6Ô6Ð6Ý”h—n’n Q¤UÑ+Ô+Ð+ð,øøøð —I’I˜d‘O”OˆEØˆLØð @ð @�Øð @Ý)¨&Ñ1Ô1�DØ”z SÒ(Ð(Ø$×+Ò+¨T¬Z¸Ð,>Ñ?Ô?Ð?øØ×ÒÑÔÐØÐs
   ƒ ›G7HN)r   r=   r   Ú_lsrevcacheÚ
getorbuildr   rU   )r   r´   r   s   `  r   r¤   z SvnCommandPath._listdir_nameinfoã   s™   ø€ ð	 ð 	 ð 	 ð 	 ð 	 ð6 ŒyÐ7˜TœY×5Ò5Ñ7Ô7Ð?¸4ˆØŒ8ÐØÔ#×.Ò.°´¸d¼hÈÐ/MØ/6ñ8ô 8ð 8ð Ô%×0Ò0°$´,ÀÐ1EØ18ñ:ô :ð :r   c                 ó’  ‡ ‡— t          ‰t          ¦  «        rt          j        ‰¦  «        Š‰                      ¦   «         }t          |¦  «        dk    r@|d         \  }}|‰ j        k    r*|j        dk    rt          j	         
                    ‰ ¦  «        ‚ˆ fd„|D ¦   «         }‰rˆfd„|D ¦   «         }‰                      ||¦  «         |S )zi list directory contents, possibly filter by the given fil func
            and possibly sorted.
        rA   r   r\   c                 ó@   •— g | ]\  }}‰                      |¦  «        ‘ŒS rž   )r4   )r-   r—   r¨   r   s      €r   r/   z*SvnCommandPath.listdir.<locals>.<listcomp>  s'   ø€ ÐBÐBÐB¡\ d¨D�—’˜4‘”ÐBÐBÐBr   c                 ó*   •— g | ]} ‰|¦  «        ¯|‘ŒS rž   rž   )r-   r’   Úfils     €r   r/   z*SvnCommandPath.listdir.<locals>.<listcomp>  s&   ø€ Ð0Ð0Ð0˜1¨¨¨Q©¬Ð0�QÐ0Ð0Ð0r   )r   rW   r   Ú	FNMatcherr¤   ri   rf   ÚkindrC   rI   r�   Ú	_sortlist)r   rº   r²   r¦   r—   r¨   Úpathss   ``     r   ÚlistdirzSvnCommandPath.listdir  sÛ   øø€ õ �c�3ÑÔð 	(ÝÔ" 3Ñ'Ô'ˆCØ×-Ò-Ñ/Ô/ˆÝˆ|ÑÔ Ò!Ð!Ø% aœ‰JˆD�$Ø�t”}Ò$Ð$¨¬°fÒ)<Ð)<å”h×&Ò& tÑ,Ô,Ð,ØBÐBÐBÐB°\ÐBÑBÔBˆØð 	1Ø0Ð0Ð0Ð0 Ð0Ñ0Ô0ˆEØ�Š�u˜dÑ#Ô#Ð#Øˆr   Fc           	      ó¶  — |                       ¦   «         sJ ‚|du rdp|}|du rdp|}|dk    r	|dk    rd}nd|›d|›�}|rdpd}|                      d|›d	|›d
| j        ›d�¦  «        }ddlm} |                     |¦  «        }g }	t          d|j        j        ¦  «        D ]9}
|
j	        |
j
        k    r'|	                     t          j        |
¦  «        ¦  «         Œ:|	S )zø return a list of LogEntry instances for this path.
rev_start is the starting revision (defaulting to the first one).
rev_end is the last revision (defaulting to HEAD).
if verbose is True, then the LogEntry instances also know which files changed.
NÚHEADrA   re   z-r ú:r¬   zsvn log --xml r0   r^   r]   r   )Úminidom)r`   rN   r   Úxml.domrÃ   ÚparseÚfilterÚ
firstChildÚ
childNodesÚnodeTypeÚELEMENT_NODEr2   r   ÚLogEntry)r   Ú	rev_startÚrev_endÚverboseÚrev_optÚverbose_optÚxmlpiperÃ   ÚtreeÚresultÚlogentrys              r   ÚlogzSvnCommandPath.log  s(  € ð �zŠz‰|Œ|ÐÐÐØ Ð%Ð0¨&Ð=°Iˆ	Ø˜T�/Ð, fÐ7°ˆà˜ÒÐ 7¨a¢< <ØˆGˆGøà$- I I¨w¨wÐ7ˆGØÐ& $Ð,¨"ˆØ×%Ò%Ð%Ø'. w w°°°¸T¼\¸\¸\ð'Kñ Lô Lˆà#Ð#Ð#Ð#Ð#Ð#Ø�}Š}˜WÑ%Ô%ˆØˆÝ˜t T¤_Ô%?Ñ@Ô@ð 	<ð 	<ˆHØÔ  HÔ$9Ò9Ð9Ø—’�iÔ0°Ñ:Ô:Ñ;Ô;Ð;øØˆr   )NN)rY   )rt   )r}   )rA   r€   )NrA   F) Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rµ   r   rU   r   r!   r(   r$   r7   r>   rN   rM   r3   rX   rb   rm   rp   r|   r   rƒ   r‡   r‘   r™   r¢   r¨   r¤   r¿   rÕ   rž   r   r   r
   r
      sØ  € € € € € ðð ð 'Ð&°#Ð6Ñ6Ô6€KØ�J¨$¸4Ð@Ñ@Ô@€Mðð ð ð ð?ð ?ð ?ð.ð .ð .ðð ð ð"ð "ð "ð	ð 	ð 	ð ð  ð  ðð ð ð*ð *ð *ð7ð 7ð 7ð
Mð 
Mð 
Mð 
Mð
?ð 
?ð 
?ðð ð ð/ð /ð /ð /ð#ð #ð #ð #ð-ð -ð -ð -ðð ð ðð ð ðDð ð ð3ð 3ð 3ð$ð $ð $ð#:ð #:ð #:ðJð ð ð ð&ð ð ð ð ð r   r
   c                   ó:   — e Zd Z ej        d¦  «        Zd„ Zd„ ZdS )r°   zc^ *(?P<rev>\d+) +(?P<author>.+?) +(0? *(?P<size>\d+))? *(?P<date>\w+ +\d{2} +[\d:]+) +(?P<file>.*)$c                 óÌ  — | j                              |¦  «        }|                     ¦   «         }|d         | _        | j        d         dk    r| j        d d…         | _        d| _        nd| _        t          |d         ¦  «        | _        |d         | _        |d         rt          |d         ¦  «        pd| _        t          |d	         ¦  «        | _
        | j
        d
z  | _        d S )Nr\   r   r   r‰   r   ÚauthorÚsizer   Údatei@B )Ú	lspatternÚmatchÚ	groupdictr±   r¼   ÚintÚcreated_revÚlast_authorrÝ   Úparse_time_with_missing_yearÚmtimeÚtime)r   Úlinerà   Údatas       r   Ú__init__zInfoSvnCommand.__init__?  sË   € ð ”×$Ò$ TÑ*Ô*ˆØ�ŠÑ Ô ˆØ˜&”\ˆŒ
ØŒ:�bŒ>˜SÒ Ð Øœ C R CœˆDŒJØˆDŒIˆIàˆDŒIå˜t Eœ{Ñ+Ô+ˆÔØ œ>ˆÔØ˜”LÐ6¥S¨¨f¬Ñ%6Ô%6Ð;¸!ˆŒ	Ý1°$°v´,Ñ?Ô?ˆŒ
Ø”J Ñ(ˆŒ	ˆ	ˆ	r   c                 ó"   — | j         |j         k    S rP   )Ú__dict__)r   Úothers     r   Ú__eq__zInfoSvnCommand.__eq__Q  s   € ØŒ} ¤Ò.Ð.r   N)rÖ   r×   rØ   ÚreÚcompilerß   rê   rî   rž   r   r   r°   r°   9  sL   € € € € € ð �”
ð	<ñ=ô =€Ið)ð )ð )ð$/ð /ð /ð /ð /r   r°   c           
      ó|  — ddl }t          j        ¦   «         }|                      ¦   «         }t          j        |                     d¦  «        d¦  «        d         }t          j        |                     d¦  «        d¦  «        d         }|                     d¦  «        }	 d|v rt          ¦   «         ‚t          j        |d¦  «        d         }dx}}	nN# t          $ rA t          j        |d	¦  «        d
d…         \  }}	|d         }|||||	ddddf	}
|
|k    r|dz  }Y nw xY w|||||	ddddf	}
|                     |
¦  «        S )zˆ analyze the time part from a single line of "svn ls -v"
    the svn output doesn't show the year makes the 'timestr'
    ambigous.
    r   Nz%brA   z%dé   rÂ   z%Yz%H:%Mé   é   )Úcalendarrç   Úgmtimerg   ÚstrptimeÚpopr_   Útimegm)Útimestrrõ   Út_nowÚtpartsÚmonthÚdayÚlastÚyearÚhourÚminuteÚt_results              r   rå   rå   Y  sJ  € ð
 €O€O€OÝŒK‰MŒM€Eà�]Š]‰_Œ_€FÝŒM˜&Ÿ*š* Q™-œ-¨Ñ.Ô.¨qÔ1€EÝ
Œ-˜Ÿ
š
 1™œ tÑ
,Ô
,¨QÔ
/€CØ�:Š:�a‰=Œ=€DðØ�$ˆ;ˆ;Ý‘,”,ÐÝŒ}˜T 4Ñ(Ô(¨Ô+ˆØÐˆˆvˆvøÝð ð ð Ý”} T¨7Ñ3Ô3°A°a°CÔ8‰ˆˆfØ�QŒxˆà˜%  d¨F°A°a¸¸!Ð<ˆØ�eÒÐØ�A‰IˆDøøðøøøð �e˜S $¨°°!°A°aÐ8€HØ�?Š?˜8Ñ$Ô$Ð$s   Â1C ÃADÄDc                   ó   — e Zd Zd„ ZdS )Ú	PathEntryc                 ó|  — |j         j                             d¦  «        | _        |                     d¦  «                             d¦  «        | _        | j        dk    r]|                     d¦  «                             d¦  «        | _        | j        r+t          |                     d¦  «        ¦  «        | _        d S d S d S )NzUTF-8ÚactionÚAzcopyfrom-pathzcopyfrom-rev)	rÇ   Ú	nodeValueÚencoder   ÚgetAttributer  Úcopyfrom_pathrâ   Úcopyfrom_rev)r   Úpparts     r   rê   zPathEntry.__init__u  sµ   € ØÔ'Ô1×8Ò8¸ÑAÔAˆŒØ×(Ò(¨Ñ2Ô2×9Ò9¸'ÑBÔBˆŒØŒ;˜#ÒÐØ!&×!3Ò!3°OÑ!DÔ!D×!KÒ!KÈGÑ!TÔ!TˆDÔØÔ!ð LÝ$'¨×(:Ò(:¸>Ñ(JÔ(JÑ$KÔ$K�Ô!Ð!Ð!ð ÐðLð Lr   N)rÖ   r×   rØ   rê   rž   r   r   r  r  t  s(   € € € € € ðLð Lð Lð Lð Lr   r  )rÙ   rQ   rE   rç   rï   rC   r   r   Úpy._pathr   r   r   Úpy._path.cacheutilr   r   r5   ÚSvnPathBaser
   r°   rå   r  rž   r   r   ú<module>r     sM  ððð ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?à€ðbð bð bð bð b�YÔ*ñ bô bð bðR	/ð /ð /ð /ð /ñ /ô /ð /ð@%ð %ð %ð6Lð Lð Lð Lð Lñ Lô Lð Lð Lð Lr   