
    6hI                    J   S SK Jr  S SKrS SKrS SKJrJrJrJrJrJ	r	J
r
  S SKJr  S SKJrJr  SSKJr  \R$                  (       a  S SKJr  \R*                  rSS	 jr\R$                  (       a  \
SS
 j5       r\
SS j5       rS r " S S5      r " S S\R2                  5      rg)    )annotationsN)IteratorMappingMutableMappingOptionalSetTupleoverload)_)errorpycompat   )common)uic              #     #    [        U 5      nUS:w  a)  U SU XS-   S 4v   U R                  SSU5      nUS:w  a  M)  SU 4v   g7f)zYield tuples with path split at '/', starting with the full path.
No leading, trailing or double '/', please.
>>> for x in rpairs(b'foo/bar/baz'): print(x)
('foo/bar/baz', '')
('foo/bar', 'baz')
('foo', 'bar/baz')
('.', 'foo/bar/baz')
Nr      /r      .)lenrfind)pathis     7/usr/lib/python3/dist-packages/hgext/convert/filemap.pyrpairsr   %   sW      	D	A
r'2AhUW%%JJtQ" r' *s
   9AAc                    g N r   s    r   	normalizer   7           c                    g r   r   r   s    r   r   r   ;   r    r!   c                6    U c  g[         R                  " U 5      $ )zyWe use posixpath.normpath to support cross-platform path format.
However, it doesn't handle None input. So we wrap it up.N)	posixpathnormpathr   s    r   r   r   @   s     |d##r!   c                  z    \ rS rSr% SrS\S'   S\S'   SSS jjrSS	 jr      SS
 jrSS jr	SS jr
SS jrSrg)
filemapperH   zxMap and filter filenames when importing.
A name can be mapped to itself, a new name, or None (omit from new
repository).zMutableMapping[bytes, bytes]renamezOptional[Set[bytes]]targetprefixesNc                    Xl         0 U l        0 U l        0 U l        S U l        U(       a6  U R                  U5      (       a  [        R                  " [        S5      5      eg g )Ns   errors in filemap)	r   includeexcluder)   r*   parser   Abortr   )selfr   r   s      r   __init__filemapper.__init__P   sU    "zz$kk!$8"9::   r!   c                  ^ ^ SnSUU 4S jjn[         R                  " USS9mTR                  5       nU(       Ga  US:X  a@  [        TR                  5       5      nX#" UT R                  S5      -  nUT R
                  U'   GOBUS:X  aU  [        TR                  5       5      nX#" UT R
                  S5      -  nX#" UT R                  S5      -  nUT R                  U'   OUS:X  aX  [        TR                  5       5      n[        TR                  5       5      nX#" UT R                  S5      -  nUT R                  U'   OUS:X  a,  UT R                  [        TR                  5       5      5      -  nOWT R                  R                  [        S	5      TR                  TR                  [        R                  " U5      4-  5        US
-  nTR                  5       nU(       a  GM  U$ )Nr   c           	     &  > U (       d?  TR                   R                  [        S5      TR                  TR                  U4-  5        gX;   a?  TR                   R                  [        S5      TR                  TR                  X4-  5        gU R                  S5      (       d  U R                  S5      (       d  SU ;   aT  TR                   R                  [        S5      TR                  TR                  U[        R                  " U 5      4-  5        gg)Ns   %s:%d: path to %s is missing
r   s   %s:%d: %r already in %s list
r   s   //s   %s:%d: superfluous / in %s %r
r   )	r   warnr   infilelineno
startswithendswithr   bytestr)namemappinglistnamelexr0   s      r   checkfilemapper.parse.<locals>.check]   s    78zz3::x89 78zz3::t>? t$$d(;(;u}89zz3::x9I9I$9OPQ r!   s   !@#$%^&*()-=+[]{}|;:,./<>?)filepath	wordcharss   includes   excludes   renames   sources   %s:%d: unknown directive %r
r   )r;   bytesr=   rC   )r   shlexer	get_tokenr   r-   r,   r)   r.   r   r5   r   r6   r7   r   r:   )	r0   r   errsr?   cmdr;   srcdestr>   s	   `       @r   r.   filemapper.parseZ   s   	 	* nn%B
 mmoj  1dDLL*==%)T"
" 1dDLL*==dDKK;;%)T"	!0 1c4<<<<#'C 	!

9S]]_#=>>67zz3::x/?/?/DEF 	--/C/ c0 r!   c                z    [        U5      n[        U5       H  u  p4 X#   X44s  $    SUS4$ ! [         a     M"  f = f)Nr!   )r   r   KeyError)r0   r;   r<   presufs        r   lookupfilemapper.lookup   sQ     tHC|S-- %
 D#~  s   ,
::c                \   U R                   cM  [        5       U l         U R                  R                  5        H   u  p#U R                   R	                  U5        M"     U R                   (       a  SU R                   ;   a  g[        U5      n[        U5       H  u  pEX@R                   ;   d  M    g   g)zReturn true if the given target filename is covered as a destination
of the filemap. This is useful for identifying what parts of the target
repo belong to the source repo and what parts don't.r   TF)r*   setr)   itemsaddr   r   )r0   filenamebeforeafterrM   rN   s         r   istargetfilefilemapper.istargetfile   s     &"%%D!%!2!2!4##''. "5
 ""dd.A.A&AX&x(HC
 ))) ) r!   c                   U R                   (       a  U R                  XR                   5      S   nOUnU R                  (       a  U R                  XR                  5      S   nOSnU R                   (       d  U(       d  [        U5      [        U5      ::  a  g U R                  XR                  5      u  pEnU(       a3  US:X  a  U$ U(       a"  UR                  S5      (       a  XF-   $ US-   U-   $ U$ U$ )Nr   r!   r   r   )r,   rO   r-   r   r)   r9   )r0   r;   incexcnewprerM   rN   s          r   __call__filemapper.__call__   s    <<++dLL1!4CC<<++dLL1!4CC#c(c#h*>;;t[[9S~
??4((!<'}s**Mr!   c                x    [        U R                  =(       d    U R                  =(       d    U R                  5      $ r   )boolr,   r-   r)   r0   s    r   activefilemapper.active   s#    DLL?DLL?DKK@@r!   )r-   r,   r)   r*   r   r   )r   uimod.uir   Optional[bytes]returnNone)r   rf   rg   int)r;   rC   r<   zMapping[bytes, bytes]rg   zTuple[bytes, bytes, bytes])rU   rC   rg   ra   )r;   rC   rg   rf   rg   ra   )__name__
__module____qualname____firstlineno____doc____annotations__r1   r.   rO   rX   r^   rc   __static_attributes__r   r!   r   r'   r'   H   sM     )(((;4l		$9		#	0,Ar!   r'   c                     ^  \ rS rSr      SU 4S jjrSS jrSS jrS rSS jrS r	SS jr
S	 rS
 rSS jrSS jrSS jrSS jrS rSS jrS rS rSS jrS rS rS rSrU =r$ )filemap_source   c                  > [         TU ]  XR                  5        X l        [	        X5      U l        0 U l        0 U l        0 U l        S U l        SU l	        0 U l
        0 U l        0 U l        U R                  R                  SS5      U l        g )NFs   converts   ignoreancestorcheck)superr1   repotypebaser'   commits	parentmapwantedancestorsconvertedorder_rebuiltorigparentschildrenseenchildrenr   
configboolignoreancestorcheck)r0   r   baseconverterfilemap	__class__s       r   r1   filemap_source.__init__   s     	334!	$R1   ""#'77#5#5.$
 r!   c                8    U R                   R                  5         g r   )rx   rV   rb   s    r   rV   filemap_source.before   s    		r!   c                8    U R                   R                  5         g r   )rx   rW   rb   s    r   rW   filemap_source.after   s    		r!   c                z   U(       + U l         [        [        0n[        5       n/ nUR                   Hg  nX   nXb;  nU(       a  XRU'   XPR                  U'   OX&   U R                  U'   X0R
                  U'   X&   nU[        :X  a  S nUR                  XWU45        Mi     X@l        U R                  R                  U5      $ r   )
r}   SKIPREVrR   orderrz   r{   appendr|   rx   	setrevmap)	r0   revmapseendummyset	convertedrevmappedwantedargs	            r   r   filemap_source.setrevmap   s     #
!5	<<C[F'F"V&)s#&*ls#(0  %,Cg~c3/0   (yy""6**r!   c                ,   U R                   (       a  gSU l         U R                  R                  5         U R                  R                  5         U R                  R                  5         U R
                   Ho  u  pnXR                  ;  a)   U R                  U5      R                  U R                  U'   Uc  MC  U R                  R                  US5      S-   U R                  U'   Mq     U R
                   HS  u  pn U R                  U   nU(       a  U R!                  X5        OU R#                  X5        U R$                  " U/UQ76   MU     g! [        R                   a#    U R                  R                  SU-  5         GM  f = f! [         a     M  f = f)NTs   unknown revmap source: %s
r   r   )r}   rz   clearr{   r   r|   r~   	getcommitparentsr   RepoLookupErrorr   debugr   getrL   mark_wantedmark_not_wanted_discard)r0   r   r   r   r   s        r   rebuildfilemap_source.rebuild  s]   ==""$! $ 3 3C***,0NN3,?,G,GD$$S) %)]]%6%6sA%>%Bc" !4 !% 3 3C**3/   .$$S.MM#(( !4 # ,, GGMM"@3"FG  s$   
(E:F2FF
FFc                6    U R                   R                  5       $ r   )rx   getheadsrb   s    r   r   filemap_source.getheads7  s    yy!!##r!   c                    U R                   R                  U5      =o R                  U'   UR                   H/  nU R                  R                  US5      S-   U R                  U'   M1     U$ Nr   r   )rx   r   ry   r   r   r   )r0   r   cps       r   r   filemap_source.getcommit:  s[     !%		 3 3C 88LLA#}}00A6:DMM! r!   c                6    U R                   R                  5       $ r   )rx   
numcommitsrb   s    r   r   filemap_source.numcommitsB  s    yy##%%r!   c                t    XR                   ;   a  U R                   U   $ U R                  R                  U5      $ r   )ry   rx   r   r0   r   s     r   _cachedcommitfilemap_source._cachedcommitE  s0    ,,<<$$yy""3''r!   c                   U H  nUc  M  U R                   R                  US5      S-   U R                   U'   U R                   U   U R                  U   :X  d  MV  U R                  R	                  US 5        U R
                  R	                  US 5        U R                   U	 U R                  (       d  M  U R                  U	 M     g r   )r   r   r   r{   poprz   r}   )r0   revsrs      r   r   filemap_source._discardJ  s    Ay#'#4#4#8#8A#>#BDa   #t}}Q'77$$((D1""1d+%%a(===a( r!   c                b    U R                   R                  X5      nU H  nU R                  U5      (       d  M    g   U R                  R                  (       a  gU(       + =(       a    SU R                  U   R                  ;  $ ! [         a     [        R                  " [        S5      5      ef = f)Ns+   source repository doesn't support --filemapTF   close)
rx   getchangedfilesNotImplementedErrorr   r/   r   r'   r,   ry   extra)r0   r   r   filesfs        r   r   filemap_source.wantedV  s    	QII--c5E Aq!!  ??"" yDXT\\#->-D-DDD! # 	Q++a NOPP	Qs   B *B.c                    Uc(  [         U R                  U'   [         1U R                  U'   g U R                  U   U R                  U'   U R                  U   U R                  U'   g r   )r   rz   r{   )r0   r   r   s      r   r   filemap_source.mark_not_wantedr  sb     9 #*DNN3)0	D  % #nnQ/s$($8$8$;S!r!   c                2   XR                   U'   [        5       nU HZ  nX@R                  ;   a   UR                  U R                  U   5        M2  U R                  R                  [        S5      X4-  5        M\     UR                  U5        X0R                  U'   g )Ns!   warning: %s parent %s is missing
)rz   rR   r{   updater   r5   r   rT   )r0   r   r   wrevr   s        r   r   filemap_source.mark_wanted  s     "s uA(((D0034;<xG	  	$(S!r!   c                  ^ ^^ T R                   U   R                  n[        U5      S:  a!  T R                  (       d  T R	                  5         / n[        5       nT R                   U   R                  nSn[        U5       H  u  nmT R                  T   mT[        :X  d  TU;   a  M'  T R                  (       + =(       a    [        UUU 4S jU 5       5      n	U	(       d7  U(       d0  [        U5      S:  a!  T R                  T5      R                  U:X  a  SnUR                  TTX45        UR                  T5        M     U(       a  U V
s/ s H  oS   (       a  M  U
PM     nn
S nU(       a'  [        S U 5       5      nU V
s/ s H  oS   PM	     nn
O	U(       a  SnUT R                  U'   SnST R                   U   R                   ;   a2  U V
s/ s H  n
T R                  U
5      R                  PM      nn
Xm;   a  Sn[        U5      S	:  aw  U(       dp  T R#                  X5      (       dZ  S n
U(       a  X;   n
T R%                  X5        T R&                  R                  USU
45        T R(                  " U6   T R                  U   $ UT R                   U   l        T R+                  X5        T R&                  R                  USS 45        T R(                  " U6   T R,                  R/                  X5      u  pn0 n[        U5      nU HN  u  nnT R1                  U5      nU(       d  M   UU:w  d  UU;  d  M.  UU4UU'   UU:w  d  M=  UR3                  U5        MP     [5        UR7                  5       5      n0 nU H?  nT R1                  U5      nU(       d  M  T R1                  UU   5      nU(       d  M:  UUU'   MA     UUU4$ s  sn
f s  sn
f s  sn
f )
Nr   Fc              3     >#    U  H9  nTU:w  d  M  TTR                   U   :w  d  M   TTR                  U   ;   d  M5  Uv   M;     g 7fr   )rz   r{   ).0p2mp1p1r0   s     r   	<genexpr>,filemap_source.getchanges.<locals>.<genexpr>  sS      >!B8  4>>"--  4//33	 !s   
AAA	AT   c              3  *   #    U  H	  oS    v   M     g7f)   Nr   )r   r   s     r   r   r     s     ,8aqT8s   r   r   r   )ry   r   r   r   r   rR   branch	enumeraterz   r   anyr   r   rT   maxr~   r   r   r   r|   r   r   rx   
getchangesr'   discardsortedrS   )r0   r   fullr   mparentsknownparentsr   hasbranchparentr   
isancestorr   wpclosed	pbrancheschangescopiescleanp2r   ncleanp2r   r   newfncopiesr   newc	newsourcer   r   s   `                         @@r   r   filemap_source.getchanges  s_   ,,s#++w<!D$<$<LLN" uc"))w'EAr..$Cg~!4!555 # >!> ;J o#g,:J%%b)00F:&*OOORa45S!# (( #+88aQ48H8,8,,B&./h!hH/HB 't||C(... @HHx!++A.55xIH"x=1VDKK4H4H AK  (&&UA7MM7#>>#&& %-S!&""Ct#45w
 $(99#7#7#B w<DAq??1%Dtd%&7 !fd19$$Q'  u{{}%A??1%Dt OOF1I6	9$-GDM  gx''w 9 0 Is   N5N5?N:%N?c                8    U R                   R                  U5      $ r   )r'   rX   )r0   targetfilenames     r   targetfilebelongstosource(filemap_source.targetfilebelongstosource   s    ++N;;r!   c                @    Uu  p4U R                   R                  X45      $ r   )rx   getfile)r0   r;   r   realnamerealrevs        r   r   filemap_source.getfile  s    yy  33r!   c                6    U R                   R                  5       $ r   )rx   gettagsrb   s    r   r   filemap_source.gettags  s    yy  ""r!   c                6    U R                   R                  5       $ r   )rx   hasnativeorderrb   s    r   r   filemap_source.hasnativeorder
  s    yy''))r!   c                8    U R                   R                  U5      $ r   )rx   	lookuprevr   s     r   r   filemap_source.lookuprev  s    yy""3''r!   c                6    U R                   R                  5       $ r   )rx   getbookmarksrb   s    r   r   filemap_source.getbookmarks  s    yy%%''r!   c                :    U R                   R                  X5        g r   )rx   r   )r0   r   sinkrevs      r   r   filemap_source.converted  s    		C)r!   )r}   rx   r   ry   r|   r'   r   r~   rz   r   r{   )r   re   r   rf   rg   rh   )rg   rh   rj   )r   rC   )r   rC   rg   ra   )rk   rl   rm   rn   r1   rV   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq   __classcell__)r   s   @r   rs   rs      s    

4C
	
.+><$&(

)E8<)*h(T<4#*((* *r!   rs   )r   rC   rg   zIterator[Tuple[bytes, bytes]])r   rC   rg   rC   )r   rh   rg   rh   )
__future__r   r$   typingr   r   r   r   r   r	   r
   mercurial.i18nr   	mercurialr   r    r   TYPE_CHECKINGr   uimodr   r   r   r'   converter_sourcers   r   r!   r   <module>r     s    #      	 ..  
   $BA BAhx*V,, x*r!   