
    c0                        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mZmZmZmZ d dlmZmZmZ ddlmZ ej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej         Z ej!        Z!ej"        Z"ej#        Z#ej$        Z$ej%        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,Z, e,j-        d	d
e.           e&j/        j0         n# e1$ r dZ&Y nw xY wda2d Z3d Z4d Z5d Z6 G d de7          Z8d Z9d Z:d Z;d Z< G d d          Z=	 	 	 d*dZ>d Z? G d d          Z@ G d deA          ZBd  ZCd! ZDeDeDeCd"ZEd# ZF G d$ d%e          ZGd&ZHd' ZI G d( d)ee          ZJdS )+    N)_)open)encodingerrorpycompatutilvfs)dateutilprocutil
stringutil   )common)	transportignorezsvn.core)modulecategoryc                  L   t           d S t          j        rda nKt          j                    5  t          j        t
          j                  pda d d d            n# 1 swxY w Y   t          j	        t                     j
        a t           t          j	        d          j
        k    ad S )Nmbcsz
ISO-8859-1utf-8)
fsencodingr   	iswindowsr   with_lc_ctypelocalenl_langinfoCODESETcodecslookupnamefsencoding_is_utf8     :/usr/lib/python3/dist-packages/hgext/convert/subversion.pyinit_fsencodingr#   K   s     L 

 !! 	L 	L+FN;;K|J	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Lz**/J#v}W'='='BBs   !AA Ac                 n    t           r| S |                     t                                        d          S )Nr   )r   decoder   encodess    r"   fs2svnr)   \   s/     4xx
##**7333r!   c                 ,    t          j        | d          S )Ns   %Y-%m-%dT%H:%M:%S.000000Z)r
   datestr)dates    r"   formatsvndater-   c   s    D">???r!   c                 D    t          j        | d d         dz   dg          S )N   s    UTCs   %Y-%m-%dT%H:%M:%S)r
   	parsedater'   s    r"   parsesvndater1   g   s(     afw.1E0FGGGr!   c                       e Zd ZdS )SvnPathNotFoundN)__name__
__module____qualname__r    r!   r"   r3   r3   n   s        Dr!   r3   c                 ^   |                      dd          }d}t          |          dk    rt          |d                   }|d                             dd          }d}d}t          |          dk    r6|d                             d          r|d         dd         }d|d         z   }|||fS )	a  Parse a revision string and return (uuid, path, revnum).
    >>> revsplit(b'svn:a2147622-4a9f-4db4-a8d3-13562ff547b2'
    ...          b'/proj%20B/mytrunk/mytrunk@1')
    ('a2147622-4a9f-4db4-a8d3-13562ff547b2', '/proj%20B/mytrunk/mytrunk', 1)
    >>> revsplit(b'svn:8af66a51-67f5-4354-b62c-98d67cc7be1d@1')
    ('', '', 1)
    >>> revsplit(b'@7')
    ('', '', 7)
    >>> revsplit(b'7')
    ('', '', 0)
    >>> revsplit(b'bad')
    ('', '', 0)
       @r   r      /r!   s   svn:   N)rsplitlenintsplit
startswith)revpartsrevnumuuidmods        r"   revsplitrE   r   s     JJtQEF
5zzA~~U1X!HNN4##ED
C
5zzA~~%(--g66~Qx|U1Xofr!   c                 8    t                               | d          S )Ns   !$&'()*+,-./:=@_~)urlreqquoter'   s    r"   rH   rH      s     <</000r!   c                 0   	 t           j                            t           j                            t          |                               S # t           j        j        $ r Y nw xY wt          j        	                    |           rut          j        
                    t          j        |                     } t          j        rdt          j
        |           z   } t          |           } dt          |           z  } t           j                            |           S )zConvert path or URL to a SVN URL, encoded in UTF-8.

    This can raise UnicodeDecodeError if the path or URL can't be converted to
    unicode using `fsencoding`.
    r9   s	   file://%s)svnclienturl_from_pathcoresvn_path_canonicalizer)   SubversionExceptionospathisdirnormpathr   abspathr   r   rH   )rQ   s    r"   geturlrU      s    z''H**6$<<88
 
 	
 8'    
w}}T *wT 2 233 	.$----D d||eDkk)8))$///s   AA A"!A"c                     t           j                                        }t           j        j        |_        | |j        _        |S N)rJ   rM   svn_opt_revision_tsvn_opt_revision_numberkindvaluenumber)r\   optrevs     r"   r]   r]      s0    X((**F(2FK FLMr!   c                       e Zd Zd ZdS )changedpathc                 N    |j         | _         |j        | _        |j        | _        d S rW   )copyfrom_pathcopyfrom_revaction)selfps     r"   __init__zchangedpath.__init__   s#    _Nhr!   N)r4   r5   r6   rf   r    r!   r"   r_   r_      s#            r!   r_   TFc           
          d fd}	 t          j        |          }	t          j                            |	j        |||||||           t          j        d             n`# t          $ r t          j        d             Y n>t          $ r2}
t          j        t          j
        |
                      Y d }
~
nd }
~
ww xY w                                  t          j        d           d S )Nc                     i }| ,|                                  D ]\  }}t          |          ||<   t          j        |||||f	
           d S rW   )itemsr_   pickledump)
orig_pathsrB   authorr,   messagepoolpathskvfpprotocols            r"   receiverzget_log_child.<locals>.receiver   sc    !"((** * *1&q>>aUFFD':BIIIIIr!   urlr   )r   SvnRaTransportrJ   raget_logrk   rl   IOError	Exceptionr   forcebytestrflushrP   _exit)rt   rx   rq   startendlimitdiscover_changed_pathsstrict_node_historyrv   tinstru   s   `          @r"   get_log_childr      s5    HJ J J J J J( $---D"		
 		
 		
  	D"h''''  ( ( (D"h''''' A A AJ+D112x@@@@@@@@A HHJJJ HQKKKKKs   A A# # C 	C (B;;C c                    t          j                    5  t          !t          j        t          d                    t          | j                                                  }t          | j
        g|R   ddd           dS # 1 swxY w Y   dS )ziFetch SVN log in a subprocess and channel them back to parent to
    avoid memory collection issues.
    Ns5   debugsvnlog could not load Subversion python bindings)r   r   rJ   r   Abortr   
decodeargsfinreadr   fout)uioptsargss      r"   debugsvnlogr      s     
			 & &;+JKK   "&++--((bg%%%%%& & & & & & & & & & & & & & & & & &s   A!BB	Bc                   $    e Zd ZdZd Zd Zd ZdS )	logstreamz$Interruptible revision log iterator.c                     || _         d S rW   )_stdout)rd   stdouts     r"   rf   zlogstream.__init__   s    r!   c              #   6  K   	 	 t          j        | j                  }n/# t          $ r" t	          j        t          d                    w xY w	 |\  }}}}}n># t          t          f$ r* |Y d S t	          j        t          d          |z            w xY w|V  )NT>   Mercurial failed to run itself, check hg executable is in PATHs   log stream exception '%s')	rk   loadr   EOFErrorr   r   r   	TypeError
ValueError)rd   entryrm   rB   rn   r,   ro   s          r"   __iter__zlogstream.__iter__  s      	DL11   k5   K<A9
FFD''z* K K K=EEk!$@"A"AE"IJJJK KKK!	s    ,AA B.%Bc                 X    | j         r"| j                                          d | _         d S d S rW   )r   closerd   s    r"   r   zlogstream.close  s5    < 	 L   DLLL	  	 r!   N)r4   r5   r6   __doc__rf   r   r   r    r!   r"   r   r      sG        ..    &         r!   r   c                   &    e Zd ZdZ	 	 	 ddZd ZdS )	directlogstreamzDirect revision log iterator.
    This can be used for debugging and development but it will probably leak
    memory and is not suitable for real conversions.r   TFc           
            fd}t          j        |          }	t          j                            |	j        |||||||           d S )Nc                     i }| ,|                                  D ]\  }}t          |          ||<   	                    |||||f           d S rW   )rj   r_   append)
rm   rB   rn   r,   ro   rp   rq   rr   rs   rd   s
            r"   rv   z*directlogstream.__init__.<locals>.receiver)  sa    E%&,,.. . .DAq*1~~E!HHKKg>?????r!   rw   )r   ry   rJ   rz   r{   )
rd   rx   rq   r   r   r   r   r   rv   r   s
   `         r"   rf   zdirectlogstream.__init__  sr    	@ 	@ 	@ 	@ 	@ $---D"		
 		
 		
 		
 		
r!   c                     d S rW   r    r   s    r"   r   zdirectlogstream.close>  s    r!   Nr   TF)r4   r5   r6   r   rf   r   r    r!   r"   r   r     sL        8 8 #!
 
 
 
>    r!   r   c                     dD ]B}t           j                            t           j                            ||                    s dS CdS )N)s   locks   hookss   format   dbFT)rP   rQ   existsjoin)r   rQ   protoxs       r"   	filecheckr   E  sH    3  w~~bgll43344 	55	4r!   c                    	 t                                           }|                    t          j        d||fz            d          }|                                }nt# t          j        $ rV}|j        dk    r(| 	                    t          d                     Y d }~dS |j                                        }Y d }~nd }~wt          $ r Y dS w xY wd|v S )Ns   %s://%s/!svn/ver/0/.svns   rbi  sw   svn: cannot probe remote repository, assume it could be a subversion repository. Use --source-type if you know better.
TFs#   <m:human-readable errcode="160013">)rG   buildopenerr   r   strurlr   urlerr	httperrorcodewarnr   rt   r}   )r   rQ   r   openerrspdatar   s          r"   	httpcheckr   O  s    ##%%kkO6%FGG
 
 xxzz   9GG&    44444w||~~   uu 2T99s$   AA C,-B=B==CC)   https   https   filec                    	 |                     dd          \  }}|dk    r3t          j        rb|d d         dk    rT|dd                                         r8|dd                                         dk    r|d d         dz   |dd          z   }	 |                    t                    }nM# t          $ r@ |                     t          d	          t          j
        t                    z             Y d
S w xY wt                              |          }d|v r$|                     t          d                     d
S |                    t                    }n# t          $ r d}t          j        |          }	 |                    t                     nN# t          $ rA |                     t          d          t          j
        t                    z             Y Y d
S w xY wY nw xY w|dk    rt          j        |          }n<|dv r8t%          j        |          s$|                     t          d                     d
S t(                              |d           }d|v r/ || ||          rdS |                    dd          d         }d|v /d
S )Ns   ://r   r   r9         s   %3a/s   :/sf   Subversion requires that file URLs can be converted to Unicode using the current locale encoding (%s)
Fu   �sI   Subversion does not support non-UTF-8 percent-encoded bytes in file URLs
sb   Subversion requires that paths can be converted to Unicode using the current locale encoding (%s)
)r   httpssc   Subversion sources don't support non-ASCII characters in HTTP(S) URLs. Please percent-encode them.
c                      dS )NFr    )r   s    r"   <lambda>zissvnurl.<locals>.<lambda>  s    e r!   Tr   )r>   r   r   isalphalowerr%   r   UnicodeDecodeErrorr   r   sysbytesrG   url2pathnamer&   r   r   rT   pconvertr   
isasciistrprotomapgetr;   )r   rx   r   rQ   unicodepathchecks         r"   issvnurlr   o  s   9ii**tG"3!H$$1I%%'' %1IOO%%00BQBx%'$qrr(2
"kk*55%   O  '
33	4   uu  !--k::K+{::@    u %%j11D   |C  
	KK
####! 	 	 	GGH  #J//	0   555	 $#	 }T""	$	$	$"4(( 	GGC    5LL 3 344E
$,,5T5!! 	4{{4##A& $,, 5sc   BE B, +E ,AC62E 5C66AE ;E  G#7FG#AGG#GG#"G#c                        e Zd Zd f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 ZddZd ZddZd Zd Zd Zd Zd ZddZddZ	 	 	 d!dZ xZS )"
svn_sourceNc                 X   t          t          |                               ||||           t                       |                    d          s|                    d          st
          j                            |          r=t
          j                            t
          j                            |d                    s/t          ||          st          t          d          |z            t          /t          t          d          t          d          dz  z             	 t          j        j        t          j        j        f}|d	k     r2t          t          d
          |z  t          d          dz  z             n=# t"          $ r0 t          t          d          t          d          dz  z             w xY wi | _        d }	 |                    d          }|dk    r$t)          ||dz   d                    }|d |         }n# t*          $ r Y nw xY wt-          |          | _        d| _        	 t3          j                    5  t7          j        | j                  | _        | j        j        | _        | j        j        | _        t          j                             | j                  | _!        tD          #                    | j        tI          | j!                  d                    | _%        d | _&        | j%        | _'        i | _(        i | _)        t          j        *                    | j                  | _+        d d d            n# 1 swxY w Y   n# t          j        j,        $ rp |-                                 dt          j        j        t          j        j        t          j        j.        fz  }t          t          d          | j        |fz            w xY w|rtI          |          dk    r!t_          j0        t          d                    	 t)          |d                   }n8# t*          $ r+ t_          j0        t          d          |d         z            w xY w| j1        2                    dd          }	|	d}	|	3                    d          | _4        | j1        2                    dd          | _5        	 t)          | j5                  | _5        | j5        dk     rd| _5        n7# t*          $ r* t_          j0        t          d          | j5        z            w xY w	 t3          j                    5  | 6                    | j%        |          | _7        d d d            n# 1 swxY w Y   n# tp          $ r
 d | _7        Y nw xY w| j7        s)t_          j0        t          d          | j%        z            | 9                    | j7                  | _:        d| _;        t
          j                            t
          j                            |d                    r|| _<        nd | _<        d | _=        d S ) N)revss   svn://s
   svn+ssh://   .svns-   %s does not look like a Subversion repositorys)   could not load Subversion python bindingss     (try installing the %s package)s   python3-subversion)r   r:   s=   Subversion python bindings %d.%d found, 1.4 or later requireds    (try upgrading the %s package)s   python-subversions=   Subversion python bindings are too old, 1.4 or later requiredr8   r   r   s   UTF-8rw   s   %d.%d.%dsB   %s does not look like a Subversion repository to libsvn version %ss@   subversion source does not support specifying multiple revisionss"   svn: revision %s is not an integer   converts	   svn.trunk   trunkr9   s   svn.startrevs(   svn: start revision %s is not an integer   no revision found in module %sNNs   .svn/entries)>superr   rf   r#   r?   rP   rQ   r   r   r   NoRepor   rJ   MissingToolrM   SVN_VER_MAJORSVN_VER_MINORAttributeErrorlastrevsrfindr=   r   rU   rx   r   r   r   r   ry   rz   rK   ctxget_repos_rootbaseurlrG   unquoter<   r   
prevmodule
rootmodulecommitsrq   get_uuidrC   rO   	tracebackSVN_VER_MICROr   r   r   configstrip	trunknamestartrevlatestheadr3   rB   last_changed_changescachewc	convertfp)rd   r   repotyperx   r   versionr   at
svnversiontrunkcfg	__class__s             r"   rf   zsvn_source.__init__  s   j$((Xs(FFFNN9%%	~~m,,	 s##		
 GNN27<<W#=#=>>	 C  	 BCCcI   ;a LMM CDDG\\] ^ ^ ^	h,ch.DDG!1  	
 899<PPQ      	 	 	)  4558LL	M  	 	 4BQwwSa]++#2#h 	 	 	D	#;; 	#%% 5 5!*!9dh!G!G!G.+>0"v44TW== %nnTXc$,6G6G6I6I-JKK"&"&+!
FOODG44	5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 x+ 	 	 	LLNNN$&&&( J
 ,  8Z(	)  	  	4yy1}}k9   T!W   k;<<tAwF  
 7>>*l;;H!--z?CC	..DM}q   ! 	 	 	+=>>N  	
	#%% = = KKV<<	= = = = = = = = = = = = = = = 	 	 	DIII	y 	+344t{B   !KK	22)7>>"',,sO<<== 	DGGDGs   (AF :F=
?H
 

HH6M 	C3M<M MM MM BOP( (5Q:+S& &4TU* 1!UU* U""U* %U"&U* *U>=U>c                 h    t          j                    | _        | j                                         d S rW   )r   r   	__enter__r   s    r"   beforezsvn_source.beforeO  s.    !/11$$&&&&&r!   c                 >    | j                             d d d            d S rW   )r   __exit__r   s    r"   afterzsvn_source.afterS  s#    ##D$55555r!   c                     i }|D ]6}t          |          \  }}}|                    ||          }||k    r|||<   7|| _        d S rW   )rE   
setdefaultr   )rd   revmapr   revidrC   r   rB   
lastrevnums           r"   	setrevmapzsvn_source.setrevmapV  s^     	* 	*E#+E?? D&&!,,VV<<J
""#)  r!   c                     	 t           j                            | j                            d          dz   t          |          z   |d| j                   dS # t           j        j        $ r Y dS w xY w)Nr9   FT)	rJ   rK   lsrx   rstriprH   r   rM   rO   )rd   rQ   r]   s      r"   r   zsvn_source.exists_  sy    		JMM%%,uT{{:	   4x+ 	 	 	55	s   AA A.-A.c                 V     fd} fd}t           j                  }d} |d|          } |d|           _         |d|          }|rq j        pd} xj        d|z   z  c_                              j         j                   _         j        s)t          j        t          d           j        z             j        g _	         j        d	| j        pdfz   _        |r! j
                            d          }t          j                            |dz   t          |          z   |d
 j                  }t#          |          D ]}	d|||	fz  }
 ||
 j                  s                     |
 j                  }|s+ j                            t          d          |	z             d j                            t          d          |	                     |          fz              j	                            |            j        r j	        rt/           j	                  dk    r!t          j        t          d                                          j	        d                   }| j        k     r)t          j        t          d           j        z             j	        S )Nc                 Z                         | |          }|t          j        j        k    S rW   )
_checkpathrJ   rM   svn_node_dir)rQ   rB   rZ   rd   s      r"   rR   z"svn_source.getheads.<locals>.isdirl  s&    ??400D38000r!   c                    j                             dd| z             }||                                dk    rd S |p|                     d          }                    ||          sLj                            |          r| dk    rd S |r&t          j        t          d          | |fz            d S j         	                    t          d          | t          j        |          fz             |S )Nr   s   svn.r!   r9   r   s&   expected %s to be at %r, but not founds   found %s at %r
)r   r   r   r   r   endswithr   r   r   noter   bytestr)r   r@   cfgpathrQ   rd   s       r"   
getcfgpathz'svn_source.getheads.<locals>.getcfgpathp  s   gnnZ4@@G"w}}#'='=tOt**400D;;tS)) 	;''--  $(2B2B4 +CDD,'   tGLL%&&$0@0F0F)GG   Kr!   r!   r   s   tagss   branchesr9   r   s   %s/%sFs   %s/%s/%ss   ignoring empty branch %s
s   found branch %s at %d
r   s>   svn: start revision is not supported with more than one branchr   s.   svn: no revision found after start revision %d)r]   r   tagsr   r   r   r   r   r   headsrx   r   rJ   rK   r
  rH   r   sortedr   r  rB   r   r   r<   )rd   rR   r  r@   	oldmoduletrunkbranchesrpathbranchnamesbranchr   brevidrB   s   `            r"   getheadszsvn_source.getheadsk  s   	1 	1 	1 	1 	1	 	 	 	 	( T&''	
8S))Jw,,	:k3//  	*sIKK4%<'KKDK1BCCDI9 k7884;F  
 i[
9  I	0DW#FFDI  	*HNN4((E*--uX.UDH K !-- * *$	8V'DDuVT%677 VT->?? GLL#@!A!AF!JKKK011t{{62234   
!!&))))= 	TZ 	4:""k5    [[A//F%%kGHHm$  
 zr!   c                    | j         |         \  }}i }|r |                     |||          \  }| _        }|s|st          |          \  }}}	t          j                            | j        t          |          z   t          |	          d| j
                  }
d |
                                D             }t                      | _        |                                 t          j        ||gt!          |          z            }||fS )NTc                 L    g | ]!\  }}|j         t          j        j        k    |"S r    rZ   rJ   rM   svn_node_file).0nes      r"   
<listcomp>z*svn_source._getchanges.<locals>.<listcomp>  s8       Aq6SX333 333r!   )rq   expandpathsremovedrE   rJ   rK   r
  r   rH   r]   r   rj   setsortr   ziplistr<   )rd   r@   fullrq   parentscopiesfilesrC   r   rB   entriess              r"   _getchangeszsvn_source._getchanges  s    :c? 	P*.*:*:3w*O*O'E4< 	!w 	!#+C== D&&jmmuV}},fVnndDH G #MMOO  E
 55DL

 E

(:;;vr!   c                     | j         d         |k    r|s| j         d         \  }}n!|                     ||          \  }}| j        |= ||t                      fS )Nr   r   )r   r3  rq   r+  )rd   r@   r.  r1  r0  s        r"   
getchangeszsvn_source.getchanges  s`    a C'''"03OUFF"..sD99OUF
3vsuu%%r!   c                 b    |                      |d          \  }}|||ff| _        d |D             S )NFc                     g | ]
}|d          S r   r    r%  fs     r"   r(  z.svn_source.getchangedfiles.<locals>.<listcomp>  s    $$$!$$$r!   )r3  r   )rd   r@   ir1  r0  s        r"   getchangedfileszsvn_source.getchangedfiles  s@    **366!E6?3$$e$$$$r!   c                 r   || j         vrt          |          \  }}}|| _        |                     |           | j                            |d          }||k     r|dz   }|                     ||           || j         vr$t          j        t          d          |z            | j         |         }| j         |= |S )Nr   r   s   svn: revision %s not found)
r   rE   r   reparentr   r   _fetch_revisionsr   r   r   )rd   r@   rC   r   rB   stop	revcommits          r"   	getcommitzsvn_source.getcommit  s    dl""#+C== D&& DKMM&!!! =$$VQ//D}}z!!&$///$,&&k!$A"B"BV"KLLLL%	Lr!   	   splicemapc                 |    t          j        d|          s&t          j        t	          d          ||fz            dS )z:fails if revision format does not match the correct formatsW   svn:[0-9a-f]{8,8}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{12,12}(.*)@[0-9]+$s.   %s entry %s is not a valid revision identifierN)rematchr   r   r   )rd   revstrmapnames      r"   checkrevformatzsvn_source.checkrevformat  sY    x$ 	
 
 		 +CDDF#$  		 		r!   c                 n    t          | j                            dd          d                   | j        z
  S )Nr8   r   )r=   r   r;   r   r   s    r"   
numcommitszsvn_source.numcommits  s.    49##D!,,Q/004=@@r!   c                 d   i }| j         |S g }| j         }t          j                            | j                  }|                     | j         g|| j                  }	 |D ] }|\  }}}	}
}|sg }d |                                D             }|                    d           |}|r,|d         d         |k    r|                                d         }|D ]\  }}}|	                    |dz             s|D ]H}|d         	                    |          r+||d         t          |          d          z   }||g|d d<    nI|                    |||g           d |                                D             }t                      }|D ]W}|D ]R\  }}}|	                    |dz             r|	                    ||         dz             r=|                    |            X|D ]fd	|D             }g }|D ]\  }}}|                    d          d         }|	                    |          r|                    |||g           O||v rT	 |                     ||          }|r	||vr|||<   w# t           $ r Y w xY w|}|}"	 |                                 n# |                                 w xY w|S )
Nc                 @    g | ]\  }}|j         |j         |j        |fS r    )ra   rb   r%  re   r'  s      r"   r(  z&svn_source.gettags.<locals>.<listcomp>$  s?       1_ana8  r!   T)reverserh   r   r   r9   c                 H    i | ]\  }}|j         d k    |j        ||j         S )   A)rc   ra   rN  s      r"   
<dictcomp>z&svn_source.gettags.<locals>.<dictcomp>C  s>       1x4''AO' q'''r!   c                 h    g | ].}|d          k    |d                               dz             ,|/S )r   r9   )r?   )r%  re   badroots     r"   r(  z&svn_source.gettags.<locals>.<listcomp>S  sJ          Q47?? !!$ ? ? + *??r!   )r  rJ   rz   get_latest_revnum_getlogr   rj   r,  popr?   r<   r   r+  addr>   r   r3   r   )rd   r  pendingstagspathr   streamr   	origpathsrB   rn   r,   ro   r0  srctagspathsource	sourcerevdesttagtagpathaddedsbadrootsdestroot	renamingstagnametagidrT  s                            @r"   gettagszsvn_source.gettags  s   9K 9((11tyk5$-@@S	 P' P';@8	664  # "I  ) 1 1   D)))& 2fRjmx77"(**,,q/K/5 	C 	C+FIt??8d?;; ! ' C Cq6,,T22 "&,s1vc$iikk/B&BG'.	&:CG!E"
 !D(ABBB  ) 1 1  
 55 &  H3;  /	4#$tO    %#..vh/?$/FGG% % X...'  G       !)     HH 	/7  +FIt"jj..r2G((55 !!((&)W)EFFF $ 	 $FI > >  2WD%8%8,1DM*   
  %&aP'd LLNNNNFLLNNNNs1   G+J 	!I+*J +
I85J 7I88	J J-c           	      R   | j         sd S | j        9t          t          j                            | j         dd          d          | _        | j                            t          j        d|| 	                    |          fz                       | j        
                                 d S )Nr   	   hg-shamaps   abs   %s %d
)r   r   r   rP   rQ   r   writer   tonativeeolrB   r   )rd   r@   destrevs      r"   	convertedzsvn_source.convertedu  s    w 	F>!!TWg|<<e DN 	Z7DKK4D4D*EEFF	
 	
 	
 	r!   c                 *    d| j         |p| j        |fz  S )Ns   svn:%s%s@%d)rC   r   )rd   rB   r   s      r"   r  zsvn_source.revid  s    F,Adk6 JJJr!   c                 R    t          |                    d          d                   S )Nr8   rh   )r=   r>   rd   r@   s     r"   rB   zsvn_source.revnum  s    399T??2&'''r!   c                 B    d fd	}|                      j                  s j                            d|z             dS |$t          j                             j                  }	                      d          }t          j                             j        |	                    d          |          }                     |           n# t          j
        j        $ r d}Y nw xY w|s!t          t          d          ||fz             ||||j                  \  }}|0 |||          \  }}| j                            d|z             dS |                      j                  s j                            d|z             dS                      ||          S )	a]  Find the latest revid affecting path, up to stop revision
        number. If stop is None, default to repository latest
        revision. It may return a revision in a different module,
        since a branch may be moved without a change being
        reported. Return None if computed module does not belong to
        rootmodule subtree.
        Nc                                         | g||pd          }	 |D ]}|\  }}}}}	||r nz|||k    r np|D ]l}
|                     |
          r||
         j        s%||
         j        | t          |
          d          z   }j                            d| ||fz             |}  |sd }|| f|                                 S # |                                 w xY w)Nr   s#   branch renamed from %s to %s at %d
)rV  r?   ra   r<   r   debugr   )rQ   r   r@  r[  r   rq   rB   rn   r,   ro   re   newpathrd   s               r"   findchangesz&svn_source.latest.<locals>.findchanges  s"   \\4&%;;F#  E;@8E664|| 'FdNN" 	 	#q11 %q9O %$"'("84A>"IC#Wf56    ' "!Ft|s   BC Cs   ignoring foreign branch %r
r!   r9   s   %s not found up to revision %ds   ignoring empty branch %r
rW   )r?   r   r   ru  rJ   rz   rU  r>  statr   rM   rO   r3   r   created_revr  )rd   rQ   r@  rw  r   direntrB   realpaths   `       r"   r   zsvn_source.latest  s   	 	 	 	 	 	8 t// 	GMM9D@AAA4<6++DG44D	s++JV[[$**T*:*:DAAFMM*%%%%x+ 	 	 	FFF	 	!344d|C   ';tT63EFF>  +{466FH~;hFGGGt""4?33 	GMM9HDEEE4zz&(+++s   (A#C C%$C%c                     | j         |k    r|S | j        t          |          z   }| j         }|d}| j                            d|z             t
          j                            | j        |           || _         |S )z:Reparent the svn transport and return the previous parent.Nr!   s   reparent to %s
)r   r   rH   r   ru  rJ   rz   r>  )rd   r   svnurlr   s       r"   r>  zsvn_source.reparent  sw    ?f$$Mf-_
J)F2333((( r!   c                 N   t                      t                      }}i }t          |          dd          \  }}|| j        k    r!|| _        |                     | j                   | j                            t          d          t          d          t          |                    }	t          |          D ]2\  }
\  }}|		                    |
|           | 
                    |          }|                     ||          }|t          j        j        k    r|                    |                     |                     |j        r|st          |d                   dd          \  }}|j        |k     r| 
                    |j        |          }|s| j                            d|||j        fz             |                     |          ||                     |          <   .|dk    rv| j                            d|j        z             t          |d                   dd          \  }}|d	z   |z   }|                     |||          }|t          j        j        k    r*|                    |                     |                     |t          j        j        k    r|                    d	          }|                    d	          }|                     ||          }|D ][}|                    ||          }| 
                    d	|z   |          }|r(|                    |                     |                     \| j                            d
||fz             |t          j        j        k    rq|j        dk    r|j        dk    r|rt          |d                   dd          \  }}|                     |||          }|t          j        j        k    r)|                    |                     |                     np|t          j        j        k    r[|                     ||          D ]D}| 
                    d	|z             }|r(|                    |                     |                     E|                     ||          D ]D}| 
                    d	|z             }|r(|                    |                     |                     E|j        r|s&t          |d                   dd          \  }}|j        |k     rS| 
                    |j        |          }|sr| j                            d|||j        fz             |                     |j        |j                  }|D ]x}| 
                    d	|z   |          }|s||t          |          d          z   }| 
                    |          }|                     |          ||                     |          <   y4|	                                 |	                    |           t5          |          ||fS )Nr   s   scanning pathss   paths)unittotal)itemr   s   copied to %s from %s@%d
s   gone from %d
r9   s    unknown path in revision %d: %s
   M   Rs   mark %s came from %s:%d
)r+  rE   r   r>  r   makeprogressr   r<   	enumerateupdate
getrelpathr  rJ   rM   r$  rX  recodera   rb   ru  r  r   
_iterfilesreplacerc   completelist)rd   r@   rq   r/  changedr*  r0  
new_modulerB   progressr;  rQ   ent	entrypathrZ   pmoduleprevnumra   
parentpathfromkindorootnrootchildren	childpathpkindcopyfrompath
copytopaths                              r"   r)  zsvn_source.expandpaths  s)   55#%%%c]]122.
F$$$DKMM$+&&&7''  q{{#e** ( 
 
 (.. Z	M Z	MNA{cOOADO)))--I??9f55Dsx---DKK	22333(   $,GAJ#7#7#; #g-- $0A7 K K$ 0 -1ABC   26]1K1Kt{{9--../#2BBCCC#+GAJ#7#7#; $t^i7
??9gwGGsx555KKI 6 67777!666&,,T22E JJt,,E#ug>>H%- @ @	$-$5$5eU$C$C	$(OOD94Dg$N$N	$ @#KKI(>(>???	@ GMM<~M    ...:%% :%%'% (0
';';ABB'?$GW OOIwHHE 666DKK	$:$:;;;;#("777 *.')J)J D DI(,y8H(I(II( D 'DKK	,B,B C C C!%v!>!> < <I $y0@ A AI  <DKK	$:$:;;; (   $,GAJ#7#7#; #g--#s/@'JJ# 0\3+;<=    ??3+<c>NOO!) M MI $y0@' J JI$ ! !%	#l2C2C2E2E(F!FJ!%!<!<J6:kk)6L6LF4;;z2233wWw//r!   c                     |k     r|c}d  _          fd} j                            t          d           j        |fz             	 d }d}                      j        g|          }	 |D ][}|\  }}	}
}}|	 j        k     rd} nC|s& j                            d|	z             |p|	dk    }A |||	|
||          \  }}|r|}|r n\|                                 n# |                                 w xY w|s{|r{|j	        sv	  
                    |j                  }|dk    r<                      j        |dz
            }|r|j	                            |           d S d S d S # t          $ r Y d S w xY wd S d S d S # t          j        j        $ rI}|j        \  }}|t          j        j        k    r$t)          j        t          d          z             d }~ww xY w)	Nc                 f   j                             d|t          |           fz             d}                    |          }|j        v s|k     rd|fS g }t          |                                           } fd| D             }|r|d         \  }	}
|
j        rd}|
j        j        t          |	          d         z   }	                    ||
j
                  }|Zt          |          dd         \  }}|j        k    r5|g}j                             t          d          j        ||fz             nj                             d	           g }| D ]2\  }	}
                    |	          |                    |	|
f           3t#          |          }j                             d
d          rt'          |d                   }|r                    |          }nd}|r                    |          }nd}	 j                            d          d         }|j        k    rd}n# t.          $ r d}Y nw xY wt1          |t3          j        |d          ||||          }|j        |<   ||j        fj        |<   j        rj        j        s|gj        j        dd<   |_        ||fS )zlReturn the parsed commit object or None, and True if
            the revision is a branch root.
            s!   parsing revision %d (%d changes)
FNc                 R    g | ]#\  }}j                             |          ||f$S r    )r   r?   )r%  re   r'  rd   s      r"   r(  zFsvn_source._fetch_revisions.<locals>.parselogentry.<locals>.<listcomp>g  sF       1a1G1G1J1JA  r!   rh   Tr   s$   found parent of branch %s at %d: %s
s)   no copyfrom path, don't know what to do.
r   s   localtimezoner   r!   r9   s   %Y-%m-%d %H:%M:%S %1%2)rn   r,   descr/  r  r@   )r   ru  r<   r  r   r  rj   ra   r   r   rb   rE   r   r  r   r  r   r1   
configboolmakedatetimestampr  r>   r   
IndexErrorcommitr
   r+   r/  rq   
child_cset)rm   rB   rn   r,   ro   branchedr@   r/  
root_pathsrQ   r  rv  previdr   r  rq   logr  csetrd   	to_revnums                      r"   parselogentryz2svn_source._fetch_revisions.<locals>.parselogentryS  s?    GMM53z??+,  
 H**V$$C dl""fy&8&8X~%G  
 0 0 2 233J   #-  J  Q&rN	c$ Q#H!/$+c$iikk2JJG![[#2BCCF).6v.>.>qrr.B+
G"dm33'-hG GLL !"J K K#';"D!E  
 GMM"OPPPE' * *	c??4((0dC[))))%%Dw!!*.>?? 2(a11 kk'** V,,**4004T^++!F    %d,EFF  D !%DL  %dl3DJsO 3t'> 3.1U'*"DO>!s    -H. .H=<H=s-   fetching revision log for "%s" from %d to %d
FTs   revision %d has no entries
r   r   s   svn: branch has no revision %s)r  r   r  r   r   rV  r   ru  r   r/  rB   r@   r   r   r3   rJ   rM   rO   r   SVN_ERR_FS_NO_SUCH_REVISIONr   r   )rd   from_revnumr  r  	firstcsetlastonbranchr[  r   rq   rB   rn   r,   ro   r  firstrevnumr   xxx_todo_changemer   nums   ` `                r"   r?  zsvn_source._fetch_revisionsM  s   ""%."KU	" U	" U	" U	" U	" U	"n 	?@@{K34	
 	
 	

,	I L\\4;-iHHF#  E;@8E664--'+  !&E&NOOO (4'Bv{ )6vvtW* *&D,  )$(	#   I i6G "&++im"<"<K"Q!%T[+/!J!J! =%-44V<<<<< '= =&   DD      x+ 	 	 	+0KT3ch:::k7889D   	sQ   !E? 0AC# E? #C99E? AE( (
E62E? 5E66E? ?GAGGc                    || j         v rdS 	 t          |          dd          \  }}| j        |k    r!|| _        |                     | j                   t	                      }t
          j                            | j        |||          }|                                }|	                                 t          |t                    r|d         }d|v rdpd}d|v rdp|}nN# t
          j        j        $ r7}	t
          j        j        t
          j        j        f}
|	j        |
v rY d }	~	dS  d }	~	ww xY w|dk    r.d	}|                    |          r|t%          |          d          }||fS )
Nr   r   rh      svn:executable   xr!   s   svn:special   ls   link )r*  rE   r   r>  stringiorJ   rz   get_filegetvaluer   
isinstancer  rM   rO   SVN_ERR_FS_NOT_FOUNDSVN_ERR_RA_DAV_PATH_NOT_FOUNDapr_errr?   r<   )rd   filer@   r  rB   ioinfor   moder'  notfoundlink_prefixs               r"   getfilezsvn_source.getfile  s   4<:	!)#qrr!2J{j(((dk***B6??47D&"==D;;==D HHJJJ$%%  Bx%-74>3D"d*4<DDx+ 	 	 	-6H yH$$!zzzzz	 4<<"K{++ 0C,,../Tzs   CC D)2+D$#D$$D)c                                         d          t          j                                        }d                    | j        t                    g                               d          }t          j                            |t          |          d| j
        |          }rdz  fd|                                D             S )z3Enumerate all files in path at revnum, recursively.r9   Tc              3   \   K   | ]&\  }}|j         t          j        j        k    |z   V  'd S rW   r#  )r%  re   r'  rQ   s      r"   	<genexpr>z(svn_source._iterfiles.<locals>.<genexpr>  sI       
 
1v/// AX////
 
r!   )r   rJ   rM   Poolr   r   rH   rK   r
  r]   r   rj   )rd   rQ   rB   rp   r  r2  s    `    r"   r  zsvn_source._iterfiles  s    zz$x}}		4<t566<<TBB*--vf~~tTXtLL 	DLD
 
 
 

 
 
 	
r!   c                 j   || j         }|                    |          rQ|                    d          t          |          d          }|                    d          r
|dd          S |dk    r|S | j                            dt          j        |          t          j        |          fz             d S )Nr9   r   r!   s   %r is not under %r, ignoring
)r   r?   r  r<   r   ru  r   r  )rd   rQ   r   relatives       r"   r  zsvn_source.getrelpath  s    >[F ??6"" 	 {{4((V7H""4((  |#S 	-%%x'7'?'?@A	
 	
 	
 tr!   c                    ||                      d          }|dz   |z   }	 t          j                            | j        |                    d          |          ||                      |           S S # ||                      |           w w xY w)Nr!   r9   )r>  rJ   rz   
check_pathr   )rd   rQ   rB   r   r   s        r"   r  zsvn_source._checkpath#  s    s++JD=4'D	* 6$$TWdjj.>.>GG!j)))) "v!j)))) "s   8A2 2Br   TFc                 z   g }|D ]L}|                     d          s| j        dz   |z   }|                    |                    d                     M| j        ||||||g}	| j                            dd          s	t          |	 S t          |	          }
t          j
                    }dt          j        |          z  }t          j        |          \  }}|                    |
           	 |                                 n/# t          $ r" t!          j        t%          d                    w xY wt'          |          S )Nr9   r   s   svn.debugsvnlogs   %s debugsvnlogr   )r?   r   r   r   r   r   r  r   
encodeargsr   hgexecutable
shellquotepopen2rl  r   r|   r   r   r   r   )rd   rq   r   r   r   r   r   relpathsre   r   arghgexecmdstdinr   s                  r"   rV  zsvn_source._getlog/  s\     	+ 	+A<<%% +K$&*OOAGGDMM****L"
 w!!*.@AA 	*"D))%''("5e"<"<< ,,vC	KKMMMM 	 	 	+1   	    s   *C? ?,D+rW   )rC  r   )r4   r5   r6   rf   r   r  r  r   r   r3  r5  r<  rB  rI  rK  ri  ro  r  rB   r   r>  r)  r?  r  r  r  r  rV  __classcell__)r   s   @r"   r   r     s       A A A A A AF' ' '6 6 6! ! !
 
 
R R Rh  ,& & &% % %  ,   A A Ah h hT
 
 
K K K K( ( (K, K, K, K,Z  j0 j0 j0XN N N`  B
 
 
   .
* 
* 
* 
*" #!*! *! *! *! *! *! *! *!r!   r   s   #!/bin/sh

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

%(rules)s

echo "Changing prohibited revision property" >&2
exit 1
c                     g }| D ]\  }}|                     d||fz              t          dd                    |          iz  S )Ns>   if [ "$ACTION" = "%s" -a "$PROPNAME" = "%s" ]; then exit 0; fis   rules   
)r   pre_revprop_change_templater   )prop_actions_allowedrulesrc   propnames       r"   gen_pre_revprop_change_hookr  k  sh    E0 
 
# x 	!	
 	
 	
 	
 '(EJJu4E4E)FFFr!   c                       e Zd Z ej        dej                  Z ej        dej                  Zd Zd Z	d Z
d Zd Zd Zd	 Zed
             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )svn_sinks   Committed revision (\d+).s   Repository UUID:\s*(\S+)c                 J    | j         rt          j        | j                    d S d S rW   )r   rP   chdirr   s    r"   prerunzsvn_sink.prerun|  s.    7 	HTW	 	r!   c                 J    | j         rt          j        | j                   d S d S rW   )r   rP   r  cwdr   s    r"   postrunzsvn_sink.postrun  s.    7 	HTX	 	r!   c                 N    t           j                            | j        d|          S )Nr   rP   rQ   r   r   )rd   r   s     r"   r   zsvn_sink.join  s    w||DGWd333r!   c                 ,    |                      d          S )Nrk  r   r   s    r"   
revmapfilezsvn_sink.revmapfile  s    yy&&&r!   c                 ,    |                      d          S )Ns   hg-authormapr  r   s    r"   
authorfilezsvn_sink.authorfile  s    yy)))r!   c                 v	   t          j        dd           t          j        dd           t                              | |||           t                              | |d           g | _        g | _        g | _        g | _        d | _	        t          j                    | _        d}t          j                            t          j                            |dd                    r;t          j                            |          | _	        |                     d           nt'          j        d	|          s4t          j                            |          }t          j                            t          j                            |                    rt          j                            t          j                            |d
d                    sh|                    t3          d          t          j                            |          z             t	          |d                              d|           |}t7          j        |          }|                    d          sd|z   }d|z   }t          j                            t          j                    t          j                            |          dz             }|                    t3          d          t          j                            |          z             |                     d||           || _	        t=          j        | j	                  | _         t=          j        | j	                  | _!        tE          ||                     d                    | _#        t7          j$        | j	                  rt6          j%        | _&        nd | _&        |rg d}| j'        (                    dd          r|)                    d           t          j                            |dd          }tU          |d          }|+                    tY          |                     |-                                 t7          j.        |dd           |                     d          }	| j/                            |	          0                    d          1                                | _2        d S )Ns   svns
   subversion)debnames   svnadminFr   s   entriess   updates"   ^(file|http|https|svn|svn\+ssh)://r   s   fs-types!   initializing svn repository '%s'
s   creater9   s   file://s   -wcs#   initializing svn working copy '%s'
s   checkouts   hg-childmap))r  s   svn:log)rQ     hg:convert-branch)rQ     hg:convert-revr      svn.dangerous-set-commit-dates)r     svn:dater   s   pre-revprop-changes   wbTs   infor   )3r   	checktoolconverter_sinkrf   commandlinedeletesetexecdelexecr0  r   r   getcwdr  rP   rQ   isfiler   r{  run0rE  searchrR   dirnamer   statusr   basenamer   rS   r?   vfsmodr	   r   wopenermapfilechildmap	checkexecisexecis_execr   r  r   r   rl  r  r   setflagsuuid_regroupr   rC   )
rd   r   r   rQ   createdwcpathr  hookrt   outputs
             r"   rf   zsvn_sink.__init__  s   7777m<<<<b(D999T2v...?$$7>>"',,tWjAABB 	g&&t,,DGIIi    9CTJJ -w''--7==!6!677 -7>>T5*==  ' 		CDD g..t445   $B4499)TJJJ"&=..D??400 +#d{%,DW\\!!27#3#3D#9#9F#B F II9::'""6**+   IIk4000DGj))z$'**DIIn$=$=>>>$'"" 	 ;DLLDL 	-$ $ $  w!!=  A %++,?@@@7<<3HIIDdE""BHH01EFFGGGHHJJJM$t,,,7##L''//55a88>>@@			r!   c                 :    t          j        j        | j        g|R  S rW   r  )rd   namess     r"   wjoinzsvn_sink.wjoin  s    w|DG,e,,,,r!   c                    t                      }|                     ddd          }t          j        j                            |          }|                    d          D ]s}|j        D ]i}|j        |j	        k    s|j
        dk    rd                    d |j        D                       }|                    t          j        |                      t|S )Ns   lsT)	recursivexmlr   r    c              3   D   K   | ]}|j         |j        k    |j        V  d S rW   )nodeType	TEXT_NODEr   )r%  cs     r"   r  z$svn_sink.manifest.<locals>.<genexpr>  s;         AJ!+4M4MAF4M4M4M4M r!   )r+  r  r  domminidomparseStringgetElementsByTagName
childNodesr  ELEMENT_NODEtagNamer   rX  r   
unitolocal)rd   mr  docr'  r&  r   s          r"   manifestzsvn_sink.manifest  s    
 EE5Dd;;go))&11))'22 	 	A\  ://193F3Fww  $%L     h)$//000r!   c                    d|v r| j                             ||           d S 	 t          j                            |                     |                    rt          j        |           n# t          $ r Y nw xY w| j        r\d}t          j        	                    |                     |                    r(|                     |                     |                    }| j         
                    ||           | j        rl|rd|vr| j                            |           nd|v r| j                            |           t          j        |                     |          dd|v            d S d S )Nr  Fr  )r  symlinkrP   rQ   islinkr  unlinkOSErrorr  r   rl  r  r   r  r   r	  )rd   filenameflagsr   wasexecs        r"   putfilezsvn_sink.putfile  sw   5==L  x000007>>$**X"6"677 (Ih'''    | A  7>>$**X"6"677 A"ll4::h+?+?@@GLx...| J 65((++H555u}}++H555djj22E45=IIIIIJ Js   AA* *
A76A7c                    |                      |          }t          j                            |          }|rst	          j        dt          j                            |                    \  }}t          j        |           t          j        |           t          j	        ||           	 | 
                    d||           | j                            |           |r=	 t          j        |           n# t          $ r Y nw xY wt          j	        ||           d S d S # | j                            |           |r<	 t          j        |           n# t          $ r Y nw xY wt          j	        ||           w w xY w)Ns   hg-copy-)prefixdirs   copy)r  rP   rQ   lexistsr   mkstempr  r   r)  renamer  r%  rX  r*  )rd   r^  r`  wdestr   fdtempnames          r"   	_copyfilezsvn_sink._copyfile  s    

4  '' 	'#+"(>(>  LB HRLLLIhIeX&&&		+IIgvt,,,Md### +Ie$$$$   D	(E*****+ + Md### +Ie$$$$   D	(E****+sB   +D C4 4
D DE7;EE7
EE7EE7c                 D   t                      }|D ]t          j                            |                                         r|                               t                    t          fdd          D ]|                    d                      |S )Nc                  2                          dd          S )Nr9   r   )r   )r:  r;  s   r"   r   z"svn_sink.dirs_of.<locals>.<lambda>,  s    !''$1"5"5 r!   rh   )r+  rP   rQ   rR   r  rX  r<   iter)rd   r1  dirsr:  r;  s      @@r"   dirs_ofzsvn_sink.dirs_of&  s    uu 	  	 Aw}}TZZ]]++ AA55555r::    2A2 r!   c                       fdt                               |                    D             }|r3 j                            |                                |ddd           |S )Nc                 &    g | ]}|j         v|S r    r%  )r%  drd   s     r"   r(  z%svn_sink.add_dirs.<locals>.<listcomp>1  s,     
 
 
at}6L6LA6L6L6Lr!      addT)non_recursivequiet)r  r=  r%  r  xargs)rd   r1  add_dirss   `  r"   rF  zsvn_sink.add_dirs0  s    
 
 
 
dll51122
 
 
  	IM  ***JJxt4JHHHr!   c                       fd|D             }|r2 j                             |                                |dd           |S )Nc                 &    g | ]}|j         v|S r    r@  )r%  r:  rd   s     r"   r(  z&svn_sink.add_files.<locals>.<listcomp>:  s%    <<<qQdm%;%;%;%;%;r!   rB  T)rD  )r%  r  rE  )rd   r1  s   ` r"   	add_fileszsvn_sink.add_files9  sW    <<<<E<<< 	2M  '''JJufDJ111r!   c                     || j         |<   d S rW   )r  )rd   parentchilds      r"   addchildzsvn_sink.addchild@  s     %fr!   c                     d| j         |fz  S )Ns	   svn:%s@%s)rC   rr  s     r"   r  zsvn_sink.revidC  s    ty#...r!   c	                 	   |D ]4}		 |                      | j        |	                   c S # t          $ r Y 1w xY w|D ]x\  }
}|                    |
|          \  }}|| j                            |
           ;|                     |
||           |
|v r"| j                            ||
         |
g           y|r?| j                            t          | j
                            |                               d |D             }t          | j                  }t          |          }|                    |                     |                    |                               | j        r*| j        D ]\  }}|                     ||           g | _        | j        rF|                     | j        d           | j        D ]}
| j
                            |
           g | _        |                    |                     |                    |                               | j        r#|                     | j        dd           g | _        | j        r$|                     | j        ddd           g | _        t-          j        d          \  }}t1          j        |d	          }|                    t7          j        |j                             |                                 	 |                     d
tA          j!        |j"                  |d          }	 | j#        $                    |          %                    d          }n# tL          $ r |s"|r|d         ndcY t1          j'        |           S | j(        )                    tU          d                     | j(        )                    |           tW          j,        tU          d                    w xY w|j-        r| .                    dd|j-        d|           |j/        r*|j/        dk    r| .                    dd|j/        d|           | j(        0                    dd          rJtc          j2        |j3                  }|d         df}| .                    ddti          |          d|           |D ]}	| 5                    |	|           |                      |          t1          j'        |           S # t1          j'        |           w xY w)Nc                     g | ]
}|d          S r8  r    r9  s     r"   r(  z&svn_sink.putcommit.<locals>.<listcomp>Z  s    %%%!1%%%r!   s   deletes   propdelr  s   propset   *s   hg-convert-)r0  wbs   commits   utf-8)usernamer  r   r   r   s   Nones   unexpected svn output:
s   unable to cope with svn outputr  T)revproprevisions   defaultr  r   r  r  )6r  r  KeyErrorr  r  r   r.  r0  extendr  r%  
differencer+  	frozensetr  rF  r8  rE  removerI  r  r  r   r3  rP   fdopenrl  r   rm  r  r   r  r   	shortuserrn   	commit_rer  r  r   r)  r   r   r   r   r   r@   runr  r  r
   r0   r,   r-   rM  )rd   r1  r0  r/  r  r^  r  r.  cleanp2rK  r:  rs   r   r  r2  r(   rA  r6  messagefilert   r  r@   r,   s                          r"   	putcommitzsvn_sink.putcommitF  s'     	 	Fzz$-"788888     	7 	7DAq1--JD$|""1%%%%Qd+++;;K&&q	1~666 	HKvdm&>&>u&E&EFFGGG%%u%%%dk""%  t}}U%5%5g%>%>??@@@; 	 % %1q!$$$$DK; 	JJt{I...[ ( ($$Q''''DKt~~e&6&6w&?&?@@AAA< 	JJt|Z1BCCCDL< 	JJt|Z1BDIIIDL"*.AAAKYr4  
!&+..///



4	#YY#-fm<< !	   FHn++F3399!<<! H H H >)0=71::g==R Ik""""Q Q:;;<<<V$$$k!$E"F"FGGGH z %J       } *!<!<(M       w!!=    )&+66Q| !$''       " + +fc****::c??Ik""""BIk""""s>   (
550S -L9 8S 9O
S 'A#O

C.S S#c                 T    | j                             t          d                     dS )Ns/   writing Subversion tags is not yet implemented
r   )r   r   r   )rd   r  s     r"   puttagszsvn_sink.puttags  s$    QJKKLLLzr!   c                     dS )NTr    rr  s     r"   hascommitfrommapzsvn_sink.hascommitfrommap  s	     tr!   c                 `    || j         v rdS t          j        t          d          |z            )NTs_   splice map revision %s not found in subversion child map (revision lookups are not implemented))r  r   r   r   rr  s     r"   hascommitforsplicemapzsvn_sink.hascommitforsplicemap  sG     $-4kD  	
 
 	
r!   N)r4   r5   r6   rE  compileMr]  r
  r  r  r   r  r  rf   r  propertycacher%  r.  r8  r=  rF  rI  rM  r  ra  rc  re  rg  r    r!   r"   r  r  x  sw       
8"$??Ibj5rt<<G    4 4 4' ' '* * *HA HA HAT- - -   ].J J J8+ + +0      & & &/ / /b# b# b#H    

 
 
 
 
r!   r  r   )Kr   r   rP   rk   rE  xml.dom.minidomr  mercurial.i18nr   mercurial.pycompatr   	mercurialr   r   r   r   r	   r  mercurial.utilsr
   r   r   r  r   r  rj  r   rG   r  r  r  converter_sourcer   r  r  r  r   r   rJ   
svn.clientsvn.coresvn.ra	svn.deltar   warningsfilterwarningsDeprecationWarningrM   rO   ImportErrorr   r#   r)   r-   r1   r}   r3   rE   rH   rU   r]   r_   r   r   r   r  r   r   r   r   r   r   r  r  r  r    r!   r"   <module>ry     s9  
   				  				           # # # # # #                            ="		 	&* 

, 
. 	JJJOOOMMMOOOH.@    H      
CCC 
C C C"4 4 4@ @ @H H H	 	 	 	 	i 	 	 	  61 1 10 0 00          , , , ,^& & &               >% % % % %d % % %V  : : :4  K K KxN! N! N! N! N!! N! N! N!b 
G 
G 
GF
 F
 F
 F
 F
~{ F
 F
 F
 F
 F
s   &=C$ $C.-C.