
    	^cF                         d dl Z d dlmZ d dlmZmZ ddlmZ ej        Zd Z	d Z
 G d d	          Z G d
 dej                  ZdS )    N)_)errorpycompat   )commonc              #      K   t          |           }|dk    r6| d|         | |dz   d         fV  |                     dd|          }|dk    6d| fV  dS )a  Yield 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      sy       	D		A
r''2A2hQUWW%%%%JJtQ"" r'' *    c                 2    | dS t          j        |           S )z}We use posixpath.normpath to support cross-platform path format.
    However, it doesn't handle None input. So we wrap it up.N)	posixpathnormpath)r   s    r   	normalizer   $   s     |td###r   c                   8    e Zd ZdZd	dZd Zd Zd Zd Zd Z	dS )

filemapperzMap and filter filenames when importing.
    A name can be mapped to itself, a new name, or None (omit from new
    repository).Nc                     || _         i | _        i | _        i | _        d | _        |r6|                     |          r#t          j        t          d                    d S d S )Ns   errors in filemap)	uiincludeexcluderenametargetprefixesparser   Abortr   )selfr   r   s      r   __init__zfilemapper.__init__1   so    " 	;zz$ ;k!$8"9"9:::	; 	;; ;r   c                     d} fd}t          j        |d                                          }|r|dk    rBt                                                    }| || j        d          z  }| j        |<   nP|dk    rVt                                                    }| || j        d          z  }| || j        d          z  }| j        |<   n|dk    rbt                                                    }t                                                    }| || j        d          z  }| j        |<   n|dk    r8|                     t                                                              z  }nN j        	                    t          d	          j        j        t          j        |          fz             |d
z  }                                }||S )Nr   c           	         | s9j                             t          d          j        j        |fz             dS | |v r:j                             t          d          j        j        | |fz             dS |                     d          s|                     d          sd| v rLj                             t          d          j        j        |t          j        |           fz             dS dS )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lexr!   s      r   checkzfilemapper.parse.<locals>.check>   s    788z3:x89   qw788z3:tX>?   qt$$ d(;(; u}}899z3:x9I$9O9OPQ   q1r   s   !@#$%^&*()-=+[]{}|;:,./<>?)filepath	wordcharss   includes   excludes   renames   sources   %s:%d: unknown directive %r
r   )r   shlexer	get_tokenr   r   r   r   r   r   r%   r   r&   r'   r   r*   )	r!   r   errsr/   cmdr+   srcdestr.   s	   `       @r   r   zfilemapper.parse;   s   	 	 	 	 	 	* n%B
 
 
 mmoo 	"j   11dDL*===%)T""
"" 11dDL*===dDK;;;%)T""	!!00 11c4<<<<#'C  	!!

9S]]__#=#=>>>677z3:x/?/D/DEF   	--//C/  	"0 r   c                     t          |          }t          |          D ]"\  }}	 ||         ||fc S # t          $ r Y w xY wd|dfS )Nr   )r   r   KeyError)r!   r+   r,   presufs        r   lookupzfilemapper.lookupq   sn    t 	 	HCs|S#----   D#~s   
2
??c                 0   | j         Lt                      | _         | j                                        D ]\  }}| j                             |            | j         r	d| j         v rdS t          |          }t          |          D ]\  }}|| j         v r dS dS )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.Nr   TF)r   setr   itemsaddr   r   )r!   filenamebeforeafterr:   r;   s         r   istargetfilezfilemapper.istargetfilez   s     &"%%%D!%!2!2!4!4 / /#''.... " 	dd.A&A&A4X&&x(( 	 	HC
 d)))tt *ur   c                    | j         r"|                     || j                   d         }n|}| j        r"|                     || j                  d         }nd}| j         s|s t          |          t          |          k    rd S |                     || j                  \  }}}|r.|dk    r|S |r"|                    d          r||z   S |dz   |z   S |S |S )Nr   r   r   r
   )r   r<   r   r   r   r)   )r!   r+   incexcnewprer:   r;   s          r   __call__zfilemapper.__call__   s    < 	++dDL11!4CCC< 	++dDL11!4CCC 	 	#c((c#hh*>*>4;;tT[99S 	~~
 +??4(( (!C<'}s**Mr   c                 F    t          | j        p| j        p| j                  S N)boolr   r   r   r!   s    r   activezfilemapper.active   s     DL?DL?DK@@@r   rK   )
__name__
__module____qualname____doc__r"   r   r<   rD   rI   rN    r   r   r   r   ,   s         ; ; ; ;4 4 4l    0  ,A A A A Ar   r   c                        e Zd Z f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 Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )filemap_sourcec                 L   t          t          |                               ||j                   || _        t          ||          | _        i | _        i | _        i | _        d | _	        d| _
        i | _        i | _        i | _        | j                            dd          | _        d S )NFs   converts   ignoreancestorcheck)superrU   r"   repotypebaser   commits	parentmapwantedancestorsconvertedorder_rebuiltorigparentschildrenseenchildrenr   
configboolignoreancestorcheck)r!   r   baseconverterfilemap	__class__s       r   r"   zfilemap_source.__init__   s    nd##,,R1GHHH!	$R11   ""#'7#5#5.$
 $
   r   c                 8    | j                                          d S rK   )rY   rB   rM   s    r   rB   zfilemap_source.before   s    	r   c                 8    | j                                          d S rK   )rY   rC   rM   s    r   rC   zfilemap_source.after   s    	r   c                 n   | | _         t          t          i}t                      }g }|j        D ]g}||         }||v}|r|||<   || j        |<   n||         | j        |<   || j        |<   ||         }|t          k    rd }|                    |||f           h|| _        | j        	                    |          S rK   )
r^   SKIPREVr>   orderr[   r\   appendr]   rY   	setrevmap)	r!   revmapseendummyset	convertedrevmappedwantedargs	            r   rm   zfilemap_source.setrevmap   s     #
!55	< 	1 	1CC[F4'F 3"V&)s##&*6ls#(0D %v,Cg~~c63/0000'y""6***r   c                    | j         rdS d| _         | j                                         | j                                         | j                                         | j        D ]\  }}}|| j        vrV	 |                     |          j        | j        |<   n2# t          j
        $ r  | j                            d|z             Y aw xY w|&| j                            |d          dz   | j        |<   | j        D ]b\  }}}	 | j        |         }n# t          $ r Y !w xY w|r|                     ||           n|                     ||            | j        |g|R   cdS )NTs   unknown revmap source: %s
r   r   )r^   r[   clearr\   ra   r]   r_   	getcommitparentsr   RepoLookupErrorr   debugr`   getr9   mark_wantedmark_not_wanted_discard)r!   rr   rt   ru   ry   s        r   rebuildzfilemap_source.rebuild   s   = 	4""$$$!!! $ 3 	C 	CC$***,0NN3,?,?,GD$S)),   GMM"@3"FGGGH %)]%6%6sA%>%>%Bc" $ 3 		) 		)C*3/    /  g....$$S#...DM#((((((ts$   3"B,CC?D
DDc                 4    | j                                         S rK   )rY   getheadsrM   s    r   r   zfilemap_source.getheads  s    y!!###r   c                     | j                             |          x}| j        |<   |j        D ](}| j                            |d          dz   | j        |<   )|S Nr   r   )rY   rx   rZ   ry   r`   r|   )r!   rr   cps       r   rx   zfilemap_source.getcommit  sa     !%	 3 3C 8 88DL 	; 	;A#}00A66:DM!r   c                 4    | j                                         S rK   )rY   
numcommitsrM   s    r   r   zfilemap_source.numcommits  s    y##%%%r   c                 b    || j         v r| j         |         S | j                            |          S rK   )rZ   rY   rx   r!   rr   s     r   _cachedcommitzfilemap_source._cachedcommit"  s2    $,<$$y""3'''r   c                 4   |D ]}|| j                             |d          dz   | j         |<   | j         |         | j        |         k    rM| j                            |d            | j                            |d            | j         |= | j        r| j        |= d S r   )ra   r|   r`   r\   popr[   r^   )r!   revsrs      r   r   zfilemap_source._discard'  s     		) 		)Ay#'#4#8#8A#>#>#BDa  #t}Q'777$((D111""1d+++%a(= )a(		) 		)r   c                    	 | j                             ||          }n/# t          $ r" t          j        t          d                    w xY w|D ]}|                     |          r dS | j        j        rdS | od| j        |         j	        vS )Ns+   source repository doesn't support --filemapTF   close)
rY   getchangedfilesNotImplementedErrorr   r    r   r   r   rZ   extra)r!   rr   r   filesfs        r   rt   zfilemap_source.wanted3  s    	QI--c155EE" 	Q 	Q 	Q+a NOOPPP	Q 	 	Aq!! tt
 ?" 	5 yDXT\#->-DDDs	    ,A
c                     |!t           | j        |<   t           h| j        |<   d S | j        |         | j        |<   | j        |         | j        |<   d S rK   )rj   r[   r\   )r!   rr   r   s      r   r~   zfilemap_source.mark_not_wantedO  s[     9 #*DN3)0	D %F #nQ/s$($8$;S!!!r   c                 *   || j         |<   t                      }|D ]X}|| j        v r!|                    | j        |                    ,| j                            t          d          ||fz             Y|                    |           || j        |<   d S )Ns!   warning: %s parent %s is missing
)r[   r>   r\   updater   r%   r   r@   )r!   rr   ry   wrevr   s        r   r}   zfilemap_source.mark_wanted^  s     "s uu 	 	AD(((D034444;<<QxG    	$(S!!!r   c                      j         |         j        }t          |          dk    r j        s                                  g }t                      } j         |         j        }d}t          |          D ]\  } j                 t          k    s|v r" j         ot           fd|D                       }	|	s5|s3t          |          dk    r                                j        |k    rd}|                    ||	f           |                               |rd |D             }d }
|r&t          d |D                       }
d |D             }n|rd}
| j        |<   d}d	 j         |         j        v r fd
|D             }||v rd}t          |          dk     rn|sl                     ||
          sVd }|r||
         }                     ||            j                            |d|f             j        |   j        |         S | j         |         _                             ||            j                            |dd f             j        |   j                            ||          \  }}}i }t          |          }|D ]H\  }}                     |          }|r,||k    s||vr"||f||<   ||k    r|                    |           It5          |                                          }i }|D ];}                     |          }|r"                     ||                   }|r|||<   <|||fS )Nr   Fc              3   h   K   | ],}|k    r$j         |         k    rj        |         v (|V  -d S rK   )r[   r\   ).0p2mp1p1r!   s     r   	<genexpr>z,filemap_source.getchanges.<locals>.<genexpr>  s_       > >884>"---4/333	  4333> >r   Tc                 "    g | ]}|d          
|S )   rS   r   r   s     r   
<listcomp>z-filemap_source.getchanges.<locals>.<listcomp>  s!    888a1Q48888r   c              3   &   K   | ]}|d          V  dS )   NrS   r   s     r   r   z,filemap_source.getchanges.<locals>.<genexpr>  s&      ,,aQqT,,,,,,r   c                     g | ]
}|d          S )r   rS   r   s     r   r   z-filemap_source.getchanges.<locals>.<listcomp>  s    ///!///r   r   r   c                 D    g | ]}                     |          j        S rS   )r   branch)r   r   r!   s     r   r   z-filemap_source.getchanges.<locals>.<listcomp>  s*    HHH!++A..5HHHr   r   )rZ   ry   r   rc   r   r>   r   	enumerater[   rj   anyr   rl   r@   maxr_   r   rt   r~   r]   r   r}   rY   
getchangesr   discardsortedr?   )r!   rr   fullry   mparentsknownparentsr   hasbranchparentr   
isancestorwpclosed	pbranchesr   changescopiescleanp2r   ncleanp2r   r   newfncopiesr   newc	newsourcer   r   s   `                         @@r   r   zfilemap_source.getchangess  s	   ,s#+w<<!D$<LLNNN" uuc")w'' 	" 	"EAr.$Cg~~!4!4!55 # > > > > > >!> > > ; ;J  +o +#g,,:J:J%%b))0F::&*OOORa4555S!!!!  	9888888H 	,,8,,,,,B//h///HH 	B 't|C(... IHHHxHHHI""x==1VDKKR4H4H A  BK  a(((&&UA777DM7##>#&& %-S!g&&&""Ct#4555w
 $(9#7#7T#B#B w<< 	( 	(DAq??1%%D (d%&7&7 !fd199$$Q'''u{{}}%% 	. 	.A??1%%D . OOF1I66	 .$-GDMgx''r   c                 6    | j                             |          S rK   )r   rD   )r!   targetfilenames     r   targetfilebelongstosourcez(filemap_source.targetfilebelongstosource  s    ++N;;;r   c                 B    |\  }}| j                             ||          S rK   )rY   getfile)r!   r+   rr   realnamerealrevs        r   r   zfilemap_source.getfile  s$    'y  7333r   c                 4    | j                                         S rK   )rY   gettagsrM   s    r   r   zfilemap_source.gettags  s    y  """r   c                 4    | j                                         S rK   )rY   hasnativeorderrM   s    r   r   zfilemap_source.hasnativeorder  s    y'')))r   c                 6    | j                             |          S rK   )rY   	lookuprevr   s     r   r   zfilemap_source.lookuprev  s    y""3'''r   c                 4    | j                                         S rK   )rY   getbookmarksrM   s    r   r   zfilemap_source.getbookmarks  s    y%%'''r   c                 <    | j                             ||           d S rK   )rY   rq   )r!   rr   sinkrevs      r   rq   zfilemap_source.converted  s     	C)))))r   )rO   rP   rQ   r"   rB   rC   rm   r   r   rx   r   r   r   rt   r~   r}   r   r   r   r   r   r   r   rq   __classcell__)rf   s   @r   rU   rU      sk       
 
 
 
 
*    + + +>  <$ $ $  & & &( ( (

) 
) 
)E E E8< < <) ) )*h( h( h(T< < <4 4 4# # #* * *( ( (( ( (* * * * * * *r   rU   )r   mercurial.i18nr   	mercurialr   r    r   rj   r   r   r   converter_sourcerU   rS   r   r   <module>r      s                          
.   $ $ $}A }A }A }A }A }A }A }A^v* v* v* v* v*V, v* v* v* v* v*r   