
    q&fJY                        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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jB                  Z!ejD                  Z"ejF                  Z#ejH                  Z$ejJ                  Z%ejL                  Z&ejN                  Z'ejP                  Z(ejR                  Z)ejT                  Z*ejV                  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	Z0de&fde*fgZ1d Z2d Z3 G d d      Z4 G d d      Z5 G d d      Z6 G d d       Z7d#d!Z8y)$    N)_)open)encodingerrorhgpycompatscmutilutil)dateutil   )bzrcommoncvsdarcsfilemapgitgnuarchr   monotonep4
subversions   asciic           	      V   |i }t        |d      5 }|D ]  }|j                         }|r|j                  d      r'	 |j                  dd      \  }}|j                         }|j                         }|j                  |      d |fv r't        d      }| j                  |||fz         |||<   t        d      }| j                  ||||   |fz          	 d d d        |S # t        $ r3 t        d      }| j                  |||j                         fz         Y w xY w# 1 sw Y   |S xY w)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.   ;   sA   	j%	  FE 	FD::<D4??40'+zz$':$	9 ")I!)I{{9%$	)::45	9556%.	"KLAIIa9gi&8)DDE-	FF0 N  HIz4;;=99:F0 Ns/   *DCBD8DDDDD(c                     t        | t              r)| j                  t        j                  t
              d      S | j                  d      j                  t        j                  t
              d      S )Nreplacezutf-8)
isinstancestrencoder   sysstrorig_encodingdecode)ss    r-   recoder8   Y   sP    !Sxx6	BBxx ''OOM*I
 	
    c                 Z    |j                  | xs d|       } | s|j                  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=   b   s3    4 ]]6/Z8F w/Mr9   s   cvs
   branchsorts   gits   svns   hg
   sourcesorts   darcss   mtns   gnuarchs   bzrs   p4c                    g }|r:|t         D cg c]  }|d   	 c}vr!t        j                  t        d      |z        t         D ]  \  }}}	 |r||k(  r || |||      |fc S  | j                  s;|D ]6  }	| j                  dt        j                  |	j                  d         z         8 t        j                  t        d      |z        c c}w # t        t
        f$ r}	|j                  |	       Y d }	~	d }	~	ww xY w)Nr   s"   %s: invalid source repository type   %s
s%   %s: missing or unsupported repository)source_convertersr   Abortr   NoRepoMissingToolappendquietwriter   bytestrargs)
r$   pathtyperevs
exceptionsr7   namesourcesortmodeinsts
             r-   convertsourcerS      s    J+<=aQqT==kk!ABTIJJ"3 $fh	$44<b$d3X== ($ 88 	?DHHWx//		!==>	?
++a@ADH
II > $ 	$d##	$s   CCC<!C77C<c                    |r:|t         D cg c]  }|d   	 c}vr!t        j                  t        d      |z        t         D ]  \  }}	 |r||k(  r || ||      c S  t        j                  t        d      |z        c c}w # t        $ r'}| j                  t        d      |z         Y d }~md }~wt        $ r}t        j                  d|z        d }~ww xY w)Nr   s'   %s: invalid destination repository types   convert: %s
rA   s   %s: unknown repository type)sink_convertersr   rC   r   rD   noterE   )r$   rK   rL   r7   rO   sinkrR   s          r-   convertsinkrX      s    ?;aQqT;;kk!FG$NOO% .
d	.44<Bd++ (. ++a67$>
?? <  	0GGA&'$.// 	.++gn--	.s)   B 
B	CB00C<CCc                   *    e Zd Zd Zd Zd Zd Zd Zy)progresssourcec                 v    || _         || _        |j                  t        d      t        d      |      | _        y )Ns   getting filess   filesunittotal)r$   rP   makeprogressr   progress)selfr$   rP   	filecounts       r-   __init__zprogresssource.__init__   s6    ak ( 
r9   c                 r    | j                   j                  |       | j                  j                  ||      S )N)item)r`   	incrementrP   getfile)ra   filerevs      r-   rg   zprogresssource.getfile   s.    T*{{""4--r9   c                 8    | j                   j                  |      S N)rP   targetfilebelongstosource)ra   targetfilenames     r-   rl   z(progresssource.targetfilebelongstosource   s    {{44^DDr9   c                 8    | j                   j                  |      S rk   )rP   	lookuprev)ra   ri   s     r-   ro   zprogresssource.lookuprev   s    {{$$S))r9   c                 8    | j                   j                          y rk   )r`   completera   s    r-   closezprogresssource.close   s     r9   N)__name__
__module____qualname__rc   rg   rl   ro   rs    r9   r-   rZ   rZ      s    
.E*!r9   rZ   c                   (    e Zd ZdZd Zd Zd Zd Zy)branchsorterzIf 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.
    c                 .    g | _         || _        d | _        y rk   )nodesparentsprev)ra   r|   s     r-   rc   zbranchsorter.__init__   s    
	r9   c                     | j                   d   }| j                   D ]!  }| j                  | j                  |   v s|} n || _        | j                   j                  |       |S Nr   )r{   r}   r|   remove)ra   nextns      r-   picknextzbranchsorter.picknext   s^    zz!} 	AyyDLLO+	 	

$r9   c                 <    | j                   j                  d|       y r   )r{   insert)ra   nodes     r-   r   zbranchsorter.insert   s    

!T"r9   c                 6    | j                   j                         S rk   )r{   __len__rr   s    r-   r   zbranchsorter.__len__   s    zz!!##r9   Nrt   ru   rv   __doc__rc   r   r   r   rw   r9   r-   ry   ry      s    
#$r9   ry   c                   (    e Zd ZdZd Zd Zd Zd Zy)	keysorterz.Key-based sort, ties broken by insertion orderc                 .    g | _         || _        d| _        y r   )heapkeyfncounter)ra   r   s     r-   rc   zkeysorter.__init__   s    	
r9   c                 F    t        j                  | j                        d   S )N   )heapqheappopr   rr   s    r-   r   zkeysorter.picknext   s    }}TYY'**r9   c                     | j                   }|dz   | _         | j                  |      }t        j                  | j                  |||f       y )Nr   )r   r   r   heappushr   )ra   r   r   keys       r-   r   zkeysorter.insert   s=    ,,{jjtyy3"67r9   c                 6    | j                   j                         S rk   )r   r   rr   s    r-   r   zkeysorter.__len__   s    yy  ""r9   Nr   rw   r9   r-   r   r      s    8
+8#r9   r   c                   N    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y)	converterc                 J   || _         || _        || _        || _        i | _        i | _        d | _        t        ||      | _        | j                  j                         }|r0t        j                  j                  |      r| j                  |       |j                  d      r?| j                  |j                  d             | j                  j                         | _        | j                  |j                  d            | _        t        ||j                  d            | _        y )N	   authormaps	   splicemaps	   branchmap)rP   destr$   optscommitcacher&   r%   mapfilemaposrK   existsr.   r!   parsesplicemap	splicemapr<   )ra   r$   rP   r   
revmapfiler   r%   s          r-   rc   zconverter.__init__   s    		
 2z* YY))+
"''..4z*88L!txx56"ii224DO,,TXXl-CD TXXl%;<r9   c                 <   |si S i }	 t        |d      }t        |      D ]  \  }}|j                         d   j                         }|s*t	        j
                  |d      }t        |      }dt        |      cxk  rdk  s(n t        j                  t        d      ||dz   fz        |D ]  }| j                  j                  |        |d   |dd |dd	 }
}	}|	|
k(  r|	||<   |	|
z   ||<    	 |S # t        $ r" t        j                  t        d
      |z        w xY w)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
whitespacer      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   rC   r   rP   checkrevformatIOError)ra   rK   r,   fpir(   lexpartchildp1p2s              r-   r   zconverter.parsesplicemap  sG    I	dE"B$R= '4(+224nn$4@CySY+!+++3  Q-	(  ! 5DKK..t45 $QaDH2r8!AeH!BwAeH/': 	  	++BCdJ 	s   C%C0 0+Dc                    t        |      }t               }i }| j                  j                         }| j                  j                  t        d      t        d      |      }|r|j                  d      }||v r|| j                  v r4| j                  |   }|t        k(  s| j                  j                  |      rZ|j                  |       |j                  t        |             | j                  |      }	g ||<   |	j                   D ]'  }
||   j#                  |
       |j#                  |
       ) |r|j%                          |S )z`Return a mapping that identifies the uncommitted parents of every
        uncommitted changeset.s   scanning	   revisionsr\   r   )r   setrP   
numcommitsr$   r_   r   popr   SKIPREVr   hascommitfrommapaddupdater   cachecommitr|   rF   rq   )ra   headsvisitknownr|   r   r`   r   r,   commitps              r-   walktreezconverter.walktreeJ  s    U[[++-
77''kN<
 ( 
 		!AEzDHH}HHQK<499#=#=a#@IIaLOOCJ'%%a(FGAJ^^  
!!!$Q   	r9   c                    t        |      D ]  }||vr]| j                  j                  | j                  j	                  ||            s'| j
                  j                  t        d      |z         dg }||   D ]n  }| j                  j                  | j                  j	                  ||            r9||vr!t        j                  t        d      |z        |j                  |       p |||<    y)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   rC   rF   )ra   r|   r   cpcr   s         r-   mergesplicemapzconverter.mergesplicemapg  s    
 	" 	Ayy66txx||Aq7IJGGLL5 	 Bq\ 9922488<<13EFG#++a(H&IA&MNN		! GAJ+	r9   c           	      V     fd} fd} fd} fd}|dk(  rt        |      }nH|dk(  r |       }n;|dk(  r |       }n.|dk(  r |       }n!t        j                  t        d	      |z         ||      \  }}	|	D ]  }
|j	                  |
        g }i }|r|j                         }|j                  |       |j                  |g       D ]\  }||vr%||   D cg c]  }| j                  vs| c}||<   	 ||   j                  |       ||   rG|j	                  |       d||<   ^ |rt        |      t        |      k7  rt        j                  t        d            |S c c}w # t        $ r6 t        j                  t        d
      t        |      t        |      fz        w xY w)znReturn an ordering such that every uncommitted changeset is
        preceded by all its uncommitted ancestors.c                    t        j                  t        |             }t               }i }g }|r|j	                         }||v r|j                  |       |j                  |g        d}| |   D ]D  }|j                  vr|j                  |       d}|j                  |g       j                  |       F |s|j                  |       |r||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   rF   )	r|   r   seenchildrenrootsr   	hasparentr   ra   s	           r-   mapchildrenz'converter.toposort.<locals>.mapchildren  s      %%fWo6E5DHEMMO9 ##Ar*!	  9A(Q$(	''2.55a8	9
 !LLO " U?"r9   c                  $    fd} t        |       S )zSource specific sort.c                 6    j                   |    j                  S rk   )r   sortkeyr   ra   s    r-   <lambda>z>converter.toposort.<locals>.makesourcesorter.<locals>.<lambda>  s    d..q199 r9   r   r   ra   s    r-   makesourcesorterz,converter.toposort.<locals>.makesourcesorter  s    9EU##r9   c                  $    fd} t        |       S )zClose order sort.c                 l    dj                   |    j                  vj                   |    j                  fS )Ns   close)r   extrar   r   s    r-   r   z=converter.toposort.<locals>.makeclosesorter.<locals>.<lambda>  s7     0 0 3 9 99  #++ r9   r   r   s    r-   makeclosesorterz+converter.toposort.<locals>.makeclosesorter  s    E U##r9   c                  $    fd} t        |       S )zSort revisions by date.c                     j                   |    }t        j                  |j                        |j                  |j
                  fS rk   )r   r   	parsedatedateri   r;   )r   r   ra   s     r-   getdatez;converter.toposort.<locals>.makedatesorter.<locals>.getdate  s?    ))!, &&v{{3JJMM r9   r   )r   ra   s    r-   makedatesorterz*converter.toposort.<locals>.makedatesorter  s     W%%r9   r>      datesortr?   	   closesorts   unknown sort mode: %ss    cycle detected between %s and %sNs   not all revisions were sorted)ry   r   rC   r   r   r   rF   r!   r   r   r   r8   r   )ra   r|   rQ   r   r   r   r   sorterr   r   r   r7   pendingsr   r   r   s   `               r-   toposortzconverter.toposort  s   	#<	$
	$	& }$!'*F$#%F&%'F%$&F++a 89HDEE%g.% 	 DMM$	  !AHHQK \\!R( 'H$.5aj"NATXX<M1"NHQKQK&&q)  {MM!$"&HQK' ( q6S\!++a @ABB! #O " ++=>!!9fQi01 s   E$-E$8E))?F(c           	      6   | j                   }|r| j                  j                  t        d      |z         t	        |d      }| j
                  D ]8  }|j                  t        j                  d|| j
                  |   fz               : |j                          y y )Ns   writing author map file %s
s   wb+s   %s=%s
)
r%   r$   r#   r   r   r&   rH   r
   tonativeeolrs   )ra   r%   ofileauthors       r-   writeauthormapzconverter.writeauthormap  s    __
GGNN1<=
JKV,E,, $$"fdll6.B%CC KKM r9   c                 P    t        | j                  || j                        | _        y rk   )r.   r$   r&   )ra   r%   s     r-   r.   zconverter.readauthormap  s    $TWWj$,,Gr9   c                    | j                   j                  |      }| j                  j                  |j                  |j                        |_        t        |j                  | j                        |_        || j                  |<   |S rk   )	rP   	getcommitr&   r!   r   r=   r;   r<   r   )ra   ri   r   s      r-   r   zconverter.cachecommit  sa    &&s+((F!&--@ &r9   c           
           j                   |   } j                  j                  d      } j                  j	                  ||      }t        |t              r/|t        k(  rt        }n j                  |   }| j                  |<   y |\  }}}g }	|j                  rg|j                  D ]X  }
|
 j                   vr j                  |
       |	j                   j                  |
    j                   |
   j                  f       Z  j                  j                  |j                  |	       	  j                  |   } j                   j#                  t%        d      t%        d      j'                  |      |fz         |D cg c]  } j                  j                  ||        }}t/        |	      dk7  r
t1               }t/        |      dk  r+t3         j                    j                  t/        |            }n9t3         j                    j                  t/        |      t/        |      dz
  z        } j                  j5                  ||||| j                  ||      }|j7                           j                  j9                  ||       | j                  |<   y c c}w # t(        $ r@ |	D cg c]  }|d   	 nc c}w }}|j+                   fd|j,                  D               Y ?w xY w)	Ns   fulls   spliced in %s as parents of %s
s    and r   c              3   Z   K   | ]"  }|j                   v sj                   |    $ y wrk   )r   ).0xra   s     r-   	<genexpr>z!converter.copy.<locals>.<genexpr>   s(       !!txx-s   ++r   r   r   )r   r   r!   rP   
getchangesr1   bytesr   r   r|   r   rF   r;   r   	setbranchr   r$   r#   r   joinKeyErrorextend
optparentsr   r   rZ   	putcommitrs   	converted)ra   ri   r   fullchangesr   filescopiescleanp2	pbranchesr}   r|   r   brP   newnodes   `               r-   copyzconverter.copy  sx   !!#&yy}}W%++((d3gu%'!xx( DHHSM!(vw	>> t///$$T*  XXd^T%5%5d%;%B%BC 			FMM95	nnS)GGGNN56X;##G,c23 4;;atxx||Aq);G; y>QeGw<!#DGGT[[#e*EF $c%jCL14D&EF ))%%67FFDHHdG
 	c7+/ < 	%./qt//G/NN %+%6%6 	s1   )AJ =#J J J K"&J32,K"!K"c                    	 | j                   j                          | j                  j                          | j                   j                  | j                         | j
                  j                  t        d             | j                   j                         }| j                  |      }| j                  || j                         | j
                  j                  t        d             | j                  ||      }t        |      }d }| j
                  j                  t        d             | j
                  j                  t        d      t        d      t        |            }t        |      D ]  \  }}|dz  }| j                   |   j"                  }	d|	v r|	j%                         d	   }	| j
                  j                  d
|t'        |	      fz         | j
                  j)                  t        d      t'        |      z         |j+                  |       | j-                  |        |j/                          | j
                  j1                  dd      s| j                   j3                         }
i }|
D ]A  }|
|   }| j                  j5                  |t6              t6        k7  s0| j                  |   ||<   C |rk|ri| j                  j9                  |      \  }}|rI|rG| j                  j;                         D cg c]  }|d   |k(  s| }}|r|| j                  |d	   d	   <   | j                   j=                         }i }|D ]A  }||   }| j                  j5                  |t6              t6        k7  s0| j                  |   ||<   C |r|r| j                  j?                  |       | jA                          | jC                          y c c}w # | jC                          w xY w)Ns   scanning source...
s   sorting...
s   converting...
s
   convertingr   r\   r      
r   s   %d %s
s   source: %s
s   converts   skiptags)"rP   beforer   	setrevmapr   r$   r#   r   getheadsr   r   r   r   r   r_   r   r   descr   r8   rV   r   r  rq   
configboolgettagsr!   r   puttagsitemsgetbookmarksputbookmarksr   cleanup)ra   rQ   r   r|   tnumr   r`   r   r  tagsctagskvnrev
tagsparentetagsparents	bookmarks
cbookmarkss                       r-   convertzconverter.convert6  s%   >	KK IIKK!!$((+GGNN1456KK((*EmmE*G8GGNN1_-.gx0Aa&CAGGNN1/01ww++- qc!f , H "! 1q''*//D=??,Q/D zS&,,??@Q/&);<"		! 77%%j+>{{**, /AQAxx||Aw/7:#'88A;a/
 '+yy'8'8'?$D*
 (,xx~~'7'"#1Q4:;MA' ' ':>DHH[^A%67002IJ 0aL88<<7+w6$(HHQKJqM0
 Z		&&z2!LLN%'$ LLNs3   J O #AO 9OOA&O 2AO O Oc                     	 | j                   j                          | j                  j                          | j                  j	                          y # | j                  j                          w xY wrk   )r   afterrP   r   rs   rr   s    r-   r  zconverter.cleanupw  sG    	 IIOOKK KKs   A A-N)rt   ru   rv   rc   r   r   r   r   r   r.   r   r  r*  r  rw   r9   r-   r   r      s?    =6-^:8fPH2 h?Br9   r   c                    t        j                  |      }t        j                  adt        _        |j	                  d      s|j	                  d      |d<   |s5t        j                  |      dz   }| j                  t        d      |z         t        | ||j	                  d            }t        j                  |      }	 t        | ||j	                  d      |j	                  d            \  }}d
}	|	D 
cg c]  }
|j	                  |
      s|
 }}
t#        |      dkD  rt%        j&                  t        d            |r|d   }n|}|dk(  r.|j)                         st%        j&                  t        d            |dk(  r.|j+                         st%        j&                  t        d            |j	                  d      }|r(t-        j.                  | ||      }|j1                  d	       |s|j3                         }t5        | ||||      }|j7                  |       y # t        $ r) |j                  D ]  }t        j                   |d	         w xY wc c}
w )Ns   UTF-8r   s   authorss   -hgs   assuming destination %s
s	   dest_types   source_types   revT)r>   r   r?   r   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   rX   r	   wrapconvertsinkrS   	Exceptioncreatedshutilrmtreer   r   rC   hasnativeorderhasnativecloser   filemap_sourcesetfilemapmoder   r   r*  )r$   srcr   r   r   destcsrccdefaultsortrK   	sortmodesr,   rQ   fmapr   s                 r-   r*  r*    s   %D%%M H 88L!!XXj1\~~c"V+
		!01D89D$((<"89E##E*E)TXXn-txx/?
k JI$4a4H4
8}qkk!@ABBA;= )<)<)>kkBC
 	
 <(;(;(=kkAB
 	
 88JD%%b$5T"%%'
"dE:t4AIIhA  MM 	&DMM$%	& 5s   ?/H 4II2Irk   )NN)9r   r   r   r3  mercurial.i18nr   mercurial.pycompatr   	mercurialr   r   r   r   r	   r
   mercurial.utilsr    r   r   r   r   r   r   r   	hgconvertr   r   r   r   rE   rD   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=   rB   rU   rS   rX   rZ   ry   r   r   r*  rw   r9   r-   <module>rP     s     	   #  %    ..  	
..^^
oooo!!''))-- **LL	""
<
F [-([-(Z'
m,|]+_m,/Z'
I}%
  NXJ @! !0$ $<# #*} }@5r9   