o ]LbZ5@sddlmZddlZddlZddlmZmZmZmZddl m Z ddl m Z ddl mZmZmZmZmZddlmZdd lmZmZmZmZmZmZd d Zd d Zd$ddZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&ddZ'd d!Z(d"d#Z)dS)%)absolute_importN)binhexsha1nodeconstantsshort)_)open)errorfileloglockpycompatrevlog)hashutil) constantsdatapackfileserverclient historypackrepack shallowutilc Ks|d}t||\}}}|td||td||tdt||td|tdd|g}|rz|d}||\} } } } |td t|t| t| t| | f| tjkrl|| | tjkrv|| |s?dSdS) N decompressssize: %d bytes s path: %s s key: %s  s%12s => %12s %13s %13s %12s )snodesp1sp2slinknodescopyfromrs%s => %s %s %s %s ) get parsefileblobstatusrrpoprnullidappend) uipathoptsrsize firstnodemappingqueuenodep1p2linknodecopyfromr*C/usr/lib/python3/dist-packages/hgext/remotefilelog/debugcommands.pydebugremotefilelog&s2       r,c Cs.tt|}tj|jd|}g}t|D]}d|vr+||j |t |dqt |ddd}| d}tj |rDt|t|jd}Gd d d t}|} |D]<} | |vraqX| | } i} | r| d | d <t| d | d<|| | | | | d | d qX|S)Ns store/datas_old)fileidcSs|SN)linkrev)xr*r*r+Msz!buildtemprevlog..)keysdata/temprevlog.is temprevlogc@seZdZddZdS)zbuildtemprevlog..faketcSsdSr.r*)selfabcr*r*r+addVsz"buildtemprevlog..faket.addN)__name__ __module__ __qualname__r7r*r*r*r+faketUs r;rscopyrscopyrev)rrsha1digestosrjoinlistdirrfilectxrsortedsjoinexistsremover svfsobjectr%parentsfilenoderenamedr7datar/) repofilefilekeyfiledirfctxsrItemppathrr;tfctxpmetar*r*r+buildtemprevlogBs0    &rWcKs|ds|ds|dst|r||s#||||fi|St||}|dd}|dvr;ttd||jt j @}|rFd}nd }|dkrV| d |d n |d krc| d |d|D]} | | } |rt| | } n|| } |dkrz|| } Wnty|j|jg} Ynw| d| || || | || t| t| dt| d fqe|d kr|| } | d| || || || || | || | d| d t| f qedS)z"dump the contents of an index file changelogmanifestdirsformatr)rrsunknown format %ds deltas bases rev offset length s& linkrev nodeid p1 p2 rs' rev flag offset length size s# link p1 p2 nodeid s"% 6d % 9d % 7d % 6d % 7d %s %s %s s0% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d % 6d %s N)rr isenabled shallowmatchrWr Abortrversionr FLAG_GENERALDELTAwriter% deltaparent chainbaserH Exceptionrstartlengthr/r parentrevsflagsrawsize)origrrLfile_r rRformat generaldeltabasehdrir%baseppprr*r*r+ debugindexis           rrcCst|s ||||St|tj|dd}|d|D]/}||}||}| d| |d|f|d|j krN| d| |d|fq| ddS)z(dump an index DAG as a graphviz dot fileNs digraph G { s %d -> %d rrs} ) rr[rWr>rbasename writenoi18nr%rHr`revr)rirrLrjrRrnr%rpr*r*r+ debugindexdots     rwc Ks|d}t|D]K\}}}|D]C}|dkrqtj||}t||\} } } t| D]'\} } }}|tj krStj ||}t d||}| d|tj ||fq,qq dS)Nrsrepossreponames%s %s )rr>walkrr?rr itervaluesrrrelpathr getcachekeyr)rrr rrootdirsfilesrMfilepathr!r"r#r&r'r(r) actualpathr2r*r*r+verifyremotefilelogs(  rcCs t|Sr.)zlibr)rawr*r*r+_decompressblobs rcCst|d}z |}W|n|w|rt|}t|\}}}||}d}i} |t|kr}|d|d} |||d} |sE| }||d|d} ||d|d} ||d|d}||d| }| | ||f| | <| d}|t|ks1||| fS)NsrbP(<r)rreadcloserrparsesizeflagslenindex)rrfroffsetr!rgrdr"r#divider currentnoder&r'r(r)r*r*r+rs.    rc s|D]}d|vr|d|d}d|t|}|d}|r9|dt|}t|fi|dS|drCt}dnt}ddddfd d }i} t } d} | D]\} }} }| | |<|| vr}d t|| d 7} | || kr|| dkrd n| }d|dd d d dd df| dd| | |}tj|vr|tj}|7|7nd}d|||| d| dt|fqb| dur|| tt | | 7} | d krd| d SqdS)Ns.datas%s: r%long*rcsdur dr sdS}ddt||dkr!dndf}ddd td d d d d |fdS)Nrs %0.1f%% %sgY@rssmallersbiggersTotal:%s%s %s (%s) rsTotal:%d )r`absruljustr) differencedeltastrhashlen lastfilename totalblobsizetotaldeltasizerr*r+ printtotalss$   z"debugdatapack..printtotalssBad entry: %s appears twice rs (empty name)s %s%s%s%s Node Delta Base Delta Lengths Blob Sizers (missing)s %s %s %s%s rs %d failures )rr`rr getdeltachainrdumpdeltachainrrset iterentriesr7rgetmetar METAKEYSIZEr bytestr _sanitycheckwarn)rpathsr rdpackr% deltachain hashformatterrbasesnodesfailuresfilename deltabasedeltalennamerVblobsizer*rr+ debugdatapacks             rcCsd}|D]Q}t}|}||}|tjkrP||vr*|dt|t|f|d7}n&||vr@|dt|t|f|d7}n|}||||}|tjkstj||<q|S)z Does some basic sanity checking on a packfiles with ``nodes`` ``bases`` (a mapping of node->base): - Each deltabase must itself be a node elsewhere in the pack - There must be no cycles rs,Bad entry: %s has an unknown deltabase (%s) rs"Bad entry: %s has a cycle (at %s) )rrrrrr7)rrrrr%seencurrentrr*r*r+rhs8   rc Kst}d}d}|D]C\}}}}} ||kr|d||}|dd|d|d|ddf|d ||||tt| t| fqdS) Nr %s s%s %s %s %s rrs Delta SHA1rs%s %s %s %d )rr`rrr<r=r) rrr rrrrr% deltabasenodedeltar*r*r+rs4 rc Csd|vr |d|d}t|}d}|D]C}|\}}}}} } ||krG|d||dddddddddd f|}|d t|t|t|t| | fqdS) Ns.histrs %s%s%s%s%s rrsP1 NodesP2 Nodes Link Nodes Copy Froms%s %s %s %s %s )rrrr`rr) rrhpackrentryrr%p1nodep2noder(r)r*r*r+debughistorypacks<   rcCs>tjt|ddd  WddS1swYdS)Ns repacklock)timeout)lockmodr r repacklockvfsrLr*r*r+debugwaitonrepacks$rc CsF||jddddtd|j WddS1swYdS)Ns prefetchlockTsprefetching in %s)_lockrFrorigrootrr*r*r+debugwaitonprefetchs "rr.)* __future__rr>rmercurial.noderrrrmercurial.i18nrmercurial.pycompatr mercurialr r r rr r mercurial.utilsrrrrrrrr,rWrrrwrrrrrrrrrr*r*r*r+s,       'S"a,!