Ë GQpôé#�ûãó‚—ddlmZddlmZmZmZmZmZmZddl m Z ejrddl m Z mZejej ej"ej$hZd„ZdZdZGd „d «ZgZd „ZGd „d e«ZGd„de«ZeGd„de««ZeGd„de««ZeGd„de««ZeGd„de««ZeGd„de««Z eGd„de««Z!eGd„de««Z"eGd„de««Z#eGd „d!e««Z$eGd"„d#e««Z%eGd$„d%e««Z&eGd&„d'e««Z'd(ejPvxr<ejPd(jS«xrejPd(jU«Z+eGd)„d*e««Z,eGd+„d,e««Z-d-„Z.d.„Z/gZ0d/„Z1Gd0„d1e«Z2e1Gd2„d3e2««Z3e1Gd4„d5e2««Z4e1Gd6„d7e2««Z5e1Gd8„d9e2««Z6d:„Z7d;„Z8Gd<„d=«Z9Gd>„d?e9«Z:d@„Z;dA„ZdD„Z?dE„Z@dF„ZAdG„ZByH)Ié)Ú_)ÚerrorÚ localrepoÚpycompatÚ requirementsÚrevlogÚutil)Ú compressioné)ÚListÚTypecó`—tjtjh}||jzS©N)rÚSHARED_REQUIREMENTÚNARROW_REQUIREMENT)ÚrepoÚ preserveds úCusr/lib/python3.12/site-packages/mercurial/upgrade_utils/actions.pyÚpreservedrequirementsr%s.€ä×'Ñ'Ü×'Ñ'ð€Ið �t×(Ñ(Ñ (Ð(ós deficiencys optimizationcóD—eZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZdZdZy)Ú improvementzARepresents an improvement that can be made as part of an upgrade.NTF)Ú__name__Ú __module__Ú __qualname__Ú__doc__ÚtypeÚnameÚ descriptionÚupgrademessageÚdefaultÚpostupgrademessageÚpostdowngrademessageÚtouches_filelogsÚtouches_manifestsÚtouches_changelogÚtouches_requirementsÚtouches_dirstateÚcompatible_with_share©rrrr1sh„ÙKð €Dð €Dð €Kð€Nð€GðÐð Ðð ÐðÐðÐð ÐðÐð"Ñrrcó0—tj|«|Sr)ÚallformatvariantÚappend)Úclss rÚregisterformatvariantr/ns€Ü×јCÔ Ø €Jrcó4—eZdZdZeZed„«Zed„«Zy)Ú formatvariantz6an improvement subclass dedicated to repository formatcó—t«‚)z.current value of the variant in the repository©ÚNotImplementedError©rs rÚfromrepozformatvariant.fromrepoxó €ô"Ó#Ð#rcó—t«‚)z1current value of the variant in the configurationr3r5s rÚ fromconfigzformatvariant.fromconfig}r7rN) rrrrÚFORMAT_VARIANTrÚ staticmethodr6r9r*rrr1r1ss0„Ù@à €Dàñ$óð$ðñ$óñ$rr1cóD—eZdZdZdZed„«Zed„«Zed„«Z y)Úrequirementformatvariantz formatvariant based on a 'requirement' name. Many format variant are controlled by a 'requirement'. We define a small subclass to factor the code. NcóT—tj|tj|««Sr)rÚnewreporequirementsÚdefaultcreateopts)Úuis rÚ_newreporequirementsz-requirementformatvariant._newreporequirements�s%€ä×,Ñ,Ø ” ×+Ñ+¨BÓ/ó ð rcóN—|j€J‚|j|jvSr)Ú _requirementr©r.rs rr6z!requirementformatvariant.fromrepo“s+€à×ÑÐ+Ð+Ð+Ø×Ñ 4×#4Ñ#4Ð4Ð4rcól—|j€J‚|j|j|j«vSr)rDrBrArEs rr9z#requirementformatvariant.fromconfig˜s4€à×ÑÐ+Ð+Ð+Ø×Ñ 3×#;Ñ#;¸D¿G¹GÓ#DÐDÐDr) rrrrrDr;rBÚ classmethodr6r9r*rrr=r=ƒsJ„ñð€Làñ óð ð ñ5óð5ðñEóñErr=cóL—eZdZdZej ZdZed«Z ed«Z y)ÚfncachesfncacheTsYlong and reserved filenames may not work correctly; repository performance is sub-optimalssrepository will be more resilient to storing certain paths and performance of certain operations should be improvedN) rrrrrÚFNCACHE_REQUIREMENTrDr!rrr r*rrrIrIžs7„à €Dà×3Ñ3€Là€Gáð 1ó€Kñ ð )ó�NrrIcód—eZdZdZej ZdZed«Z ed«Z dZ dZ dZ dZdZdZy)Ú dirstatev2s dirstate-v2Fs£version 1 of the dirstate file format requires reading and parsing it all at once. Version 2 has a better structure,better information and lighter update mechanisms"hg status" will be fasterTN)rrrrrÚDIRSTATE_V2_REQUIREMENTrDr!rrr r$r%r&r'r(r)r*rrrLrL²sW„à €DØ×7Ñ7€Là€Gáð ;ó€KñÐ4Ó5€NàÐØÐØÐØÐØÐØ ÑrrLcód—eZdZdZej ZdZed«Z ed«Z dZ dZ dZ dZdZdZy)Údirstatetrackedkeys tracked-hintFsDAdd a small file to help external tooling that watch the tracked setsHexternal tools will be informated of potential change in the tracked setTN)rrrrrÚDIRSTATE_TRACKED_HINT_V1rDr!rrr r$r%r&r'r(r)r*rrrOrOÊsY„à €DØ×8Ñ8€Là€GáØOó€KñØSó€NðÐØÐØÐØÐØÐØ ÑrrOcóL—eZdZdZej ZdZed«Z ed«Z y)Ú dotencodes dotencodeTsLstorage of filenames beginning with a period or space may not work correctlysNrepository will be better able to store files beginning with a space or periodN) rrrrrÚDOTENCODE_REQUIREMENTrDr!rrr r*rrrRrRás7„à €Dà×5Ñ5€Là€Gáð (ó€Kñ ð ,ó�NrrRcóL—eZdZdZej ZdZed«Z ed«Z y)Ú generaldeltas generaldeltaTsïdeltas within internal storage are unable to choose optimal revisions; repository is larger and slower than it could be; interaction with other repositories may require extra network and CPU resources, making "hg push" and "hg pull" slowersrepository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" fasterN) rrrrrÚGENERALDELTA_REQUIREMENTrDr!rrr r*rrrUrUôs7„à €Dà×8Ñ8€Là€Gáð <ó€Kñð ó�NrrUcó|—eZdZdZej ZdZed«Z ed«Z ed«Z ed«Z dZ dZdZdZy) Ú sharesafes share-safeTsÀold shared repositories do not share source repository requirements and config. This leads to various problems when the source repository format is upgraded or some new extensions are enabled.swUpgrades a repository to share-safe format so that future shares of this repository share its requirements and configs.sirepository downgraded to not use share safe mode, existing shares will not work and needs to be reshared.s¸repository upgraded to share safe mode, existing shares will still work in old non-safe mode. Re-share existing shares to use them in safe mode New shares will be created in safe mode.FN)rrrrrÚSHARESAFE_REQUIREMENTrDr!rrr r#r"r$r%r&r'r*rrrXrXsv„à €DØ×5Ñ5€Là€Gáð #ó€Kñð Ió€Nñ ð óÐñ ð 5óÐðÐØÐØÐØÑrrXcóL—eZdZdZej ZdZed«Z ed«Z y)Ú sparserevlogs sparserevlogTsXin order to limit disk reading and memory usage on older version, the span of a delta chain from its root to its end is limited, whatever the relevant data in this span. This can severly limit Mercurial ability to build good chain of delta resulting is much more storage space being taken and limit reusability of on disk delta during exchange.sÍRevlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.N) rrrrrÚSPARSEREVLOG_REQUIREMENTrDr!rrr r*rrr[r[6s7„à €Dà×8Ñ8€Là€Gáð ó€Kñð ?ó�Nrr[cóL—eZdZdZej ZdZed«Z ed«Z y)Úpersistentnodemapspersistent-nodemapFs9persist the node -> rev mapping on disk to speedup lookups#Speedup revision lookup by node id.N) rrrrrÚNODEMAP_REQUIREMENTrDr!rrr r*rrr^r^Ps1„à €Dà×3Ñ3€Là€GáØDó€KñÐ=Ó>�Nrr^cóT—eZdZdZej ZdZed«Z ed«Z dZ dZ y)Ú copiessdcs copies-sdcFs/Stores copies information alongside changesets.sAAllows to use more efficient algorithm to deal with copy tracing.N) rrrrrÚCOPIESSDC_REQUIREMENTrDr!rrr r$r%r*rrrara_s=„à €Dà×5Ñ5€Là€GáÐFÓG€KáØPó€NðÐØÑrracóL—eZdZdZej ZdZed«Z ed«Z y)Úrevlogv2s revlog-v2FsVersion 2 of the revlog.svery experimentalN) rrrrrÚREVLOGV2_REQUIREMENTrDr!rrr r*rrrdrdqs-„à €DØ×4Ñ4€LØ€GÙÐ/Ó0€KÙÐ+Ó,�NrrdcóT—eZdZdZej ZdZed«Z ed«Z dZ dZ y)Ú changelogv2s changelog-v2Fs7An iteration of the revlog focussed on changelog needs.squite experimentalN) rrrrrÚCHANGELOGV2_REQUIREMENTrDr!rrr r$r%r*rrrgrgzs9„à €DØ×7Ñ7€LØ€GÙÐNÓO€KÙÐ,Ó-€NàÐØÑrrgcóT—eZdZdZdZed«Zed«Zed„«Z ed„«Z y)Úremovecldeltachainsplain-cl-deltaTs•changelog storage is using deltas instead of raw entries; changelog reading and any operation relying on changelog data are slower than they could beszchangelog storage will be reformated to store raw entries; changelog reading will be faster; changelog size may be reducedcó\‡—|j}|jŠtˆfd„|D««S)Nc3ó4•K—|]}|‰|«k(–—Œy­wrr*)Ú.0ÚrevÚ chainbases €rÚ z.removecldeltachain.fromrepo..Ÿsøèø€Ð7±B¨S�3™) C›.Õ(±Bùsƒ)Ú changelogroÚall)rÚclros @rr6zremovecldeltachain.fromrepo™s(ø€ð�^‰^ˆØ—L‘Lˆ ÜÓ7±BÓ7Ó7Ð7rcó—y©NTr*r5s rr9zremovecldeltachain.fromconfig¡s€àrN) rrrrr!rrr r;r6r9r*rrrjrj†sT„à €Dà€Gáð ó€Kñð 1ó€Nð ñ8óð8ðñóñrrjózstdcó^—eZdZdZerdZndZed«Zed«Ze d„«Z e d„«Z y) Úcompressionengineó compressionrvózlibsMCompresion algorithm used to compress data. Some engine are faster than others;revlog content will be recompressed with the new algorithm.có�—d}|jD]4}|j}|d«s |d«sŒ |jdd«d}Œ6|S)Nrzsrevlog-compression-sexp-compression-ó-r)rÚ startswithÚsplit)r.rr ÚreqÚprefixs rr6zcompressionengine.fromrepo¿sP€ð ˆ Ø×$Ô$ˆCØ—^‘^ˆFÙÐ,Ô-±Ð8KÕ1LØ!Ÿi™i¨¨aÓ0°Ñ3‘ ð%ðÐrcó—|jjdd«}|D]M}|tjvsŒtj|}|j «sŒ:|j «sŒK|cSdj |«S)Nsformatsrevlog-compressionó,)rAÚ configlistr Ú compenginesÚ availableÚ revlogheaderÚjoin)r.rr„ÚcompÚes rr9zcompressionengine.fromconfigÌsi€à—g‘g×(Ñ(¨Ð4IÓJˆ ãˆDØ”t×'Ñ'Ò'Ü×$Ñ$ TÑ*�Ø—;‘;•= Q§^¡^Õ%5Ø’Kð  ð�y‰y˜Ó%Ð%rN) rrrrÚ _has_zstdr!rrr rGr6r9r*rrrxrx­sZ„à €DáØ‰àˆáð -ó€Kñ ØFó€Nðñ óð ðñ &óñ &rrxcóT—eZdZdZdZed«Zed«Zed„«Z ed„«Z y)Úcompressionlevelscompression-levelódefaultscompression levels#revlog content will be recompressedcóÒ—tj|«}d}|dk(r|jjdd«}n!|dk(r|jjdd«}|€yt |«S©Nrzsstoragesrevlog.zlib.levelrvsrevlog.zstd.levelr�)rxr6rAÚ configintÚbytes©r.rrˆÚlevels rr6zcompressionlevel.fromrepoãse€ä ×)Ñ)¨$Ó/ˆØˆØ �7Š?Ø—G‘G×%Ñ% jÐ2FÓG‰EØ �WŠ_Ø—G‘G×%Ñ% jÐ2FÓGˆEØ ˆ=ØÜ�U‹|ÐrcóÒ—tj|«}d}|dk(r|jjdd«}n!|dk(r|jjdd«}|€yt |«Sr�)rxr9rAr�r‘r’s rr9zcompressionlevel.fromconfigïse€ä ×+Ñ+¨DÓ1ˆØˆØ �7Š?Ø—G‘G×%Ñ% jÐ2FÓG‰EØ �WŠ_Ø—G‘G×%Ñ% jÐ2FÓGˆEØ ˆ=ØÜ�U‹|ÐrN) rrrrr!rrr rGr6r9r*rrrŒrŒÚsH„à €DØ€GáÐ(Ó)€KáÐ=Ó>€Nàñ óð ðñ óñ rrŒcóf—g}tD]%}|j|«rŒ|j|«Œ'|S)zBreturns a list of format upgrades which can be perform on the repo)r,r6r-)rÚupgradesÚfvs rÚfind_format_upgradesr˜üs2€à€H÷ ˆØ�{‰{˜4Õ Ø �O‰O˜BÕ ðð €Orcó—g}tD]{}|jdk(r5|j|«|j|«k7r|j |«ŒG|j|«sŒY|j|«rŒk|j |«Œ}|S)zvreturns a list of format downgrades which will be performed on the repo because of disabled config option for themry)r,rr6r9r-)rÚ downgradesr—s rÚfind_format_downgradesr› s{€ð€JçˆØ �7‰7�nÒ $ð�{‰{˜4Ó  B§M¡M°$Ó$7Ò7Ø×!Ñ! "Ô%Ø ð �;‰;�tÕ  R§]¡]°4Õ%8Ø × Ñ ˜bÕ !ðð Ðrcó0—tj|«|Sr)ÚALL_OPTIMISATIONSr-)Úobjs rÚregister_optimizationrŸ$s€Ü×јSÔ!Ø €Jrcó—eZdZdZeZy)Ú optimizationz2an improvement subclass dedicated to optimizationsN)rrrrÚ OPTIMISATIONrr*rrr¡r¡)s „Ù<à �Drr¡có4—eZdZdZeZed«Zed«Zy)Úredeltaparentsóre-delta-parents]deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slowersHdeltas within internal storage will choose a new base revision if neededN© rrrrr¢rrrr r*rrr¤r¤/s,„à €Dà €Dáð %ó€Kñð #ó�Nrr¤có4—eZdZdZeZed«Zed«Zy)Úredeltamultibaseóre-delta-multibasesÇdeltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of mergess”deltas within internal storage will choose an optimal delta by computing deltas against multiple parents; may slow down execution time significantlyNr¦r*rrr¨r¨Es,„à €Dà €Dáð )ó €Kñð ó�Nrr¨có4—eZdZdZeZed«Zed«Zy)Ú redeltaalló re-delta-alls¼deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not neededsndeltas within internal storage will be fully recomputed; this will likely drastically slow down execution timeNr¦r*rrr«r«_s,„à €Dà €Dáð 0ó€Kñð ó�Nrr«có4—eZdZdZeZed«Zed«Zy)Úredeltafulladdóre-delta-fulladdsëevery revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.sœeach revision will be added as new content to the internal storage; this will likely drastically slow down execution time, but some extensions might need itNr¦r*rrr®r®ss,„à €Dà €Dáð 0ó€Kñð ó�Nrr®có —tt«S)z8Determine optimisation that could be used during upgrade)Úlistr�r5s rÚfindoptimizationsr²‰s€ô Ô!Ó "Ð"rcóà‡—gŠ|D]?}tj|d«r |j}nd}|�||vrŒ/‰j|«ŒA‰j ˆfd„t |d„¬«D««‰S)a£Determine upgrade actions that will be performed. Given a list of improvements as returned by ``find_format_upgrades`` and ``findoptimizations``, determine the list of upgrade actions that will be performed. The role of this function is to filter improvements if needed, apply recommended optimizations from the improvements list that make sense, etc. Returns a list of action names. rDNc3ó*•K—|] }|‰vr|–—Œ y­wrr*)rmÚoÚ newactionss €rrpz,determine_upgrade_actions..®s!øèø€ðá>ˆAØ �JÑ ô Ù>ùsƒcó—|jSr©r)Úxs rÚz+determine_upgrade_actions..°s€°a·f²fr©Úkey)r Ú safehasattrrDr-ÚextendÚsorted)rÚformat_upgradesÚ optimizationsÚ sourcereqsÚdestreqsÚdrr¶s @rÚdetermine_upgrade_actionsrÅ�sø€ð€Jã ˆÜ × Ñ ˜A˜~Ô .Ø—>‘>‰DàˆDð Ð  ¨HÑ 4Ø à×ј!Õðð×Ñóä˜ Ñ,<Õ>óôð Ðrcó—eZdZdZd„Zy)Ú BaseOperationz¬base class that contains the minimum for an upgrade to work (this might need to be extended as the usage for subclass alternative to UpgradeOperation extends) có —||_||_yr)Únew_requirementsÚ backup_store)ÚselfrÉrÊs rÚ__init__zBaseOperation.__init__Ás€ð !1ˆÔà(ˆÕrN)rrrrrÌr*rrrÇrǺs „ñó )rrÇcóȇ—eZdZdZˆfd„Zed„«Zed„«Zed„«Zed„«Z ed„«Z ed„«Z ed „«Z d e fd „Zd „Zd „Zd„Zd„Zd„Zd„Zd„ZˆxZS)ÚUpgradeOperationz/represent the work to be done during an upgradecó•—t‰ |�||«||_||_||_||_||_|j|jz |_|j|jz |_ |j|jz|_ td«}|D� cgc]} | |jvsŒ| ‘Œc} |_ |j} tjj|_d| vr tjj"|_nkd| vr tjj$|_nGd| vr tjj$|_n#d| vrtjj&|_d| v|_ycc} w)Nr¬r¥r©r¯)ÚsuperrÌrAÚcurrent_requirementsÚupgrade_actionsÚremoved_actionsÚrevlogs_to_processrÉÚ_added_requirementsÚ_removed_requirementsÚ_preserved_requirementsr²Úunused_optimizationsÚupgrade_actions_namesrÚDELTAREUSEALWAYSÚdelta_reuse_modeÚDELTAREUSENEVERÚDELTAREUSESAMEREVSÚDELTAREUSEFULLADDÚforce_re_delta_both_parents) rËrArÉrÑrÒrÓrÔrÊÚall_optimizationsÚirÙÚ __class__s €rrÌzUpgradeOperation.__init__Îsvø€ô ‰ÑØ Ø ô ðˆŒØ$8ˆÔ!à.ˆÔØ.ˆÔØ"4ˆÔð × !Ñ ! D×$=Ñ$=Ñ =ð Ô ð × %Ñ %¨×(=Ñ(=Ñ =ð Ô"ð × %Ñ %¨×(=Ñ(=Ñ =ð Ô$ô .¨dÓ3Ðá(ó% Ù(�!¨A°T×5IÑ5IÒ,IŠAÐ(ñ% ˆÔ!ð !%× :Ñ :ÐÜ &§ ¡ × >Ñ >ˆÔØ Ð3Ñ 3Ü$*§M¡M×$AÑ$AˆDÕ !Ø Ð#8Ñ 8Ü$*§M¡M×$DÑ$DˆDÕ !Ø "Ð&;Ñ ;Ü$*§M¡M×$DÑ$DˆDÕ !Ø Ð$9Ñ 9Ü$*§M¡M×$CÑ$CˆDÔ !ð "Ð%:Ð :ð Õ(ùò#% s ÂFÂ2Fcóf—t|jD�cgc]}|j‘Œc}«Scc}wr)ÚsetrÒr©rËÚas rrÙz&UpgradeOperation.upgrade_actions_namess+€ä D×$8Ò$8Ó9Ñ$8˜q�A—F“FÐ$8Ñ9Ó:Ð:ùÒ9s”.có’—|jxr:|j xr+|j xr|j xr |j Sr)r'r$r%r&r(©rËs rÚrequirements_onlyz"UpgradeOperation.requirements_only sZ€ð × %Ñ %ò *Ø×)Ñ)Ð)ò *à×*Ñ*Ð*ò *ð×*Ñ*Ð*ò *ð×)Ñ)Ð)ð  rcóª—|jD]%}|jtk(ry|jsŒ%y|jD]}|jsŒyy©NTF)rÒrr¢r$rÓrås rr$z!UpgradeOperation.touches_filelogssP€à×%Ô%ˆAà�v‰vœÒ%ÙØ×#Ó#Ùð &ð ×%Ô%ˆAØ×!Ó!Ùð&ðrcóª—|jD]%}|jtk(ry|jsŒ%y|jD]}|jsŒyyrë)rÒrr¢r%rÓrås rr%z"UpgradeOperation.touches_manifests"óP€à×%Ô%ˆAà�v‰vœÒ%ÙØ×$Ó$Ùð &ð ×%Ô%ˆAØ×"Ó"Ùð&ðrcóª—|jD]%}|jtk(ry|jsŒ%y|jD]}|jsŒyyrë)rÒrr¢r&rÓrås rr&z"UpgradeOperation.touches_changelog/rírcó¨—|jD]$}|jtk(rŒ|jsŒ$y|jD]}|jsŒyyru)rÒrr¢r'rÓrås rr'z%UpgradeOperation.touches_requirements<sM€à×%Ô%ˆAð�v‰vœÒ%ØØ×'Ó'Ùð &ð×%Ô%ˆAØ×%Ó%Ùñ&rcó¨—|jD]$}|jtk(rŒ|jsŒ$y|jD]}|jsŒyyrë)rÒrr¢r(rÓrås rr(z!UpgradeOperation.touches_dirstateIsP€à×%Ô%ˆAà�v‰vœÒ%ØØ×#Ó#Ùð &ð ×%Ô%ˆAØ×!Ó!Ùð&ðrÚlabelcó —d}t|«D]>}|s|jjd«|jj||¬«d}Œ@y)zK Utility function to aid writing of a list under one label Tó, )rñFN)r¿rAÚwrite)rËÚlrñÚfirstÚrs rÚ_write_labeledzUpgradeOperation._write_labeledWsC€ðˆÜ˜–ˆAÙØ—‘— ‘ ˜eÔ$Ø �G‰G�M‰M˜! 5ˆMÔ )؉Eñ rcóÔ—|jjtd««|jjtd««|j|jd«|jjd«|j r[|jjtd««|j|j d«|jjd«|j r[|jjtd««|j|j d«|jjd«|jjd«y) Ns requirements s preserved: s"upgrade-repo.requirement.preservedó s removed: s upgrade-repo.requirement.removeds added: supgrade-repo.requirement.added)rArôrrør×rÖrÕrès rÚprint_requirementsz#UpgradeOperation.print_requirementsbsþ€Ø �‰� ‰ ”aÐ)Ó*Ô+Ø �‰� ‰ ”aÐ)Ó*Ô+Ø ×ÑØ × (Ñ (Ð*Oô ð �‰� ‰ �uÔØ × %Ò %Ø �G‰G�M‰Mœ!˜OÓ,Ô -Ø × Ñ Ø×*Ñ*Ð,Oô ð �G‰G�M‰M˜5Ô "Ø × #Ò #Ø �G‰G�M‰Mœ!˜MÓ*Ô +Ø × Ñ Ø×(Ñ(Ð*Kô ð �G‰G�M‰M˜5Ô "Ø �‰� ‰ �eÕrcóp—|jD�cgc]}|jtk(sŒ|‘Œ}}|jd„¬«|rj|jj t d««|j|D�cgc]}|j‘Œc}d«|jj d«yycc}wcc}w)Ncó—|jSrr¸)ræs rrºz6UpgradeOperation.print_optimisations..{s€¨¯ªrr»soptimisations: s#upgrade-repo.optimisation.performeds ) rÒrr¢ÚsortrArôrrør)rËræÚ optimisationss rÚprint_optimisationsz$UpgradeOperation.print_optimisationsws¥€à×+Ò+ó Ù+�!¨q¯v©v¼Ó/EŠAÐ+ð ð ð ×ÑÑ/ÐÔ0Ù Ø �G‰G�M‰Mœ!Ð.Ó/Ô 0Ø × Ñ Ù!.Ó/¡˜A�—“ Ñ/Ø6ô ð �G‰G�M‰M˜'Õ "ð ùò  ùò0s�B.¨B.Á6B3cóŽ—|jD]6}|jjd|j|jfz«Œ8y©Ns %s %s )rÒrAÚstatusrr rås rÚprint_upgrade_actionsz&UpgradeOperation.print_upgrade_actions„s7€Ø×%Ô%ˆAØ �G‰G�N‰NÐ+¨q¯v©v°q×7GÑ7GÐ.HÑHÕ Iñ&rcó0—|js|jjd«nS|jjd«t|j«D] }|jjd|z«Œ"|jjd«y)Nsno revlogs to process sprocessed revlogs: s - %s rú)rÔrArôr¿)rËr÷s rÚprint_affected_revlogsz'UpgradeOperation.print_affected_revlogsˆsf€Ø×&Ò&Ø �G‰G�M‰MÐ5Õ 7à �G‰G�M‰MÐ2Ô 4ܘD×3Ñ3Ö4�Ø—‘— ‘ ˜{¨Q™Õ0ð5à �‰� ‰ �uÕrcó —|jD]?}|jjtd«|j|j fz«ŒAyr)rØrArrrr)rËrás rÚprint_unused_optimizationsz+UpgradeOperation.print_unused_optimizations‘s:€Ø×*Ô*ˆAØ �G‰G�N‰Nœ1Ð-Ó.°!·&±&¸!¿-¹-Ð1HÑHÕ Iñ+rcó—||jvS)zñ&r)rrrrrÌÚpropertyrÙrér$r%r&r'r(r‘rørûrrrrr rÚ __classcell__)râs@rrÎrÎËsÉø„Ù9ô6 ðpñ;óð;ðñ óð ðñ óð ðñ óð ðñ óð ðñ óð ðñ óð ð  uó òò* #òJòòJò3ö?rrÎcó$—tjhS)zµObtain requirements required to be present to upgrade a repo. An upgrade will not be allowed if the repository doesn't have the requirements returned by this function. )rÚSTORE_REQUIREMENTr5s rÚrequiredsourcerequirementsr¦s€ô ×&Ñ&ð ðrcó—dhS)z³Obtain requirements that will prevent an upgrade from occurring. An upgrade cannot be performed if the source repository contains a requirements in the returned set. s parentdeltar*r5s rÚblocksourcerequirementsr²s€ð ð ðrcó¦—tjtjh}|j|«s t d«}t j |«‚y)z?Check that the requirements contain at least one Revlog versions3cannot upgrade repository; missing a revlog versionN)rÚREVLOGV1_REQUIREMENTreÚ intersectionrrÚAbort)ÚreqsÚ all_revlogsÚmsgs rÚcheck_revlog_versionr¿sL€ô ×)Ñ)Ü×)Ñ)ð€Kð × #Ñ # DÔ )ÜÐFÓGˆÜ�k‰k˜#ÓÐð *rcód—t|j«t|«}||jz }|r=td«}dj t |««}t j||z«‚t|«}||jz}|r=td«}dj t |««}t j||z«‚tj|jvxrtj|jv}|r-td«}td«}t j||¬«‚y)zCEnsure that no existing requirements prevent the repository upgrades2cannot upgrade repository; requirement missing: %srós=cannot upgrade repository; unsupported source requirement: %ss>cannot upgrade repository; share repository without share-safes-check :hg:`help config.format.use-share-safe`)ÚhintN) rrrrr‡r¿rrrrrY) rÚrequiredÚ missingreqsrÚblockingÚ blockingreqsÚmÚ bad_shareÚhs rÚcheck_source_requirementsr'Ês€ô˜×*Ñ*Ô+Ü)¨$Ó/€HؘT×.Ñ.Ñ.€KÙÜÐEÓFˆØ—j‘j¤¨ Ó!4Ó5ˆ Ü�k‰k˜#  Ñ+Ó,Ð,ä& tÓ,€Hؘd×/Ñ/Ñ/€LÙÜ ÐNÓ OˆØ—z‘z¤&¨Ó"6Ó7ˆ Ü�k‰k˜!˜lÑ*Ó+Ð+ô ×'Ñ'¨4×+<Ñ+<Ð<ò HÜ × .Ñ .°d×6GÑ6GÐ GðñÜ ÐOÓ PˆÜ Ð>Ó ?ˆÜ�k‰k˜! !Ô$Ð$ðrc ó—tjtjtjtjtj tj tjtjtjh }tjD]p}tj|}|j«sŒ'|j«sŒ8|jd|z«|j«dk(sŒ`|jd«Œr|S)zéObtain requirements that can be removed during an upgrade. If an upgrade were to create a repository that dropped a requirement, the dropped requirement must appear in the returned set for the upgrade to be allowed. óexp-compression-%srvórevlog-compression-zstd)rr\rbr_rYrerhrrPrMr r„r…r†Úaddr©rÚ supportedrÚengines rÚsupportremovedrequirementsr/êsÊ€ô ×-Ñ-Ü×*Ñ*Ü×(Ñ(Ü×*Ñ*Ü×)Ñ)Ü×,Ñ,Ü×)Ñ)Ü×-Ñ-Ü×,Ñ,ð €Iô×'Ô'ˆÜ×(Ñ(¨Ñ.ˆØ × Ñ Õ  &×"5Ñ"5Õ"7Ø �M‰MÐ/°$Ñ6Ô 7Ø�{‰{‹} Ó'Ø— ‘ Ð8Õ9ð (ð Ðrcóð—tjtjtjtjtj tj tjtjtjtjtjtjtjtjtjtj h}t"j$D]p}t"j$|}|j'«sŒ'|j)«sŒ8|j+d|z«|j-«dk(sŒ`|j+d«Œr|S)zöObtain requirements that upgrade supports in the destination. If the result of the upgrade would have requirements not in this set, the upgrade is disallowed. Extensions should monkeypatch this to add their custom requirements. r)rvr*)rrhrbrPrMrSrJrVr_rrerrYr\rÚTREEMANIFEST_REQUIREMENTrr r„r…r†r+rr,s rÚsupporteddestrequirementsr2s €ô ×,Ñ,Ü×*Ñ*Ü×-Ñ-Ü×,Ñ,Ü×*Ñ*Ü×(Ñ(Ü×-Ñ-Ü×(Ñ(Ü×)Ñ)Ü×)Ñ)Ü×'Ñ'Ü×*Ñ*Ü×-Ñ-Ü×&Ñ&Ü×-Ñ-Ü×'Ñ'ð!€Iô$×'Ô'ˆÜ×(Ñ(¨Ñ.ˆØ × Ñ Õ  &×"5Ñ"5Õ"7Ø �M‰MÐ/°$Ñ6Ô 7Ø�{‰{‹} Ó'Ø— ‘ Ð8Õ9ð (ð Ðrc óx—tjtjtjtjtj tj tjtjtjtjtjtjh }tjD]p}tj|}|j«sŒ'|j!«sŒ8|j#d|z«|j%«dk(sŒ`|j#d«Œr|S)a�Obtain requirements that can be added to a repository during upgrade. This is used to disallow proposed requirements from being added when they weren't present before. We use a list of allowed requirement additions instead of a list of known bad additions because the whitelist approach is safer and will prevent future, unknown requirements from accidentally being added. r)rvr*)rrSrJrVr\rbr_rYrrerhrPrMr r„r…r†r+rr,s rÚallowednewrequirementsr4(så€ô ×*Ñ*Ü×(Ñ(Ü×-Ñ-Ü×-Ñ-Ü×*Ñ*Ü×(Ñ(Ü×*Ñ*Ü×)Ñ)Ü×)Ñ)Ü×,Ñ,Ü×-Ñ-Ü×,Ñ,ð €Iô×'Ô'ˆÜ×(Ñ(¨Ñ.ˆØ × Ñ Õ  &×"5Ñ"5Õ"7Ø �M‰MÐ/°$Ñ6Ô 7Ø�{‰{‹} Ó'Ø— ‘ Ð8Õ9ð (ð Ðrcó,—|j}t|j«t|«}||z |z }|r=td«}dj t |««}t j||z«‚t|«}||z |z }|r=td«}dj t |««}t j||z«‚t|«} || z } | r=td«}dj t | ««} t j|| z«‚y)Ns;cannot upgrade repository; requirement would be removed: %srós>cannot upgrade repository; do not support adding requirement: sEcannot upgrade repository; do not support destination requirement: %s) rrr/rr‡r¿rrr4r2) rÚnew_reqsÚold_reqsÚsupport_removalÚno_remove_reqsrÚsupport_additionÚ no_add_reqsr$r-Úunsupported_reqss rÚcheck_requirements_changesr=Is€Ø× Ñ €Hܘ×*Ñ*Ô+Ü0°Ó6€OØ Ñ(¨?Ñ:€NÙÜÐNÓOˆØŸ™¤F¨>Ó$:Ó;ˆÜ�k‰k˜# Ñ.Ó/Ð/ä-¨dÓ3ÐØ˜XÑ%Ð(8Ñ8€KÙÜ ÐOÓ PˆØ—j‘j¤¨ Ó!4Ó5ˆ Ü�k‰k˜!˜k™/Ó*Ð*ä)¨$Ó/€IØ )Ñ+ÐÙÜð ó ˆð!Ÿ:™:¤fÐ-=Ó&>Ó?ÐÜ�k‰k˜#Ð 0Ñ0Ó1Ð1ð rN)CÚi18nrÚrrrrrr Úutilsr Ú TYPE_CHECKINGÚtypingr r rVr\rerhÚRECLONES_REQUIREMENTSrr:r¢rr,r/r1r=rIrLrOrRrUrXr[r^rardrgrjr„r…r†rŠrxrŒr˜r›r�rŸr¡r¤r¨r«r®r²rÅrÇrÎrrrr'r/r2r4r=r*rrÚrDsLðõ÷÷õ à ×Ò÷ð×)Ñ)Ø×)Ñ)Ø×%Ñ%Ø×(Ñ(ð Ðò)ð€Ø€ ÷7"ñ7"ðtÐòô $�Kô $ô E˜}ôEð6ôÐ&óóðð&ô!Ð)ó!óð!ð.ô!Ð1ó!óð!ð,ôÐ(óóðð$ôÐ+óóðð4ô# Ð(ó# óð# ðLôÐ+óóðð2ô ?Ð0ó ?óð ?ðôÐ(óóðð"ô-Ð'ó-óð-ðôÐ*óóððô˜óóðð@ ˆt×ÑÐò1Ø ×јÑ!×+Ñ+Ó-ò1à ×јÑ!×.Ñ.Ó0ð ðô)&˜ ó)&óð)&ðXô�}óóðòB òð,Ðòô �;ôð ô�\óóðð*ô�|óóðð2ô�óóðð&ô�\óóðò*#ò'÷T)ñ)ô"U?�}ôU?òv ò òò%ò@ò6 òFóB2r