Ë q]Žuòãó,—ddlmZddlmZmZddlmZddlmZm Z m Z m Z m Z ddl mZmZddlmZmZddiZd „Zd „Zd „Zd „Zd „ZGd„d«ZGd„d«Zd„Zej:Gd„d««ZGd„d«ZGd„de j«Z y)é)Ú_)ÚbinÚhex)Úattr)ÚencodingÚerrorÚmetadataÚpycompatÚrevlog)ÚdateutilÚ stringutil)Ú constantsÚflagutilóbranchódefaultcóŠ—|jdd«jdd«jdd«}|jdd«S) aA >>> from .pycompat import bytechr as chr >>> d = {b'nl': chr(10), b'bs': chr(92), b'cr': chr(13), b'nul': chr(0)} >>> s = b"ab%(nl)scd%(bs)s%(bs)sn%(nul)s12ab%(cr)scd%(bs)s%(nl)s" % d >>> s 'ab\ncd\\\\n\x0012ab\rcd\\\n' >>> res = _string_escape(s) >>> s == _string_unescape(res) True ó\ó\\ó s\nó s\róó\0)Úreplace©Útexts ú7usr/lib/python3.12/site-packages/mercurial/changelog.pyÚ_string_escaper#sB€ð � ‰ �U˜GÓ$ß ‰�˜Ó ß ‰�˜Ó ð ð �<‰<˜˜vÓ &Ð&ócó —d|vr6|jdd«}|jdd«}|jdd«}tj|«S)Nrrs\\ rrr)rr Ú unescapestrrs rÚ_string_unescaper!7sJ€Ø ��~à�|‰|˜G YÓ/ˆØ�|‰|˜F EÓ*ˆØ�|‰|˜E 3Ó'ˆÜ × !Ñ ! $Ó 'Ð'rcó¦—tj«}|jd«D](}|sŒt|«jdd«\}}|||<Œ*|S)aÎ >>> from .pycompat import bytechr as chr >>> sorted(decodeextra(encodeextra({b'foo': b'bar', b'baz': chr(0) + b'2'}) ... ).items()) [('baz', '\x002'), ('branch', 'default'), ('foo', 'bar')] >>> sorted(decodeextra(encodeextra({b'foo': b'bar', ... b'baz': chr(92) + chr(0) + b'2'}) ... ).items()) [('baz', '\\\x002'), ('branch', 'default'), ('foo', 'bar')] ró:r)Ú _defaultextraÚcopyÚsplitr!)rÚextraÚlÚkÚvs rÚ decodeextrar+@sS€ô × Ñ Ó €EØ �Z‰Z˜Ö ˆÚ Ü# AÓ&×,Ñ,¨T°1Ó5‰DˆAˆq؈E�!ŠHðð €Lrc ó€—t|«D�cgc]}td|||fz«‘Œ}}dj|«Scc}w)Ns%s:%sr)ÚsortedrÚjoin)Údr)Úitemss rÚ encodeextrar1SsA€ä;AÀ!¼9Ó E¹9°aŒ^˜H¨¨1¨Q©4 yÑ0Õ 1¸9€EÐ EØ �:‰:�eÓ Ðùò FsŽ;có —dj|j«D�cgc]}|j«‘Œc}«jd«Scc}w)z>strip trailing whitespace and leading and trailing empty linesr)r.Ú splitlinesÚrstripÚstrip)Údescr(s rÚ stripdescr7Ys=€à �:‰:¨4¯?©?Ô+<Ó=Ñ+< a�q—x‘x•zÐ+<Ñ=Ó >× DÑ DÀUÓ KÐKùÒ=sžA có`—eZdZdZd„Zd„Zd„Zd„Zed„«Z d„Z dd„Z dd „Z d „Z d „Zd „Zy )Úappenderz`the changelog index must be updated last on disk, so we use this class to delay writes to itcó¾—||_|||«}||_|j«|_|j |«j |_|j |_y©N)ÚdataÚfpÚtellÚoffsetÚfstatÚst_sizeÚsizeÚ_end)ÚselfÚvfsÚnameÚmodeÚbufr=s rÚ__init__zappender.__init__bsH€ØˆŒ Ù ��t‹_ˆØˆŒØ—g‘g“iˆŒ Ø—I‘I˜b“M×)Ñ)ˆŒ Ø—I‘Iˆ� rcó—|jSr;)rC©rDs rÚendz appender.endjs €Ø�y‰yÐrcó—|jSr;)r?rKs rr>z appender.tellms €Ø�{‰{Ðrcó—yr;©rKs rÚflushzappender.flushps€Ø rcó.—|jjSr;)r=ÚclosedrKs rrRzappender.closedss€à�w‰w�~‰~Ðrcó8—|jj«yr;)r=ÚcloserKs rrTzappender.closews€Ø �‰� ‰ �rcó —|dk(r||_n8|dk(r|xj|z c_n|dk(r|j«|z|_|j|jkr&|jj |j«yy)z,virtual file offset spans real file and dataéréN)r?rLrBr=Úseek)rDr?Úwhences rrXz appender.seekzsg€à �QŠ;Ø ˆD�KØ �qŠ[Ø �KŠK˜6Ñ !ŽKØ �qŠ[ØŸ(™(›* vÑ-ˆDŒKØ �;‰;˜Ÿ™Ò "Ø �G‰G�L‰L˜Ÿ™Õ %ð #rcó —d}|j|jkrN|jj|«}|}|xjt |«z c_|dkDr|t |«z}|dk7r•|j|jz }|j j ddj|j ««|j dd…=|j d|||z}|xjt |«z c_||z }|S)z5only trick here is reads that span real file and datarrVrN)r?rBr=ÚreadÚlenr<Úinsertr.)rDÚcountÚretÚsÚdoffs rr[z appender.read…sÓ€àˆØ �;‰;˜Ÿ™Ò "Ø—‘— ‘ ˜UÓ#ˆA؈CØ �KŠKœ3˜q›6Ñ !�KØ�qŠyØœ˜Q›‘�Ø �AŠ:Ø—;‘; §¡Ñ*ˆDØ �I‰I× Ñ ˜Q §¡¨¯©Ó 3Ô 4Ø— ‘ ˜!™"� Ø— ‘ ˜!‘ ˜T D¨5¡LÐ1ˆAØ �KŠKœ3˜q›6Ñ !�KØ �1‰HˆC؈ rcóÄ—|jjt|««|xjt |«z c_|xj t |«z c_yr;)r<ÚappendÚbytesr?r\rC)rDr`s rÚwritezappender.write—s<€Ø � ‰ ×Ñœ˜q›Ô"Ø � Š ”s˜1“vÑ� Ø � Š ”S˜“VÑŽ rcó:—|jj«|Sr;)r=Ú __enter__rKs rrgzappender.__enter__œs€Ø �‰×ÑÔØˆ rcó4—|jj|ŽSr;)r=Ú__exit__)rDÚargss rrizappender.__exit__ s€Øˆt�w‰w×Ñ Ð&Ð&rN)rV)éÿÿÿÿ)Ú__name__Ú __module__Ú __qualname__Ú__doc__rIrLr>rPÚpropertyrRrTrXr[rergrirOrrr9r9^sM„ñòòòò ðñóðòó &óò$ò ó'rr9có —eZdZd„Zdd„Zd„Zy)Ú _divertopenercó —||_||_yr;)Ú_openerÚ_target)rDÚopenerÚtargets rrIz_divertopener.__init__¥s€ØˆŒ ؈� rc óv—||jk7r|j||fi|¤ŽS|j|dz|fi|¤ŽS)Nó.a)rurt)rDrFrGÚ checkambigÚkwargss rÚ__call__z_divertopener.__call__©sB€Ø �4—<‘<Ò Ø�4—<‘<  dÑ5¨fÑ5Ð 5؈t�|‰|˜D 5™L¨$Ñ9°&Ñ9Ð9rcó.—t|j|«Sr;)Úgetattrrt)rDrs rÚ __getattr__z_divertopener.__getattr__®s€Ü�t—|‘| TÓ*Ð*rN©órF)rlrmrnrIr|rrOrrrrrr¤s„òó:ó +rrrc󇇇—dˆˆˆfd„ }|S)z?build an opener that stores chunks in 'buf' instead of 'target'cóF•—|‰k7r ‰||fi|¤ŽS|rJ‚t‰||‰«Sr;)r9)rFrGrzr{rHrvrws €€€rÚ_delayz_delayopener.._delayµs5ø€Ø �6Š>Ù˜$ Ñ/¨Ñ/Ð /ÙЈzܘ  d¨CÓ0Ð0rr€rO)rvrwrHr„s``` rÚ _delayopenerr…²sú€÷1ð €MrcóЗeZdZej«Zej«Zejd¬«Zejd¬«Zejeje «¬«Z ejd¬«Z ejd¬«Z ejd¬«Zejd¬«Zejd¬«Zejeddf¬«Zy)Ú_changelogrevisionr)Údefault)rVrVNrF)rlrmrnrÚibr'ÚmanifestÚuserÚdateÚFactoryÚlistÚfilesÚ filesaddedÚ filesremovedÚp1copiesÚp2copiesÚ descriptionr$Ú branchinforOrrr‡r‡¾sÄð ˆD�G‰G‹I€E؈t�w‰w‹y€HØ ˆ4�7‰7˜3Ô €DØ ˆ4�7‰7˜6Ô "€DØ ˆD�G‰G˜L˜DŸL™L¨Ó.Ô /€EØ�—‘ Ô&€JØ�4—7‘7 4Ô(€L؈t�w‰w˜tÔ$€H؈t�w‰w˜tÔ$€HØ�$—'‘' #Ô&€KØ�—‘ -° Ñ":¸EÐ!BÔC�Jrr‡có‡—eZdZdZdZˆfd„Zed„«Zed„«Zed„«Z ed„«Z ed„«Z ed „«Z ed „«Z ed „«Zed „«Zed „«Zed„«Zed„«Zed„«Zed„«ZˆxZS)Úchangelogrevisionz×Holds results of a parsed changelog revision. Changelog revisions consist of multiple pieces of data, including the manifest node, user, and date. This object exposes a view into the parsed object. )Ú_offsetsÚ_textÚ _sidedataÚ_cpsdÚ_changescóx•—|stt|j¬«Stt|�|«}|j d«}|j d|dz«}|j d|dz«}||dz|dzdk(r|} n|j d|dz«} |||| f|_||_||_ ||_ d|_ |S)N)r'rŠrrrWó ) r‡r$ÚnullidÚsuperr—Ú__new__Úindexr˜r™ršr›rœ) ÚclsÚclrÚsidedataÚcpsdrDÚnl1Únl2Únl3ÚdoublenlÚ __class__s €rr¡zchangelogrevision.__new__ßsÄø€ÙÜ%¬MÀBÇIÁIÔNÐ NäÔ&¨Ñ4°SÓ9ˆð�j‰j˜ÓˆØ�j‰j˜  a¡Ó(ˆØ�j‰j˜  a¡Ó(ˆð ��a‘˜# ™'Ð " eÒ +؉Hà—z‘z '¨3°©7Ó3ˆHà˜c 3¨Ð1ˆŒ ؈Œ Ø!ˆŒØˆŒ ؈Œ àˆ rcóL—t|jd|jd«S)NrV)rr™r˜rKs rrŠzchangelogrevision.manifests!€ä�4—:‘:˜a $§-¡-°Ñ"2Ð3Ó4Ð4rcóp—|j}tj|j|ddz|d«S©NrVr)r˜rÚtolocalr™©rDÚoffs rr‹zchangelogrevision.user s3€à�m‰mˆÜ×Ñ § ¡ ¨3¨q©6°A©:¸¸A¹Ð ?Ó@Ð@rcót—|j}|j|ddz|d}|jdd«ddS)NrrWó rV)r˜r™r&)rDr±Ú dateextras rÚ_rawdatezchangelogrevision._rawdates?€à�m‰mˆØ—J‘J˜s 1™v¨™z¨C°©FÐ3ˆ Ø�‰˜t QÓ'¨¨!Ð,Ð,rcó–—|j}|j|ddz|d}|jdd«}t|«dk7ry|dS)NrrWr³é)r˜r™r&r\)rDr±r´Úfieldss rÚ _rawextrazchangelogrevision._rawextrasP€à�m‰mˆØ—J‘J˜s 1™v¨™z¨C°©FÐ3ˆ Ø—‘  qÓ)ˆÜ ˆv‹;˜!Ò Øà�a‰yÐrcó„—|j}t|d«} t|d«}||fS#t$rd}Y||fSwxYwr®)rµÚfloatÚintÚ ValueError)rDÚrawÚtimeÚtimezones rrŒzchangelogrevision.datesV€à�m‰mˆÜ�S˜‘V‹}ˆð ܘ3˜q™6“{ˆHð�Xˆ~Ðøôò ؉Hà�Xˆ~Ðð ús œ.® ?¾?có@—|j}|€tSt|«Sr;)r¹r$r+)rDr¾s rr'zchangelogrevision.extra*s!€à�n‰nˆØ ˆ;Ü Ð ä˜3ÓÐrcó\—|j� |jS|jr tj|j«}n`tj |j xsd|jxsd|jxsd|jxsi|jxsi¬«}||_|S)NrO)ÚtouchedÚaddedÚremovedÚ p1_copiesÚ p2_copies) rœr›r Údecode_files_sidedataršÚ ChangingFilesr�r�r‘r’r“)rDÚchangess rrÊzchangelogrevision.changes2s�€à �=‰=Ð $Ø—=‘=Ð Ø �:Š:Ü×4Ñ4°T·^±^ÓD‰Gä×,Ñ,ØŸ ™ Ò( bØ—o‘oÒ+¨Ø×)Ñ)Ò/¨RØŸ-™-Ò-¨2ØŸ-™-Ò-¨2ô ˆG𠈌 ؈rcóØ—|jrt|jj«S|j}|d|dk(rgS|j |ddz|dj d«S)NrWr·rr)r›r-rÊrÃr˜r™r&r°s rr�zchangelogrevision.filesCsd€à �:Š:ܘ$Ÿ,™,×.Ñ.Ó/Ð /Ø�m‰mˆØ ˆq‰6�S˜‘VÒ ØˆIà�z‰z˜#˜a™& 1™* s¨1¡vÐ.×4Ñ4°UÓ;Ð;rcó—|jr|jjS|jj d«}|€yt j |j|«S)Ns filesadded)r›rÊrÄr'Úgetr Údecodefileindicesr�©rDÚ rawindicess rr�zchangelogrevision.filesaddedMsK€à �:Š:Ø—<‘<×%Ñ%Ð %àŸ™Ÿ™¨ Ó6ˆJØ Ð ØÜ×)Ñ)¨$¯*©*°jÓAÐArcó—|jr|jjS|jj d«}|€yt j |j|«S)Ns filesremoved)r›rÊrÅr'rÍr rÎr�rÏs rr‘zchangelogrevision.filesremovedWsK€à �:Š:Ø—<‘<×'Ñ'Ð 'àŸ™Ÿ™¨Ó8ˆJØ Ð ØÜ×)Ñ)¨$¯*©*°jÓAÐArcó—|jr|jjS|jj d«}|€yt j |j|«S)Nsp1copies)r›rÊÚcopied_from_p1r'rÍr Ú decodecopiesr�©rDÚ rawcopiess rr’zchangelogrevision.p1copiesaóK€à �:Š:Ø—<‘<×.Ñ.Ð .àŸ ™ Ÿ™ {Ó3ˆIØ Ð ØÜ×$Ñ$ T§Z¡Z°Ó;Ð;rcó—|jr|jjS|jj d«}|€yt j |j|«S)Nsp2copies)r›rÊÚcopied_from_p2r'rÍr rÔr�rÕs rr“zchangelogrevision.p2copieskr×rcóf—tj|j|jddzd«S)Nr·rW)rr¯r™r˜rKs rr”zchangelogrevision.descriptionus-€ä×Ñ § ¡ ¨4¯=©=¸Ñ+;¸aÑ+?Ð+AÐ BÓCÐCrcój—|j}tj|jd««d|vfS)Nrsclose)r'rr¯rÍ)rDr's rr•zchangelogrevision.branchinfoys/€à— ‘ ˆÜ×Ñ § ¡ ¨)Ó 4Ó5°xÀ5Ð7HÐHÐHr)rlrmrnroÚ __slots__r¡rprŠr‹rµr¹rŒr'rÊr�r�r‘r’r“r”r•Ú __classcell__©r«s@rr—r—Ïs7ø„ñð€Iô$ðLñ5óð5ðñAóðAðñ-óð-ð ñóððñ óð ðñ óð ðñóðð ñ<óð<ðñBóðBðñBóðBðñ<óð<ðñ<óð<ðñDóðDðñIóôIrr—c󞇗eZdZdd„Zed„«Zej d„«Zˆfd„Zd„Zd„Z d„Z dd„Z d „Z d „Z d „Z dd „Zd „Zd„ZˆxZS)Ú changelogc ó—tjj||tjdfddd|jj dd«||¬« |j rH|jtjk(r+|xjtjzc_ d|_ d|_ ||_ d|_d|_d|_t#«|_i|_|jj d«|_y)aVLoad a changelog revlog using an opener. If ``trypending`` is true, we attempt to load the index from a ``00changelog.i.a`` file instead of the default ``00changelog.i``. The ``00changelog.i.a`` file contains index (and possibly inline revision) data for a transaction that hasn't been finalized yet. It exists in a separate file to facilitate readers (such as hooks processes) accessing data before a transaction is finalized. ``concurrencychecker`` will be passed to the revlog init function, see the documentation there. Ns 00changelogTspersistent-nodemapF)rwÚradixrzÚmmaplargeindexÚpersistentnodemapÚconcurrencycheckerÚ trypendingscopies-storage)r rIÚrevlog_constantsÚKIND_CHANGELOGÚoptionsrÍÚ _initemptyÚ_format_versionÚREVLOGV1Ú _format_flagsÚFLAG_GENERALDELTAÚ _generaldeltaÚ_storedeltachainsÚ _realopenerÚ_delayedÚ _delaybufÚ_divertÚ frozensetÚ _filteredrevsÚ_filteredrevs_hashcacheÚ_copiesstorage)rDrvrærås rrIzchangelog.__init__€sâ€ô � ‰ ×ÑØ Ø Ü$×3Ñ3°TÐ:Ø ØØØ$Ÿn™n×0Ñ0Ð1FÈÓNØ1Ø!ð ô ð �?Š? × 4Ñ 4¼¿¹Ò Gð × Ò ¤6×#;Ñ#;Ð";Ñ ;Õ Ø!&ˆDÔ ð "'ˆÔà!ˆÔ؈Œ ؈ŒØˆŒ Ü&›[ˆÔØ')ˆÔ$Ø$Ÿn™n×0Ñ0Ð1BÓCˆÕrcó—|jSr;)rörKs rÚ filteredrevszchangelog.filteredrevs¬s€à×!Ñ!Ð!rcóD—t|t«sJ‚||_i|_yr;)Ú isinstancerõrör÷)rDÚvals rrúzchangelog.filteredrevs°s$€ô˜#œyÔ)Ð)Ð)Ø ˆÔØ')ˆÕ$rcóF•—|jstt|�|«yyr;)ròr ràÚ _write_docket)rDÚtrr«s €rrÿzchangelog._write_docket·sø€Ø�}Š}Ü ”)˜TÑ 0°Õ 4ðrcóÔ—|j�€|jsøt|«dk(r}d|_|jj |j dz«r(|jj|j dz«t|j|j «|_ n7g|_ t|j|j |j«|_ |j|j_ |j|j_ d|_|jdt|«z|j «|j#dt|«z|j$«y)z2delay visibility of index updates to other readersNrVTryscl-%i)Ú_docketròr\rôrñÚexistsÚ _indexfileÚunlinkrrrvrór…Ú _segmentfileÚ_segmentfile_sidedataÚ addpendingÚidÚ _writependingÚ addfinalizeÚ _finalize)rDrs rÚ delayupdatezchangelog.delayupdate»s€à �<‰<Ñ ¨¯ ª Ü�4‹y˜AŠ~Ø#�” Ø×#Ñ#×*Ñ*¨4¯?©?¸UÑ+BÔCØ×$Ñ$×+Ñ+¨D¯O©O¸eÑ,CÔDÜ+¨D×,<Ñ,<¸d¿o¹oÓN�• à!#�”Ü*Ø×$Ñ$ d§o¡o°t·~±~ó�” ð(,§{¡{ˆD× Ñ Ô $Ø04· ± ˆD× &Ñ &Ô -؈Œ Ø � ‰ �h¤ D£Ñ)¨4×+=Ñ+=Ô>Ø �‰�x¤" T£(Ñ*¨D¯N©NÕ;rcóà—d|_|j|_|j|j_|j|j_|j �|j |«nè|jrq|jrJ‚|jdz}|jj|«}|j«|jj||jd¬«nk|jr_|j|jdd¬«}|jdj|j««|j«d|_d|_|j|d¬«y) zfinalize index updatesFNryT)rzóar©Ú side_write)ròrñrvrrrrÿrôrórÚopenrTÚrenamerer.Ú_enforceinlinesize)rDrÚtmpnameÚnfiler=s rr zchangelog._finalizeÎs€àˆŒ Ø×&Ñ&ˆŒ Ø#'§;¡;ˆ×ÑÔ Ø,0¯K©Kˆ×"Ñ"Ô)à �<‰<Ð #Ø × Ñ ˜rÕ "Ø �\Š\Ø—~’~Ð %Ð%Ø—o‘o¨Ñ-ˆGØ—K‘K×$Ñ$ WÓ-ˆEØ �K‰KŒMØ �K‰K× Ñ ˜w¨¯©ÀDÐ Õ IØ �^Š^Ø—‘˜TŸ_™_¨d¸t�ÓDˆBØ �H‰H�S—X‘X˜dŸn™nÓ-Ô .Ø �H‰HŒJØ!ˆDŒN؈Œ à ×Ñ ¨uÐÕ5rcó¨—|jr|jj|d¬«S|j�r|j|j«}|jdz}|j |«|j|d«}|j|j ««|jdj|j««|j«d|_d|_ t|j|j«|_ |j|j_ |j|j_ |jryy)zLcreate a file containing the unfinalized state for pretxnchangegroupT)ÚpendingryówrNF)rrerórñrÚ registertmpr[r.rTrôrrrvrr)rDrÚfp1ÚpendingfilenameÚfp2s rr zchangelog._writependingæs÷€ð �<Š<Ø—<‘<×%Ñ% b°$Ð%Ó7Ð 7Ø �>‹>à×"Ñ" 4§?¡?Ó3ˆCØ"Ÿo™o°Ñ5ˆOà �N‰N˜?Ô +à×"Ñ" ?°DÓ9ˆCØ �I‰I�c—h‘h“jÔ !à �I‰I�c—h‘h˜tŸ~™~Ó.Ô /Ø �I‰IŒKà!ˆDŒN؈DŒLÜ'¨×(8Ñ(8¸$¿/¹/ÓJˆDŒKØ'+§{¡{ˆD× Ñ Ô $Ø04· ± ˆD× &Ñ &Ô -à �<Š<Øàrcób—|js#tjj|||¬«yy)Nr)ròr r)rDrrs rrzchangelog._enforceinlinesizes'€Ø�}Š}Ü �M‰M× ,Ñ ,¨T°2À*Ð ,Õ Mðrcó—|j|«}|j|«}|jdk(}t||||«}|j|j |j |j|j|jfS)aØObtain data from a parsed changelog revision. Returns a 6-tuple of: - manifest node in binary - author/user as a localstr - date as a 2-tuple of (time, timezone) - list of files - commit message as a localstr - dict of extra metadata Unless you need to access all fields, consider calling ``changelogrevision`` instead, as it is faster for partial object access. óchangeset-sidedata) Ú _revisiondatar¥rør—rŠr‹rŒr�r”r')rDÚ nodeorrevr/r¥Úcopy_sdÚcs rr[zchangelog.readsn€ð × Ñ ˜yÓ )ˆØ—=‘= Ó+ˆØ×%Ñ%Ð)>Ñ>ˆÜ ˜d A x°Ó 9ˆØ— ‘ ˜AŸF™F A§F¡F¨A¯G©G°Q·]±]ÀAÇGÁGÐLÐLrcó|—|j|«}|j|«}t||||jdk(«S)z6Obtain a ``changelogrevision`` for a node or revision.r )r!r¥r—rø)rDr"rr¥s rr—zchangelog.changelogrevisionsB€à×!Ñ! )Ó,ˆØ—=‘= Ó+ˆÜ Ø �$˜ $×"5Ñ"5Ð9NÑ"Nó ð rcó€—|j|«}|sgS|jd«}|d|jd«}|ddS)zX short version of read that only returns the files modified by the cset ržNrr·)Úrevisionr¢r&)rDr"rÚlastr(s rÚ readfileszchangelog.readfiles%sI€ð�}‰}˜YÓ'ˆÙ؈IØ�z‰z˜'Ó"ˆØ ��$ˆK× Ñ ˜eÓ $ˆØ��ˆuˆ rc ó²—tj|«tj|«}}|j«}|stjt d««‚d|vr4tjt d«t j|«z«‚t|«}|rdtj|«z} ndtj«z} | r>| jd«} | dvr| d=n%| dvr!tjt d«| z«‚t|j«} d } d}|jd k(r4|j r| t"j$z} t'j(|«}| rt+| «} d | | fz} t-|«|| g| zd |gz}dj/|«}|j1||t3|«|||| ¬ «}|j5|«S)Nsempty usernamersusername %r contains a newlines%d %dr)rr)ó.snullstipsthe name '%s' is reservedrVr s%s %sr)r¥Úflags)rÚ fromlocalr5rÚ StorageErrorrr Úbytestrr7r Ú parsedateÚmakedaterÍr-rÃrøÚhas_copies_inforÚREVIDX_HASCOPIESINFOr Úencode_files_sidedatar1rr.Ú addrevisionr\Únode)rDrŠr�r6Ú transactionÚp1Úp2r‹rŒr'Ú parseddateÚbranchÚ sortedfilesr,r¥r(rÚrevs rÚaddz changelog.add0sЀô×'Ñ'¨Ó-¬x×/AÑ/AÀ$Ó/Gˆdˆà�z‰z‹|ˆñÜ×$Ñ$¤QÐ'8Ó%9Ó:Ð :Ø �D‰=Ü×$Ñ$ÜÐ3Ó4´x×7GÑ7GÈÓ7MÑMóð ô˜‹ˆá Ø!¤H×$6Ñ$6°tÓ$<Ñ<‰Jà!¤H×$5Ñ$5Ó$7Ñ7ˆJÙ Ø—Y‘Y˜yÓ)ˆFØÐ*Ñ*ؘ)Ñ$ØÐ2Ñ2Ü×(Ñ(ÜÐ4Ó5¸Ñ>óðô˜UŸ]™]Ó+ˆ ØˆØˆØ × Ñ Ð"7Ò 7Ø×$Ò$Øœ×6Ñ6Ñ6�Ü×5Ñ5°eÓ<ˆHá Ü Ó&ˆEØ! Z°Ð$7Ñ7ˆJÜ �‹]˜D *Ð -° Ñ ;¸sÀD¸kÑ IˆØ�z‰z˜!‹}ˆØ×ÑØ �+œs 4›y¨"¨b¸8È5ðó ˆð�y‰y˜‹~Ðrcó8—|j|«jS)z¢return the branch name and open/close state of a revision This function exists because creating a changectx object just to access this is costly.)r—r•)rDr=s rr•zchangelog.branchinfols€ð ×%Ñ% cÓ*×5Ñ5Ð5rcó^—|jjdg«}|j|«y)Ns revduplicates)rÊÚ setdefaultrc)rDr7r=Ú duplicatess rÚ_nodeduplicatecallbackz changelog._nodeduplicatecallbackss+€ð!×(Ñ(×3Ñ3Ð4DÀbÓIˆ Ø×ј#Õr)FN)T)NN)rlrmrnrIrprúÚsetterrÿr r r rr[r—r)r>r•rCrÝrÞs@rràràszø„ó*DðXñ"óð"ð×Ññ*óð*ô 5ò<ò&6ò0ó:NòMò, ò ð(Øó:òx6örràN)!Úi18nrr6rrÚ thirdpartyrÚrrr r r Úutilsr r Ú revlogutilsrrçrr$rr!r+r1r7r9rrr…r`r‡r—ràrOrrÚrJs«ðõ÷õ÷õ÷÷ð ˜JÐ'€ ò'ò((òò&ò L÷ C'ñC'÷L +ñ +ò ð‡�÷ Dð Dóð D÷ mIñmIô`y�— ‘ õyr