Ë –óÓ�5LÛ¡ãó²—ddlZddlZddlZddlZddlmZddlmZmZm Z ddl m Z m Z m Z ddlmZej Zej$Zd„Zd„Zd Zd Zd Zd Zd ZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)Gd„d«Z*e*d de(¬ «Z+e*dde(¬ «Z,e*d!de'¬ «Z-e*d"de)¬ «Z.e*d#«Z/e*d«Z0e*d$de'¬ «Z1e*d%de'¬ «Z2e*d&«Z3e*d'«Z4e*d«Z5e*d(«Z6e*d)«Z7e*d*d¬+«Z8e*d,d¬+«Z9e*d-d¬+«Z:e*d.de)¬ «Z;e*d/de'¬ «ZGd2„d3e>«Z?Gd4„d5e>«Z@d6„ZAy)7éNé)Ú_)ÚbinÚhexÚnullrev)ÚerrorÚ filemergeÚutil)Úhashutilcó\—|jd«}|dd|ddz}dj|«S)Nóéþÿÿÿéÿÿÿÿ)ÚsplitÚjoin)ÚdataÚbitss ú8usr/lib/python3.12/site-packages/mercurial/mergestate.pyÚ _droponoders5€à �:‰:�eÓ €DØ ��ˆ9�t˜B˜C�yÑ €DØ �:‰:�dÓ Ðócó†—||j«jjk(rtj||«S||S©N)ÚrepoÚ nodeconstantsÚnullhexr Ú absentfilectx)ÚhexnodeÚctxÚfs rÚ_filectxorabsentr s8€Ø�#—(‘(“*×*Ñ*×2Ñ2Ò2Ü×&Ñ& s¨AÓ.Ð.à�1‰vˆ róLóOólófóFóCóPóuórspuspróoótóRódómóDsaddedsremovedsmodifiedcóz—eZdZdZej «Zej «Zd d„Zd„Z d„Z d„Z d„Z d„Z y) Ú MergeActiona#represent an "action" merge need to take for a given file Attributes: _short: internal representation used to identify each action no_op: True if the action does affect the file content or tracking status narrow_safe: True if the action can be safely used for a file outside of the narrow set changes: The types of changes that this actions involves. This is a work in progress and not all actions have one yet. In addition, some requires user changes and cannot be fully decided. The value currently available are: - ADDED: the files is new in both parents - REMOVED: the files existed in one parent and is getting removed - MODIFIED: the files existed in at least one parent and is getting changed NcóÀ—||_|jj|«||_|jr|jj|«||_||_yr)Ú_shortÚ ALL_ACTIONSÚaddÚno_opÚ NO_OP_ACTIONSÚ narrow_safeÚchanges)ÚselfÚshortr6r8r9s rÚ__init__zMergeAction.__init__�sN€ØˆŒ Ø ×Ñ×јTÔ"؈Œ Ø �:Š:Ø × Ñ × "Ñ " 4Ô (Ø&ˆÔ؈� rcó,—t|j«Sr)Úhashr3©r:s rÚ__hash__zMergeAction.__hash__Šs€Ü�D—K‘KÓ Ð rcó>—d|jjd«zS)NzMergeAction<%s>Úascii)r3Údecoder?s rÚ__repr__zMergeAction.__repr__�s€Ø  4§;¡;×#5Ñ#5°gÓ#>Ñ>Ð>rcó—|jSr©r3r?s rÚ __bytes__zMergeAction.__bytes__�s €Ø�{‰{Ðrcó^—|€yt|t«sJ‚|j|jk(S©NF)Ú isinstancer1r3©r:Úothers rÚ__eq__zMergeAction.__eq__“s-€Ø ˆ=ØÜ˜%¤Ô-Ð-Ð-Ø�{‰{˜eŸl™lÑ*Ð*rcó4—|j|jkSrrFrKs rÚ__lt__zMergeAction.__lt__™s€Ø�{‰{˜UŸ\™\Ñ)Ð)r)FFN)Ú__name__Ú __module__Ú __qualname__Ú__doc__ÚweakrefÚWeakSetr4r7r<r@rDrGrMrO©rrr1r1fsC„ñð."�'—/‘/Ó#€KØ#�G—O‘OÓ%€Móò!ò?òò+ó *rr1T)r8r9óaógópsamócsdcscdsdgsdmók)r6skasknóescmcó6—eZdZdZd„Zd„Zdd„Zejd„«Z ejd„«Z ejd„«Z ejd „«Z d „Z d „Zed „«Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z!y)Ú_mergestate_baseaÍtrack 3-way merge state of individual files The merge state is stored on disk when needed. Two files are used: one with an old format (version 1), and one with a new format (version 2). Version 2 stores a superset of the data in version 1, including new kinds of records in the future. For more about the new format, see the documentation for `_readrecordsv2`. Each record can contain arbitrary content, and has an associated type. This `type` should be a letter. If `type` is uppercase, the record is mandatory: versions of Mercurial that don't support it should abort. If `type` is lowercase, the record can be safely ignored. Currently known records: L: the node of the "local" part of the merge (hexified version) O: the node of the "other" part of the merge (hexified version) F: a file to be merged entry C: a change/delete or delete/change conflict P: a path conflict (file vs directory) f: a (filename, dictionary) tuple of optional values for a given file l: the labels for the parts of the merge. Merge record states (stored in self._state, indexed by filename): u: unresolved conflict r: resolved conflict pu: unresolved path conflict (file conflicts with directory) pr: resolved path conflict o: file was merged in favor of other parent of merge (DEPRECATED) The resolve command transitions between 'u' and 'r' for conflicts and 'pu' and 'pr' for path conflicts. có¢—||_i|_tjt«|_d|_d|_d|_i|_ d|_ y)z^Initialize the merge state. Do not use this directly! Instead call read() or clean().NF) Ú_repoÚ_stateÚ collectionsÚ defaultdictÚdictÚ _stateextrasÚ_localÚ_otherÚ_labelsÚ_resultsÚ_dirty)r:rs rr<z_mergestate_base.__init__çsJ€ðˆŒ ؈Œ Ü'×3Ñ3´DÓ9ˆÔ؈Œ ؈Œ ؈Œ 𠈌 ؈� rcó—yrrVr?s rÚresetz_mergestate_base.resetùs€Ø rNcó.—||_||_||_yr)rfrgrh)r:ÚnoderLÚlabelss rÚstartz_mergestate_base.startüs€ØˆŒ ؈Œ ؈� rcó`—|j€d}tj|«‚|jS)Ns(local accessed but self._local isn't set)rfrÚProgrammingError©r:Úmsgs rÚlocalz_mergestate_base.localó,€à �;‰;Ð Ø=ˆCÜ×(Ñ(¨Ó-Ð -Ø�{‰{Ðrcó4—|j|jSr)r`rur?s rÚlocalctxz_mergestate_base.localctxó€à�z‰z˜$Ÿ*™*Ñ%Ð%rcó`—|j€d}tj|«‚|jS)Ns(other accessed but self._other isn't set)rgrrrrss rrLz_mergestate_base.other rvrcó4—|j|jSr)r`rLr?s rÚotherctxz_mergestate_base.otherctxryrcóZ—t|j«xst|j«S)z›Whether mergestate is active. Returns True if there appears to be mergestate. This is a rough proxy for "is a merge in progress." )Úboolrfrar?s rÚactivez_mergestate_base.actives!€ô �D—K‘KÓ Ò5¤D¨¯©Ó$5Ð5rcó—y)z*Write current state on disk (if necessary)NrVr?s rÚcommitz_mergestate_base.commits�rcóZ—ttj|«j««S)zUhash the path of a local file context for storage in the .hg/merge directory.)rr Úsha1Údigest)Úpaths rÚ getlocalkeyz_mergestate_base.getlocalkey"s!€ô ”8—=‘= Ó&×-Ñ-Ó/Ó0Ð0rcó—t«‚r©ÚNotImplementedError©r:ÚfctxÚlocalkeys rÚ _make_backupz_mergestate_base._make_backup)ó €Ü!Ó#Ð#rcó—t«‚rrˆ©r:r‹rŒÚflagss rÚ_restore_backupz _mergestate_base._restore_backup,rŽrc ó2—|j«r!|jjj}n5tj |j ««}|j||«t||j «|j «t|j««|j «t|j««|j«g|j|<t|j««|j|d<d|_y)a/add a new (potentially?) conflicting file the merge state fcl: file context for local, fco: file context for remote, fca: file context for ancestors, fd: file path of the resulting merge. note: also write the local version to the `.hg/merge` directory. óancestorlinknodeTN)Úisabsentr`rrÚ mergestater†r…r�ÚMERGE_RECORD_UNRESOLVEDrÚfilenoder‘rarnrerj)r:ÚfclÚfcoÚfcaÚfdrŒs rr5z_mergestate_base.add/sÆ€ð �<‰<Œ>Ø—z‘z×/Ñ/×7Ñ7‰Hä!×-Ñ-¨c¯h©h«jÓ9ˆHØ × Ñ ˜c 8Ô ,ä #Ø Ø �H‰H‹JØ �H‰H‹JÜ �— ‘ “Ó Ø �H‰H‹JÜ �— ‘ “Ó Ø �I‰I‹Kð  ˆ� ‰ �B‰ô69¸¿¹»³_ˆ×ј"ÑÐ1Ñ2؈� rcó>—t||g|j|<d|_y)zãadd a new conflicting path to the merge state path: the path that conflicts frename: the filename the conflicting file was renamed to forigin: origin of the file ('l' or 'r' for local/remote) TN)ÚMERGE_RECORD_UNRESOLVED_PATHrarj)r:r…ÚfrenameÚforigins rÚaddpathconflictz _mergestate_base.addpathconflictJs €ô :¸7ÀGÐLˆ� ‰ �DÑØˆ� rcóN—|j|j|«d|_y)zHstores information which is required at commit into _stateextrasTN)reÚupdaterj)r:r…rs rÚ addcommitinfoz_mergestate_base.addcommitinfoSs$€ð ×ј$Ñ×&Ñ& tÔ,؈� rcó—||jvSr©ra©r:Údfiles rÚ __contains__z_mergestate_base.__contains__Ys€Ø˜Ÿ ™ Ð#Ð#rcó&—|j|dS)Nrr¦r§s rÚ __getitem__z_mergestate_base.__getitem__\s€Ø�{‰{˜5Ñ! !Ñ$Ð$rcó>—tt|j««Sr)ÚiterÚsortedrar?s rÚ__iter__z_mergestate_base.__iter___s€Ü”F˜4Ÿ;™;Ó'Ó(Ð(rcó6—|jj«Sr)raÚkeysr?s rÚfilesz_mergestate_base.filesbs€Ø�{‰{×ÑÓ!Ð!rcó6—||j|d<d|_y)NrT)rarj)r:r¨Ústates rÚmarkz_mergestate_base.markes€Ø %ˆ� ‰ �Eј1ÑØˆ� rc#ó|K—|jj«D]\}}|dttfvsŒ|–—Œy­w)z%Obtain the paths of unresolved files.rN)raÚitemsr—rž)r:rÚentrys rÚ unresolvedz_mergestate_base.unresolvedisAèø€ðŸ ™ ×)Ñ)Ö+‰HˆAˆuØ�Q‰xÜ'Ü,ðòð“ñ ,ùs‚2<µ<có—|jS)z8return all extras information stored with the mergestate©rer?s rÚ allextrasz_mergestate_base.allextrasss€à× Ñ Ð rcó —|j|S)z?return extras stored with the mergestate for the given filenamer»)r:Úfilenames rÚextrasz_mergestate_base.extrasws€à× Ñ  Ñ*Ð*rc ó—||ttfvry|j|}|\}}}}}} } } |j|j} |j |«} | j d«}|r|j|}nd}t|||«}t| | | «}|jj|||¬«}|j«}|j«}d| |z|zvr_d| |z|zvrU|j«tk(r7| |k7r2|jjjtd«|z«n| |k(r|} ||jjj k7r|j#|||| «n||j%d¬ «|j'|«s$|j|=d |j(|<d|_yt-j,|j||j.|||||j0¬ «\}}|s|j3|t«d}|r|j5«rt6}nIt8}nB|j5«rt:}n+|j5«r||j<vrt>}nt@}||f|j(|<|S) zHrun merge process for dfile Returns the exit code of the merge.rr”N)ÚfileidÚ changectxóxr#sQwarning: cannot merge flags for %s without common ancestor - keeping local flags T)Ú ignoremissing)NN)ro)!ÚMERGE_RECORD_RESOLVEDÚLEGACY_RECORD_DRIVER_RESOLVEDrar`rgr¿Úgetr Úfilectxr‘ÚrevrÚuiÚwarnrrrr’ÚremoveÚcmprirjr rfrhrµr•Ú ACTION_FORGETÚ ACTION_REMOVEÚ ACTION_GETrxÚACTION_ADD_MODIFIEDÚ ACTION_ADD)r:r¨ÚwctxÚ stateentryr´rŒÚlfileÚafileÚanodeÚofileÚonoder‘Úoctxr¿Ú anccommitnodeÚactxÚfcdršr›ÚfloÚflaÚ merge_retÚdeletedÚactions rÚresolvez_mergestate_base.resolve{sk€ð �‰;Ü !Ü )ð ñ ðØ—[‘[ Ñ'ˆ ØDNÑAˆˆx˜  u¨e°U¸EØ�z‰z˜$Ÿ+™+Ñ&ˆØ—‘˜UÓ#ˆØŸ ™ Ð#6Ó7ˆ Ù Ø—:‘:˜mÑ,‰DàˆDܘx¨¨uÓ5ˆÜ˜u d¨EÓ2ˆà�j‰j× Ñ  ¨uÀÐ ÓEˆà�i‰i‹kˆØ�i‰i‹kˆØ �5˜3‘; Ñ$Ñ $¨°U¸S±[À3Ñ5FÑ)FØ�w‰w‹yœGÒ#¨°ª Ø— ‘ — ‘ ×"Ñ"ÜðKóðñ õð˜#’Ø�à �t—z‘z×/Ñ/×7Ñ7Ò 7Ø × Ñ   e¡¨h¸Õ >à �‰K× Ñ ¨TÐ Ô 2à�w‰w�sŒ|à— ‘ ˜EÐ"Ø#-ˆD�M‰M˜%Ñ ØˆDŒKØä&×0Ñ0Ø �J‰JØ Ø �K‰KØ Ø Ø Ø Ø—<‘<ô  ш �7ñØ �I‰I�eÔ2Ô 3àˆÙ Ø�|‰|Œ~ô'‘ô'‘à�|‰|Œ~Ü#‘Ø—‘”ؘDŸM™MÑ)Ü0‘Fä'�Fà(¨&Ð0ˆ� ‰ �eÑàÐrcó —d\}}}|jj«D]'\}}|€|dz }Œ|dk(sŒ|tk(r|dz }Œ#|dz }Œ)|||fS)zKreturn counts for updated, merged and removed files in this session)rrrrr)riÚvaluesrÏ)r:ÚupdatedÚmergedÚremovedÚrrâs rÚcountsz_mergestate_base.countsÐsi€ð$+Ñ ˆ�˜ØŸ™×-Ñ-Ö/‰IˆAˆv؈yؘ1‘ ‘Ø�a“Øœ]Ò*ؘq‘L‘Gà˜a‘K‘Fð0ð˜ Ð'Ð'rcóF—tt|j«««S)z0get unresolved count for this merge (persistent))ÚlenÚlistr¹r?s rÚunresolvedcountz _mergestate_base.unresolvedcountÞs€ä”4˜Ÿ™Ó)Ó*Ó+Ð+rc óÄ—tgtgtgtgtgi}|j j «D]"\}\}}|€Œ ||j|ddf«Œ$|S)z2return lists of actions to perform on the dirstateNs merge result)rÏrÎrÒrÑrÐrir·Úappend)r:Úactionsrrérâs rrñz_mergestate_base.actionsâsk€ô ˜2Ü ˜2Ü ˜Ü  Ü ˜ð  ˆð#Ÿm™m×1Ñ1Ö3‰NˆA‰{��6ØÑ!ؘ‘×&Ñ&¨¨4°Ð'AÕBð4ðˆrr)"rPrQrRrSr<rlrpr Ú propertycacherurxrLr|rr�Ú staticmethodr†r�r’r5r¡r¤r©r«r¯r²rµr¹r¼r¿rãrêrîrñrVrrr^r^Äsô„ñ òDò$ óð  ×Ññóðð  ×Ññ&óð&ð ×Ññóðð  ×Ññ&óð&ò6ò9ðñ1óð1ò $ò$òò6òò $ò%ò)ò"òòò!ò+òSòj (ò,ó rr^có‚—eZdZdZdZed„«Zed„«Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„Zd„Zd„Zy)r–s merge/states merge/state2có<—t|«}|j«|S)zPInitialize a brand new merge state, removing any existing state on disk.)r–rl©rÚmss rÚcleanzmergestate.cleanös€ô˜Ó ˆØ �‰Œ ؈ rcó<—t|«}|j«|S)z1Initialize the merge state, reading it from disk.)r–Ú_readrös rÚreadzmergestate.readþs€ô˜Ó ˆØ �‰Œ ؈ rcó€—t«}|j«}|D�]‚\}}|tk(rt|«|_Œ!|t k(rt|«|_Œ;|tk(rŒE|tttttfvrI|jd«}|dtk(rd|j|dd<Œ•|dd|j |d<Œ«|t"k(rk|jdd«\}}|jd«}i} d} | t%|«kr"|| dz| || <| dz } | t%|«krŒ"| |j|<�Œ|t&k(r8|jdd«} | D� cgc]} t%| «dkDsŒ| ‘Œc} |_�Œ`|j+«r�Œr|j-|«�Œ…|rt/j0|«‚ycc} w)z´Analyse each record content to restore a serialized state from disk This function process "record" entry produced by the de-serialization of on disk file. r rsotherrsfilenode-sourceNé)ÚsetÚ _readrecordsÚ RECORD_LOCALrrfÚ RECORD_OTHERrgÚLEGACY_MERGE_DRIVER_STATEÚ RECORD_MERGEDÚRECORD_CHANGEDELETE_CONFLICTÚRECORD_PATH_CONFLICTÚLEGACY_MERGE_DRIVER_MERGEÚLEGACY_RECORD_RESOLVED_OTHERrÚMERGE_RECORD_MERGED_OTHERreraÚRECORD_FILE_VALUESrìÚ RECORD_LABELSrhÚislowerr5rÚUnsupportedMergeRecords) r:Ú unsupportedÚrecordsÚrtypeÚrecordrr¾Ú rawextrasÚ extrapartsr¿ÚiroÚls rrúzmergestate._reads¸€ô “eˆ Ø×#Ñ#Ó%ˆÜ$‰MˆE�6Øœ Ò$Ü! &›k�• Øœ,Ò&Ü! &›k�• ØÔ3Ò3ØØÜÜ,Ü$Ü)Ü,ð ñð—|‘| EÓ*�ð˜‘7Ô7Ò7ØEM�D×%Ñ% d¨1¡gÑ.Ð/AÒBà+/°°¨8�D—K‘K  Q¡Ò(ØÔ,Ò,Ø&,§l¡l°5¸!Ó&<Ñ#�˜)Ø&Ÿ_™_¨UÓ3� Ø�Ø�Øœ#˜j›/Ò)Ø,6°q¸1±uÑ,=�F˜: a™=Ñ)ؘ‘F�Aðœ#˜j›/Ó)ð/5�×!Ñ! (Ó+Øœ-Ò'ØŸ™ e¨QÓ/�Ù+1Ó@©6 a´S¸³V¸a³Z¢¨6Ñ@�– Ø—]‘]–_Ø—‘ Ö&ðI%ñL Ü×/Ñ/° Ó<Ð <ð ùò As ÅF;Å/F;có¶—|j«}|j«}|j||«r|S|jdj «d}|j t |j«f«t|«D]Q\}}|dtk(sŒ|djd«}|jdd«|ddj|«f||<ŒS|S)aªRead merge state from disk and return a list of record (TYPE, data) We read data from both v1 and v2 files and decide which one to use. V1 has been used by version prior to 2.9.1 and contains less data than v2. We read both versions and check if no data in v2 contradicts v1. If there is not contradiction we can safely assume that both v1 and v2 were written at the same time and use the extract data in v2. If there is contradiction we ignore v2 content as we assume an old version of Mercurial has overwritten the mergestate file and left an old v2 file around. returns list of record [(TYPE, data), ...]Nrrrr rr) Ú_readrecordsv1Ú_readrecordsv2Ú _v1v2matchr`ÚparentsrðrrÚ enumeraterrÚinsertr)r:Ú v1recordsÚ v2recordsÚmctxÚidxrérs rrÿzmergestate._readrecords6sÏ€ð×'Ñ'Ó)ˆ Ø×'Ñ'Ó)ˆ Ø �?‰?˜9 iÔ 0ØÐ ð —:‘:˜dÑ#×+Ñ+Ó-¨bÑ1ˆDØ × Ñ œl¨D¯H©H«JÐ7Ô 8ô$ IÖ.‘��QØ�Q‘4œ=Ó(ؘQ™4Ÿ:™: eÓ,�DØ—K‘K  CÔ(Ø&'¨¡d¨E¯J©J°tÓ,<Ð%=�I˜c’Nð /ð Ð rcóÜ—t«}|D]P}|dtk(r|j|«Œ!|dtk(sŒ.|jtt |d«f«ŒR|D]}||vsŒyy)NrrFT)rþrr5rr)r:rrÚoldv2Úrecs rrzmergestate._v1v2matchXsl€Ü“ˆÛˆCØ�1‰vœÒ%Ø— ‘ ˜#•Ø�Q‘œ=Ó(à— ‘ œ=¬*°S¸±VÓ*<Ð=Õ>ð ó ˆCؘ%ÒÙððrcó0—g} |jj|j«}t|«D]?\}}|dk(r|j t |ddf«Œ&|j t |ddf«ŒA|j«|S#t$rY|SwxYw)zÒread on disk merge state for version 1 file returns list of record [(TYPE, data), ...] Note: the "F" data from this file are one entry short (no "other file node" entry) rNr) r`ÚvfsÚ statepathv1rrðrrÚcloseÚFileNotFoundError)r:rrrrs rrzmergestate._readrecordsv1fs˜€ðˆð Ø— ‘ —‘˜t×/Ñ/Ó0ˆAÜ! !ž ‘��1ؘ’6Ø—N‘N¤L°!°C°R°&Ð#9Õ:à—N‘N¤M°1°S°b°6Ð#:Õ;ð %ð �G‰GŒIðˆøô!ò Ø Øˆð ús„BB BÂBcóš—g} |jj|j«}|j«}d}t |«}||kr`|||dz}|dz }t d|||dz«d}|dz }||||z}||z }|t k(r |dd|dd}}|j||f«||krŒ`|j«|S#t$rY|SwxYw)aread on disk merge state for version 2 file This format is a list of arbitrary records of the form: [type][length][content] `type` is a single character, `length` is a 4 byte integer, and `content` is an arbitrary byte sequence of length `length`. Mercurial versions prior to 3.7 have a bug where if there are unsupported mandatory merge records, attempting to clear out the merge state with hg update --clean or similar aborts. The 't' record type works around that by writing out what those versions treat as an advisory record, but later versions interpret as special: the first character is the 'real' record type and everything onwards is the data. Returns list of records [(TYPE, data), ...].rrs>IéN) r`r$Ú statepathv2rûrìÚ_unpackÚRECORD_OVERRIDErðr&r') r:rrrÚoffÚendrÚlengthrs rrzmergestate._readrecordsv2{sþ€ð$ˆð Ø— ‘ —‘˜t×/Ñ/Ó0ˆAØ—6‘6“8ˆD؈CÜ�d“)ˆCؘ’)ؘS 3¨¡7Ð+�Ø�q‘�Ü  ¨¨S°C¸!±GÐ(=Ó>¸qÑA�Ø�q‘�ؘc S¨6¡\Ð3�Ø�v‘ �ØœOÒ+Ø$*¨1¨Q K°¸¸°˜6�EØ—‘  v˜Ô/ð˜“)ð �G‰GŒIðˆøô!ò Ø Øˆð ús„B&B=Â+B=Â= C à C cón—|jr)|j«}|j|«d|_yyrI)rjÚ _makerecordsÚ _writerecords©r:rs rr�zmergestate.commit¢s1€Ø �;Š;Ø×'Ñ'Ó)ˆGØ × Ñ ˜wÔ '؈D�Kð rcó—g}|jtt|j«f«|jtt|j «f«|j j«D]â\}}|dttfvr+|jtdj|g|z«f«ŒB|d|jjjk(s&|d|jjjk(r+|jtdj|g|z«f«Œ¹|jt dj|g|z«f«Œät#|j$j««D]G\}}djd„|j«D««}|jt&d||fzf«ŒI|j(�2dj|j(«}|jt*|f«|S)Nrr réc3ó0K—|]\}}d||fz–—Œy­w)ó%s%sNrV)Ú.0ÚkÚvs rÚ z*mergestate._makerecords..Ês!èø€ð#Ù/=¡t q¨!� ˜Q ˜FÕ"©~ùs‚r7)rðrrrfrrgrar·ržÚMERGE_RECORD_RESOLVED_PATHrrr`rrrrr®rer rhr )r:rr¾r:r¿rros rr1zmergestate._makerecords¨s°€ØˆØ�‰œ ¤c¨$¯+©+Ó&6Ð7Ô8Ø�‰œ ¤c¨$¯+©+Ó&6Ð7Ô8ð  Ÿ;™;×,Ñ,Ö.‰KˆH�aØ�‰tÜ,Ü*ðñð —‘Ü)¨5¯:©:°x°jÀ1±nÓ+EÐFõð�!‘˜Ÿ ™ ×0Ñ0×8Ñ8Ò8Ø�Q‘4˜4Ÿ:™:×3Ñ3×;Ñ;Ò;ð —‘Ü1°5·:±:¸x¸jÈ1¹nÓ3MÐNõð —‘¤ ¨u¯z©z¸8¸*Àq¹.Ó/IÐJÕKð//ô0!' t×'8Ñ'8×'>Ñ'>Ó'@Ö AÑ ˆH�fØŸ ™ ñ#Ø/5¯|©|¬~ó#óˆIð �N‰NÜ# Y°(¸IÐ1FÑ%FÐGõ ð !Bð �<‰<Ð #Ø—Z‘Z § ¡ Ó-ˆFØ �N‰NœM¨6Ð2Ô 3؈rcóH—|j|«|j|«y)z,Write current state on disk (both v1 and v2)N)Ú_writerecordsv1Ú_writerecordsv2r3s rr2zmergestate._writerecordsÕs€à ×јWÔ%Ø ×јWÕ%rcóh—|jj|jd«}t|«}t |«}|dt k(sJ‚|j t|j«dz«|D],\}}|tk(sŒ|j dt|«z«Œ.|j«y)z/Write current state on disk in a version 1 fileówbró s%s N) r`r$r%r­ÚnextrÚwriterrfrrr&)r:rrÚirecordsÚlrecordsrrs rr>zmergestate._writerecordsv1Ús‘€à �J‰J�N‰N˜4×+Ñ+¨UÓ 3ˆÜ˜“=ˆÜ˜“>ˆØ˜‰{œlÒ*Ð*Ð*Ø �‰”�D—K‘KÓ  5Ñ(Ô)Û#‰KˆE�4Øœ Ó%Ø—‘˜¤*¨TÓ"2Ñ2Õ3ð$ð �‰� rc óP—tttf}|jj |j d«}|D]Z\}}t |«dk(sJ‚||vr td||fz}}dt |«z}|jt||t |«|««Œ\|j«y)zqWrite current state on disk in a version 2 file See the docstring for _readrecordsv2 for why we use 't'.rArs%s%ss>sI%isN) rrrr`r$r*rìr,rDÚ_packr&)r:rÚ allowlistrÚkeyrÚformats rr?zmergestate._writerecordsv2æs–€ô "¤<´Ð?ˆ Ø �J‰J�N‰N˜4×+Ñ+¨UÓ 3ˆÛ ‰IˆC�Ü�s“8˜q’=Ð �=ؘ)Ñ#Ü+¨W¸¸T°{Ñ-B�T�ؤ T£Ñ*ˆFØ �G‰G”E˜& #¤s¨4£y°$Ó7Õ 8ð !ð �‰� rcór—|jjjd|z|j««y©Nsmerge/)r`r$rDrrŠs rr�zmergestate._make_backupõs%€Ø � ‰ �‰×јY¨Ñ1°4·9±9³;Õ?rcóª—|jjd|z«5}|j|j«|«ddd«y#1swYyxYwrM)r`r$rDrû)r:r‹rŒr‘rs rr’zmergestate._restore_backupøs9€Ø �Z‰Z�^‰^˜I¨Ñ0Ô 1°QØ �J‰J�q—v‘v“x Ô '÷2× 1Ñ 1ús Ÿ!A Á Acóv—tj|jjj d«d«y)NsmergeT)ÚshutilÚrmtreer`r$rr?s rrlzmergestate.resetüs#€Ü� ‰ �d—j‘j—n‘n×)Ñ)¨(Ó3°TÕ:rN)rPrQrRr%r*rórørûrúrÿrrrr�r1r2r>r?r�r’rlrVrrr–r–ñsx„à €KØ!€Kàñóððñóðò /=òb òD òò*%òN ò +òZ&ò ò ò@ò(ó;rr–có*‡—eZdZˆfd„Zd„Zd„ZˆxZS)Ú memmergestatecó:•—tt|� |«i|_yr)ÚsuperrSr<Ú_backups)r:rÚ __class__s €rr<zmemmergestate.__init__sø€Ü Œm˜TÑ+¨DÔ1؈� rcó>—|j«|j|<yr)rrVrŠs rr�zmemmergestate._make_backups€Ø"&§)¡)£+ˆ� ‰ �hÒrcóB—|j|j||«yr)rDrVr�s rr’zmemmergestate._restore_backups€Ø � ‰ �4—=‘= Ñ*¨EÕ2r)rPrQrRr<r�r’Ú __classcell__)rWs@rrSrSsø„ôò.ö3rrScóˆ —|jtg«D]E\}}}|r|jj|dd¬«Œ(|jj|dd¬«ŒG|jtg«D]$\}}}|jj|dd¬«Œ&|jt g«D]‡\}}}|\}}|jj|dd¬«|jj ||«||k(r|jj|dd¬«Œj|jj|dd¬«Œ‰|jtg«D]$\}}}|jj|dd¬«Œ&|jtg«D]F\}}}|r |jj|ddd¬«Œ)|jj|dd¬«ŒH|jtg«D]%\}}}|jj|ddd¬«Œ'|jtg«D]\}}}Œ|jtg«D]\}}}Œ|jtg«D]\}}}Œ|jtg«D]†\}}}|rV|jj|«} | jxr | j } |jj|| dd¬«Œ_|r||nd} |jj|dd| ¬«Œˆ|jt"g«D]Þ\}}}|\} } }}}|r‰| |k(} |jj|| dd¬«| | k7sŒ;|r|jj| dd¬«| |k7r|jj | |«Œ}|jj | |«Œš| |k(r|jj|ddd¬«|sŒÁ|jj| dd¬«Œà|jt$g«D]¢\}}}|\}}|rY|jj|dd¬«|jj|dd¬«|jj ||«Œg|jj|dd¬«|jj|dd¬«Œ¤|jt&g«D]f\}}}|\}}|r;|jj|dd¬«|jj ||«ŒI|jj|dd¬«Œhy)z$record merge actions to the dirstateTF)Ú p1_trackedÚ wc_tracked)r\r]Úpossibly_dirty)r\r]Úp2_infoN)r\r]Úparentfiledata)rÇrÏÚdirstateÚ update_filerÎÚACTION_PATH_CONFLICT_RESOLVEÚcopyrÒrÑÚ ACTION_EXECÚ ACTION_KEEPÚACTION_KEEP_ABSENTÚACTION_KEEP_NEWrÐÚ get_entryÚ any_trackedÚaddedÚ ACTION_MERGEÚACTION_DIR_RENAME_MOVE_LOCALÚACTION_LOCAL_DIR_RENAME_GET)rrñÚ branchmergeÚ getfiledatarÚargsrtÚf0Úorigf0Ú old_entryr\r`Úf1Úf2ÚfaÚmoveÚancÚflags rÚ recordupdatesr{ s€ð Ÿ ™ ¤M°2Ö6‰ ˆˆ4�Ù Ø �M‰M× %Ñ % a°DÀUÐ %Õ Kà �M‰M× %Ñ % a°EÀeÐ %Õ Lð 7ð Ÿ ™ ¤M°2Ö6‰ ˆˆ4�Ø � ‰ ×!Ñ! !°À%Ð!ÕHð7ð Ÿ ™ Ô$@À"ÖE‰ ˆˆ4�؉ ˆˆVØ � ‰ ×!Ñ! !°À$Ð!ÔGØ � ‰ ×ј6 1Ô%Ø �Š<Ø �M‰M× %Ñ % b°TÀeÐ %Õ Là �M‰M× %Ñ % b°UÀuÐ %Õ MðFð Ÿ ™ ¤J°Ö3‰ ˆˆ4�Ø � ‰ ×!Ñ! !°À$Ð!ÕGð4ð Ÿ ™ Ô$7¸Ö<‰ ˆˆ4�Ù Ø �M‰M× %Ñ %ؘd¨tÀDð &õ ð �M‰M× %Ñ % a°EÀdÐ %Õ Kð =ð Ÿ ™ ¤K°Ö4‰ ˆˆ4�Ø � ‰ ×!Ñ!Ø ˜$¨4Àð "õ ð5ð  Ÿ ™ ¤K°Ö4‰ ˆˆ4�Ø ð5ð Ÿ ™ Ô$6¸Ö;‰ ˆˆ4�Ø ð<ð Ÿ ™ ¤O°RÖ8‰ ˆˆ4�Ø ð9ð Ÿ ™ ¤J°Ö3‰ ˆˆ4�Ù àŸ ™ ×/Ñ/°Ó2ˆIØ"×.Ñ.ÒF°y·±Ð3FˆJØ �M‰M× %Ñ %ØØ%ØØð &õ ñ0;˜[¨š^ÀˆNØ �M‰M× %Ñ %ØØØØ-ð &õ ð4ð* Ÿ ™ ¤L°"Ö5‰ ˆˆ4�Ø $шˆB��D˜#Ù ð˜q™ˆJØ �M‰M× %Ñ %ØØ%ØØð &ô ð �R‹xÙØ—M‘M×-Ñ-Ø t¸ð.ôð˜’7Ø—M‘M×&Ñ& r¨1Õ-à—M‘M×&Ñ& r¨1Õ-ð�QŠwØ— ‘ ×)Ñ)Ø $°4Èð*ôòØ— ‘ ×)Ñ)Ø 5°Uð*õðA6ðJ Ÿ ™ Ô$@À"ÖE‰ ˆˆ4�؉ˆˆDÙ Ø �M‰M× %Ñ % a°EÀdÐ %Ô KØ �M‰M× %Ñ % b°TÀeÐ %Ô LØ �M‰M× Ñ ˜r 1Õ %à �M‰M× %Ñ % a°DÀTÐ %Ô JØ �M‰M× %Ñ % b°UÀuÐ %Õ MðFð Ÿ ™ Ô$?ÀÖD‰ ˆˆ4�؉ˆˆDÙ Ø �M‰M× %Ñ % a°EÀdÐ %Ô KØ �M‰M× Ñ ˜r 1Õ %à �M‰M× %Ñ % a°DÀTÐ %Õ Jñ Er)BrbrPÚstructrTÚi18nrrnrrrÚrr r Úutilsr ÚpackrHÚunpackr+rr rrr r rrrr—rÅržr<rr,rrÆrrÚ CHANGE_ADDEDÚCHANGE_REMOVEDÚCHANGE_MODIFIEDr1rÎrÏrÒrÐÚACTION_PATH_CONFLICTrcrÑÚACTION_CREATEDÚACTION_DELETED_CHANGEDÚACTION_CHANGED_DELETEDrlrnrmrfrgrhreÚACTION_CREATED_MERGEÚCONVERT_MERGE_ACTIONSr^r–rSr{rVrrÚr‹s ðÛÛ Û Ûå÷ñ÷ ñõ à� ‰ €Ø �-‰-€òòð€ Ø€ à€ ð Ðð€ Ø#ÐàÐð ÐØÐØ$ÐØ"Ðð !Ðð €ð $Ðà $Ðà Ðà Ðà€ Ø€Ø€÷4*ñ4*ñn˜D¨d¸NÔK€ Ù˜D¨d¸NÔK€ Ù ˜¨4¸Ô F€ Ù ˜¨4¸Ô I€ Ù" 4Ó(ÐÙ*¨5Ó1ÐÙ!Ø �t \ôÐñ˜T¨t¸\ÔJ€Ù$ UÓ+ÐÙ$ UÓ+ÐÙ˜4Ó € Ù)¨%Ó0ÐÙ*¨5Ó1ÐÙ˜$ dÔ+€ ñ! ¨dÔ3Ðñ˜e¨4Ô0€Ù˜$¨D¸/ÔJ€ Ù"Ø �t \ôÐðØ ØØð Ð÷jñjôZ L;Ð!ôL;ô^ 3Ð$ô 3óBKr