
    if1E                         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y)    N)_)sha1nodeconstants)configerrorpycompatutil   )commonc                       e Zd Zd Zd Zd Zy)	submodulec                 .    || _         || _        || _        y N)pathnodeurl)selfr   r   r   s       3/usr/lib/python3/dist-packages/hgext/convert/git.py__init__zsubmodule.__init__   s    		    c                 8    d| j                   | j                  fz  S )Ns   %s = [git]%s)r   r   r   s    r   hgsubzsubmodule.hgsub   s    $))TXX!666r   c                 8    d| j                   | j                  fz  S )Ns   %s %s)r   r   r   s    r   
hgsubstatezsubmodule.hgsubstate   s    499dii000r   N)__name__
__module____qualname__r   r   r    r   r   r   r      s    
7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                 4     |d| j                   z  g|i |S )Ns   --git-dir=%sr   )r   cmdargskwargss       r   _gitcmdzconvert_git._gitcmd5   s     ?TYY.@@@@r   c                 B     | j                   | j                  g|i |S r   )r,   run0r   r*   r+   s      r   gitrun0zconvert_git.gitrun08   s!    t||DII7777r   c                 B     | j                   | j                  g|i |S r   )r,   runr/   s      r   gitrunzconvert_git.gitrun;   s!    t||DHH6t6v66r   c                 B     | j                   | j                  g|i |S r   )r,   	runlines0r/   s      r   gitrunlines0zconvert_git.gitrunlines0>   s!    t||DNN<T<V<<r   c                 B     | j                   | j                  g|i |S r   )r,   runlinesr/   s      r   gitrunlineszconvert_git.gitrunlinesA   s!    t||DMM;D;F;;r   c                 B     | j                   | j                  g|i |S r   )r,   _run3r/   s      r   gitpipezconvert_git.gitpipeD   s!    t||DJJ8888r   c                 .   t         t        |   ||||       t        j                  j                  | |d       t        j                  |      }t        j                  j                  |dz         r|dz  }t        j                  j                  |dz         s!t        j                  t        d      |z        |j                  dd      }|dk  s|d	kD  rt        j                  t        d
            |dkD  rkd|z  g| _        |j#                  dd      }|r| j                   j%                  d       |j                  dd      }| j                   j%                  d|z         ng | _        t        j&                  ddd       || _        g | _        | j+                  dd      | _        | j.                  j1                  dd      | _        t5        | j2                        t6        z  }|rBt        j                  t        d      t        d      j9                  t;        |            z        | j.                  j1                  dd      }	d }
d }|	D ]I  }|j=                  d      s|}d }d|v r|j?                  dd      \  }}|dk(  r|xs d}
>|dk(  sD|xs d}K |
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"| _         y )#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##D"f5 ||D!77==)HDww~~d[01--;<tC 
 \\*.?@
>Z#-++a GHII>$z12DK!}}3   ""#:;,,z3EFKKKw45DK8	<<Z@!WW//
<LMT''(?:++:;E(--v/0 
  77--/
  ! 
	7A||CD19774+DAq++'('9M$**$%$6M
	7 ++:  ),<<(,<<]++7  ]++7   , ,+!1+	!
r   c                 F    | j                   D ]  }|j                           y r   )rU   close)r   fs     r   afterzconvert_git.after   s     !! 	AGGI	r   c                 n   | j                   sH| j                  ddd      \  }}|j                         }|rt        j                  t        d            |S g }| j                   D ]O  }| j                  dd|      \  }}|j                  |d d        |s0t        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    yy![[m\NFF %%'Ekk!$@"ABB  Eyy Q#{{<cJWSb\*++a(H&IC&OPP	Q
 r   c                 |   |t         j                  k(  rt        | j                  d   j	                  |dz          | j                  d   j                          | j                  d   j                         j                         }|d   |k7  r6t        j                  t        d      t        j                  |      |fz        t        |d         }| j                  d   j                  |      }t        |      |k  r#t        j                  t        d      ||fz        | j                  d   j                  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   s&   #+++M!!#+.!!#"++-3357e++01##E*C01  47|"''-t9t++AB#, 
 	  #r   c                    |t         j                  k(  ry|dk(  rAdj                  | j                         D cg c]  }|j	                          c}      }d}||fS |dk(  rAdj                  | j                         D cg c]  }|j                          c}      }d}||fS | j                  |d      }| j                  ||f   }||fS c c}w c c}w )N)NN   .hgsubr}   r      .hgsubstates   blob)r   r   r[   
submoditerr   r   r   	modecache)r   namerx   mr   modes         r   getfilezconvert_git.getfile   s    #+++9::$//2CDQqwwyDEDD Tz ^#::t7HI!q||~IJDD Tz <<W-D>>4+.DTz E Js   C=Cc              #      K   t         j                  }t        | j                  d       D ]  }|j                  |k7  s|  y w)Nc                     | j                   S r   r(   )ps    r   <lambda>z(convert_git.submoditer.<locals>.<lambda>   s
    qvv r   )key)r   r   r\   rT   r   )r   nullr   s      r   r   zconvert_git.submoditer   s<      ((-=> 	Avv~	s
   ;AAc           	      r   g | _         t        j                         }|j                  ddj                  d |j	                  d      D                     |j                         D ]R  }t        |j                  |            }d|v s"d|v s'| j                   j                  t        |d   d|d                T y)zParse the formatted .gitmodules file, example file format:
        [submodule "sub"]

        	path = sub

        	url = git://giturl

           .gitmodulesr}   c              3   <   K   | ]  }|j                           y wr   )strip).0lines     r   	<genexpr>z.convert_git.parsegitmodules.<locals>.<genexpr>   s     Etzz|Es   s   urls   pathr   N)
rT   r   parser[   r^   sectionsdictitemsrR   r   )r   contentcsecss        r   parsegitmoduleszconvert_git.parsegitmodules   s     MMO	JJEe0DEE	
 ::< 	NCQWWS\"A{w!|&&y7S!F)'LM		Nr   c                    | j                  dd|dfz        \  }}|r(| j                  j                  t        d      |z         y 	 | j	                  |       | j                  D ]>  }| j                  dd||j                  fz        \  }}|r*|j                         |_
        @ y # t
        j                  $ r* | j                  j                  t        d      |z         Y y w xY w)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
  GGLLHI 	  )  	"AL(gqvv=N2NOID#ZZ\AF		"  	GGLLABWL 		s   B% %:C"!C"c                     |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|j                  d      }t        |      }	d}
 j                  j                  dd       fd	}|
|	k  r||
   }|
d
z  }
|s3|j                  d      s#t        d |j                         D              }D|}|d   d   dk(  r|}||
   }|
d
z  }
|}|||<   |vr
 |||d       |d   d   dk(  r'||
   }|
d
z  }
|vr |||d       |dk7  r
|dk7  r|||<   d }|
|	k  rd   rId   r"j                  dt        j                  f       n" j!                  |       j                  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                    j                  |       | d   }| d   dk(  }| d   dk(  }| xr | d   d   dk(  }|dk(  rK
ry d	d<   | d   d
k(  s|r'd	d<   j                  dt        j                  f       y j                  d       y | d   dk(  s| d   dk(  r	
sd	d<   y y |rt        j                  }|xr dxs
 |xr dxs d	j                  ||f<   j                  ||f       y )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  s   HHQKaAaI%AaI%A%:=%(1+*=LN"!#	!8t#|$(JqMNNI/@/H/H#IJNN#34qY&%(j*@%#'IaL &  )11A*+*)L!*)L1v&1v&r   r	      :c              3   F   K   | ]  }t        j                  |        y wr   )r   r   )r   r   s     r   r   z)convert_git.getchanges.<locals>.<genexpr>R  s     Eah..q1Es   !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   ++a KLMM:kki 	
 %c*++a <=GHHuG	W
<<(X++J8MN	' 	'4 &jAFA||D)E1779EEAQx{d"#A;Q#*x }E1e$ Qx{d" Q$ud+ N*u/F()uE; &j> Q<!}0A0I0IJK''045''r   c           	      <   | j                  |d      }|j                  d      }||dz   d  }| j                  |      }|d | j                         }g }d x}}i }	|dd  D ]  }
|
j	                  dd      \  }}|dk(  rJ|j	                         }|dd  \  }}dj                  |d d       }|d   d	k(  r|dd
 }| j                  |      }|dk(  rJ|j	                         }|dd  \  }}dj                  |d d       }|d   d	k(  r|dd
 }| j                  |      }|dk(  r|j                  |       || j                  v s||	|<    | j                  d   rd }n| j                  d   r|}|r<| j                  d   }| j                  d   }|r|d||fz  z  }n|r||k7  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                  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),ffWoC!GI,++g&dsG !!12 	A774#DAqI~GGI23B1Sb6*!9$#Ab\FV,L GGI23B IIaf-	Q<4' )!BI KK	2	I~q!D&&&a'	*   !12I""#34F 112BCM#445HI<=)*DDD!f	&9<+;Y*GGG2b	D("R)RW#S#hY#c(T/CH45DyEBJ'''$$Z@MM
 r   c                     | j                  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  sJ    &&{H=++<=		I  6{r   c                 L   i }i }| j                  dd| j                        \  }}|r+t        j                  t	        d      | j                  z        d}|D ]  }|j                         }|j                  d      s|j                  d      r+t        j                  t	        d      | j                  z        |j                  d d      \  }}|j                  |      s|||t        |      d  <    |D ]/  }|j                  d      r||   ||d d	 <    |dz   |v r(||   ||<   1 |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  s*   )),	499M++a ;<tyyHII  	/D::<Dy)T__Y-Gkk!$?"@499"LMM

4+ID#>>&)*.GCF&'	/  	-C||F#!(S"X<7* 'DI	- r   c                    g }|q| j                  dddd|      \  }}|r!t        j                  t        d      |z        |D ]/  }d|vr|d d j	                  d      \  }}|j                  |       1 |S | j                  dddd|d	||d
z   fz  d      \  }}|r!t        j                  t        d      |z        |D cg c]  }|j                  d       }}|S c c}w )Nr   r   r   r   r      	rs   s   --name-onlys   %s^%dr	   s   --r}   )r9   r   rO   r   r^   rR   rstrip)	r   r   r   r   ru   rv   r   r   ro   s	            r   getchangedfileszconvert_git.getchangedfiles  s   9!--iwNFF kk!$@"AG"KLL ">"v||E*1q!	"&  "--GQU++NFF kk!$@"AG"KLL0671qxx7G7 8s   ?Cc                 n   i }| j                   j                  dd      }d|dz   fdg}dh}	 | j                  d      \  }}|D ]_  }|j                         }|j	                  d d      \  }}	|D ]3  \  }
}|	j                  |
      r|	|v rd	||	t        |
      d  fz  }	|||	<   5 a 	 |S # t        $ r Y |S w xY w)
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    	 ww~~j2EF %lT&9:!
 (
	!--k:NFF *zz| JJtQ/	T+3 *'Ix??95 "hS^5E0F%GGD&)IdO	*	*   		s   A8B' '	B43B4c                 (    | j                  ||       y)z$git revision string is a 40 byte hexN)checkhexformat)r   revstrmapnames      r   checkrevformatzconvert_git.checkrevformat  s    FG,r   r   )s	   splicemap)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   ss    
A87=<9d
L",N&"6W(r9v>:>-r   r&   )rJ   mercurial.i18nr   mercurial.noder   	mercurialr   r   r   r    r
   r   rZ   converter_sourcerH   r&   r   r   r   <module>r     sL    
  ,  
1 
1	c-&))6+=+= c-r   