^cVddlZddlmZddlmZddlmZddlmZm Z m Z m Z dZ dZ ddZdZed Zed Zed Zed ZGd dZdS)N)_)short) stringutil)errorpycompatrevlogutilc|5t||}|cdddS#1swxYwYdSN)lockverifierverify)repolevelvs 2/usr/lib/python3/dist-packages/mercurial/verify.pyrrs  T5 ! !xxzzs$AA  A cBd|vr|dd}d|v|S)Ns///)replace)fs r _normpathr s0 1** IIeT " " 1** HsChint: run "hg debugrebuildfncache" to recover from corrupt fncache s7parent-directory manifest refers to unknown revision %ss1warning: copy source of '%s' not in parents of %ss5warning: %s@%s: copy source revision is nullid %s:%s cZeZdZddZdZddZddZdZdZdZ d Z dd Z d Z d Z dS)rNc||_|j|_||_|t }||_t|_d|_ d|_ t|j dk|_ t|jddk|_|j jt$jk|_t+j|j|_d|_d|_|jdd|_d|_dS)NrrFsverify skipflagsT) unfilteredrui narrowmatchmatchVERIFY_DEFAULT_levelsetbadrevserrorswarningslen changeloghavecl manifestlog getstoragehavemf_format_versionr REVLOGV0revlogv1r lrucachefunc __getitem__ lrugetctxrefersmf fncachewarned configint skipflagswarnorphanstorefiles)selfrrs r__init__zverifier.__init__:sOO%% '%%'' ="E uu   $.))A- $*55c::;;a? 6&/I *4??+<+<+HII "**9lCC$(!!!rc`|j|dz|xjdz c_dS)zrecord a "warning" level issue rN)rwarnr&)r8msgs r_warnzverifier._warnNs.  S5[!!!  rc| |j|d|z}nd}d||fz}|rd||fz}|jd|zdz|xjdz c_dS) zrecord a "error" level issueNs%d?%s: %ss%s@%s r;r)r$addrr<r%)r8linkrevr=filenames r_errz verifier._errSs   L  W % % %goGGG7C.(  -h_,C  TCZ%'((( q rctj|}|stj|}||d||fz|dS)z1record exception raised during the verify processrAN)r forcebytestrrbytereprrF)r8rDr=instrEfmsgs r_excz verifier._exc`sO&t,, +$T**D '9T{2H=====rcrt|s6|js|jr(||t d|zdS|}|dr-|dt d|dz||dr-|dt d|dz||jtjkr0|j s'| t d|zdSdS|j r'| t d|zdSdS) zverify high level property of a revlog - revlog is present, - revlog is non-empty, - sizes (index and data) are correct, - revlog's format version is correct. empty or missing %sNrsdata length off by %d bytesrsindex contains %d extra bytess"warning: `%s' uses revlog format 1s"warning: `%s' uses revlog format 0) r'r)r,rFr checksizer-r r.r/r>)r8objnamerDds r _checkrevlogzverifier._checkrevloggsL3xx T[ DK  IIgq!7884? @ @ @ F MMOO Q4 L IIdA<==!Dd K K K Q4 N IIdA>??!A$F M M M  &/ 1 1= L 1BCCdJKKKKK L L ] H JJq>??$F G G G G G H Hrcp|||}|dks |jr/||vr*|dks|t|jjkrt d}nt d}|d|||fz||r|rrt|dkr_ g}|D]H}||| |kr| |In#t$rYnwxYwt d}|d ttj|z}||d} ||\} } | |vrU| |jjkrEt dt'| t'|fz}||||| |vrU| |jjkrEt d t'| t'|fz}||||nL#t$r?} ||t d t'|z| |Yd} ~ nd} ~ wwxYw||vr/||t d |||fz||||<|S) a verify a single revlog entry arguments are: - obj: the source revlog - i: the revision number - node: the revision node id - seen: nodes previously seen for this revlog - linkrevs: [changelog-revisions] introducing "node" - f: string label ("changelog", "manifest", or filename) Performs the following checks: - linkrev points to an existing changelog revision, - linkrev points to a changelog revision that introduces this revision, - linkrev points to the lowest of these changesets, - both parents exist in the revlog, - the revision is not duplicated. Return the linkrev of the revision (or None for changelog's revisions). rs)rev %d points to nonexistent changeset %ds(rev %d points to unexpected changeset %dNrs (expected %s)rBsunknown parent 1 %s of %ssunknown parent 2 %s of %sschecking parents of %ssduplicate revision %d (%d))rDrevr)r'rr(rrFr2filenodeappend Exceptionjoinmaprbytestrr>parentsnullidrrL) r8rPinodeseenlinkrevsrlrr=p1p2rJs r _checkentryzverifier._checkentrys([[ ' ' 66dk6b&8&8Avvs49#67777DEECDD IIdC1b'M1 - - - X**#%"*44B#~~b11!4==??4GG ( 3 3 34%)**tyyX%5x!@!@AAA 3B O[[&&FB~~" (8"8"8455rE$KK8PP "c1%%%~~" (8"8"8455rE$KK8PP "c1%%% O O O IIb!566tDdA N N N N N N N N O 4<< IIb!9::ad_La P P PT  s,2A D D  D 'C H22 I;<5I66I;c|j}|j}|ds!t jt dtj | dr"| t d|j s|j s.|t d|j rdpdz|\}}||}~||||||\}}|t dt'|j||fz|jr*| t d |jz|jr| t.|jrn| t d |jz|jr;t d }|t5|jz}| |dSdS) zverify the content of the Mercurial repository This method run all verifications, displaying issues as they are found. return 1 if any error have been encountered, 0 otherwise.sfile:s$cannot verify bundle or remote repossjournals-abandoned transaction found - run hg recover s!repository uses revlog format %d rrs2checked %d changesets with %d changes to %d files s%d warnings encountered! s!%d integrity errors encountered! s+(first damaged changeset appears to be %d) )rrurl startswithrAbortrospathexistssjoinr<verboser/status_verifychangelog_verifymanifest_crosscheckfiles _verifyfilesr'r(r&r4 HINT_FNCACHEr%r$min) r8rr mflinkrevs filelinkrevs filenodes totalfiles filerevisionsr=s rrzverifier.verifys)y Wxxzz$$X.. J+a GHHII I 7>>$**Z00 1 1 J GGAGHH I I I : T]  II788=&Q+!-    $(#8#8#:#: L((44  lI666$($5$5i$N$N! M D E E4>""M:> ?    = F GGA344t}D E E E   " GGL ! ! ! ;  GGA;< [changelog-rev] } mapping - filelinkrevs: is a { file-path -> [changelog-rev] } mapping If a matcher was specified, filelinkrevs will only contains matched files. schecking changesets s changelogrcheckings changesetsunittotalTsunpacking changeset %sN)rrr r(rorrS makeprogressr'updater_rereadr] setdefaultrWr3rrXrLrcomplete)r8rrr clrvrwr`progressr^nchangesrrJs rrpzverifier._verifychangelogs Wy  ^ !,--...   "lA...?? kNN=!1!1T#   L LA OOA    A   RAtaS, ? ? ? L''!**1:!111))'!*b99@@CCC$(DM LLAuQxxL$// ! bAAHHKKKL L L L $  !Q899E!HHDdKKKKKKKK L <''s&B-F G$;GG$rc 8 |j}|j}|j}|jj}||} |s'|jt di} i} i} d} |rA|} | }|||r| |j r| | j | d| t dt dt| }| D]}|s||| |}|| ||| |g| }|vr|=nm|r7t dt'|z}|||| n4||t dt'|z|  |||d }|D]\}}}|s$||t d n|d kr3|t/|z}|d krY||sa| |dzi}||g|||s| |i||nL#t6$r?}||t dt'|z|| Yd}~nd}~wwxYw|jt<krz |||}t#t6$rB}t dt'|z}||||| Yd}~d}~wwxYw|s| |j!rfdD}tE|D]l\}}|r-||tFt'|z| 4t d}|t'|z}|||| m|sL| rI|jt dtI}tI}|j%}g} |j&'| D]w\}!}}"|"dks|si|(drT|)t/||)tTj+,|x| D](}|dt d|z)| t dt dt|}| -D]`\}#}$|.|$|#||}%|%-D].\}}&| |i|&/a|sX| rV|J| |j/r7tE|D]'}|0t d|z(| S)averify the manifestlog content Inputs: - mflinkrevs: a {manifest-node -> [changelog-revisions]} mapping - dir: a subdirectory to check (for tree manifest repo) - storefiles: set of currently "orphan" files. - subdirprogress: a progress object This function checks: * all of `_checkrevlog` checks (for all manifest related revlogs) * all of `_checkentry` checks (for all manifest related revisions) * nodes for subdirectory exists in the sub-directory manifest * each manifest entries have a file path * each manifest node refered in mflinkrevs exist in the manifest log If tree manifest is in use and a matchers is specified, only the sub-directories matching it will be verified. return a two level mapping: {"path" -> { filenode -> changelog-revision}} This mapping primarily contains entries for every files in the repository. In addition, when tree-manifest is used, it also contains sub-directory entries. If a matcher is provided, only matching paths will be included. schecking manifests smanifestrr|s manifestsr}s#%s not in parent-directory manifests%s not in changesetsT)shallowsentry without name in manifests /dev/nulltrsreading delta %sNsreading full manifest %sc.g|]}|D]}||fSr).0mcrvs r z,verifier._verifymanifest..s.PPP*Q-PPQq!fPPPPrs'changeset refers to unknown revision %sschecking directory manifests  undecodablesmeta/cannot decode filename '%s'warning: orphan data file '%s')1rrr r*r+rorfilesdifference_update incrementr3rS_revlogrr'rr_regetrrF readdelta iterentriesrvisitdirrrWrXrLr" VERIFY_FULLrrr,sortedWARN_PARENT_DIR_UNKNOWN_REVr#r/store datafilesrhrCrjrkdirnameitemsrqr7r>)'r8rvdir storefilessubdirprogressrrr mflmfrx subdirnodesr`label revlogfilesrr^rrbr=mfdeltarfnflfullpathsdnrJchangesetpairsrrsubdirsr/rtsizesubdirrasubdirfilenodes onefilenodess' ` rrqzverifier._verifymanifests<y W i# ^^C  7 GNN1455 6 6 6    +E((**K  ( ( 5 5 5 +((*** = 4   bj% 3 3 3?? kNN<B#  ( 4( 4A #""" A!!"aD*..B2G2GOOBJqMM L>??%((J "c5)))) "a 788588CUKKK N''#q//33D3AA!(!4!4!6!6NNIAr2! "a(I&J&JKKKKl** "Yq\\1HTzz$~~h77%$)44X_bIIr2..55b9999$uX%$!,,Xr::EEb"MMMMN N N N "a 344uQxx?uMMMMMMMM N{k))4"ggc1oo2244GG 444788588CCIIb#tU333333334 *       ; -QPPPjPPPN~.. - -1-IIa!?? @ @ @JeeG}HK"j22{2KK 4 4 1d1HHHH!,,x2H2HHNN9Q<<000KK 2 2333  G G $"@ A AA EFFFF__+Q|__CLL-N!, 1 1 3 3 A A FH"22&*nO$3#8#8#:#: A A<$$Q++22<@@@@ A I{ I!---  # # % % %( I ++IIAJJq!BCCaGHHHHs1#DK== M5MM(N O7O  Oc6 |j}|j}|tdt |t |z}|tdtd|}|jr\t|D]L}|||vr2||d}| |td|M|j rt|D]}|||vrn | | t fd||D}n#t$rd}YnwxYw| |td||dS) Ns0crosschecking files in changesets and manifests s crosscheckingfilesr}rs in changeset but not in manifestc`g|]*}|+Sr)rDrU)rrrs rrz-verifier._crosscheckfiles..s/!N!N!NA"**RVVAYY"7"7!N!N!Nrs in manifest but not in changeset)rrrorr'rr,rrrFr)filerurXr) r8rwrxrrrrrrbrs @rrrzverifier._crosscheckfilessy W !HIIJJJL!!C NN2??   akk#   ; ML)) M M""$$$I%%%a+BIIb!$G"H"H!LLL ; MI&& M M""$$$L(("!YYq\\ !N!N!N!N1!N!N!NOO$"""!"IIb!$G"H"H!LLLs6E EEc  #|j}|j}|j}|j}|j}|t dt}g} |j | D]E\} } } | dks|s7| dr"| t| F| D](} | dt d| z)|jjj|j|dddkd } t%t|t|z}d}|t d t d t)| }t+|D]\}} |||  || }n#t.$rg}YnwxYw|r |d}nd} || }nC#t2j$r1}| |t d|z| Yd}~d}~wwxYw|D]]} ||#t.$r8|jr.t d}|||zd|_YZwxYwt)|s5|j s|jr'| |t d| znt| d<t| d<|!| D]}|j".|#|$|j"}nd}|j%r||j%[|jr#||n|}| ||j| t3j&d|j'zi}|D]?}|dz }|"|}|(|||||| }| |vrJ|r?||| vr5| |t dtS|z| n || |=|| dvr || dvr |*|##r?|^|j+rW||}tY#fd|-Ds|t\| |fz|#d}t)|sEt d}| ||#dtS#dfz| np#d|jj/kr?t`}|| |#dtS#dfz}|1|n|$#d#td$r@} |3|t dtS|z| | Yd} ~ 9d} ~ wwxYw| |vrod|| 4D}!t%|!D];\}}"t d}| ||tS|"z| <|5|jr7t%|D]'} |t d| z(t)||fS)Nschecking files rrsdata/rscensorspolicysabort)sexpectedversionrserroroncensoredr|rr})itemsbroken revlog! (%s)s% warning: revlog '%s' not in fncache!TrNsskipreads safe_renameds<problem instance does not set warning or error attribute: %srs%s not in manifestsc3,K|]}d|vVdS)rNr)rpctxrps r z(verifier._verifyfiles...s+&O&Or!u}&O&O&O&O&O&Ors)empty or missing copy source revlog %s:%sschecking rename of %scg|] \}}||f Srr)rkrs rrz)verifier._verifyfiles..As ???$!Q1v???rs&manifest refers to unknown revision %sr)6rrr2r/r,rorr#rrrhrCrrFr(r-r6configrrr' enumeraterKeyErrorrr StorageErrorrremover7r>r4r)verifyintegrityr_rDrUwarningProgrammingErrorr=rerrenamedrnanyr\WARN_UNKNOWN_COPY_SOURCEr]WARN_NULLID_COPY_SOURCEnoterXrLrr)$r8rxrwrrr2r/r,rrrrrstater revisionsrr^rarbreffr=problemrD linkrev_msgr`rctxfl2rrJfnsr_rs$ @rrszverifier._verifyfiless_y WN = !'(()))UU  *..;.GG - -JAq$qall8.D.Dy||,,, C CA IIdA<==A B B B B!% 3 C. " )Y ? ?8 K   s9~~L(9(99:: ?? kNN8CJJ#  e$$b 8b 8DAq OOAAO & & & '?     a[ YYq\\%    "a 677!;Q??? hhjj 2 22%%b))))22202 HII 38,,,-1* 2 r77   t{  "a 677!;<<<<&)UUk"),o&!11%88G|/"$**RVVGL-A-A"B"B"&  7?3333 181Dgg"  +w}a@@@@#4-/6{; D& & Q GGAJJ%%b!QhBB >>,!9Q<"7"7 "a(>&?&?588&LaPPPP%aLOk***qo8N/N/N AB+>bj>"+)B--C#&&O&O&O&O&O&O&O#O#OP $ +Cq#h+N O O O"ii1.."3xx+ !"N O OA IIb!r!ueBqEll.C*CQGGGGUdi&666"9CAr2a5%1,,#??CGGCLLLLGGBqENNN IIA677%((BD! I~~??)A,*<*<*>*>??? &s 88HBEFFCIIb#d "3Q7777  $ EJ'' E E 1>??!CDDDD5zz9$$sU/F88 GGG..H.='H))H.I?J J EV77 X5W<<Xr )rNN)__name__ __module__ __qualname__r9r>rFrLrSrerrprqrrrsrrrrr9s))))(    >>>>HHH0888t,,,\.(.(.(bDHOOOOb:F%F%F%F%F%rrr )rji18nrr_rutilsrrrr r r!rrrrtrrrrrrrrsH      qK  a>18!= R%R%R%R%R%R%R%R%R%R%r