o ^Ub`E@sddlmZddlZddlmZddlmZddlmZm Z m Z m Z ddl m Z Gdd d eZhd ZGd d d e je jZdS) )absolute_importN)_)sha1nodeconstants)configerrorpycompatutil)commonc@s$eZdZddZddZddZdS) submodulecCs||_||_||_dSN)pathnodeurl)selfr rrr3/usr/lib/python3/dist-packages/hgext/convert/git.py__init__s zsubmodule.__init__cCd|j|jfS)Ns %s = [git]%s)r rrrrrhgsubzsubmodule.hgsubcCr)Ns%s %s)rr rrrr hgsubstate rzsubmodule.hgsubstateN)__name__ __module__ __qualname__rrrrrrrr s r >treeclosebranchauthorparent committercseZdZddZddZddZddZd d Zd d Zd-fdd Z ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd.d+d,ZZS)/ convert_gitcOs|d|jg|Ri|S)Ns --git-dir=%sr )rcmdargskwargsrrr_gitcmd6szconvert_git._gitcmdcO|j|jg|Ri|Sr )r'run0rr%r&rrrgitrun09zconvert_git.gitrun0cOr(r )r'runr*rrrgitrun<r,zconvert_git.gitruncOr(r )r' runlines0r*rrr gitrunlines0?r,zconvert_git.gitrunlines0cOr(r )r'runlinesr*rrr gitrunlinesBr,zconvert_git.gitrunlinescOr(r )r'_run3r*rrrgitpipeEr,zconvert_git.gitpipeNcs<tt|j||||dtj||dt|}tj |dr%|d7}tj |ds6t t d|| dd}|dksD|d krKtt d |dkrrd |g|_|dd }|rc|jd | dd}|jd|ng|_tjdddd||_g|_|dd|_|jdd|_t|jt@}|rtt dt dt||jdd} d} d} | D](} | dr| } d}d| vr| dd\} }| dkr|pd} q| dkr|pd} q| r| rtt dd| v}d| v}|r|rtt d |r | r tt d!| s| sd} ||| | d"|_ dS)#N)revssgits/.gits/objectss&%s does not look like a Git repositoryconvertsgit.similarityrds$similarity must be between 0 and 100s-C%d%%sgit.findcopiesharders--find-copies-hardersgit.renamelimits-l%d)debnamescat-files--batchs git.extrakeyss%copying of extra key is forbidden: %ss, sgit.committeractions)messagedifferent messagealways=r r9s committer:r:sFcommitteractions cannot define both messagedifferent and messagealways dropcommitter replaceauthorsCcommitteractions cannot define both dropcommitter and replaceauthorsCcommitteractions cannot define both dropcommitter and messagealways)r<r=r9r:)!superr"rr commandlinerabspathosr isdirexistsNoRepor configintrAbortsimopt configboolappend checktool submodulesr4 catfilepipeui configlist copyextrakeyssetbannedextrakeysjoinsorted startswithsplitcommitteractions)rrMrepotyper r5 similarityfindcopiesharder renamelimitbannedrVmessagedifferent messagealwaysakv dropcommitter replaceauthor __class__rrrHs           zconvert_git.__init__cCs|jD]}|qdSr )rLclose)rfrrrafters  zconvert_git.aftercCs|js|ddd\}}|}|rttd|Sg}|jD]}|dd|\}}||dd|r?ttd|q |S)N rev-parses --branchess --remotesscannot retrieve git headss--verifyscannot retrieve git head "%s")r5r. splitlinesrrFrrI)routputstatusheadsrevrawheadretrrrgetheadss  zconvert_git.getheadscCs|tjkrt|jd|d|jd|jd}|d|kr5t t dt ||ft |d}|jd|}t||krTt t d||f|jdd|S)Nr r scannot read %r object at %ss,cannot read %r object at %s: unexpected size)rnullhexIOErrorrLwriteflushreadlinerUrrFrrbytestrintreadlen)rrnftypeinfosizedatarrrcatfiles*     zconvert_git.catfilecCs|tjkrdS|dkrddd|D}d}||fS|dkr3ddd|D}d}||fS||d }|j||f}||fS) N)NN.hgsubrrcSg|]}|qSr)r.0mrrr z'convert_git.getfile.. .hgsubstatecSrr)rrrrrrrsblob)rrtrR submoditerr modecache)rnamernrmoderrrgetfiles  zconvert_git.getfileccs4tj}t|jdddD] }|j|kr|Vq dS)NcSs|jSr r#)prrrsz(convert_git.submoditer..)key)rrtrSrKr)rnullrrrrrs zconvert_git.submoditerc Cs|g|_t}|dddd|dD|D]}t||}d|vr;d|vr;|jt |dd|dqdS) zParse the formatted .gitmodules file, example file format: [submodule "sub"] path = sub url = git://giturl .gitmodulesrrcss|]}|VqdSr )strip)rlinerrr sz.convert_git.parsegitmodules..surlspathrN) rKrparserRrUsectionsdictitemsrIr )rcontentcsecsrrrparsegitmoduless zconvert_git.parsegitmodulescCs|dd|df\}}|r|jtd|dSz||Wntjy6|jtd|YdSw|jD]}|dd||jf\}}|rLq:| |_ q:dS)Nsshows%s:%srs2warning: cannot read submodules config file in %s s+warning: unable to parse .gitmodules in %s rh) r.rMwarnrrr ParseErrorrKr rr)rversionmodulesrprrrrrretrievegitmoduless0    zconvert_git.retrievegitmodulescs|r ttdi_gdj|g}j|\}}|r(ttd|gi}td}dgdg|d}t|} d} j ddfd d } | | kr|| } | d 7} |st| d shqTt d d| D}qT| } |dddkr| }|| }| d 7} |} |||<| vr| || d|dddkr|| }| d 7} |vr| ||d| dkr|dkr| ||<d}| | ksXdr߈drՈ dtjfn | d|tfS)Ns(convert from git does not support --full) diff-trees-z--root-m-rcannot read changes in %sFrr6sgit.skipsubmodulescs||d}|ddk}|ddk}| o|dddk}|dkrIr(dSd d<|dd ks4|rBd d<d tjfdSd dS|dd ksU|ddkr_s]d d<dSdS|rdtj}|rhdpm|rldpmdj||f<||fdS)Nr s100755s120000rRrTDr)rrs160000s:160000xlr)addrIrrtr)entryrfisdesthrr renamesourcechangesseenrskipsubmodules subdeleted subexistsrrr3s*    z#convert_git.getchanges..addr :css|]}t|VqdSr )rry)rrrrrrSsz)convert_git.getchanges..rCrTrr)rr)rrFrrrGr.rPrUr|rMrHrTtuplerIrrtr)rrfullr$rkrlcopiesrdifftreelcountirlrfcopysrccopydestfdestrrr getchangessn       zconvert_git.getchangesc Cs*||d}|d}||dd}||}|d|}g}d}}i} |ddD]p} | dd\} } | dkrb| } | dd\}}d| dd}|dd kr]|dd }||}| d kr| } | dd\}}d| dd}|dd kr|dd }||}| d kr|| | |jvr| | | <q.|jd rd}n|jdr|}|r|jd}|jd}|r|d||f7}n|r||kr|d||f7}|ddd|dd|dd}}}t | t |dt |}|dd|}|j dd}t j |||||| |d}|S)Nscommits rsr  rr.)r2rrFrrUrI) rrrrrkrlrrrfrrrgetchangedfiless4   zconvert_git.getchangedfilesc Csi}|jdd}d|dfdg}dh}z<|d\}}|D]/}|}|dd\}} |D]\} } | | r;| |vrs