Ë üI7îð‹ãóp—ddlZddlZddlmZddlmZddlmZmZm Z m Z m Z m Z mZmZddlmZddlmZmZmZmZmZmZe j2d«ZGd „d ej6«Zdd „Zd d „Zd d „Zd„Z d„Z!d„Z" d!d„Z#d„Z$d„Z%d„Z&d„Z' d"d„Z(d d„Z)Gd„d«Z*Gd„d«Z+Gd„d«Z,d„Z-y)#éN)Ú_)Úshort)ÚencodingÚerrorÚlockÚmdiffÚpolicyÚscmutilÚutilÚvfs)Úprocutilé)Ú constantsÚ contentstoreÚdatapackÚ historypackÚ metadatastoreÚ shallowutilÚosutilcó —eZdZy)ÚRepackAlreadyRunningN)Ú__name__Ú __module__Ú __qualname__©óú>usr/lib/python3.12/site-packages/hgext/remotefilelog/repack.pyrrs„Ørrcó²—tj«d|jdg}td«}|r|j d«td«}|r|j d«|j j |«i}|j jdd«r|j j|d <tj|tjfd d i|¤Žy) Ns-Rórepacks(running background repack) s --incrementals((running background incremental repack) s --packsonlysdevelsremotefilelog.bg-waitÚ record_waitÚ ensurestartF) r Ú hgexecutableÚorigrootrÚappendÚuiÚwarnÚ configboolÚatexitÚ runbgcommandrÚenviron)ÚrepoÚ incrementalÚ packsonlyÚcmdÚmsgÚkwargss rÚbackgroundrepackr1!s®€Ü × Ñ Ó " E¨4¯=©=¸)Ð D€CÜ Ð ,Ó -€CÙØ � ‰ Ð#Ô$ÜÐ<Ó=ˆÙØ � ‰ �>Ô"؇G�G‡L�L�Ôà €FØ ‡w�w×ј(Ð$<Ô=Ø $§¡§¡ˆˆ}Ñä ×ј#œx×/Ñ/ÑM¸UÐMÀfÓMrcóÀ—tj|d«r~tj|jŽ}t j |jddiŽ}tj|tj«}t||||tj|¬«tj|jd«rªt|«\}}|\}}} |\} } } tj| Ž}t j | ddiŽ}t|||| tj|¬«tj|ddiŽ}t j | ddiŽ}t||||tj|¬«yy)zIIf ``packsonly`` is True, stores creating only loose objects are skipped.ÚshareddatastoresÚallowincompleteT©ÚoptionsÚ datastoreN)r Ú safehasattrrÚunioncontentstorer3rÚunionmetadatastoreÚsharedhistorystoresrÚgetcachepackpathrÚFILEPACK_CATEGORYÚ _runrepackÚ manifestlogÚ_getmanifeststoresÚTREEPACK_CATEGORY) r+r6Ú datasourceÚ historysourceÚpackpathÚ localdataÚ shareddataÚ lpackpathÚldstoresÚlhstoresÚ spackpathÚsdstoresÚshstoress rÚ fullrepackrM2sx€ä ×јÐ0Ô1Ü!×3Ñ3°T×5JÑ5JÐKˆ Ü%×8Ñ8Ø × %Ñ %ð Ø7;ñ ˆ ô×/Ñ/Ø ”)×-Ñ-ó ˆô Ø Ø Ø Ø Ü × 'Ñ 'Øõ  ô ×ј×(Ñ(¨+Ô6Ü 2°4Ó 8ш �:Ø(1Ñ%ˆ �8˜XØ(2Ñ%ˆ �8˜Xô"×3Ñ3°XÐ>ˆ Ü%×8Ñ8Ø ð Ø'+ñ ˆ ô Ø Ø Ø Ø Ü × 'Ñ 'Øõ  ô"×3Ñ3Ø ð Ø'+ñ ˆ ô&×8Ñ8Ø ð Ø'+ñ ˆ ô Ø Ø Ø Ø Ü × 'Ñ 'Øö  ð57rc óÒ—tj|d«rWtj|tj «}t ||j|j|tj |¬«tj|jd«rZt|«\}}|\}}}|\}} } t || | |tj|¬«t ||||tjd|¬«yy)zžThis repacks the repo by looking at the distribution of pack files in the repo and performing the most minimal repack to keep the repo in good shape. r3r5r7T)Úallowincompletedatar6N) r r8rr<rr=Ú_incrementalrepackr3r;r?r@rA) r+r6rDrErFrGrHrIrJrKrLs rÚincrementalrepackrQjsé€ô ×јÐ0Ô1Ü×/Ñ/Ø ”)×-Ñ-ó ˆô Ø Ø × !Ñ !Ø × $Ñ $Ø Ü × 'Ñ 'Øõ  ô ×ј×(Ñ(¨+Ô6Ü 2°4Ó 8ш �:Ø(1Ñ%ˆ �8˜XØ(2Ñ%ˆ �8˜Xô Ø Ø Ø Ø Ü × 'Ñ 'Øõ  ô Ø Ø Ø Ø Ü × 'Ñ 'Ø $Øö ð!7rcó’—|jj}|jj}|jj}|jj}t j |tj«}t j|jjjtj«}|||f|||ffS©N) r?r3Úlocaldatastoresr;Úlocalhistorystoresrr<rrAÚgetlocalpackpathÚsvfsr Úbase)r+r3rTr;rUÚsharedpackpathÚ localpackpaths rr@r@–s²€Ø×'Ñ'×8Ñ8ÐØ×&Ñ&×6Ñ6€OØ×*Ñ*×>Ñ>ÐØ×)Ñ)×<Ñ<Ðä ×1Ñ1Ø Œi×)Ñ)ó€Nô ×0Ñ0Ø � ‰ � ‰ ×ÑœI×7Ñ7ó€Mð ˜Ð);Ð<Ø Ð)Ð+>Ð?ð ðrcóZ‡‡—tˆfd„|D««}tˆfd„|D««}|S)Nc3ó^•K—|]$}tjj‰|«–—Œ&y­wrS)ÚosÚpathÚjoin)Ú.0ÚprDs €rÚ z_topacks..ªs!øèø€Ð:±E¨q”—‘—‘˜h¨×*±Eùsƒ*-c3ó.•K—|] }‰|«–—Œy­wrSr)r`raÚ constructors €rrbz_topacks..«søèø€Ð/© A‘˜Q—©ùsƒ)Úlist)rDÚfilesrdÚpathsÚpackss` ` rÚ_topacksri©s(ù€Ü Ó:±EÓ:Ó :€EÜ Ó/©Ó/Ó /€EØ €Lrc óÖ—|jjdd«}|dkr|Sddg}|D���chc][\}}}|j|kDrFtjj |«d|vr"tjj |«d’Œ]}}}}|D]“} tjj || «} |D]l} | | z}|jjd|tjtj|«j«fz«tj|«ŒnŒ•|D� cgc])} tjj| d«|vsŒ(| ‘Œ+c} Scc}}}wcc} w)zsDeletes packfiles that are bigger than ``packs.maxpacksize``. Returns ``files` with the removed files omitted.ópackss maxpacksizers .datapacks.dataidxrs#removing oversize packfile %s (%s) ) r%Ú configbytesÚst_sizer]r^Úsplitextr_Údebugr Ú bytecountÚstatÚunlinkÚbasename) r+ÚfolderrfÚmaxsizeÚ VALIDEXTSr^ÚftyperqÚ oversizedÚ rootfnameÚrootpathÚextÚrows rÚ_deletebigpacksr}¯sJ€ð�g‰g×!Ñ! (¨NÓ;€GØ�!‚|؈ ð˜{Ð+€Iñ "'õá!&Ñ ˆD�%˜Ø �L‰L˜7Ò "¬¯©×(8Ñ(8¸Ó(>¸qÑ(AÀYÑ(Nô �‰×јӘqÓ!Ø!&ðòó ˆ Ü—7‘7—<‘< ¨ Ó2ˆÛˆCؘc‘>ˆDØ �G‰G�M‰MØ7ØœŸ™¬¯©°« ×(=Ñ(=Ó>Ð?ñ@ô ô �I‰I�d�Oñ ðñ!Ó N™5�C¤B§G¡G×$4Ñ$4°S¸±VÓ$<ÀIÒ$MŠC˜5Ñ NÐNùôùò Os®A EÄ.)E&ÅE&c ó—tj|j|«tj |d¬«}t |||«}t |t|j|«tj«}|jd„|D««t |t|j|«tj«} | jd„|D««t|tjtj«} t |d„| D«tj«} | jd„|D««t|t!j"|d|iŽt%j&| ddiŽ||t%j&| ddiŽ|¬«y) NT)rqc3óVK—|]!}t|tj«rŒ|–—Œ#y­wrS)Ú isinstancerÚ datapackstore©r`Úss rrbz%_incrementalrepack..ßs#èø€ðÙˆa¤J¨q´(×2HÑ2HÕ$IŒ‘9ùs‚)¢)c3óTK—|] }t|tj«s|–—Œ"y­wrS©r€rÚhistorypackstorer‚s rrbz%_incrementalrepack..ès(èø€ðáˆAܘ!œ[×9Ñ9Ô:ô Ùùó‚&(c3ó(K—|] \}}}|–—Œ y­wrSr)r`ÚfÚmoderqs rrbz%_incrementalrepack..ösèø€Ð0¡‰}ˆq�$˜Œ¡ùs‚c3óTK—|] }t|tj«s|–—Œ"y­wrSr…r‚s rrbz%_incrementalrepack..ùs(èø€ðáˆAܘ!œ[×9Ñ9Ô:ô Ùùr‡r4)Ú fullhistoryr6)rÚmkstickygroupdirr%rÚlistdirr}riÚ_computeincrementaldatapackrÚextendÚ_computeincrementalhistorypackrÚ_allpackfileswithsuffixÚ PACKSUFFIXÚ INDEXSUFFIXr>rr9rr:) r+r7Ú historystorerDÚcategoryrOr6rfÚ datapacksÚ historypacksÚallhistoryfilesÚallhistorypackss rrPrPÏsv€ô× Ñ  §¡¨(Ô3ä �N‰N˜8¨$ˆNÓ /€EÜ ˜D (¨EÓ 2€EÜØÔ-¨d¯g©g°uÓ=¼x×?PÑ?Pó€Ið×ÑñÙóôôØÜ& t§w¡w°Ó6Ü×Ñó€Lð ×Ññáóôô.Ø Œ{×%Ñ%¤{×'>Ñ'>ó€OôØÙ0¡Ó0Ü×Ñó€Oð ×Ññáóôô Ø Ü×&Ñ&Ø ð Ø(;ñ ô ×(Ñ(¨,ÐMÈÑMØØÜ!×4Ñ4Ø ð Ø.2ñ ðö rcó—|jdd«|jdd«|jdd«|jdd«|jdd«dœ}t|tj tj «}t||«S)Nó remotefilelogsdata.gencountlimitsdata.generationssdata.maxrepackpackssdata.repackmaxpacksizesdata.repacksizelimit©ó gencountlimitó generationsómaxrepackpacksórepackmaxpacksizeórepacksizelimit)Ú configintÚ configlistrlr’rr“r”Ú_computeincrementalpack©r%rfÚoptsÚ packfiless rr�r� s‘€àŸ,™,Ð'7Ð9NÓOØŸ ™ Ð&6Ð8KÓLØŸ<™<Ø Ð4ó ð!Ÿn™nØ Ð7ó ðŸN™NØ Ð5ó ñ €Dô(Ø Œx×"Ñ"¤H×$8Ñ$8ó€Iô # 9¨dÓ 3Ð3rcó"—|jdd«|jdddg«|jdd«|jddd«|jdd«d œ}t|tj tj «}t||«S) Nrœshistory.gencountlimitshistory.generationss100MBshistory.maxrepackpacksshistory.repackmaxpacksizes400MBshistory.repacksizelimitr�)r£r¤rlr’rr“r”r¥r¦s rr‘r‘"sŸ€àŸ,™,Ø Ð6ó 🠙 Ø Ð4°x°jó ðŸ<™<Ø Ð7ó ð!Ÿn™nØ Ð:¸Hó ðŸN™NØ Ð8ó ñ €Dô$(Ø Œ{×%Ñ%¤{×'>Ñ'>ó€Iô # 9¨dÓ 3Ð3rcóÖ—g}|D���chc]\}}}|’Œ }}}}|D]C\}}}|j|«sŒ|dt|« } | |z|vrŒ0|j| ||f«ŒE|Scc}}}wrS)ÚendswithÚlenr$) rfÚ packsuffixÚ indexsuffixÚresultÚfnrŠrqÚfilesetÚfilenameÚprefixs rr’r’;sˆ€Ø €FÙ(-Õ.©‘n�b˜$ Šr¨€GÒ.Û %ш�$˜Ø× Ñ  Ô,Ø àÐ,œS ›_Ð,Ð-ˆð �[Ñ ¨Ñ 0Ø Ø� ‰ �v˜t TÐ*Õ+ð!&ð €Mùô/s‰ A$c ó‡ —ttd„|dD«d¬««}|jd«g}tt |««D]}|jg«ŒiŠ |D]N\}}}|j }||dkDrŒ|‰ |<t |«D] \}} || kDsŒ ||j|«ŒNŒPg} t |«D]>\}} t ||«|dkDsŒ| jt||dˆ fd„¬ ««n| d d } | d d } tˆ fd „| D««} | |d krY| rWt | «|dkrF| j| j««| ‰ | dz } | |d kr| rt | «|dkrŒF| S)a`Given a set of pack files along with the configuration options, this function computes the list of files that should be packed as part of an incremental repack. It tries to strike a balance between keeping incremental repacks cheap (i.e. packing small things when possible, and rolling the packs up to the big ones over time). c3óFK—|]}tj|«–—Œy­wrS)r Ú sizetointr‚s rrbz*_computeincrementalpack..Wsèø€Ð@Ñ+? a”—‘˜q×!Ñ+?ùs‚!rŸT)Úreverserr¡ržcó•—‰|SrSr)ÚxÚsizess €rÚz)_computeincrementalpack..ws ø€À5ÈÂ8r)r·ÚkeyéýÿÿÿNc3ó(•K—|] }‰|–—Œ y­wrSr)r`Únrºs €rrbz*_computeincrementalpack..~søèø€Ð3¡{ !�U˜1•X¡{ùsƒr¢r éÿÿÿÿ) reÚsortedr$Úranger¬rmÚ enumerater�ÚsumÚpop)rfr§ÚlimitsÚ generationsÚir³rŠrqÚsizeÚlimitÚgenpacksÚ chosenpacksÚ repacksizerºs @rr¥r¥Ls¸ø€ôÜÑ@¨4°Ò+?Ó@È$ÔOó€Fð ‡M�M�!Ôð€KÜ ”3�v“;Ö ˆØ×ј2Õð ð €EÛ#ш��dØ�|‰|ˆØ �$Ð+Ñ,Ò ,Ø àˆˆf‰ Ü! &Ö)‰HˆAˆuØ�e‹|ؘA‘×%Ñ% fÔ-Ùñ*ð $ð"€HܘfÖ%‰ˆˆ5Ü ˆ{˜1‰~Ó  Ð&6Ñ!7Ó 7à �O‰OÜ�{ 1‘~¨tÓ9KÔLô ñ ð &ð˜2˜3�-€Kؘ˜ˆ}€HÜÓ3¡{Ó3Ó3€Jà�TÐ,Ñ-Ò-Ù Ü � Ó ˜tÐ$5Ñ6Ò 6à×ј8Ÿ<™<›>Ô*Ø�e˜K¨™OÑ,Ñ,ˆ ð �TÐ,Ñ-Ò-Ù Ü � Ó ˜tÐ$5Ñ6Ó 6ð Ðrc ó—tj|j|«d„}|jjdd«}|s|}t ||||||||¬«} t j |j|«5} tj|j|«5} | j| | « ddd«ddd«y#tj$rttd««‚wxYw#1swYŒ=xYw#1swYyxYw)Ncóà—|j||¬«}||j«j«}|jj dd«}t j «|z }|d|kS)z„Check if the file node is older than a limit. Unless a limit is specified in the config the default limit is taken. )Úfileidrœsnodettlr)ÚfilectxÚlinkrevÚdater%r£Útime)r+r²ÚnoderÑÚfiletimeÚttlrÊs rÚisoldz_runrepack..isold�sf€ð—,‘,˜x°�,Ó5ˆØ˜Ÿ™Ó)Ñ*×/Ñ/Ó1ˆà�g‰g×ÑÐ 0°*Ó=ˆä— ‘ “ ˜cÑ!ˆØ˜‰{˜UÑ"Ð"rrœsgcrepack)ÚgcrØr6s3skipping repack - another repack is already running)rr�r%r'ÚrepackerrÚmutabledatapackrÚmutablehistorypackÚrunrÚLockHeldrr) r+ÚdataÚhistoryrDr–rŒr6rØÚgarbagecollectÚpackerÚdpackÚhpacks rr>r>Šsï€ô× Ñ  §¡¨(Ô3ò #ð—W‘W×'Ñ'Ð(8¸+ÓF€N٠؈ Ü Ø Ø ØØØØ ØØô €Fô × !Ñ ! $§'¡'¨8Ô 4¸Ü × +Ñ +¨D¯G©G°XÔ >À%ð Ø— ‘ ˜5 %Õ(÷?÷ 5Ð 4øô—>‘>ò Ü*Üð.óóðð ú÷?Ð >ú÷ 5Ð 4ús6Á7!C5ÂC)ÂB>Â-C5Â>(C&Ã&C)Ã)C2 Ã.C5Ã5C>c óæ—|s t«}n|}gd¢}|jjddd«}|r|jd|z«|jjddd«}|r|jd|z«dj |«}d|zg}t j ||«}t«}d}t|j«D�]%} || j«j«|vr"|| j«j«} n8|r#|| j«j|«} n|| j«} || j«}|j| «t!| «t"ur@| j%«D],\} } | d d €Œ|j|| | d d ««Œ.Œö| j%«D]\} } |j|| | ««Œ�Œ(|S) a Computes a keepset which is not garbage collected. 'keyfn' is a function that maps filename, node to a unique key. 'lastkeepkeys' is an optional argument and if provided the keepset function updates lastkeepkeys with more keys and returns the result. )ó.sdraft()sparents(draft())rœs pullprefetchNs(%s)sbgprefetchrevsó+ssort((%s), "topo")r)Úsetr%Úconfigr$r_r ÚrevrangeÚreversedÚ_listÚp1ÚrevÚ manifestctxÚ readdeltaÚmanifestÚdiffÚaddÚtypeÚdictÚitems)r+ÚkeyfnÚ lastkeepkeysÚkeepkeysÚrevsÚ prefetchrevsÚkeepÚ processedÚ lastmanifestÚrÚmr²ròÚfilenodes rÚkeepsetr¶sÅ€ñ Ü“5‰àˆò 3€DØ—7‘7—>‘>Ð"2°OÀTÓJ€LÙØ � ‰ �G˜lÑ*Ô+Ø—7‘7—>‘>Ð"2Ð4EÀtÓL€LÙØ � ‰ �G˜lÑ*Ô+Ø �9‰9�T‹?€Dà ! DÑ (Ð )€DÜ × Ñ ˜D $Ó '€Dä“€IØ€Lô�d—j‘j× !ˆØ �‰7�:‰:‹<× Ñ Ó  Ñ *ð�Q‘×#Ñ#Ó%×/Ñ/Ó1‰Añؘ‘G×$Ñ$Ó&×+Ñ+¨LÓ9‘à˜‘G×$Ñ$Ó&�ؘA‘w×'Ñ'Ó)ˆ Ø� ‰ �aÔô �‹7”d‰?ð#$§'¡'¦)‘�˜$ؘ‘7˜1‘:Ñ)Ø—L‘L¡ x°°a±¸±Ó!<Õ=ñ#,ð '(§g¡g¦iÑ"�˜(Ø— ‘ ™U 8¨XÓ6Õ7ò'0ð1"ð6 €Orcó<—eZdZdZ d d„Zd„Zd„Zd„Zd„Zd„Z y) rÚz^Class for orchestrating the repack of data and history information into a new format. Nc óò—||_||_||_||_t j |«|_||_||_|jr'|s td«‚t|d„«|_ ||_ yy)Ns*Function 'isold' is not properly specifiedcó —||fSrSr)r‰r¿s rr»z#repacker.__init__..s€¸¸1±vr) r+rßràrŒrÚgetunitsÚunitrár6Ú ValueErrorrrùrØ) Úselfr+rßràrŒr–rÙrØr6s rÚ__init__zrepacker.__init__ùsu€ðˆŒ ؈Œ ؈Œ Ø&ˆÔÜ×&Ñ& xÓ0ˆŒ Ø ˆÔ؈Œ Ø × Ò ÙÜ Ð!NÓOÐOä# DÑ*=Ó>ˆDŒM؈D�Jð rcóú—t«}tjt|j«ddd¬«5|jj d«|j j||j¬«|jj||j¬«|j||«|j||«|jD]}|j|«Œ ddd«y#1swYyxYw)Ns repacklockr)ÚdescÚtimeouts prerepackr5)Ú repackledgerÚlockmodrÚ repacklockvfsr+ÚhookrßÚ markledgerr6ràÚ repackdataÚ repackhistoryÚsourcesÚcleanup)r Ú targetdataÚ targethistoryÚledgerÚsources rrÝz repacker.runs½€Ü“ˆä �\‰\Ü ˜$Ÿ)™)Ó $ m¸$Èö ð �I‰I�N‰N˜<Ô (ð �I‰I× Ñ  °·±Ð Ô >Ø �L‰L× #Ñ # F°D·L±LÐ #Ô Að �O‰O˜F JÔ /Ø × Ñ ˜v }Ô 5ð!Ÿ.œ.�Ø—‘˜vÕ&ñ)÷ ÷ ñ ús ·B0C1Ã1C:c óÒ‡‡—|s|Sdˆˆfd„ }t|«}tt||d¬««}|jr<|jd‰dj |D�cgc] }t |«‘Œc}«fz«t |«D]>\}} |dk(r‰jjdf|| <Œ'||dz } | || ddzf|| <Œ@|D� cgc] } | |vsŒ| ‘Œ }} ||z }|Scc}wcc} w) aqReorderes ``orphans`` into a single chain inside ``nodes`` and ``deltabases``. We often have orphan entries (nodes without a base that aren't referenced by other nodes -- i.e., part of a chain) due to gaps in history. Rather than store them as individual fulltexts, we prefer to insert them as one chain sorted by size. rcóŠ•—‰jj‰|«}tj|vr|tjS|SrS)rßÚgetmetarÚ METAKEYSIZE)rÕÚdefaultÚmetar²r s €€rÚgetsizez'repacker._chainorphans..getsize2s=ø€Ø—9‘9×$Ñ$ X¨tÓ4ˆDÜ×$Ñ$¨Ñ,ØœI×1Ñ1Ñ2Ð2à�rT)r¼r·s%s: orphan chain: %s s, r)r) rÁreÚ debugflagror_rrÃr+Únullid) r r%r²ÚnodesÚorphansÚ deltabasesr!rƒrÈrÕÚparentr¿s ` ` rÚ _chainorphanszrepacker._chainorphans&sù€ñ؈Lö ô˜“/ˆÜ”v˜g¨7¸DÔAÓBˆØ �<Š<Ø �H‰HØ)ؘUŸZ™Z¹7Ó(C¹7°a¬¨q­¸7Ñ(CÓDÐEñFô ô ! Ö)‰GˆAˆtØ�AŠvØ$(§I¡I×$4Ñ$4°aÐ#8� ˜4Ò à   Q¡™�Ø$*¨J°vÑ,>¸qÑ,AÀAÑ,EÐ#F� ˜4Ò ð *ñ "Ó6™E�q Q¨gÒ%5’˜EˆÐ6Ø �ш؈ ùò)Dùò7sÁCà C$ÃC$c ób ‡'—|jj}|jddd«}i}|jj «D]8}|j sŒ||j |ji«|j<Œ:d}|jtd«|jt|«¬«}t|j««D�]œ\} } |j|«i} t!d„| D««Š'g} |jtd«d t‰'«¬«} t#‰'«D]I\}}|| vrŒ | j|« | j|j$j'| || ¬ ««ŒK| j-«t!t/|j1| «««}t| «dkDr|j3d t| «z«|j5t| ««t!t7ˆ'fd „|««}|j8rTg}|D]K}| |f|j:vr(|j=|j| |«r d | |_Œ;|j+|«ŒM|}i}tA«}tA«}tA‰'«Š'|jtd«d t|«¬«}t#|«D�]\}}|j|«|jC|d«}|€E|jjDd}}|jjDdf||<|jG|«n|\}}|jG|«| jC|«}|sŒ›|\}}}}|r|jjD}||ksŒÀ||jjDk7r ||dzf||<||jjDk7sŒý||dzf||<�Œ |jIdd«r||z }|jK|| |||«}t#|«D�]V\}}||\}}||jjDk7r¨|jLjO| |«}|\} }!}"}#|#jCtPjR«}$|!| k7s|"|k7s|$€�|jLjC| |«}%|jLjC| |«}&t|&«}$tUjV|%|&«} nC|jLjC| |«} t| «}$|jLjY| |«}#tPjR|#vr|$|#tPjR<|jG| ||| |#«d | |_-�ŒY|j-«|dz }�ŒŸ|j-«|j]|¬«y#t($r| j+|«Y�Œ�wxYw)Nrks maxchainlenièrsrepacking data©rÚtotalc3ó K—|]}|–—Œy­wrSr©r`rÕs rrbz&repacker.repackdata..`óèø€Ð2©' $œ©'ùó‚ sbuilding historysnodes©Úknowns%repackdata: %d nodes without history có •—|‰vSrSr)rÕr$s €rr»z%repacker.repackdata..�s ø€ D¨E¡MrTsprocessing nodesrrschainorphansbysize©r)/r+r%r£ÚentriesÚvaluesrBÚ setdefaultr²rÕÚ makeprogressrrr¬rÁröÚupdatererÃrŒÚ getancestorsÚKeyErrorr$ÚcompleterëÚ _toposortror�ÚfilterrárùrØÚgcedrèÚgetr#rór'r(rßÚgetdeltarrrÚtextdiffrÚ datarepackedÚclose)(r rÚtargetr%Ú maxchainlenÚbyfileÚentryÚcountÚrepackprogressr²r4Ú ancestorsÚ nohistoryÚ buildprogressrÈrÕÚ orderednodesÚneworderednodesr&ÚnobaseÚ referencedÚprocessprogressÚ deltatupleÚ deltabaseÚchainlenÚ ancestorinforíÚp2ÚlinknodeÚcopyfromr%Ú deltaentryÚdeltaÚ deltabasenameÚ origdeltabaser rÉÚ deltabasetextÚoriginalr$s( @rrzrepacker.repackdataOs[ø€Ø �Y‰Y�\‰\ˆØ—l‘l 8¨^¸TÓBˆ àˆØ—^‘^×*Ñ*Ö,ˆEØ×ÓØDI�×!Ñ! %§.¡.°"Ó5°e·j±jÒAð-ðˆØŸ™Ü ÐÓ  t§y¡y¼¸F» ð)ó ˆô"(¨¯ © «×!7Ñ ˆH�gØ × !Ñ ! %Ô (àˆIÜÑ2©'Ó2Ó2ˆE؈IØŸO™OÜÐ%Ó&¨X¼SÀ»Zð,óˆMô% UÖ+‘��4ؘ9Ñ$ØØ×$Ñ$ QÔ'ð +Ø×$Ñ$Ø×(Ñ(×5Ñ5Ø$ d°)ð6óõð ,ð × "Ñ "Ô $ô ¤¨¯©¸ Ó)BÓ CÓDˆLÜ�9‹~ Ò!Ø—‘Ø=ÄÀIÃÑNôð × Ñ ¤ yÓ 1Ô 2ô ÜÓ1°<Ó@óˆLð ×"Ò"Ø"$�Û(�Dð! $Ð'¨t¯}©}Ñ<ÀÇÁØŸ ™  8¨TôBð.2˜ ™ Ô*Ø Ø#×*Ñ*¨4Õ0ð)ð /� ðˆJÜ“UˆFÜ›ˆJܘ“JˆEØ Ÿo™oÜÐ%Ó&¨X¼SÀÓ=Nð.óˆOô% \×2‘��4Ø×&Ñ& qÔ)ð(Ÿ^™^¨D°$Ó7� ØÐ%Ø*.¯)©)×*:Ñ*:¸A˜x�IØ(,¯ © ×(8Ñ(8¸!Ð'<�J˜tÑ$Ø—J‘J˜tÕ$à*4Ñ'�I˜xØ—N‘N 9Ô-ð )Ÿ}™}¨TÓ2� ÚØ1=Ñ.�B˜˜H hñ  Ø!ŸY™Y×-Ñ-˜à +Ó-ð  §¡×!1Ñ!1Ò1Ø.2°H¸q±LÐ-A˜J r™NØ §¡×!1Ñ!1Ó1Ø.2°H¸q±LÐ-A˜J r›NðE3ðJ�}‰}˜YÐ(=Ô>Ø  :Ñ-�Ø#×1Ñ1ؘ ,°¸ó � ô % \×2‘��4Ø&0°Ñ&6Ñ#� ˜8ð  § ¡ × 0Ñ 0Ò0Ø!%§¡×!3Ñ!3°H¸dÓ!C�JØ@JÑ=�E˜=¨-¸ØŸ8™8¤I×$9Ñ$9Ó:�Dà%¨Ò1Ø(¨IÒ5ؘ<à(,¯ © ¯ © °hÀ Ó(J˜ Ø#'§9¡9§=¡=°¸4Ó#@˜Ü" 8›}˜Ü %§¡¨}¸hÓ G™à ŸI™IŸM™M¨(°DÓ9�Eܘu›:�DØŸ9™9×,Ñ,¨X°tÓ<�Dô×(Ñ(°Ñ4Ø26�Dœ×.Ñ.Ñ/Ø— ‘ ˜8 T¨9°e¸TÔBà-1�˜‘ Ö*ð;3ð> × $Ñ $Ô &Ø �Q‰JŠEðU"8ðX ×ÑÔ!Ø� ‰ ˜Fˆ Õ#øôu ò+ð×$Ñ$ T×*ð +úsÅ -VÖV.Ö-V.c ó —|jj}i}|jj«D]8}|jsŒ||j |j i«|j<Œ:|jtd«|jt|«¬«}t|j««D�]2\}}i} td„|D««} | D]4} | | vrŒ| j|j j#|| | ¬««Œ6t%|j'| ««} t)«} | D]¦} | | \}}}}| | vr^| |vrZ||jj*k7r||k7r| j-|«||jj*k7r| j-|«Œo|r| j-|«|j-|| ||||«| |vsŒ�d|| _Œ¨|j1«�Œ5|j3«|j5|¬«y)Nsrepacking historyr*c3ó K—|]}|–—Œy­wrSrr-s rrbz)repacker.repackhistory..ør.r/r0Tr3)r+r%r4r5rCr6r²rÕr7rrr¬rÁrörer8ràr9rër<rèr#róÚhistoryrepackedÚ incrementr;rC)r rrDr%rFrGÚprogressr²r4rJr$rÕrMÚ dontprocessrírVrWrXs rrzrepacker.repackhistoryësá€Ø �Y‰Y�\‰\ˆàˆØ—^‘^×*Ñ*Ö,ˆEØ×"Ó"ØDI�×!Ñ! %§.¡.°"Ó5°e·j±jÒAð-ð—?‘?Ü Ð"Ó #¨$¯)©)¼3¸v»;ð#ó ˆô"(¨¯ © «×!7Ñ ˆH�g؈IÜÑ2©'Ó2Ó2ˆEã�ؘ9Ñ$ØØ× Ñ Ø—L‘L×-Ñ-¨h¸ÀIÐ-ÓNõðô$ D§N¡N°9Ó$=Ó>ˆLô›%ˆKÛ$�Ø-6°t©_Ñ*��B˜ (ð˜;Ñ&¨4°wÑ+>ð˜TŸY™Y×-Ñ-Ò-°(¸hÒ2FØ#Ÿ™¨Ô+ؘTŸY™Y×-Ñ-Ò-Ø#Ÿ™¨Ô+ØáØ—O‘O BÔ'à— ‘ ˜8 T¨2¨r°8¸XÔFà˜7’?Ø48�G˜D‘MÕ1ð5%ð8 × Ñ Ö ðY"8ð\ ×ÑÔØ� ‰ ˜Fˆ Õ#rcó^‡‡—ˆˆfd„}tj‰j«|«}|S)NcóÈ•—‰|\}}}}g}|‰jjk7r|j|«|‰jjk7r|j|«|SrS)r+r#r$)rÕrírVrWrXÚparentsrJr s €€rÚ parentfuncz&repacker._toposort..parentfunc(s[ø€Ø)2°4©Ñ &ˆB��H˜h؈GØ�T—Y‘Y×%Ñ%Ò%Ø—‘˜rÔ"Ø�T—Y‘Y×%Ñ%Ò%Ø—‘˜rÔ"؈Nr)rÚ sortnodesÚkeys)r rJrhÚ sortednodess`` rr<zrepacker._toposort's)ù€õ ô"×+Ñ+¨I¯N©NÓ,<¸jÓIˆ ØÐr)FNN) rrrÚ__doc__r rÝr(rrr<rrrrÚrÚôs4„ñð ØØóò2'ò('òRZ$òx:$óx rrÚcó.—eZdZdZd„Zd„Zd„Zd„Zd„Zy)rzìStorage for all the bookkeeping that happens during a repack. It contains the list of revisions being repacked, what happened to each revision, and which source store contained which revision originally (for later cleanup). có>—i|_i|_t«|_yrS)r4rrèÚcreated)r s rr zrepackledger.__init__;s€ØˆŒ ؈Œ Ü“uˆ� rcóÄ—|j||«}d|_|jj|«}|st «}||j|<|j |«y)z`Mark the given filename+node revision as having a data rev in the given source. TN)Ú_getorcreateentryrBrr?rèró©r rr²rÕrGr4s rÚ markdataentryzrepackledger.markdataentry@sV€ð×&Ñ& x°Ó6ˆØˆÔØ—,‘,×"Ñ" 6Ó*ˆÙÜ“eˆGØ#*ˆD�L‰L˜Ñ Ø� ‰ �EÕrcóÄ—|j||«}d|_|jj|«}|st «}||j|<|j |«y)zcMark the given filename+node revision as having a history rev in the given source. TN)rqrCrr?rèrórrs rÚmarkhistoryentryzrepackledger.markhistoryentryLsV€ð×&Ñ& x°Ó6ˆØ"ˆÔØ—,‘,×"Ñ" 6Ó*ˆÙÜ“eˆGØ#*ˆD�L‰L˜Ñ Ø� ‰ �EÕrcó~—||f}|jj|«}|st||«}||j|<|SrS)r4r?Ú repackentry)r r²rÕr¼Úvalues rrqzrepackledger._getorcreateentryXsB€Ø˜ÐˆØ— ‘ × Ñ  Ó%ˆÙÜ ¨$Ó/ˆEØ %ˆD�L‰L˜Ñ àˆ rcó:—|jj|«yrS)roró)r rxs rÚ addcreatedzrepackledger.addcreatedas€Ø � ‰ ×јÕrN) rrrrlr rsrurqrzrrrrr5s „ñò ò ò òó rrcó—eZdZdZdZd„Zy)rwzFSimple class representing a single revision entry in the repackledger.©r²rÕrBrCrBrar>cóf—||_||_d|_d|_d|_d|_d|_y)NFr|)r r²rÕs rr zrepackentry.__init__rs6€Ø ˆŒ ؈Œ àˆŒà"ˆÔà!ˆÔà$ˆÔàˆ� rN)rrrrlÚ __slots__r rrrrwrwes„ÙPð€Ió rrwcó¸—tj|d«r9tj|tj «}t j |«S|jS)NÚname)r r8rr<rr=r rW)r+Úsharedcachepaths rrr�sJ€Ü ×ј˜fÔ%ô&×6Ñ6Ø ”)×-Ñ-ó ˆô�w‰w�Ó'Ð'à�y‰yÐr)TFrS)FN)NN).r]rÔÚmercurial.i18nrÚmercurial.noderÚ mercurialrrrrrr r r r Úmercurial.utilsr ÚrrrrrrÚ importmodrÚAbortrr1rMrQr@rir}rPr�r‘r’r¥r>rrÚrrwrrrrÚr‰sÓðÛ Û åÝ ÷ ÷ ó õ%÷÷ð ˆ× Ñ ˜(Ó #€ô ˜5Ÿ;™;ô óNó"5 óp) òXò&ò OðLØ ó;ò|4ò*4ò2ò";ð~HLó)óX;÷|~ñ~÷B - ñ- ÷`ñó8 r