Ë >JU‡[B±ã óþ—dZddlZddlZddlZddlmZddlmZmZddl m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZddlmZmZmZiZej8e«ZdZdZdZd Z eejBiZ"d „Z#d „Z$d „Z%d „Z&d„Z'd„Z(d„Z)d„Z*d„Z+d„Z,d„Z-Gd„dej\dd««Z/Gd„d«Z0dZ1edddge jdD�cgc] }|de1vsŒ |‘Œc}zdejf¬ «d!„«Z4ycc}w)"z¡track previous positions of bookmarks (EXPERIMENTAL) This extension adds a new command: `hg journal`, which shows you where bookmarks were previously located. éN)Ú_)ÚbinÚhex) Ú bookmarksÚcmdutilÚdispatchÚencodingÚerrorÚ extensionsÚhgÚ localrepoÚlockÚ logcmdutilÚpycompatÚ registrarÚutil)ÚdateutilÚprocutilÚ stringutilsships-with-hg-coresbookmarks wdirparentcób—tjtdt«tjtj dt «tjtjdt«tjtdt«tjtdt«y)Ns runcommands_writeódirstates postshares copystore)r Ú wrapfunctionrÚ runcommandrÚbmstoreÚrecordbookmarksÚ wrapfilecacher ÚlocalrepositoryÚ wrapdirstater Ú wrappostshareÚunsharejournal)Úuis ú1usr/lib/python3.12/site-packages/hgext/journal.pyÚextsetupr#Dsm€Ü×ÑœH m´ZÔ@Ü×ÑœI×-Ñ-¨y¼/ÔJÜ×ÑÜ×!Ñ! ;´ ôô×ÑœB  ¬mÔ<Ü×ÑœB  ¬nÕ=ócóÌ—|j«rTt|«|_|jj d«t j |d«\}}|r t||«yyy)Nó namejournalr)ÚlocalÚjournalstorageÚjournalÚ_wlockfreeprefixÚaddr Ú isfilecachedÚ_setupdirstate)r!ÚrepoÚdirstateÚcacheds r"Ú reposetupr1Ns[€Ø ‡z�z„|Ü% dÓ+ˆŒ Ø ×Ñ×!Ñ! .Ô1ä$×1Ñ1°$¸ ÓDш�&Ù ô ˜4 Õ *ð ð r$có>—tj|Ž|||||g|¢­ŽS)z;Track the command line options for recording in the journal)r(Ú recordcommand)ÚorigÚluir.ÚcmdÚfullargsÚargss r"rr[s&€ä× Ñ  (Ñ+Ù ��T˜3 Ð 0¨4Ò 0Ð0r$cóR—|j|_|jdt«y©Nójournal)r)r(ÚaddparentchangecallbackÚrecorddirstateparents)r.r/s r"r-r-as€Ø"Ÿl™l€HÔØ ×$Ñ$ ZÔ1FÕGr$cóZ—||«}tj|d«r t||«|S)z5Make journal storage available to the dirstate objectr))rÚ safehasattrr-)r4r.r/s r"rrgs*€á�D‹z€HÜ ×ј˜iÔ(Ü�t˜XÔ&Ø €Or$có.—t|«}t|«}tj|d«ri|d|jjk(r|ddn|}|d|jjk(r|ddn|}|j j td||«yy)z3Records all dirstate parent changes in the journal.r(éNó.)Úlistrr?Ú_nodeconstantsÚnullidr(ÚrecordÚwdirparenttype)r/ÚoldÚnewÚ oldhashesÚ newhashess r"r=r=os�€ä ˆs‹)€CÜ ˆs‹)€CÜ ×јÐ"2Ô3à" 1™v¨×)@Ñ)@×)GÑ)GÒG�C˜˜‘GÈSˆ Ø" 1™v¨×)@Ñ)@×)GÑ)GÒG�C˜˜‘GÈSˆ Ø×Ñ×&Ñ&Ü ˜D )¨Yõ ð 4r$có:—|j}tj|d«rqtj|«}|j «D]I\}}|j ||j«}||k7sŒ(|jjt|||«ŒK|||«S)z,Records all bookmark changes in the journal.r)) Ú_reporr?rrÚitemsÚgetrEr)rFÚ bookmarktype)r4ÚstoreÚfpr.ÚoldmarksÚmarkÚvalueÚoldvalues r"rr}s�€à �;‰;€DÜ ×ј˜iÔ(Ü×$Ñ$ TÓ*ˆØ Ÿ;™;ž=‰KˆD�%Ø—|‘| D¨$¯+©+Ó6ˆHØ˜Ó Ø— ‘ ×#Ñ#¤L°$¸À%ÕHð)ñ ��r‹?Ðr$cóš— t|jjd«j««S#t$r t«cYSwxYw)z,A set of shared features for this repositoryóshared)ÚsetÚvfsÚreadÚ splitlinesÚFileNotFoundError)r.s r"Ú_readsharedfeaturesr^Šs>€ðÜ�4—8‘8—=‘= Ó+×6Ñ6Ó8Ó9Ð9øÜ òÜ‹uŠ ðús‚14´A Á A c/ónK—|jdt«}|D�cgc] }t|«‘Œ}}i}t|«D]\}} t |«||g||<Œ|r4||j ««\}}}|–— t |«||d<|rŒ3yycc}w#t $rYŒawxYw#t $r||=YŒ'wxYw­w)z‹Given a set of sorted iterables, yield the next entry in merged order Note that by default entries go from most recent to oldest. ÚorderrN)ÚpopÚmaxÚiterÚ enumerateÚnextÚ StopIterationÚvalues)Ú iterablesÚkwargsr`ÚitÚ iterable_mapÚkeyrUs r"Ú_mergeentriesiterrm’sÔèø€ð �J‰J�w¤Ó $€EÙ$-Ó.¡I˜b”�b• I€IÐ.ð €LܘYÖ'‰ˆˆRð Ü!% b£¨3°Ð 3ˆL˜Ò ð(ñ Ù˜|×2Ñ2Ó4Ó5‰ˆˆs�BØŠ ð "Ü#'¨£8ˆL˜Ñ ˜aÑ ô ùò/øôò á ð ûôò "à˜SÒ!ð "üs]‚B5�B¯B5ÁBÁ"B5Á9B# B5 B5 B ÂB5ÂB  B5Â# B2Â/B5Â1B2Â2B5c óÒ—|j«5|||fi|¤Ž|jdd«5}|jd«ddd«ddd«y#1swYŒxYw#1swYyxYw)zz!unsharejournal..Ës0øèø€ðáJ�AÜ#×'Ñ'¨¯ © Ó4¸ÑFôÙJùsƒ-0)rv)r`)ÚpathÚsharedrr?r Úsharedreposourcer^rZÚexistsÚjoinÚrenamer)Ú_openrmÚminÚ_write) r4r!r.ÚrepopathÚ sharedrepoÚ journalpathÚstorager'r€Úentryr}s @r"r r ·sø€ð � ‰ �XÓØ �K‰K�MÜ × Ñ ˜T 9Ô -ä×(Ñ(¨Ó.ˆ Ü,¨TÓ2ˆÙ ˜.¨J¨<Ò7ð�x‰x�‰˜~Ô.Ø"Ÿh™hŸm™m¨NÓ;� Ü— ‘ ˜K¨°wÑ)>Ô?Ø—l‘lˆGØ—M‘MØ—‘Ð#5ÀEð"óˆEóà Ÿ™ z§~¡~ÀE˜ÔJóˆFô +¨5°&Ä×D�Ø—‘˜tŸx™x¨Õ/ðEñ ��D˜(Ó #Ð#r$cóJ—eZdZdZed„«Zd„Zeje«Z y)Ú journalentrya¬Individual journal entry * timestamp: a mercurial (time, timezone) tuple * user: the username that ran the command * namespace: the entry namespace, an opaque string * name: the name of the changed item, opaque string with meaning in the namespace * command: the hg command that triggered this record * oldhashes: a tuple of one or more binary hashes for the old location * newhashes: a tuple of one or more binary hashes for the new location Handles serialisation from and to the storage format. Fields are separated by newlines, hashes are written out in hex separated by commas, timestamp and timezone are separated by a space. c ó*—|jd«\}}}}}}}|j«\} } t| «t| «} } td„|jd«D««}td„|jd«D««}|| | f||||||«S)Nó c3ó2K—|]}t|«–—Œy­wrx©r©r{Úhashs r"r~z+journalentry.fromstorage..úóèø€ÐFÑ0E¨œ#˜dŸ)Ñ0Eùó‚ó,c3ó2K—|]}t|«–—Œy­wrxr’r“s r"r~z+journalentry.fromstorage..ûr•r–)ÚsplitÚfloatÚintÚtuple) ÚclsÚlineÚtimeÚuserÚcommandrzÚnamerJrKÚ timestampÚtzs r"Ú fromstoragezjournalentry.fromstorageís£€ð �J‰J�uÓ ñ Ø Ø Ø Ø Ø Ø Ø àŸ ™ › ‰ ˆ �2ܘiÓ(¬#¨b«'�2ˆ ÜÑF° ·±ÀÔ0EÓFÓFˆ ÜÑF° ·±ÀÔ0EÓFÓFˆ ÙØ ˜ˆOØ Ø Ø Ø Ø Ø ó ð r$c óÄ—djttj|j««}dj|j D�cgc] }t |«‘Œc}«}dj|jD�cgc] }t |«‘Œc}«}dj||j|j|j|j||f«Scc}wcc}w)z bytes representation for storageó r—r�) rƒÚmaprÚbytestrr£rJrrKr r¡rzr¢)ÚselfrŸr”rJrKs r"Ú __bytes__zjournalentry.__bytes__s¯€à�y‰yœœX×-Ñ-¨t¯~©~Ó>Ó?ˆØ—I‘I°T·^²^ÓD±^¨Tœs 4�y°^ÑDÓEˆ Ø—I‘I°T·^²^ÓD±^¨Tœs 4�y°^ÑDÓEˆ Ø�z‰zàØ— ‘ Ø— ‘ Ø—‘Ø— ‘ ØØð ó  ð ùòEùÚDs Á CÁ?CN) Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú classmethodr¥r«r Ú strmethodÚ__str__©r$r"rŽrŽÖs4„ñ ð"ñ óð ò0 ð"!ˆh× Ñ  Ó+�Gr$rŽz9timestamp user command namespace name oldhashes newhashescól—eZdZdZdZdZd„Zed„«Ze d„«Z d„Z d„Z d „Z d „Zdd „Zd „Zdd „Zy)r(aeStorage for journal entries Entries are divided over two files; one with entries that pertain to the local working copy *only*, and one with entries that are shared across multiple working copies when shared using the share extension. Entries are stored with NUL bytes as separators. See the journalentry class for the per-entry structure. The file format starts with an integer version, delimited by a NUL. This storage uses a dedicated lock; this makes it easier to avoid issues with adding entries that added when the regular wlock is unlocked (e.g. the dirstate). r³Ncó8—tj«|_|j|_|j|_dx|_|_|j«rAt|«}tj|«}|�d|vr|j|_||_yyyyr:) rÚgetuserr r!rZr}Ú sharedvfsr€r^r r�)rªr.Úfeaturesr‰s r"Ú__init__zjournalstorage.__init__/sŠ€Ü×$Ñ$Ó&ˆŒ Ø—'‘'ˆŒØ—8‘8ˆŒð04Ð3ˆÔ˜dœnØ �;‰;Œ=Ü*¨4Ó0ˆHÜ×,Ñ,¨TÓ2ˆJØÐ%¨*¸Ñ*@Ø!+§¡�”Ø&.�Õ#ð+AÐ%ð r$cóª—djttjtj ««}d|vr|j d«ddz}|S)Nr§r�rs ...)rƒr¨rÚ shellquoter(Ú_currentcommandÚ partition)rªÚ commandstrs r"r¡zjournalstorage.command>sP€à—Y‘YÜ ”×#Ñ#¤^×%CÑ%CÓ Dó ˆ ð �JÑ à#×-Ñ-¨eÓ4°QÑ7¸'ÑAˆJØÐr$có—||_y)z:Set the current hg arguments, stored with recorded entriesN)r¼)r�r7s r"r3zjournalstorage.recordcommandHs €ð 'ˆÕr$có8—|€y|«}|� |jsy|S)zoReturns the lock if it's held, or None if it's not. (This is copied from the localrepo class) N)Úheld)rªÚlockrefÚls r"Ú _currentlockzjournalstorage._currentlockOs&€ð ˆ?ØÙ ‹IˆØ ˆ9˜AŸFšFØØˆr$c ó~—|j|j«�tjt d««‚t d«|j z} t j |dd|¬«}tj|«|_|S#tj$r¡}|jjt d«||jfz«t j |d|jjdd «|¬«}|jjt d «|jz«Yd}~ŒËd}~wwxYw) z"Create a lock for the journal fileNs%journal lock does not support nestings journal of %ssnamejournal.lockr)Údescs"waiting for lock on %s held by %r suistimeoutsgot lock after %s seconds )rÄÚ_lockrefr ÚAbortrÚbaserÚLockHeldr!ÚwarnÚlockerÚ configintÚdelayÚweakrefÚref)rªrZrÆrÃÚinsts r"Újlockzjournalstorage.jlock[s€à × Ñ ˜TŸ]™]Ó +Ð 7Ü—+‘+œaÐ HÓIÓJÐ JÜÐ!Ó" S§X¡XÑ-ˆð FÜ— ‘ ˜#Ð2°A¸DÔAˆAô Ÿ ™  A›ˆŒ ؈øô�~‰~ò FØ �G‰G�L‰LÜÐ8Ó9¸TÀ4Ç;Á;Љ>Ð %ô ×#Ñ# IÓ.°$×2EÑ2EÑEØ—n‘n�à � ‰ �C˜Õr$cóV—|j|«5|dd¬«5}|jdtj«|j d«j d«d}|rE|dt zk7r9|jjtd«|z« ddd«ddd«y|s|jdt zdz«|jdtj«|jt|«dz«ddd«ddd«y#1swYŒxYw#1swYyxYw) Nr&sa+b)Úmoderéóó%ds&unsupported journal file version '%s' ) rÒÚseekÚosÚSEEK_SETr[r½Ústorageversionr!rËrrqÚSEEK_ENDÚbytes)rªrZrŒÚfÚversions r"r‡zjournalstorage._write•sç€Ø �Z‰Z˜�_á�^¨&Õ1°QØ—‘�qœ"Ÿ+™+Ô&ðŸ&™& ›)×-Ñ-¨eÓ4°QÑ7�Ù˜w¨%´.Ñ*@Ò@ð —G‘G—L‘LÜÐDÓEÈÑOôð÷2÷ˆ_ñ à—G‘G˜U¤^Ñ3°uÑ<Ô=Ø—‘�qœ"Ÿ+™+Ô&Ø—‘œ˜e›  uÑ,Ô-÷%2÷ˆ_ç1Ð1ú÷ˆ_ús0’ D�A:DÂDÂ(ADÄDÄD ÄDÄD(c#óÞK—|�tj|«d}|�tj|«d}|D]0}|�||j«sŒ|�||j«sŒ-|–—Œ2y­w)aUYield all journal entries with the given namespace or name Both the namespace and the name are optional; if neither is given all entries in the journal are produced. Matching supports regular expressions by using the `re:` prefix (use `literal:` to match names or namespaces that start with `re:`) Néÿÿÿÿ)rÚ stringmatcherrzr¢)rªrzr¢rŒs r"Úfilteredzjournalstorage.filtered¬suèø€ð Ð Ü"×0Ñ0°Ó;¸BÑ?ˆIØ Ð Ü×+Ñ+¨DÓ1°"Ñ5ˆDÛˆEØÐ$©Y°u·±Ô-GØØÐ©¨U¯Z©ZÔ(8ØØ‹Kñ ùs‚A+A-c󶇗‰j‰j«}‰j€|Sˆfd„‰j‰j«D«}t||«S)zlIterate over the storage Yields journalentry instances for each contained journal record. c3óx•K—|]1}tj|j«‰jvr|–—Œ3y­wrx)ryrOrzr})r{r|rªs €r"r~z*journalstorage.__iter__..Îs6øèø€ð á/�Ü×#Ñ# A§K¡KÓ0°D×4GÑ4GÑGô Ù/ùsƒ7:)r…rZr·rm)rªr'r€s` r"Ú__iter__zjournalstorage.__iter__ÁsQø€ð — ‘ ˜4Ÿ8™8Ó$ˆà �>‰>Ð !؈Ló à—Z‘Z §¡Ô/ó ˆô ! ¨Ó/Ð/r$c#óœK—|j|«sy||«5}|j«}ddd«jd«}|xr|d}|dtzk7r0|xs t d«}t j t d«|z«‚|dd}|r t|«}|D]}|sŒtj|«–—Œy#1swYŒ“xYw­w)NrÙrrÚs not availables!unknown journal file version '%s'rA) r‚r[r™rÞrr rÈÚreversedrŽr¥) rªrZrurvráÚrawÚlinesrâržs r"r…zjournalstorage._openÕsÄèø€Ø�z‰z˜(Ô#Ø á �Œ]˜aØ—&‘&“(ˆC÷ð— ‘ ˜%Ó ˆØÒ$˜E !™HˆØ �eœnÑ,Ò ,ØÒ4¤Ð#3Ó!4ˆGÜ—+‘+œaÐ DÓEÈÑOÓPÐ Pð �a�b� ˆÙ ܘU“OˆEÛˆDÙØÜ×*Ñ*¨4Ó0Ó 0ñ÷ˆ]üs‚C �C®BC ÃC ÃC )NN)r&T)r¬r­r®r¯r¼rÇr¹Úpropertyr¡r°r3rÄrÒrFr‡rærér…r³r$r"r(r(sd„ñð"€OØ€Hò /ðñóððñ'óð'ò òò," òH.ó.ò*0ô(1r$r()s no-mergessgraphr;)r$óallNsshow history for all names)ócócommitsNsshow commit metadatarAs[OPTION]... [BOOKMARKNAME])Ú helpcategoryc óv‡—tj|«}d}|jd«r"|rtjt d««‚d}|r|d}|j d|«Šˆfd„}|jd«d k7r0|€ t d «}nd |z}|jt d «|z«tj|«}d}|jd«t|jj|¬ ««D�]Ç\} }| |k(r�n¼‰j«‰j|j dd||j"««‰j%dd||j&««‰j|j dd|j(«‰j|jd«xs|j+d«dd|j,«‰j|j dd‰j/|j0d««‰j%dd|j2«|jd«s�Œ@‰j5«rtj6|||«} n(tj8||‰j;d«|¬«} |j&D]} || } | j=| «Œ| jE«�ŒÊ‰jG«|€|jt d ««yy#tj>$r1} ‰jAdtjB| «z«Yd} ~ Œœd} ~ wwxYw)!azshow the previous position of bookmarks and the working copy The journal is used to see the previous commits that bookmarks and the working copy pointed to. By default the previous locations for the working copy. Passing a bookmark name will show all the previous positions of that bookmark. Use the --all switch to show previous locations for all bookmarks and the working copy; each line will then include the bookmark name, or '.' for the working copy, as well. If `name` starts with `re:`, the remainder of the name is treated as a regular expression. To match a name that actually starts with `re:`, use the prefix `literal:`. By default hg journal only shows the commit hash and the command that was running at that time. -v/--verbose will show the prior hash, the user, and the time at which it happened. Use -c/--commits to output log information on each commit hash; at this point you can use the usual `--patch`, `--git`, `--stat` and `--template` switches to alter the log output for these. `hg journal -T json` can be used to produce machine readable output. rBrïs/You can't combine --all and filtering on a nameNrr;cóT•—‰jt‰j|«dd¬«S)Nsnoder—)r¢Úsep)Ú formatlistr¨Úhexfunc)ÚnodesÚfms €r"Ú formatnodeszjournal..formatnodes#s#ø€Ø�}‰}œS §¡¨UÓ3¸'Àtˆ}ÓLÐLr$stemplatesjsonsthe working copy and bookmarkss'%s'sprevious locations of %s: )r¢soldnodess%s -> snewnodess%ssusers %-8ssre:snames %-8ssdates %ss%Y-%m-%d %H:%M %1%2scommands %s rñs changesets)Údiffoptss%s sno recorded locations )$rÚ byteskwargsrOr rÈrÚ formatterÚstatusrÚgetlimitÚpagerrdr)ræÚ startitemÚ condwriteÚverboserJrqrKr Ú startswithr¢Ú formatdater£r¡ÚisplainÚchangesetdisplayerÚchangesetformatterÚnestedÚshowÚRepoLookupErrorÚplainr©ÚcloseÚend)r!r.r8Úoptsr¢rúÚ displaynameÚlimitrŒÚcountÚ displayerr”Úctxr|rùs @r"r)r)ós»ø€ôF × Ñ  Ó %€DØ €DØ ‡x�x�ÔÙ Ü—+‘+ÜÐDÓEóð ðˆÙ Ø�A‰wˆà �‰�j $Ó '€BôMð ‡x�x� Ó Ò'Ø ˆ<ÜÐ=Ó>‰Kà! D™.ˆKØ � ‰ ”!Ð2Ó3°kÑAÔBä × Ñ  Ó %€EØ €E؇H�HˆZÔÜ! $§,¡,×"7Ñ"7¸TÐ"7Ó"B×C‰ ˆˆuØ �EŠ>Ú à � ‰ ŒØ � ‰ Ø �J‰J˜  Y± ¸E¿O¹OÓ0Lô ð �‰�˜e¡[°·±Ó%AÔBØ � ‰ �R—Z‘Z ¨(°E·J±JÔ?ð � ‰ à �H‰H�VÓ Ò 7 §¡°Ó 7à Ø Ø �J‰Jô  ð � ‰ Ø �J‰JØ Ø Ø �M‰M˜%Ÿ/™/Ð+AÓ Bô  ð �‰�˜Y¨¯ © Ô6à �8‰8�JÖ Ø�z‰zŒ|Ü&×9Ñ9¸"¸dÀDÓI‘ ä&×9Ñ9ؘ˜bŸi™i¨ Ó6Àô� ðŸœ�ð>ؘt™*�CØ—N‘N 3Õ'ð(ð �O‰OÖ ðUDðX‡F�F„Hà €}Ø � ‰ ”!Ð.Ó/Õ0ðøô ×,Ñ,ò>Ø—H‘H˜Y¬×)9Ñ)9¸!Ó)<Ñ<×=Ñ=ûð>úsÊK4Ë4L8Ì'L3Ì3L8)5r¯Ú collectionsrÜrÏÚmercurial.i18nrÚmercurial.noderrÚ mercurialrrrr r r r r rrrrrÚmercurial.utilsrrrÚcmdtabler¡Ú testedwithrÞrPrGÚsharedbookmarksryr#r1rr-rr=rr^rmrr Ú namedtuplerŽr(Ú _ignoreoptsÚlogoptsÚCATEGORY_CHANGE_ORGANIZATIONr))Úopts0r"Úr"sXðñóÛ Ûå÷÷ ÷÷õ÷ñð €Ø ˆ)× Ñ ˜HÓ %€ð #€ ð€ð€ Ø€ð�"×$Ñ$ðÐò >ò +ò1ò Hò ò  ò òò"ò:#ò$ô>A,Ø€K×ÑØØCóôA,÷HQ1ñQ1ðl'€ ñ Øà:Ø9ðð—o’oÓC‘oˆs¨¨Q©°{Ò)B‚s�oÑCñ Dð "Ø×5Ñ5ô ñb1ó ñb1ùò Ds à C: ÃC: