
    c1E                         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	 ddl
mZ  G d d          Zh d	Z G d
 dej        ej                  ZdS )    N)_)sha1nodeconstants)configerrorpycompatutil   )commonc                        e Zd Zd Zd Zd ZdS )	submodulec                 0    || _         || _        || _        d S N)pathnodeurl)selfr   r   r   s       3/usr/lib/python3/dist-packages/hgext/convert/git.py__init__zsubmodule.__init__   s    		    c                 $    d| j         | j        fz  S )Ns   %s = [git]%s)r   r   r   s    r   hgsubzsubmodule.hgsub   s    $)TX!666r   c                 $    d| j         | j        fz  S )Ns   %s %s)r   r   r   s    r   
hgsubstatezsubmodule.hgsubstate   s    49di000r   N)__name__
__module____qualname__r   r   r    r   r   r   r      sA          
7 7 71 1 1 1 1r   r   >      tree   close   branch   author   parent	   committerc                        e Zd Zd Zd Zd Zd Zd Zd Zd fd	Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZ xZS )convert_gitc                 *     |d| j         z  g|R i |S )Ns   --git-dir=%sr   )r   cmdargskwargss       r   _gitcmdzconvert_git._gitcmd5   s)    s?TY.@@@@@@@r   c                 .     | j         | j        g|R i |S r   )r,   run0r   r*   r+   s      r   gitrun0zconvert_git.gitrun08   s&    t|DI7777777r   c                 .     | j         | j        g|R i |S r   )r,   runr/   s      r   gitrunzconvert_git.gitrun;   s&    t|DH6t666v666r   c                 .     | j         | j        g|R i |S r   )r,   	runlines0r/   s      r   gitrunlines0zconvert_git.gitrunlines0>   s&    t|DN<T<<<V<<<r   c                 .     | j         | j        g|R i |S r   )r,   runlinesr/   s      r   gitrunlineszconvert_git.gitrunlinesA   s&    t|DM;D;;;F;;;r   c                 .     | j         | j        g|R i |S r   )r,   _run3r/   s      r   gitpipezconvert_git.gitpipeD   s&    t|DJ8888888r   Nc                    t          t          |                               ||||           t          j                            | |d           t          j        |          }t          j        	                    |dz             r|dz  }t          j        
                    |dz             s$t          j        t          d          |z            |                    dd          }|dk     s|d	k    r!t          j        t          d
                    |dk    rqd|z  g| _        |                    dd          }|r| j                            d           |                    dd          }| j                            d|z             ng | _        t          j        ddd           || _        g | _        |                     dd          | _        | j                            dd          | _        t5          | j                  t6          z  }|rQt          j        t          d          t          d                              t;          |                    z            | j                            dd          }	d }
d }|	D ]M}|                    d          r6|}d }d|v r|                    dd          \  }}|dk    r|pd}
C|dk    r|pd}N|
r#|r!t          j        t          d                    d|	v }d|	v }|r#|r!t          j        t          d                     |r#|r!t          j        t          d!                    |
s|sd}
|||
|d"| _         d S )#N)revss   gits   /.gits   /objectss&   %s does not look like a Git repository   converts   git.similarityr   d   s$   similarity must be between 0 and 100s   -C%d%%s   git.findcopiesharders   --find-copies-harders   git.renamelimits   -l%d)debnames   cat-files   --batchs   git.extrakeyss%   copying of extra key is forbidden: %ss   , s   git.committeractions)   messagedifferent   messagealways   =r	   rB   s
   committer:rC   sF   committeractions cannot define both messagedifferent and messagealways   dropcommitter   replaceauthorsC   committeractions cannot define both dropcommitter and replaceauthorsC   committeractions cannot define both dropcommitter and messagealways)rE   rF   rB   rC   )!superr&   r   r
   commandliner   abspathosr   isdirexistsNoRepor   	configintr   Abortsimopt
configboolappend	checktool
submodulesr<   catfilepipeui
configlistcopyextrakeyssetbannedextrakeysjoinsorted
startswithsplitcommitteractions)r   rV   repotyper   r>   
similarityfindcopiesharderrenamelimitbannedr_   messagedifferentmessagealwaysakvdropcommitterreplaceauthor	__class__s                    r   r   zconvert_git.__init__G   s   k4  ))"h4)HHH##D"f555 |D!!7==)) 	HDw~~d[011 	-;<<tC  
 \\*.?@@
>>Z#--+a GHHIII>>$z12DK!}}3      <""#:;;;,,z3EFFKKw45555DK8888	<<Z@@!W//
<LMMT'((?: 	+:;;E((--v//0  
  7--/
 
  ! 
	7 
	7A||CDD 	7199774++DAq+++'('9M$$***$%$6M 	 	+:    ),<<(,<< 	] 	+7     	] 	+7      	- 	-, ,+!1+	!
 !
r   c                 B    | j         D ]}|                                 d S r   )rU   close)r   fs     r   afterzconvert_git.after   s-    ! 	 	AGGIIII	 	r   c                    | j         sR|                     ddd          \  }}|                                }|r!t          j        t          d                    nig }| j         D ]_}|                     dd|          \  }}|                    |d d                    |r$t          j        t          d          |z            `|S )N	   rev-parses
   --branchess	   --remotess   cannot retrieve git headss   --verifys   cannot retrieve git head "%s")r>   r3   
splitlinesr   rO   r   rR   )r   outputstatusheadsrevrawheadrets          r   getheadszconvert_git.getheads   s    y 	Q![[m\ NFF %%''E Ck!$@"A"ABBBC Ey Q Q#{{<cJJWSbS\*** Q+a(H&I&IC&OPPPQr   c                    |t           j        k    rt          | j        d                             |dz              | j        d                                          | j        d                                                                         }|d         |k    r8t          j	        t          d          t          j        |          |fz            t          |d                   }| j        d                             |          }t          |          |k     r&t          j	        t          d          ||fz            | j        d                             d           |S )Nr      
r	   s   cannot read %r object at %s   s,   cannot read %r object at %s: unexpected size)r   nullhexIOErrorrU   writeflushreadliner^   r   rO   r   r   bytestrintreadlen)r   rx   ftypeinfosizedatas         r   catfilezconvert_git.catfile   sH   #+++M!!#+...!!###"++--33557e+011#E**C01   47||"''--t99t+ABB#,  
 	  ###r   c                 `   |t           j        k    rdS |dk    r4d                    d |                                 D                       }d}n_|dk    r4d                    d |                                 D                       }d}n%|                     |d          }| j        ||f         }||fS )	N)NN   .hgsubr}   c                 6    g | ]}|                                 S r   )r   .0ms     r   
<listcomp>z'convert_git.getfile.<locals>.<listcomp>   s     DDDQqwwyyDDDr   r      .hgsubstatec                 6    g | ]}|                                 S r   )r   r   s     r   r   z'convert_git.getfile.<locals>.<listcomp>   s     III!q||~~IIIr   s   blob)r   r   r[   
submoditerr   	modecache)r   namerx   r   modes        r   getfilezconvert_git.getfile   s    #+++:9::DD$//2C2CDDDEEDDD^##::IIt7H7HIIIJJDDD<<W--D>4+.DTzr   c              #   t   K   t           j        }t          | j        d           D ]}|j        |k    r|V  d S )Nc                     | j         S r   r(   )ps    r   <lambda>z(convert_git.submoditer.<locals>.<lambda>   s    qv r   )key)r   r   r\   rT   r   )r   nullr   s      r   r   zconvert_git.submoditer   sO       (-=-=>>> 	 	Av~~	 	r   c           	         g | _         t          j                    }|                    dd                    d |                    d          D                                  |                                D ]a}t          |                    |                    }d|v r9d|v r5| j                             t          |d         d|d                              bdS )zParse the formatted .gitmodules file, example file format:
        [submodule "sub"]

        	path = sub

        	url = git://giturl

           .gitmodulesr}   c              3   >   K   | ]}|                                 V  d S r   )strip)r   lines     r   	<genexpr>z.convert_git.parsegitmodules.<locals>.<genexpr>   s*      EEtzz||EEEEEEr   s   urls   pathr   N)
rT   r   parser[   r^   sectionsdictitemsrR   r   )r   contentcsecss        r   parsegitmoduleszconvert_git.parsegitmodules   s     MOO	JJEEe0D0DEEEEE	
 	
 	
 ::<< 	N 	NCQWWS\\""A{{w!||&&y7S!F)'L'LMMM		N 	Nr   c                    |                      dd|dfz            \  }}|r,| j                            t          d          |z             d S 	 |                     |           n@# t
          j        $ r. | j                            t          d          |z             Y d S w xY w| j        D ]A}|                      dd||j        fz            \  }}|r(|	                                |_
        Bd S )Ns   shows   %s:%sr   s2   warning: cannot read submodules config file in %s
s+   warning: unable to parse .gitmodules in %s
rr   )r3   rV   warnr   r   r   
ParseErrorrT   r   r   r   )r   versionmodulesrz   r   r   s         r   retrievegitmoduleszconvert_git.retrievegitmodules   s/   {{X. 99
 
  	 GLLHII   F	  )))) 	 	 	GLLABBWL   FF		  	" 	"AL(gqv=N2NOOID# ZZ\\AFF		" 	"s   A$ $9B! B!c                 B    |r!t          j        t          d                    i  _        g d j        z   |gz   }  j        | \  }}|r$t          j        t          d          |z            g i }t                      d }dgdg|                    d          }t          |          }	d}
 j	        
                    dd           fd	}|
|	k     r||
         }|
d
z  }
|sB|                    d          s+t          d |                                D                       }W|}|d         d         dk    r|}||
         }|
d
z  }
|}|||<   |vr |||d           |d         d         dk    r/||
         }|
d
z  }
|vr |||d           |dk    r|dk    r|||<   d }|
|	k     Չd         rTd         r"                    dt          j        f           n*                     |                               d           |t                      fS )Ns(   convert from git does not support --full)	   diff-trees   -z   --root   -m   -r   cannot read changes in %sF    r   r?   s   git.skipsubmodulesc                                         |           | d         }| d         dk    }| d         dk    }| o| d         d         dk    }|dk    rV
rd S d	d<   | d         d
k    s|r(d	d<                       dt          j        f           d S                     d           d S | d         dk    s| d         dk    r
sd	d<   d S d S |rt          j        }|rdp|rdpd	j        ||f<                       ||f           d S )N   r	   s   100755s   120000   r      Rr   T   Dr   )r   r   s   160000s   :160000   x   lr   )addrR   r   r   r   )entryro   isdesthr   r   renamesourcechangesseenr   skipsubmodules
subdeleted	subexistss          r   r   z#convert_git.getchanges.<locals>.add2  sT   HHQKKKaAaI%AaI%A%:=%(1+*=LN""! F#	!8t##|#$(JqMNNI/@/H#IJJJJJNN#344444qY&&%(j*@*@% (#'IaLLL( (   2)1A*+*)L!*)L1v&1v&&&&&r   r	      :c              3   >   K   | ]}t          j        |          V  d S r   )r   r   )r   r   s     r   r   z)convert_git.getchanges.<locals>.<genexpr>R  s-      EEah.q11EEEEEEr   r      Cr   Tr   r   )r   r   )r   rO   r   r   rP   r3   rY   r^   r   rV   rQ   r]   tuplerR   r   r   r   )r   r   fullr)   ru   rv   copiesr   difftreelcountir   lro   copysrccopydestfdestr   r   r   r   r   s   `                @@@@@r   
getchangeszconvert_git.getchanges  s    	N+a KLLMMM:::ki 	
 %c* 	I+a <==GHHHuuG	W
<<((X++J8MNN	' 	' 	' 	' 	' 	' 	' 	' 	' 	'4 &jjAFA ||D)) EE17799EEEEEAQx{d""#A;Q#*x }}E1e$$$ Qx{d"" Q$$Cud+++ N**u/F/F()uE; &jj> Q< 	6!} 60A0IJKKKK''0004555''r   c           	      $   |                      |d          }|                    d          }||dz   d          }|                     |          }|d |                                         }g }d x}}i }	|dd          D ]#}
|
                    dd          \  }}|dk    ri|                                }|dd          \  }}d                    |d d                   }|d         d	k    r
|dd
         }|                     |          }|dk    ri|                                }|dd          \  }}d                    |d d                   }|d         d	k    r
|dd
         }|                     |          }|dk    r|                    |           || j        v r||	|<   %| j        d         rd }n| j        d         r|}|r9| j        d         }| j        d         }|r|d||fz  z  }n|r||k    r
|d||fz  z  }|dd         dz   |dd         |dd          }}}t          |           t          |          dz  t          |          z   z  }|dz   d|z  z   }| j
                            dd          }t          j        ||||||	|          }|S )Ns   commits   

r~   r	       r"   r      <rs   r$   r#   rE   rF   rC   rB   s   
%s %s
   1i  s   %dr?   s   git.saverev)parentsdateauthordescrx   extrasaverev)r   findrecodert   r^   r[   rR   rX   r_   r   rV   rQ   r
   commit)r   r   r   endmessager   r   r   	committerr   enri   r   tmtzrf   re   tzstzhtzmr   r   s                          r   	getcommitzconvert_git.getcommits  s   LL),,ffWooC!GII,++g&&dsdG  !!122 	 	A774##DAqI~~GGII233B1SbS6**!9$$#AbD\FV,,L  GGII233B IIaf--	Q<4'' )!B$I KK	22	I~~q!!!D&&&a !12 	II"#34 	F 	H 12BCM#45HI H<=)*DDD! Hf	&9&9<+;Y*GGG2b5	D("RU)RW#S#hhY#c((T/CHH45DyEBJ''$$Z@@M
 
 
 r   c                     |                      dd          \  }}|r)t          j        t          d          | j        z            t          |          S )Ns   rev-lists   --alls'   cannot retrieve number of commits in %s)r9   r   rO   r   r   r   )r   ru   rz   s      r   
numcommitszconvert_git.numcommits  sX    &&{H== 	+<==	I   6{{r   c                    i }i }|                      dd| j                  \  }}|r)t          j        t	          d          | j        z            d}|D ]}|                                }|                    d          s|                    d          r)t          j        t	          d          | j        z            |                    d d          \  }}|                    |          s|||t          |          d          <   |D ]>}|	                    d          r||         ||d d	         <   +|dz   |v r3||         ||<   ?|S )
Ns	   ls-remotes   --tagss   cannot read tags from %ss
   refs/tags/s   error:s   fatal:r	   s   ^{})
r9   r   r   rO   r   r   r]   r^   r   endswith)	r   tagsalltagsru   rv   prefixr   r   tags	            r   gettagszconvert_git.gettags  sj   )),	49MM 	J+a ;<<tyHIII  	/ 	/D::<<Dy)) NT__Y-G-G Nk!$?"@"@49"LMMM

4++ID#>>&)) *.GCF&''  	- 	-C||F## -!(S"X<7** 'DIIr   c                    g }||                      dddd|          \  }}|r$t          j        t          d          |z            |D ]<}d|vr|d d                             d          \  }}|                    |           =nX|                      dddd|d	||d
z   fz  d          \  }}|r$t          j        t          d          |z            d |D             }|S )Nr   r   r   r   r      	rs   s   --name-onlys   %s^%dr	   s   --c                 8    g | ]}|                     d           S )r}   )rstrip)r   ro   s     r   r   z/convert_git.getchangedfiles.<locals>.<listcomp>  s"    7771qxx777r   )r9   r   rO   r   r^   rR   )	r   r   r   r   ru   rv   r   r   ro   s	            r   getchangedfileszconvert_git.getchangedfiles  s*   9!--iw NFF  Mk!$@"A"AG"KLLL " ">>"v||E**1q!!!!	" "--GQU++ NFF  Mk!$@"A"AG"KLLL77777Gr   c                    i }| j                             dd          }d|dz   fdg}dh}	 |                     d          \  }}|D ]r}|                                }|                    d d          \  }}	|D ]@\  }
}|	                    |
          r|	|v rd	||	t          |
          d          fz  }	|||	<   Asn# t          $ r Y nw xY w|S )
Nr?   s   git.remoteprefixs   refs/remotes/origin/   /)s   refs/heads/r   s   refs/remotes/origin/HEADs   show-refr	   s   %s%s)rV   r   r9   r   r^   r]   r   	Exception)r   	bookmarksremoteprefixreftypesexcluderu   rv   r   rx   r   	gitprefixhgprefixs               r   getbookmarkszconvert_git.getbookmarks  s%   	 w~~j2EFF %lT&9:!
 (
	!--k::NFF * *zz|| JJtQ//	T+3 * *'Ix??955 ! "hS^^5E5E0F%GGD&)IdOO	*	*  	 	 	D	 s   BB9 9
CC	   splicemapc                 2    |                      ||           dS )z$git revision string is a 40 byte hexN)checkhexformat)r   revstrmapnames      r   checkrevformatzconvert_git.checkrevformat  s    FG,,,,,r   r   )r  )r   r   r   r,   r0   r3   r6   r9   r<   r   rp   r{   r   r   r   r   r   r   r   r   r   r  r  r  __classcell__)rl   s   @r   r&   r&   0   s       
A A A8 8 87 7 7= = =< < <9 9 9d
 d
 d
 d
 d
 d
L    "  ,    N N N&" " "6W( W( W(r9 9 9v    >  :  >- - - - - - - -r   r&   )rJ   mercurial.i18nr   mercurial.noder   	mercurialr   r   r   r    r
   r   rZ   converter_sourcerH   r&   r   r   r   <module>r     s   
			       , , , , , ,                 
1 
1 
1 
1 
1 
1 
1 
1	 	 	c- c- c- c- c-&)6+= c- c- c- c- c-r   