cX]dZddlZddlZddlmZddlmZmZddlm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZddlmZddlmZ Gd d ejZ!Gd d e!e j Z"Gd de!ej#Z$GddejZ%Gddej&Z'Gddej(Z)dZ*GddZ+ddZ,dZ-GddZ. ddZ/dS) zRepository class for viewing uncompressed bundles. This provides a read-only repository interface to bundles as if they were part of the actual repository. N)_)hexnullrev)bundle2 changegroup changelogcmdutil discoveryencodingerrorexchangefilelog localrepomanifestmdiffpathutilphasespycompatrevlog revlogutilsutilvfs)urlutil) constantscLeZdZdZd dZdZd fd ZdZdZdZ d Z xZ S) bundlerevlogc ftj|}tj||||||_t |}|dz |_t|_| D]}|\}} } } } } }}t | }| |z }|j |r3|j |j || |krt}n || }| | fD]D}|j |s(t!j||jt'dE|j | s#t#| |jt'd|| }t)j||||||| || |}|j ||j ||dz }dS)N)targetradixrsunknown parentsunknown delta base)flags data_offsetdata_compressed_lengthdata_delta_baselink_rev parent_rev_1 parent_rev_2node_id)vfsmod readonlyvfsr__init__bundlelen repotiprevset bundlerevs deltaitertellindexhas_nodeaddrevrr LookupError display_idrrentryappend)selfopenerrr cgunpacker linkmappern deltadatanodep1p2cs deltabasedeltar!sidedatasizestartlinkrevpbasereves 6/usr/lib/python3/dist-packages/mercurial/bundlerepo.pyr+zbundlerevlog.__init__7s6#F++ tVF%HHH  IIa%%%#--//( ( IBK ?D"b"ixu::DOO%%,Ez""4(( ##DJNN4$8$8999Tzz!$*R.."X  z**1--+4?A.?,@,@ :&&y11 !t2G0H0Hhhy))G!!'+ ' !XXb\\!XXb\\   A J  a O   " " " FAAQ( ( Nc ||jkr tj||S|j|||j||SN)r.r_chunkr,seekrIreadlength)r;r6dfs rNrRzbundlerevlog._chunkosk $/ ! !=''c22 2 C))){ C 0 0111rOcp||jkr:||jkr/|j|d}||kr||Sn7||jkr,||jkr!tj|||St j||||S)z1return or calculate a delta between two revisions)r.r3rRrrevdiffrtextdiffrawdata)r;rev1rev2revbs rNrYzbundlerevlog.revdiffxs $/ ! !dT_&<&<:d#A&Dt||{{4((( T_ $ $)@)@=((tT:: :~dll400$,,t2D2DEEErOcF|||}d}d}g}|}||jkrY|jr|jd|kr|jd}n3|||j|d}||jkY|t krd}nF|Dt t|| |||}|\} }}|rd}|r?| | } tj || g}|?|||fS)NFrrXrO)_df)r6r._revisioncacher:r3rsuperr_rawtextrArRpoprpatches) r;rAr6ra validatedrawtextchainiterrevr__rF __class__s rNrdzbundlerevlog._rawtextsO ;((4..C ''" t':1'='H'H-a0 LL ! ! !j)!,G '' g  GG _lD))22 '""G3A&' "B  I 6KK ,,EmGeW55G 6GY&&rOctrQNotImplementedErrorr;argskwargss rN addrevisionzbundlerevlog.addrevision!!rOctrQrorqs rNaddgroupzbundlerevlog.addgrouprurOctrQrorqs rNstripzbundlerevlog.striprurOctrQror;s rN checksizezbundlerevlog.checksizerurOrQ) __name__ __module__ __qualname__r+rRrYrdrtrwryr| __classcell__rms@rNrr6s666p2222 F F F''''''8""""""""""""""""rOrceZdZdZdS)bundlechangelogctj||d}t||tjdf|j||dS)Nc|SrQ)xs rNz*bundlechangelog.__init__..sqrO)r r+rrevlog_constantsKIND_CHANGELOGr )r;r<r=r>s rNr+zbundlechangelog.__init__s`$$T6222 [     ,d 3 J        rONr}r~rr+rrOrNrrs#      rOrc*eZdZ ddZfdZxZS)bundlemanifestNrOc"tj||||t||tj|f|jj|||&i}|jj dkrt|j}||_ ||_ dS)N)trees03) rmanifestrevlogr+rrKIND_MANIFESTLOG_revlogr r,version_getfilestarts _dirlogstarts _linkmapper)r; nodeconstantsr<r=r> dirlogstartsdirs rNr+zbundlemanifest.__init__s ((}f3(OOO    . 4 L         L{"e++-dk:: )%rOc ||jvrS|j|j|t|j|j|j|j|j|Stt||S)N)r) rr,rSrrr<rrcdirlog)r;drms rNrzbundlemanifest.dirlogs " " " K  T/2 3 3 3!"   "  ^T**11!444rO)NrO)r}r~rr+rrrs@rNrrsT &&&&2 5 5 5 5 5 5 5 5 5rOrceZdZdZdS) bundlefilelogctj|||t|tj|f|jj|||_dS)N)rr r=r>)rr+rr KIND_FILELOGrr )r;r<pathr=r>s rNr+zbundlefilelog.__init__sR  vt444# $148,$!!     rONrrrOrNrrs#      rOrceZdZdZdS) bundlepeercdSNFrr{s rNcanpushzbundlepeer.canpushurON)r}r~rrrrOrNrrs#rOrc0eZdZfdZdZdZdZxZS)bundlephasecachectt|j|i|tj|dr t j|j|_dSdS)Nr<)rcrr+r safehasattrr)r*r<)r;rrrsrms rNr+zbundlephasecache.__init__s].%%.????  D( + + : ,T[99DKKK : :rOctrQror{s rNwritezbundlephasecache.writerurOctrQro)r;fps rN_writezbundlephasecache._writerurOcP||j|<|d|_dS)NT) phaseroots invalidatedirty)r;phasenewrootstrs rN _updaterootszbundlephasecache._updaterootss)!)  rO)r}r~rr+rrrrrs@rNrrse::::: """"""rOrci}tjiD]7}|d}||<tfdiD]}8|S)Nsfilenamec.dSrQ) deltachunk)r=srNrz _getfilestarts.. s*"7"7"="=rO)iter filelogheaderr2)r=filespos chunkdatafnamechunks` rNrrsqH*2B77 +&$//++====rBB  E   OrOc eZdZdZdZdZddZejdZ ejdZ dZ ejd Z d Z ejd Zejd Zd ZfdZdZdZdZdZdfd ZxZS)bundlerepositorya%A repository instance that is a union of a local repo and a bundle. Instances represent a read-only repository composed of a local repository with the contents of a bundle file applied. The repository instance is conceptually similar to the state of a repository after an ``hg unbundle`` operation. However, the contents of the bundle are never applied to the actual base repository. Instances constructed directly are not usable as repository objects. Use instance() or makebundlerepository() to create instances. c >||_||_|jddddd|_t j|d}tj|j||}t|tj r||_ d|_ d}|dD]6}|jdkr|rt!d |}|||7|s!t%jt)d |d t,jnt|t0jra|r>||jd d }tj|j|||j}||_ ||_ n1t%jt)dt|zi|_|jj dz|_!tEj#|dtDj$d||j!dDdS)NphasesspublishFs bundlereporbT)seekable changegroups#can't process multiple changegroupssNo changegroups foundrs.hg10unHG10UN)headersbundle type %s cannot be readrc6g|]}|SrrA.0ctxs rN z-bundlerepository.__init__..Ws < < 4q8   L < <4(8(:(:#; < < <      rOcp|jdkrdS|}|jdd}tj|}||vr&t d}t j||z|r| |j d|z}tj ||d|_ dS)Nrsversions01s#Unsupported changegroup version: %ss.cg%sunsUN) rparamsgetrsupportedincomingversionsrr rrrrT getunbundlerr)r;r,rcgstreamr legalcgversmsgs rNrz#bundlerepository._handlebundle2partZs 9 & & F+//*e44!;DAA + % %:;;C+cGm,, ,      N,,TY W8LMMH&3GXuMMrOrOc`|jd|\}}||_tj|d5}|| |d}|sn||$ dddn #1swxYwY|j|jdS) zWrite a temporary file to disks hg-bundle-)prefixsuffixwbTiNr)mode)rmkstemprrfdopenropen)r;readfnrrfdtemptempfptemprs rNrz!bundlerepository._writetempbundleisx''}V'LL  Yvt $ $ $ LL  $w U###  $  $ $ $ $ $ $ $ $ $ $ $ $ $ $ $x}}T]}777s;BB Bc,t||jSrQ)r_phasedefaultsr{s rN _phasecachezbundlerepository._phasecachexsd&9:::rOc|jt|j|j}|j|_|SrQ)rchangelogheaderrsvfsr2manstart)r;cs rNr zbundlerepository.changelog|sH ((*** DIt'7 8 8(--// rOcdSrQrr{s rN_refreshchangelogz"bundlerepository._refreshchangelogs  rOc|j|j|j|jj}t|j|j |j|}|j |_ tj |j |||SrQ)rrSr manifestheader unfilteredr r6rrrr2 filestartr manifestlog narrowmatch)r;r> rootstores rNrzbundlerepository.manifestlogs dm,,, '')))__&&04 "   4+;Z  )..00# ItY(8(8(:(:   rOc|j|j|j|jD]}|j|_dS)zgConsumes the manifest portion of the bundle, setting filestart so the file portion can be read.N)rrSr rr1r2r)r;rFs rN_consumemanifestz!bundlerepository._consumemanifestsm dm,,, '')))%//11  E )..00rOc|j|jSrQ)r r r{s rNr zbundlerepository.manstarts }rOcX|jd|jvr||jS)Nr)r__dict__rrr{s rNrzbundlerepository.filestarts4  dm + +  ! ! # # #~rOc|jSrQ)rr{s rNrzbundlerepository.urls yrOc|js8|j|jt |j|_||jvr_|j|j||jj}t|j ||j|Stt| |SrQ) rrrSrrrr r6rrrcrfile)r;rr>rms rNrzbundlerepository.files @   ! !$. 1 1 1-d.>??D     ! !$"21"5 6 6 6**48J At/?LL L)40055a88 8rOc|j|j|j|j|jrt j|jddSdS)z'Close assigned bundle file immediately.NT)rcloserrunlinkrshutilrmtreer{s rNrzbundlerepository.closese    = $ HOODM * * *   2 M$*D 1 1 1 1 1 2 2rOcdSrrr{s rNcancopyzbundlerepository.cancopyrrOc t|SrQ)rr{s rNpeerzbundlerepository.peers$rOc(tjSrQ)r getcwdr{s rNr&zbundlerepository.getcwds   rONc||j}|j|}|j|}td}|jj|kr*|j|t|z|jj|kr*|j|t|ztt| ||S)Ns9setting parent to node %s that only exists in the bundle ) nullidr r6rr.rwarnrrcr setparents)r;rBrCp1revp2revrrms rNr*zbundlerepository.setparentss :B""2&&""2&&MNN > $u , , GLLs2ww ' ' ' > $u , , GLLs2ww ' ' '%t,,77B???rO)rOrQ)r}r~r__doc__r+rrrunfilteredpropertycacherr r rrr rrrrr"r$r&r*rrs@rNrrs  : : : x N N N 8 8 8 8&;;'&;&'&   &   '&  111&'&&  '&  9 9 9 9 9222   !!! @ @ @ @ @ @ @ @ @ @rOrc|r!tjtd|dd}|s)t jt j}|d}|r\t j}||krd}n@tj |}| |r|t|d}tj |}|}|jdkr:|dd}t|dkr ||d} } n |\} } n||} } t#|| | S)Ns#cannot create new bundle repositorysbundles mainreporootrO+rr)r rrconfigr findrepor r&r normasprefix startswithr-rr localpathschemesplitmakebundlerepository) rrcreateintents createopts parentpathcwdusrepopath bundlenames rNinstancerBsF Ek!BCCDDD9o66J %ho&7&788  J 4o   JJ',,C$$S)) 4'C 3  DA ;;==Dx9 JJtQ   q66Q;;#-qtjHH#$ Hjj)4* Hj 9 99rOc|rdtj||fz}nd|z} tj||d}d}ns#tj$rtj$rRtj} tj||d}n##t$rtj |wxYwYnwxYwGddt|j }||_ t|||||S) z?Make a bundle repository object based on repo and bundle paths.s bundle:%s+%ss bundle:%sF)r9NTceZdZdS)5makebundlerepository..derivedbundlerepositoryN)r}r~rrrOrNderivedbundlerepositoryrE"s rOrF)r expandpathrrBr RequirementError RepoErrorrmkdtemp Exceptionrr rrmr+)rr@rrreporrFs rNr8r8s?(!:!:J GGZ' !"hu===  ! ?%''  %b*TBBBDD    M* % % %   D     "2DN   -DNdJZ@@@ Ks'=1B-/BB- B''B-,B-c eZdZdZdZdZdS)bundletransactionmanagercdSrQrr{s rN transactionz$bundletransactionmanager.transaction,strOctrQror{s rNrzbundletransactionmanager.close/rurOctrQror{s rNreleasez bundletransactionmanager.release2rurON)r}r~rrPrrSrrOrNrNrN+sA""""""""rOrNFc tj|||}|\}}} |s2 |rtj|n#t$rYnwxYw|gjfSt |fd| D} dd} |s| su|dd} d| vod| v} | o) do d} | r 5}| dd || tj |d d d }tj|||x}dddn #1swxYwYnW drY 5}| dd || d}dddn #1swxYwYn|o dsZ 5}| d|d d}dddn #1swxYwYd} nX 5}| d|| d d}dddn #1swxYwY| rd}nd}t%j||||x}|rd| s1t)|j|j|x} |}| r| j} | j|| }rdjdD} 5}| dddi}dddn #1swxYwYtjd|}t;|_tj||fd}| ||fS)aDobtains a bundle of changes incoming from peer "onlyheads" restricts the returned changes to those reachable from the specified heads. "bundlename", if given, stores the bundle to this file path permanently; otherwise it's stored to a temp file and gets deleted again when you call the returned "cleanupfn". "force" indicates whether to proceed on unrelated repos. Returns a tuple (local, csets, cleanupfn): "local" is a local repo from which to obtain the actual incoming changesets; it is a bundlerepo for the obtained bundle when the original "peer" is remote. "csets" lists the incoming changeset node ids. "cleanupfn" must be called without arguments when you're done processing the changes; it closes both the original "peer" and the one returned here. )headsforcecg|]}|v| Srr)rr commonsets rNrz$getremotechanges..Ws# 6 6 6A1I#5#5a#5#5#5rONsdevelslegacy.exchangesbundle2sbundle1s getbundlesincomingsclient)roleT)sourcecommonheadss bundlecapsscg)rZr[r\schangegroupsubsetr)snodesrZ)sbasesr\rZsHG10BZrc6g|]}|Srrrs rNrz$getremotechanges..s PPPCSXXZZPPPrOslistkeyss namespacer)rrUcrrtjdSrQ)rrr)r, bundlerepor$srNcleanupz!getremotechanges..cleanupsF           If    rO) r findcommonincomingrrOSErrorrr/local configlistcapablecommandexecutor callcommandr caps20to10resultr writechunks_forwardchunksr writebundler8baseuirootrUrr findmissingr pulloperationrN trmanager_pullapplyphases)rrLr$ onlyheadsrArVtmpcommonincomingrheadsrlegexc forcebundle1 canbundle2rMb2rcg bundletypecsets reponodes remotephasespullopr`r,r_rXs ` @@@rNgetremotechangesr6s,  &tT% P P PC"FHf $  & *%%%    D R##F I 6 6 6 6 6 6 6F FJ IO"O"x);<<!/HJ&4H   ) \** ) Z((  9 Q%%'' 1]] #.#)"('/': y((( $  &(("-!8))++Z""               $||L)) ))++q$'2'-&,fhh"4<<8L+M+M"))++q&&.'2 fhh ))++q,&.&,'2fhh '& & $0RZPP PEF  F "%9 TY&& I ZZ\\F+)I(**   + +FF ; ;E8PP:j6L6N6N+OPPP  ! ! # # q== ) fhh                ' 4y   455!&,777 ug &&sj= A  A 2A-E++E/2E/!-GG!G,I  I I +-J$$J(+J(!+NNN)NN)NNF)0r-rri18nrrArrrrr r r r r rrrrrrrrrrrrr)utilsrrrrrrrr localpeerr phasecacherrrrBr8rNrrrOrNrsD  * t"t"t"t"t"6=t"t"t"n      lI$7    %5%5%5%5%5\8#:%5%5%5P      GO    $ v($M@M@M@M@M@M@M@M@`::::D%%%P""""""""