
    	^cOW                     $   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mZ d dlmZ ddlmZmZmZmZmZmZmZm
ZmZmZ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)ej*        Z*da+dd	Z,d
 Z-d Z.de!dfde"dfde*dfde&dfde#dfde'dfde$dfde dfde(dfg	Z/de%fde)fgZ0d Z1d Z2 G d d          Z3 G d d          Z4ddZ5dS )     N)_)open)encodingerrorhgpycompatscmutilutil)dateutil   )bzrcommoncvsdarcsfilemapgitgnuarchr   monotonep4
subversions   asciic           	         |i }t          |d          5 }|D ]6}|                                }|r|                    d          r/	 |                    dd          \  }}nK# t          $ r> t          d          }|                     |||                                fz             Y w xY w|                                }|                                }|                    |          d |fv r0t          d          }| 	                    |||fz             |||<   t          d          }| 
                    ||||         |fz             8	 d d d            n# 1 swxY w Y   |S )N   rb   #   =r   s,   ignoring bad line in author map file %s: %s
s   mapping author %s to %s
s5   overriding mapping for author %s, was %s, will be %s
)r   strip
startswithsplit
ValueErrorr   warnrstripgetdebugstatus)	ui
authorfileauthorsafileline	srcauthor	dstauthormsgms	            7/usr/lib/python3/dist-packages/hgext/convert/convcmd.pyreadauthormapr.   :   s   	j%	 	  FE 	F 	FD::<<D 4??400 '+zz$':':$	99   HIIz4;;==99:::
 "))I!))I{{9%%$	):::455	955666%.	"KLLAIIa9gi&8)DDEEEE-	FF F F F F F F F F F F F F F F0 Ns7   2EA"!E"AB*'E)B**B&EE!$E!c                    t          | t                    r-|                     t          j        t
                    d          S |                     d                              t          j        t
                    d          S )Nreplacezutf-8)
isinstancestrencoder   sysstrorig_encodingdecode)ss    r-   recoder8   X   se    !S 
xx66	BBBxx  ''OM**I
 
 	
    c                 f    |                     | pd|           } | s|                     d|           } | S )a  
    >>> bmap = {b'default': b'branch1'}
    >>> for i in [b'', None]:
    ...     mapbranch(i, bmap)
    'branch1'
    'branch1'
    >>> bmap = {b'None': b'branch2'}
    >>> for i in [b'', None]:
    ...     mapbranch(i, bmap)
    'branch2'
    'branch2'
    >>> bmap = {b'None': b'branch3', b'default': b'branch4'}
    >>> for i in [b'None', b'', None, b'default', b'branch5']:
    ...     mapbranch(i, bmap)
    'branch3'
    'branch4'
    'branch4'
    'branch4'
    'branch5'
    s   defaults   Noner!   )branch	branchmaps     r-   	mapbranchr>   a   s>    4 ]]6/Z88F  0w//Mr9   s   cvs
   branchsorts   gits   svns   hg
   sourcesorts   darcss   mtns   gnuarchs   bzrs   p4c                    g }|r7|d t           D             vr$t          j        t          d          |z            t           D ]T\  }}}	 |r||k    r || |||          |fc S "# t          t
          f$ r}|                    |           Y d }~Md }~ww xY w| j        s:|D ]7}|                     dt          j
        |j        d                   z             8t          j        t          d          |z            )Nc                     g | ]
}|d          S r    .0r7   s     r-   
<listcomp>z!convertsource.<locals>.<listcomp>   s    ===aQqT===r9   s"   %s: invalid source repository type   %s
r   s%   %s: missing or unsupported repository)source_convertersr   Abortr   NoRepoMissingToolappendquietwriter   bytestrargs)	r$   pathtyperevs
exceptionsnamesourcesortmodeinsts	            r-   convertsourcerZ      sB   J K==+<=====k!ABBTIJJJ"3 $ $fh	$ >44<<vb$d33X==== ($ 	$ 	$ 	$d########	$8 ? 	? 	?DHHWx/	!===>>>>
+a@AADH
I
IIs   
A%%B6BBc                    |r7|d t           D             vr$t          j        t          d          |z            t           D ]}\  }}	 |r||k    r || ||          c S # t          $ r/}|                     t          d          |z             Y d }~Rd }~wt          $ r}t          j        d|z            d }~ww xY wt          j        t          d          |z            )Nc                     g | ]
}|d          S rC   rD   rE   s     r-   rG   zconvertsink.<locals>.<listcomp>   s    ;;;aQqT;;;r9   s'   %s: invalid destination repository types   convert: %s
rH   s   %s: unknown repository type)sink_convertersr   rJ   r   rK   noterL   )r$   rR   rS   rV   sinkrY   s         r-   convertsinkr`      s    P;;?;;;;;k!FGG$NOOO% . .
d	. ,44<<tBd+++++ ( 	0 	0 	0GGA&''$.//////// 	. 	. 	.+gn---	.
+a677$>
?
??s$   A
B<)%BB< B77B<c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )progresssourcec                     || _         || _        |                    t          d          t          d          |          | _        d S )Ns   getting filess   filesunittotal)r$   rW   makeprogressr   progress)selfr$   rW   	filecounts       r-   __init__zprogresssource.__init__   sD    akk ( 
 
r9   c                 n    | j                             |           | j                            ||          S )N)item)rh   	incrementrW   getfile)ri   filerevs      r-   ro   zprogresssource.getfile   s3    T***{""4---r9   c                 6    | j                             |          S N)rW   targetfilebelongstosource)ri   targetfilenames     r-   rt   z(progresssource.targetfilebelongstosource   s    {44^DDDr9   c                 6    | j                             |          S rs   )rW   	lookuprev)ri   rq   s     r-   rw   zprogresssource.lookuprev   s    {$$S)))r9   c                 8    | j                                          d S rs   )rh   completeri   s    r-   closezprogresssource.close   s         r9   N)__name__
__module____qualname__rk   ro   rt   rw   r{   rD   r9   r-   rb   rb      sb        
 
 
. . .E E E* * *! ! ! ! !r9   rb   c                   P    e 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S )	converterc                    || _         || _        || _        || _        i | _        i | _        d | _        t          ||          | _        | j                                        }|r4t          j
                            |          r|                     |           |                    d          rF|                     |                    d                     | j                                        | _        |                     |                    d                    | _        t          ||                    d                    | _        d S )N	   authormaps	   splicemaps	   branchmap)rW   destr$   optscommitcacher&   r%   mapfilemaposrR   existsr.   r!   parsesplicemap	splicemapr=   )ri   r$   rW   r   
revmapfiler   r%   s          r-   rk   zconverter.__init__   s   		
 2z** Y))++
 	+"'..44 	+z***88L!! 	5txx55666"i2244DO,,TXXl-C-CDD TXXl%;%;<<r9   c                    |si S i }	 t          |d          }t          |          D ]\  }}|                                d                                         }|s4t	          j        |d          }t          |          }dt          |          cxk    rdk    s+n t          j	        t          d          ||dz   fz            |D ]}| j                            |           |d         |dd         |dd	         }
}	}|	|
k    r|	||<   |	|
z   ||<   n2# t          $ r% t          j	        t          d
          |z            w xY w|S )a  check and validate the splicemap format and
        return a child/parents dictionary.
        Format checking has two parts.
        1. generic format which is same across all source types
        2. specific format checking which may be different for
           different source type.  This logic is implemented in
           checkrevformat function in source files like
           hg.py, subversion.py etc.
        r   r      ,)data
whitespace      s8   syntax error in %s(%d): child parent1[,parent2] expectedr   Ns-   splicemap file not found or error reading %s:)r   	enumerate
splitlinesr    r   shlexerlistlenr   rJ   r   rW   checkrevformatIOError)ri   rR   r,   fpir(   lexpartchildp1p2s              r-   r   zconverter.parsesplicemap   s     	I	dE""B$R== ' '4((+2244 n$4@@@CyySYY++++!+++++3   Q-	(   ! 5 5DK..t4444 $QacDH2r88!AeHH!BwAeHH/'2  	 	 	+BCCdJ  	 s   DD /Ec                    t          |          }t                      }i }| j                                        }| j                            t          d          t          d          |          }|r|                    d          }||v r|| j        v r3| j        |         }|t          k    s| j
                            |          rX|                    |           |                    t          |                     |                     |          }	g ||<   |	j        D ]2}
||                             |
           |                    |
           3||                                 |S )z`Return a mapping that identifies the uncommitted parents of every
        uncommitted changeset.s   scanning	   revisionsrd   r   )r   setrW   
numcommitsr$   rg   r   popr   SKIPREVr   hascommitfrommapaddupdater   cachecommitparentsrM   ry   )ri   headsvisitknownr   r   rh   nr,   commitps              r-   walktreezconverter.walktree  sZ    U[++--
7''kNN<
 ( 
 
  	 		!AEzzDH}}HQK<<49#=#=a#@#@<IIaLLLOOCJJ'''%%a((FGAJ^    
!!!$$$Q  	  	r9   c                    t          |          D ]}||vr^| j                            | j                            ||                    s*| j                            t          d          |z             dg }||         D ]s}| j                            | j                            ||                    r6||vr$t          j	        t          d          |z            |
                    |           t|||<   dS )zA splicemap redefines child/parent relationships. Check the
        map contains valid revision identifiers and merge the new
        links in the source graph.
        s8   splice map revision %s is not being converted, ignoring
s   unknown splice map parent: %sN)sortedr   hascommitforsplicemapr   r!   r$   r   r   r   rJ   rM   )ri   r   r   cpcr   s         r-   mergesplicemapzconverter.mergesplicemap1  s   
 	"" 	 	Ay66tx||Aq7I7IJJ GLL5  	   Bq\  92248<<13E3EFF G##+a(H&I&IA&MNNN		!GAJJ+	 	r9   c           	           fd}fd} fd} fd} fd}|dk    r |            }nW|dk    r |            }nF|dk    r |            }n5|d	k    r |            }n$t          j        t          d
          |z             |          \  }	}
g }i }|
r ||
          }|
                    |           |                    |           |	                    |g           D ]}||vr fd|         D             ||<   	 ||                             |           nN# t          $ rA t          j        t          d          t          |          t          |          fz            w xY w||         s|
                    d|           d||<   |
t          |          t                    k    r!t          j        t          d                    |S )znReturn an ordering such that every uncommitted changeset is
        preceded by all its uncommitted ancestors.c                    t          j        t          |                     }t                      }i }g }|r|                                }||v r|                    |           |                    |g            d}| |         D ]K}|j        vr|                    |           d}|                    |g                               |           L|s|                    |           |||fS )a  Return a (children, roots) tuple where 'children' maps parent
            revision identifiers to children ones, and 'roots' is the list of
            revisions without parents. 'parents' must be a mapping of revision
            identifier to its parents ones.
            FT)	collectionsdequer   r   popleftr   
setdefaultr   rM   )	r   r   seenchildrenrootsr   	hasparentr   ri   s	           r-   mapchildrenz'converter.toposort.<locals>.mapchildrenQ  s     %fWoo66E55DHE $MMOO99 ##Ar***!	  9 9A((Q$(	''2..55a8888  $LLOOO  $" U?"r9   c                      dgfd} | S )a  If the previously converted revision has a child in the
            eligible revisions list, pick it. Return the list head
            otherwise. Branch sort attempts to minimize branch
            switching, which is harmful for Mercurial backend
            compression.
            Nc                 T    | d         }| D ]}d         |         v r|} n|d<   |S )Nr   rD   )nodesnextr   r   prevs      r-   picknextz>converter.toposort.<locals>.makebranchsorter.<locals>.picknext{  sM    Qx  AAw'!*,,  - Qr9   rD   )r   r   r   s    @r-   makebranchsorterz,converter.toposort.<locals>.makebranchsorterr  s2     6D      Or9   c                      fdfd} | S )zSource specific sort.c                 (    j         |          j        S rs   )r   sortkeyr   ri   s    r-   <lambda>z>converter.toposort.<locals>.makesourcesorter.<locals>.<lambda>  s    d.q19 r9   c                 2    t          |           d         S N)keyr   r   r   keyfns    r-   r   z>converter.toposort.<locals>.makesourcesorter.<locals>.picknext      e///22r9   rD   r   r   ri   s    @r-   makesourcesorterz,converter.toposort.<locals>.makesourcesorter  s2    9999E3 3 3 3 3 Or9   c                      fdfd} | S )zClose order sort.c                 P    dj         |          j        vj         |          j        fS )Ns   close)r   extrar   r   s    r-   r   z=converter.toposort.<locals>.makeclosesorter.<locals>.<lambda>  s+     0 3 99 #+ r9   c                 2    t          |           d         S r   r   r   s    r-   r   z=converter.toposort.<locals>.makeclosesorter.<locals>.picknext  r   r9   rD   r   s    @r-   makeclosesorterz+converter.toposort.<locals>.makeclosesorter  s:       E
3 3 3 3 3 Or9   c                  &    i fdfd} | S )zSort revisions by date.c                 j    | vr't          j        j        |          j                  | <   |          S rs   )r   	parsedater   date)r   datesri   s    r-   getdatez;converter.toposort.<locals>.makedatesorter.<locals>.getdate  s4    E>>'1$2B12E2JKKE!HQxr9   c                 F    t          fd| D                       d         S )Nc                 *    g | ]} |          |fS rD   rD   )rF   r   r   s     r-   rG   zPconverter.toposort.<locals>.makedatesorter.<locals>.picknext.<locals>.<listcomp>  s%    ;;;WWQZZO;;;r9   r   )min)r   r   s    r-   r   z<converter.toposort.<locals>.makedatesorter.<locals>.picknext  s+    ;;;;U;;;<<Q??r9   rD   )r   r   r   ri   s    @@r-   makedatesorterz*converter.toposort.<locals>.makedatesorter  sM    E           
@ @ @ @ @ Or9   r?      datesortr@   	   closesorts   unknown sort mode: %sc                 &    g | ]}|j         v|S rD   r   rF   r   ri   s     r-   rG   z&converter.toposort.<locals>.<listcomp>  s%    "N"N"NATX<M<M1<M<M<Mr9   s    cycle detected between %s and %sr   Ns   not all revisions were sorted)
r   rJ   r   removerM   r!   r   r8   insertr   )ri   r   rX   r   r   r   r   r   r   r   activesr7   pendingsr   r   s   ``             r-   toposortzconverter.toposortM  s   	# 	# 	# 	# 	#B	 	 	 	 	(	 	 	 	 	
	 
	 
	 
	 
		 	 	 	 	 }$$''))HH$$%~''HH&&''))HH%%&((HH+a 899HDEEE'K00' 	'!!ANN1HHQKKK \\!R(( ' 'H$$"N"N"N"Ngaj"N"N"NHQKQK&&q))))!   +=>>!!99fQii01  
  { 'NN1a((("&HQK'  	'* q66S\\!!+a @AABBBs   DAE(c           	      :   | j         }|r| j                            t          d          |z             t	          |d          }| j        D ]9}|                    t          j        d|| j        |         fz                       :|	                                 d S d S )Ns   writing author map file %s
s   wb+s   %s=%s
)
r%   r$   r#   r   r   r&   rO   r
   tonativeeolr{   )ri   r%   ofileauthors       r-   writeauthormapzconverter.writeauthormap  s    _
 		GNN1<==
JKKKV,,E,  $"fdl6.B%CC    
 KKMMMMM		 		r9   c                 F    t          | j        || j                  | _        d S rs   )r.   r$   r&   )ri   r%   s     r-   r.   zconverter.readauthormap  s    $TWj$,GGr9   c                     | j                             |          }| j                            |j        |j                  |_        t          |j        | j                  |_        || j        |<   |S rs   )	rW   	getcommitr&   r!   r   r>   r<   r=   r   )ri   rq   r   s      r-   r   zconverter.cachecommit  s[    &&s++((FF!&-@@ &r9   c           
      d     j         |         } j                            d          } j                            ||          }t          |t                    r,|t          k    rt          }n j        |         }| j        |<   d S |\  }}}g }	|j	        rZ|j	        D ]R}
|
 j         vr 
                    |
           |	                     j        |
          j         |
         j        f           S j                            |j        |	           	  j        |         } j                            t%          d          t%          d                              |          |fz              fd|D             }nB# t(          $ r5 d |	D             }|                     fd|j        D                        Y nw xY wt/          |	          dk    rt1                      }t/          |          dk     r)t3           j         j        t/          |                    }n;t3           j         j        t/          |          t/          |          d	z
  z            } j                            ||||| j        ||          }|                                  j                            ||           | j        |<   d S )
Ns   fulls   spliced in %s as parents of %s
s    and c                 F    g | ]}j                             ||          S rD   )r   r!   r   s     r-   rG   z"converter.copy.<locals>.<listcomp>  s)    ;;;atx||Aq));;;r9   c                     g | ]
}|d          S rC   rD   )rF   bs     r-   rG   z"converter.copy.<locals>.<listcomp>  s    ///qt///r9   c              3   D   K   | ]}|j         v j         |         V  d S rs   r   )rF   xri   s     r-   	<genexpr>z!converter.copy.<locals>.<genexpr>  s8         !!tx------ r9   r   r   r   )r   r   r!   rW   
getchangesr1   bytesr   r   r   r   rM   r<   r   	setbranchr   r$   r#   r   joinKeyErrorextend
optparentsr   r   rb   	putcommitr{   	converted)ri   rq   r   fullchangesr   filescopiescleanp2	pbranchesr   r   rW   newnodes   `             r-   copyzconverter.copy  s   !#&y}}W%%+((d33gu%% 	'!!x( DHSMF!(vw	> 	  t///$$T***  Xd^T%5d%;%BC    		FM9555	nS)GGNN566X;;##G,,c23   <;;;7;;;GG 	 	 	//Y///GNN    %+%6       	
 y>>QeeGw<<!#DGT[#e**EEFF $c%jjCLL14D&E F )%%67FFDHdG
 
 	c7+++s   A'E7 7<F65F6c                    	 | j                                          | j                                         | j                             | j                   | j                            t          d                     | j                                         }| 	                    |          }| 
                    || j                   | j                            t          d                     |                     ||          }t          |          }d }| j                            t          d                     | j                            t          d          t          d          t          |                    }t          |          D ]\  }}|dz  }| j        |         j        }	d|	v r|	                                d	         }	| j                            d
|t'          |	          fz             | j                            t          d          t'          |          z             |                    |           |                     |           |                                 | j                            dd          s| j                                         }
i }|
D ]C}|
|         }| j                            |t6                    t6          k    r| j        |         ||<   D|r`|r^| j                            |          \  }|r?r=fd| j                                        D             }|r|| j        |d	         d	         <   | j                                         }i }|D ]C}||         }| j                            |t6                    t6          k    r| j        |         ||<   D|r|r| j                            |           |                                   | !                                 d S # | !                                 w xY w)Ns   scanning source...
s   sorting...
s   converting...
s
   convertingr   rd   r      
r   s   %d %s
s   source: %s
s   converts   skiptagsc                 ,    g | ]}|d          k    |S )r   rD   )rF   e
tagsparents     r-   rG   z%converter.convert.<locals>.<listcomp>J  s.     ' ' '"#1Q4:;M;MA;M;M;Mr9   )"rW   beforer   	setrevmapr   r$   r#   r   getheadsr   r   r   r   r   rg   r   r   descr   r8   r^   r   r  ry   
configboolgettagsr!   r   puttagsitemsgetbookmarksputbookmarksr   cleanup)ri   rX   r   r   tnumr   rh   r   r  tagsctagskvnrevtagsparents	bookmarks
cbookmarksr  s                     @r-   convertzconverter.convert  s   >	K   IK!!$(+++GNN1455666K((**EmmE**G888GNN1_--...gx00Aa&&CAGNN1/00111w++-  qc!ff ,  H "!  1q'*/D==??,,Q/D zS&,,,??@@@Q//&));<<<"""		!7%%j+>> ?{**,, / /AQAx||Aw//7::#'8A;a 	? 	?'+y'8'8'?'?$D* ?
 ?' ' ' ''+x~~'7'7' ' ' ' ?:>DH[^A%670022IJ 0 0aL8<<7++w66$(HQKJqM 3Z 3	&&z222!!!LLNNNNNDLLNNNNs   OO/ /Pc                     	 | j                                          | j                                         n# | j                                         w xY w| j                                         d S rs   )r   afterrW   r   r{   rz   s    r-   r!  zconverter.cleanup^  sb    	 IOOKDKs	   5 AN)r|   r}   r~   rk   r   r   r   r   r   r.   r   r  r,  r!  rD   r9   r-   r   r      s        = = =6- - -^  :  8C C CJ  H H H  2  2  2 h? ? ?B    r9   r   c                 
   t          j                  t          j        adt          _                            d          s                    d          d<   |s<t          j        |          dz   }|                     t          d          |z             t          | |                    d                    }t          j        |          }	 t          | |                    d                              d                    \  }}n.# t          $ r! |j        D ]}t          j        |d	            w xY wd
}	fd|	D             }
t#          |
          dk    r!t%          j        t          d                    |
r	|
d         }
n|}
|
dk    r5|                                s!t%          j        t          d                    |
dk    r5|                                s!t%          j        t          d                                        d          }|r+t-          j        | ||          }|                    d	           |s|                                }t5          | |||          }|                    |
           d S )Ns   UTF-8r   s   authorss   -hgs   assuming destination %s
s	   dest_types   source_types   revT)r?   r   r@   r   c                 >    g | ]}                     |          |S rD   r;   )rF   r,   r   s     r-   rG   zconvert.<locals>.<listcomp>  s(    444a4444r9   r   s!   more than one sort mode specifiedr   r@   s1   --sourcesort is not supported by this data sourcer   s0   --closesort is not supported by this data sources   filemap)r   byteskwargsr   r5   r!   r   defaultdestr#   r   r`   r	   wrapconvertsinkrZ   	Exceptioncreatedshutilrmtreer   r   rJ   hasnativeorderhasnativecloser   filemap_sourcesetfilemapmoder   r   r,  )r$   srcr   r   r   destcsrccdefaultsortrR   	sortmodesrX   fmapr   s       `        r-   r,  r,  f  s   %%D%M H 88L!! 2!XXj11\ :~c""V+
		!011D8999D$((<"8"899E#E**E)TXXn--txx/?/?
 
kk    M 	& 	&DM$%%%%
 JI44449444H
8}}qk!@AABBB A;=  )<)<)>)> kBCC
 
 	
 <(;(;(=(=kABB
 
 	
 88JD #%b$55T""" (%%''
"dE:t44AIIhs   ;D +D9rs   )NN)6r   r   r6  mercurial.i18nr   mercurial.pycompatr   	mercurialr   r   r   r   r	   r
   mercurial.utilsr    r   r   r   r   r   r   r   	hgconvertr   r   r   r   rL   rK   r   
bzr_sourceconvert_cvsconvert_gitdarcs_sourcegnuarch_sourcemercurial_sinkmercurial_sourcemonotone_source	p4_sourcesvn_sink
svn_sourcer5   r.   r8   r>   rI   r]   rZ   r`   rb   r   r,  rD   r9   r-   <module>rS     s       				        # # # # # #                % $ $ $ $ $                          . 	
.^
oo!')- *L	"
   <
 
 
  F [-([-(Z'
m,|]+_m,/Z'
I}%
  NXJ J J @ @ @! ! ! ! ! ! ! !,Z Z Z Z Z Z Z Zz5 5 5 5 5 5r9   