Ë ›5æÊ@Oãó —dZ ddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z ddlmZmZmZddlmZmZmZmZmZmZmZmZmZmZmZmZmZ m!Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z+m,Z,ddl-m.Z.m/Z/m0Z0iZ1e&jde1«Z2iZ3e&jhe3«Z4e4dd d ¬ «e4d d d¬ «e4d dd ¬ «e4d dd¬ «e4d dd ¬ «e4ddd¬ «e4d dd¬ «e4d dd d¬«dZ5iZ6e7«Z8e7«Z9e7«Z:e7«Z;d„Z<Gd„d«Z=Gd„d«Z>d„Z?d „Z@d¹d!„ZAd"„ZBd#„ZCdºd$„ZDeDd%d&ge d'«d¬(«Gd)„d*e>««ZEeDd+d,ge d-«d¬(«Gd.„d/e>««ZFeDd0d1ge d2««Gd3„d4e>««ZGeDd5d6ge d7««Gd8„d9e>««ZHeDd:ge d;«d¬<«Gd=„d>eG««ZIeDd?d@ge dA««GdB„dCeG««ZJeDdDdEge dF««GdG„dHe>««ZKeDdIdJge dK«d¬(«GdL„dMe>««ZLd»dN„ZM ddlNZNgdO¢ZOdPdQdRœZPdS\ZQZRZSZTZUdT\ZVZWZXdU\ZYZZZ[dV\Z\Z]dW\Z^Z_Z`ZaZbdX\ZcZdZeZfdYdZdZd[d[d\d d d]d^d_œ eeidEd`“d,da“d1db“dJdc“d&dd“d@de“dfdg“dhdi“djdk“dldi“dmdk“dndo“dpdq“drdo“dsdq“dtdu“eddvdvdwdxdydxdydidkdzœ efiiZgd{„ZhGd|„d}«Zid~„Zjd¼d„Zkd€„Zld�„ZmGd‚„dƒ«Znd„„Zod…„Zpe2d d†d‡d†e dˆ«e d‰«fdŠd‹d e dŒ«fd†d�d e dŽ«fdjd�d e d�«fd†d‘d e d’«fd“d”d e d•«fd1d–d e d—«fd@d˜ge d™«e dš«fgejâze d›«e2j䬜«d�„«Zsdž„Ztd‹Zud‘Zvd�ZwdŸZxd „Zyd¡„Zzd¢„Z{d£„Z|d¤„Z}d¥„Z~d¹d¦„Zd§„Z€d¨„Z�d©„Z‚dª„Zƒd«„Z„d¬„Z…d½d­„Z†d®„Z‡d¯„Zˆd°„Z‰d±„ZŠd²„Z‹d³„ZŒd¹d´„Z�dµ„ZŽe�je'd¶eŽ«d·„Z�d¸„Z‘y#e$rdZdZY�ŒòwxYw#e$rdZNY�ŒÄwxYw)¾aÐinteractive history editing With this extension installed, Mercurial gains one new command: histedit. Usage is as follows, assuming the following history:: @ 3[tip] 7c2fd3b9020c 2009-04-27 18:04 -0500 durin42 | Add delta | o 2 030b686bedc4 2009-04-27 18:04 -0500 durin42 | Add gamma | o 1 c561b4e977df 2009-04-27 18:04 -0500 durin42 | Add beta | o 0 d8d2fcd0e319 2009-04-27 18:04 -0500 durin42 Add alpha If you were to run ``hg histedit c561b4e977df``, you would see the following file open in your editor:: pick c561b4e977df Add beta pick 030b686bedc4 Add gamma pick 7c2fd3b9020c Add delta # Edit history between c561b4e977df and 7c2fd3b9020c # # Commits are listed from least to most recent # # Commands: # p, pick = use commit # e, edit = use commit, but allow edits before making new commit # f, fold = use commit, but combine it with the one above # r, roll = like fold, but discard this commit's description and date # d, drop = remove commit from history # m, mess = edit commit message without changing commit content # b, base = checkout changeset and apply further changesets from there # In this file, lines beginning with ``#`` are ignored. You must specify a rule for each revision in your history. For example, if you had meant to add gamma before beta, and then wanted to add delta in the same revision as beta, you would reorganize the file to look like this:: pick 030b686bedc4 Add gamma pick c561b4e977df Add beta fold 7c2fd3b9020c Add delta # Edit history between c561b4e977df and 7c2fd3b9020c # # Commits are listed from least to most recent # # Commands: # p, pick = use commit # e, edit = use commit, but allow edits before making new commit # f, fold = use commit, but combine it with the one above # r, roll = like fold, but discard this commit's description and date # d, drop = remove commit from history # m, mess = edit commit message without changing commit content # b, base = checkout changeset and apply further changesets from there # At which point you close the editor and ``histedit`` starts working. When you specify a ``fold`` operation, ``histedit`` will open an editor when it folds those revisions together, offering you a chance to clean up the commit message:: Add beta *** Add delta Edit the commit message to your liking, then close the editor. The date used for the commit will be the later of the two commits' dates. For this example, let's assume that the commit message was changed to ``Add beta and delta.`` After histedit has run and had a chance to remove any old or temporary revisions it needed, the history looks like this:: @ 2[tip] 989b4d060121 2009-04-27 18:04 -0500 durin42 | Add beta and delta. | o 1 081603921c3f 2009-04-27 18:04 -0500 durin42 | Add gamma | o 0 d8d2fcd0e319 2009-04-27 18:04 -0500 durin42 Add alpha Note that ``histedit`` does *not* remove any revisions (even its own temporary ones) until after it has completed all the editing operations, so it will probably perform several strip operations when it's done. For the above example, it had to run strip twice. Strip can be slow depending on a variety of factors, so you might need to be a little patient. You can choose to keep the original revisions by passing the ``--keep`` flag. The ``edit`` operation will drop you back to a command prompt, allowing you to edit files freely, or even use ``hg record`` to commit some changes as a separate commit. When you're done, any remaining uncommitted changes will be committed as well. When done, run ``hg histedit --continue`` to finish this step. If there are uncommitted changes, you'll be prompted for a new commit message, but the default commit message will be the original message for the ``edit`` ed revision, and the date of the original commit will be preserved. The ``message`` operation will give you a chance to revise a commit message without changing the contents. It's a shortcut for doing ``edit`` immediately followed by `hg histedit --continue``. If ``histedit`` encounters a conflict when moving a revision (while handling ``pick`` or ``fold``), it'll stop in a similar manner to ``edit`` with the difference that it won't prompt you for a commit message when done. If you decide at this point that you don't like how much work it will be to rearrange history, or that you made a mistake, you can use ``hg histedit --abort`` to abandon the new changes you have made and return to the state before you attempted to edit your history. If we clone the histedit-ed example repository above and add four more changes, such that we have the following history:: @ 6[tip] 038383181893 2009-04-27 18:04 -0500 stefan | Add theta | o 5 140988835471 2009-04-27 18:04 -0500 stefan | Add eta | o 4 122930637314 2009-04-27 18:04 -0500 stefan | Add zeta | o 3 836302820282 2009-04-27 18:04 -0500 stefan | Add epsilon | o 2 989b4d060121 2009-04-27 18:04 -0500 durin42 | Add beta and delta. | o 1 081603921c3f 2009-04-27 18:04 -0500 durin42 | Add gamma | o 0 d8d2fcd0e319 2009-04-27 18:04 -0500 durin42 Add alpha If you run ``hg histedit --outgoing`` on the clone then it is the same as running ``hg histedit 836302820282``. If you need plan to push to a repository that Mercurial does not detect to be related to the source repo, you can add a ``--force`` option. Config ------ Histedit rule lines are truncated to 80 characters by default. You can customize this behavior by setting a different length in your configuration file:: [histedit] linelen = 120 # truncate rule lines at 120 characters The summary of a change can be customized as well:: [histedit] summary-template = '{rev} {bookmarks} {desc|firstline}' The customized summary should be kept short enough that rule lines will fit in the configured line length. See above if that requires customization. ``hg histedit`` attempts to automatically choose an appropriate base revision to use. To change which base revision is used, define a revset in your configuration file:: [histedit] defaultrev = only(.) & draft() By default each edited revision needs to be present in histedit commands. To remove revision you need to use ``drop`` operation. You can configure the drop to be implicit for missing commits by adding:: [histedit] dropmissing = True By default, histedit will close the transaction after each action. For performance purposes, you can configure histedit to use a single transaction across the entire histedit. WARNING: This setting introduces a significant risk of losing the work you've done in a histedit if the histedit aborts unexpectedly:: [histedit] singletransaction = True éN)Ú_)ÚgetattrÚopen)ÚbinÚhexÚshort)Úbundle2ÚcmdutilÚcontextÚcopiesÚdestutilÚ discoveryÚencodingÚerrorÚexchangeÚ extensionsÚhgÚ logcmdutilÚmergeÚ mergestateÚ mergeutilÚobsoleteÚpycompatÚ registrarÚrepairÚ rewriteutilÚscmutilÚstateÚutil)ÚdateutilÚ stringutilÚurlutiló experimentalóhistedit.autoverbF©Údefaultóhistedits defaultrevó dropmissingólinelenéPósingletransactionóuisinterface.histeditósummary-templates{rev} {desc|firstline}ólater-commits-firstT)r&Ú experimentalsships-with-hg-corecóš‡ —td«}gŠ ˆ fd„}tt«tt«ztt«zD] }||«Œ ‰ j d«g}|j dd«r|j d«|||fzjd«‰ z|z}dj|D�cgc] }|rd|znd ‘Œ c}«Scc}w) zâconstruct the editor comment The comment includes:: - an intro - sorted primary commands - sorted short commands - sorted long commands - additional hints Commands are only included once. sŒEdit history between %s and %s Commits are listed from least to most recent You can reorder changesets by reordering the lines Commands: có:•—t|}|jjd«}t|j«r'dj t |jd„¬««}‰jd||dfz«‰jdgt|«dz z«y) Nó ó, có—t|«S©N©Úlen)Úvs ú2usr/lib/python3.12/site-packages/hgext/histedit.pyÚz1geteditcomment..addverb..Ks€¼¸Q¼ó©Úkeys %s = %srs %sé) Ú actiontableÚmessageÚsplitr7ÚverbsÚjoinÚsortedÚappendÚextend)r8ÚaÚlinesÚactionss €r9Úaddverbzgeteditcomment..addverbGswø€Ü ˜‰NˆØ— ‘ —‘ Ó&ˆÜ ˆq�w‰wŒ<Ø— ‘ œ6 !§'¡'Ñ/?Ô@ÓAˆAØ�‰�{ a¨¨q© ]Ñ2Ô3Ø�‰˜�y¤C¨£J°¡NÑ3Õ4r;r;r'r(sKDeleting a changeset from the list will DISCARD it from the edited history!r2s# %s s# ) rrDÚprimaryactionsÚsecondaryactionsÚtertiaryactionsrEÚ configboolrArC) ÚuiÚfirstÚlastÚintrorJr8ÚhintsrHÚlrIs @r9ÚgeteditcommentrU0sÛø€ô ð ó €Eð€Gô5ô Œ~ÓÜ Ô!Ó "ñ #ä ”Ó !ô "ð ñ �� ð  "ð  ‡N�N�3Ôà €EØ ‡}�}�[ .Ô1Ø � ‰ ð 8ô ð �e˜T�]Ñ "× )Ñ )¨%Ó 0°7Ñ :¸UÑ B€Eà �8‰8¹UÓC¹U¸¡a�Y ’]¨VÑ3¸UÑCÓ DÐDùÒCsÂ1Ccó>—eZdZd„Zd„Zd„Zd d„Zd„Zd„Zd„Z d „Z y) Ú histeditstatecó¸—||_d|_d|_d|_d|_d|_d|_d|_tj|d«|_ g|_ y©Nóhistedit-state) ÚreporIÚkeepÚtopmostÚ parentctxnodeÚlockÚwlockÚ backupfileÚstatemodÚcmdstateÚstateobjÚ replacements)Úselfr[s r9Ú__init__zhisteditstate.__init__dsX€ØˆŒ ؈Œ ؈Œ ؈Œ Ø!ˆÔ؈Œ ؈Œ ؈ŒÜ ×)Ñ)¨$Ð0AÓBˆŒ ؈Õr;có:—|jj«s)tj|jt d««|j «}|d|_t|d|«}||_ |d|_ |d|_ |d|_ |d|_ y) z;Load histedit state from disk and set fields appropriately.r'ó parentctxnodeórulesókeepótopmostó replacementsó backupfileN)rdÚexistsr Úwrongtooltocontinuer[rÚ_readr^Ú parserulesrIr\r]rera)rfÚdatarIs r9Úreadzhisteditstate.readpsŠ€à�}‰}×#Ñ#Ô%Ü × 'Ñ '¨¯ © ´1°[³>Ô Bà�z‰z‹|ˆà!Ð"2Ñ3ˆÔܘT (™^¨TÓ2ˆØˆŒ ؘ‘MˆŒ ؘJÑ'ˆŒ Ø  Ñ1ˆÔؘ}Ñ-ˆ�r;c óP—|jjjd«}|jd«r|j «}|\}}}}}}nt j |«}|\}}}}}d}dj|D� � cgc] \} } d| | fz‘Œc} } «}||||||dœScc} } w)NrZóv1 r2s%s %s)rirjrkrlrmrn)r[ÚvfsrtÚ startswithÚ_loadÚpickleÚloadsrC) rfÚfprsr^Úrulesr\r]reraÚverbÚrests r9rqzhisteditstate._readsµ€Ø �Y‰Y�]‰]× Ñ Ð 1Ó 2ˆØ �=‰=˜Ô !Ø—:‘:“<ˆDØLPÑ IˆM˜5 $¨°¹zä—<‘< Ó#ˆDØ@DÑ =ˆM˜5 $¨°ØˆJØ— ‘ ÉÔNɹ ¸¸t˜H¨¨d |Ó3ÈÒNÓOˆð,ØØØØ)Ø%ñ  ð ùóOsÂB" NcóÌ—|r |jdd|jd¬«y|jjdd«5}|j|«ddd«y#1swYyxYw)NrZ)rZsplain)Úlocationów)ÚaddfilegeneratorÚ_writer[rw)rfÚtrÚfs r9Úwritezhisteditstate.write“sV€Ù Ø × Ñ Ø!Ø$Ø— ‘ Ø!ð õ ð—‘—‘Ð0°$Ô7¸1Ø— ‘ ˜A”÷8×7Ñ7ús ¿AÁA#c óè—|jd«|jdt|j«z«|jdt|j«z«|jd|jrdndz«|jdt |j «z«|j D]$}|jd|j«z«Œ&|jdt |j«z«|jD]=}|jdt|d«djd „|d D««fz«Œ?|j}|sd}|jd|z«y) Nrvs%s óTruesFalses%d s%s%s rr;c3ó2K—|]}t|«–—Œy­wr5)r©Ú.0Úrs r9Ú z'histeditstate._write..­sèø€Ð<©^¨œS ŸV©^ùó‚r>) r‡rr^r]r\r7rIÚtostatererCra)rfr|ÚactionÚ replacementras r9r„zhisteditstate._writeŸs(€Ø �‰�ÔØ �‰�œ3˜t×1Ñ1Ó2Ñ2Ô3Ø �‰�œ3˜tŸ|™|Ó,Ñ,Ô-Ø �‰� t§y¢y™G°hÑ?Ô@Ø �‰�œ3˜tŸ|™|Ó,Ñ,Ô-Ø—l”lˆFØ �H‰H�W˜vŸ~™~Ó/Ñ/Õ 0ð#à �‰�œ3˜t×0Ñ0Ó1Ñ1Ô2Ø×,Ô,ˆKØ �H‰HØä˜  A™Ó'Ø—H‘HÑ<¨[¸ª^Ó<Ó<ðñõ ð-ð—_‘_ˆ ÙØˆJØ �‰�˜:Ñ%Õ&r;c óì—|jjdd«}|j«D�cgc]}|dd‘Œ }}d}|||dz }t||«}|dz }t||«}|dz }||dk(}|dz }g}t ||«} |dz }t | «D])} ||} |dz }||} |dz }|j | | f«Œ+g} t ||«}|dz }t |«D]_} ||}t|dd«}t dt|«d«D� cgc]} t|| | dz«‘Œ}} | j ||f«|dz }Œa||}|dz }|j«||||| |fScc}wcc} w)NrZóréÿÿÿÿrr>r‰é() r[rwÚ readlinesrÚintÚrangerEr7Úclose)rfr|rTrHÚindexr^r]r\r}ÚrulelenÚiÚ ruleactionÚrulereÚreplacementlenr’ÚoriginalÚsuccras r9ryzhisteditstate._loadµsÓ€Ø �Y‰Y�]‰]Ð,¨dÓ 3ˆØ!#§¡¤Ó0¡˜A��3�B’ ˆÐ0àˆØ ˆeŠ Ø �‰ ˆä˜E %™LÓ)ˆ Ø �‰ ˆä�e˜E‘lÓ#ˆØ �‰ ˆà�U‰|˜wÑ&ˆØ �‰ ˆðˆÜ�e˜E‘lÓ#ˆØ �‰ ˆÜ�w–ˆAؘu™ˆJØ �Q‰JˆEؘ‘<ˆDØ �Q‰JˆEØ �L‰L˜* dÐ+Õ ,ð  ðˆ ܘU 5™\Ó*ˆØ �‰ ˆÜ�~Ö&ˆAØ ™,ˆKܘ; s¨Ð+Ó,ˆHô˜r¤3 {Ó#3°RÔ8óá8�Aô�K  A¨¡FÐ+Õ,Ø8ð ðð × Ñ  ¨4Ð 0Ô 1Ø �Q‰J‰Eð'ð˜5‘\ˆ Ø �‰ ˆà �‰Œ à˜e T¨7°LÀ*ÐLÐLùò[1ùòBs ¯ E,ÄE1cóp—|j«r&|jjjd«yyrY)Ú inprogressr[rwÚunlink©rfs r9Úclearzhisteditstate.clearæs(€Ø �?‰?Ô Ø �I‰I�M‰M× Ñ Ð!2Õ 3ð r;cóL—|jjjd«SrY)r[rwror¦s r9r¤zhisteditstate.inprogressês€Ø�y‰y�}‰}×#Ñ#Ð$5Ó6Ð6r;r5) Ú__name__Ú __module__Ú __qualname__rgrtrqr‡r„ryr§r¤©r;r9rWrWcs,„ò ò .ò ó( ò'ò,/Mòb4ó7r;rWcóX—eZdZd„Zed„«Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zy ) ÚhisteditactioncóB—||_|j|_||_yr5)rr[Únode)rfrr°s r9rgzhisteditaction.__init__ïs€ØˆŒ Ø—J‘JˆŒ ؈� r;cóŽ—|j«jdd«d} t|«}|||«S#tj$rx t j |j|«}|j«}t|«}n8#tj$r"tjtd«|z«‚wxYwYŒ“wxYw)zCParses the given rule, returning an instance of the histeditaction.ó r>rsinvalid changeset %s) ÚstriprArÚbinasciiÚErrorrÚ revsingler[rrÚRepoLookupErrorÚ ParseErrorr)ÚclsrrŸÚruleidÚrevÚ_ctxÚrulehashs r9Úfromrulezhisteditaction.fromruleôs½€ð—‘“×#Ñ# D¨!Ó,¨QÑ/ˆð LÜ�f“+ˆCñ�5˜#‹Ðøô�~‰~ò Lð LÜ×(Ñ(¨¯©°VÓ<�ØŸ8™8›:�ܘ(“m‘øÜ×(Ñ(ò LÜ×&Ñ&¤qÐ)@Ó'AÀFÑ'JÓKÐKð Lúñð  Lús'¥ 9¹CÁ ;B ÂC 5B>Â>CÃCcó—|j}t|j«}tj||«|_|j€$t j td«|ddz«‚|j|||«y)z)Verifies semantic correctness of the ruleNsunknown changeset %s listedé ) r[rr°rÚresolvehexnodeidprefixrr¸rÚ_verifynodeconstraints)rfÚprevÚexpectedÚseenr[Úhas r9Úverifyzhisteditaction.verifysj€à�y‰yˆÜ �—‘‹^ˆÜ×2Ñ2°4¸Ó<ˆŒ Ø �9‰9Ð Ü×"Ñ"¤1Ð%CÓ#DÀrÈ#È2ÀwÑ#NÓOÐ OØ ×#Ñ# D¨(°DÕ9r;có:—|j|vrKtjtd«|jt |j«fztd«¬«‚|j|vr4tjtd«t |j«z«‚y)Ns%%s "%s" changeset was not a candidatesonly use listed changesets©Úhints#duplicated command for changeset %s)r°rr¸rr~r)rfrÃrÄrÅs r9rÂz%histeditaction._verifynodeconstraintssŠ€à �9‰9˜HÑ $Ü×"Ñ"ÜÐ:Ó;Ø—9‘9œe D§I¡IÓ.Ð/ñ0äÐ4Ó5ôð ð �9‰9˜Ñ Ü×"Ñ"ÜÐ8Ó9¼EÀ$Ç)Á)Ó )s templatealiass label(l,x)óxr'r-Ns%s %s %sr)é) r[r°rOÚconfigoverrider ÚrendertemplateÚconfigr~r!Ú firstlineÚ configintÚmaxÚellipsis)rfÚctxrOÚsummaryÚlineÚmaxlens r9Útorulezhisteditaction.torulesÌ€ð �i‰i˜Ÿ ™ Ñ"ˆØ �Y‰Y�\‰\ˆð× Ñ Ø .°Ð 5°{õ ô×,Ñ,Ø�R—Y‘Y˜{Ð,?Ó@óˆG÷ ð ˜dŸi™i¨¬j×.BÑ.BÀ7Ó.KÐLÑLˆð—‘—‘×'Ñ'¨ °ZÓ@ˆÜ�V˜R“ˆÜ×"Ñ" 4¨Ó0Ð0÷ ð ús Á'C à C)cóJ—d|jt|j«fzS)zPrint an action in format used by histedit state files (the first line is a verb, the remainder is the second) s%s %s)r~rr°r¦s r9r�zhisteditaction.tostate3s €ð˜DŸI™I¤s¨4¯9©9£~Ð6Ñ6Ð6r;cób—|j«|j«|j«S)znRuns the action. The default behavior is simply apply the action's rulectx onto the current parentctx.)Ú applychangeÚ continuedirtyÚ continuecleanr¦s r9Úrunzhisteditaction.run9s+€ð ×ÑÔØ ×ÑÔØ×!Ñ!Ó#Ð#r;có>—|j}||j}|jj«5t j ||j jd¬«ddd«t|j||i«}|jj|j«|j««|jrKtjt!d«|j"t%|j«fzt!d«¬«‚y#1swYŒ±xYw)zlApplies the changes from this action's rulectx onto the current parentctx, but does not commit them.T©Ú quietemptyNsFix up the change (%s %s)s hg histedit --continue to resumerÉ)r[r°rOÚsilentrÚupdaterr^Ú applychangesÚdirstateÚ setbranchÚbranchÚcurrenttransactionÚunresolvedcountrÚInterventionRequiredrr~r)rfr[ÚrulectxÚstatss r9rÜzhisteditaction.applychange@sÒ€ð�y‰yˆØ�t—y‘y‘/ˆØ �W‰W�^‰^Õ Ü �I‰I�d˜DŸJ™J×4Ñ4ÀÕ F÷ä˜TŸW™W d¨G°RÓ8ˆØ � ‰ ×Ñ §¡Ó 0°$×2IÑ2IÓ2KÔLØ × Ò Ü×,Ñ,ÜÐ.Ó/°4·9±9¼eÀDÇIÁIÓ>NÐ2OÑOÜÐ:Ó;ôð ð !÷ Ð ús ¶-DÄDcób—|j}||j}|j«}t||«}|jj dd«rt j«}n|j«}||j«|j«||j«|¬«y)z…Continues the action when changes have been applied to the working copy. The default behavior is to commit the dirty changes.órewriteóupdate-timestamp)ÚtextÚuserÚdateÚextraÚeditorN) r[r°Ú commiteditorÚ commitfuncforrOrNr ÚmakedateróÚ descriptionròrô)rfr[rìrõÚcommitrós r9rÝzhisteditaction.continuedirtyOsŽ€ð�y‰yˆØ�t—y‘y‘/ˆà×"Ñ"Ó$ˆÜ˜t WÓ-ˆØ �7‰7× Ñ ˜jÐ*=Ô >Ü×$Ñ$Ó&‰Dà—<‘<“>ˆDÙØ×$Ñ$Ó&Ø—‘“ØØ—-‘-“/Øö  r;có—y)z1The editor to be used to edit the commit message.Fr¬r¦s r9rözhisteditaction.commiteditorcs€àr;cóª—|jd}|j«|jjk(r]|jjj t d«t|j«z«||jt«fgfS|j«|jk(r|gfS||j|j«ffgfS)zœContinues the action when the working copy is clean. The default behavior is to accept the current commit as the new version of the rulectx.ó.s$%s: skipping changeset (no changes) ) r[r°rr^rOÚwarnrrÚtuple)rfrÕs r9rÞzhisteditaction.continuecleangs«€ð�i‰i˜‰oˆØ �8‰8‹:˜Ÿ™×1Ñ1Ò 1Ø �I‰I�L‰L× Ñ ÜÐ:Ó;¼eÀDÇIÁIÓ>NÑNô ð˜$Ÿ)™)¤U£WÐ-Ð.Ð.Ð .Ø �8‰8‹:˜Ÿ™Ò "à˜�7ˆNØ�d—i‘i #§(¡(£* Ð/Ð0Ð0Ð0r;N)r©rªr«rgÚ classmethodr¾rÇrÂrÙr�rßrÜrÝrörÞr¬r;r9r®r®îsH„òð ñóðò :ò ò1ò.7ò $ò ò ò(ó 1r;r®có:‡‡‡—‰j«Šˆˆˆfd„}|S)a=Build a commit function for the replacement of This function ensure we apply the same treatment to all changesets. - Add a 'histedit_source' entry in extra. Note that fold has its own separated logic because its handling is a bit different and not easily factored out of the fold method. có•—d‰i}‰jj|d«5|jdi«j«}‰j «|d<||d<‰j di|¤Žcddd«S#1swYyxYw)N©sphasess new-commitr'rôóhistedit_sourcer¬)rOrÎÚgetÚcopyrrú)ÚkwargsÚ overridesrôÚphaseminr[Úsrcs €€€r9Ú commitfuncz!commitfuncfor..commitfuncƒsqø€Ø/°Ð:ˆ Ø �W‰W× #Ñ # I¨{Õ ;Ø—J‘J˜w¨Ó+×0Ñ0Ó2ˆEØ(+¯©« ˆEÐ$Ñ %Ø#ˆF�7‰OØ�4—;‘;Ñ( Ñ(÷ <× ;Ò ;ús ¢A A6Á6A?)Úphase)r[r r r s`` @r9r÷r÷wsú€ð�y‰y‹{€Hö)ð Ðr;có>—|j«j«|jj«k(rL|j«5t j |||d¬«t jdddd«}ddd«|S |jjdd|jdd«d «t j||gd ¢¬ «}|jjdddd «|S#1swYSxYw#|jjdddd «wxYw) z@Merge changeset from ctx (only) in the current working directoryT)ÚallrNr,s forcemergestoolr;r')salready editedscurrent changesparent of current change)Úlabels) Úp1r°rærãr ÚrevertÚmergemodÚ updateresultrOÚ setconfigrÚgraft)rOr[rÕÚoptsrís r9råråŽsð€à ‡v�vƒx‡}�}ƒ˜$Ÿ-™-×*Ñ*Ó,Ò,ð�Y‰Y�[Ü �N‰N˜2˜t S¨dÕ 3Ü×)Ñ)¨!¨Q°°1Ó5ˆE÷ð( €Lð! Fà �G‰G× Ñ Ø�} d§h¡h¨w¸Ó&<¸kô ô—N‘NØØòôˆEð �G‰G× Ñ ˜e ]°C¸Ô EØ €L÷)ð( €Lûð �G‰G× Ñ ˜e ]°C¸Õ EúsÁ 2C/ÂAC<Ã/C9Ã< Dc 󇇇—t|jd|j«‰j«««}|sy|D]J}|j«rŒt j t d«t|j««z«‚|j«}t«}|D]!} |j| j««Œ#tj|‰«Š|D� cgc]} tj| ‰|«rŒ| ‘Œ}} ‰j!«Šˆˆˆfd„} |j#d«r|d} n|j%«} |j#d«} |j#d«}|j#d«}|j«j«|j'«j«f}d}|stj(d d ¬ «}t+j,||| || | |||¬ « }|j/|«Scc} w) zácollapse the set of revisions from first to last as new one. Expected commit options are: - message - date - username Commit message is edited in all cases. This function works in memory.s%d::%dNó!cannot fold into public change %sc óÒ•—|‰vrb‰|}|j«}tj|||j«|j «d|vd|v‰j |«¬«}|Sy)NólrÌ)ÚislinkÚisexecÚ copysource)Úflagsr Ú memfilectxÚpathrsr) r[rÕr ÚfctxrÚmctxÚcopiedÚheadmfÚlastctxs €€€r9Ú filectxfnzcollapse..filectxfnÌsjø€Ø �6‰>ؘ4‘=ˆDØ—J‘J“LˆEÜ×%Ñ%ØØØ— ‘ “ Ø— ‘ “ ؘu�}ؘu�}Ø!Ÿ:™: dÓ+ôˆDðˆKØr;ómessageóuseródateóextraTs histedit.fold©ÚeditÚeditform)ÚparentsrñÚfilesr&ròrórôrõ)ÚlistÚsetr»Úmutablerr¸rrr°rrär/r Ú pathcopiesr ÚsamefileÚmanifestrrùÚp2Úgetcommiteditorr ÚmemctxÚ commitctx)r[Úfirstctxr%Ú commitoptsÚ skippromptÚctxsÚcÚbaser/rÕr†r&r@ròrórôr.rõÚnewr#r$s ` @@r9ÚcollapserAªsÀú€ô �—‘˜ H§L¡L£N°G·K±K³MÓBÓ C€DÙ ØÛ ˆØ�y‰y�{Ü×"Ñ"ÜÐ6Ó7¼%ÀÇÁû/ÑIóð ðð �;‰;‹=€Dô ‹E€EÛˆØ � ‰ �S—Y‘Y“[Õ!ðô× Ñ ˜t WÓ -€FñÓ H™�1¤W×%5Ñ%5°a¸À$Õ%GŠQ˜€EÐ Hà × Ñ Ó €Föð ‡~�~�jÔ!ؘZÑ(‰à×&Ñ&Ó(ˆØ �>‰>˜'Ó "€DØ �>‰>˜'Ó "€DØ �N‰N˜8Ó $€Eà�{‰{‹}×!Ñ!Ó# X§[¡[£]×%7Ñ%7Ó%9Ð:€GØ €FÙ Ü×(Ñ(¨dÐ=MÔNˆÜ �.‰.Ø ØØ ØØØ Ø ØØô €Cð �>‰>˜#Ó ÐùòW Is Ã(HÄHcó,—|djd¬«S)NT)Úmissing)Údirty©r[s r9Ú _isdirtywcrFös€Ø �‰:× Ñ  DÐ Ó )Ð)r;cóT—tjtd«td«¬«‚)Ns working copy has pending changessYamend, commit, or revert them and run histedit --continue, or abort with histedit --abortrÉ)rÚ StateErrorrr¬r;r9Ú abortdirtyrIús+€Ü × Ñ Ü Ð -Ó.Ü ð :ó ô ðr;c󇇇‡—ˆˆˆˆfd„}|S)Ncó:•—‰r‰rJ‚‰d}‰rtj|«nQ‰rtj|«n9t‰«dkDrtj|«nt j|«||_‰|_‰|_‰D] }|t|<Œ |S©Nrr>) rKÚaddÚinternalactionsr7rLrMr~rBr@r?)r¹r~Úinternalr@ÚpriorityrBs €€€€r9Úwrapzaction..wrapsŽø€Ù¡8Ð+Ð+Ø�Q‰xˆÙ Ü × Ñ ˜tÕ $Ù Ü × Ñ  Õ %Ü �‹Z˜!Š^Ü × Ñ  Õ &ä × Ñ  Ô %àˆŒØˆŒ ؈Œ ÛˆDØ #ŒK˜Ò ðàˆ r;r¬)rBr@rPrOrQs```` r9r‘r‘sû€÷ð& €Kr;ópickóps use commit)rPcó‡—eZdZˆfd„ZˆxZS)ÚpickcóB•—|j|j}|j«j«|jjk(r?|jj j dt|j«z«|gfStt|�+«S)Nsnode %s unchanged ) r[r°rrr^rOÚdebugrÚsuperrUrß)rfrìÚ __class__s €r9rßzpick.runsuø€Ø—)‘)˜DŸI™IÑ&ˆØ �:‰:‹<× Ñ Ó  $§*¡*×":Ñ":Ò :Ø �I‰I�L‰L× Ñ Ð5¼¸d¿i¹iÓ8HÑHÔ IؘB�;Ð ä”T˜4Ñ$Ó&Ð&r;)r©rªr«rßÚ __classcell__©rYs@r9rUrUs ø„÷'ð'r;rUóeditóes4use commit, but allow edits before making new commitcó—eZdZd„Zd„Zy)r,cón—|j}||j}tj||jj d¬«t |j||i«td«}tjtd«t|j«z|t|j«z¬«‚)NTrás9to edit %s, `hg histedit --continue` after making changess6Editing (%s), commit as needed now to split the changerÉ) r[r°rrärr^rårOrrrër)rfr[rìrÊs r9rßzedit.run,s�€Ø�y‰yˆØ�t—y‘y‘/ˆÜ � ‰ �$˜Ÿ ™ ×0Ñ0¸TÕBÜ�T—W‘W˜d G¨RÔ0ÜÐMÓNˆÜ×(Ñ(Ü ÐGÓ HÜ�D—I‘IÓñ àœ˜dŸi™iÓ(Ñ(ô ð r;có0—tjdd¬«S)NTs histedit.editr+©r r7r¦s r9rözedit.commiteditor8ó€Ü×&Ñ&¨DÐ;KÔLÐLr;N)r©rªr«rßrör¬r;r9r,r,&s „ò  óMr;r,ófoldófs-use commit, but combine it with the one abovecóB‡—eZdZˆfd„Zd„Zd„Zd„Zd„Zd„Zd„Z ˆxZ S)ÚfoldcóT•—tt|� |||«|j}|s||jj «}n|j dvry||j}|j«s8tjtd«t|j ««z«‚y)z.Verifies semantic correctness of the fold rule)rRóbaseNr) rXrfrÇr[r°rr~r2rr¸rr)rfrÃrÄrÅr[r>rYs €r9rÇz fold.verify>sŽø€ä Œd�DÑ   x°Ô6Ø�y‰yˆÙØ�T—Y‘Y‘×"Ñ"Ó$‰AØ—‘Ð0Ñ0Ø à�T—Y‘Y‘ˆAØ�y‰yŒ{Ü×"Ñ"ÜÐ6Ó7¼%ÀÇÁû/ÑIóð ðr;cóê—|j}||j}t||«}|dt|j«z|j «|j «|j «¬«y)Nsfold-temp-revision %s)rñròrórô)r[r°r÷rròrórô)rfr[rìrús r9rÝzfold.continuedirtyMsX€Ø�y‰yˆØ�t—y‘y‘/ˆä˜t WÓ-ˆÙØ)¬E°$·)±)Ó,<Ñ<Ø—‘“Ø—‘“Ø—-‘-“/ö  r;có\—|j}|d}||j}|jj}|j«|k(rL|jj t d«t|j«z«||j|ffgfS||}|jd|j«|j««D�chc]}|j«’Œ}}|se|jj t d«t|j«t|«fz«||j|j«ffgfS|j«}|j|j««|j|j||||j«|«Scc}w)Nrýs%s: empty changeset s (%d::. - %d)sI%s: cannot fold - working copy is not a descendant of previous commit %s ) r[r°rr^rOrþrrr1r»rÚdiscardÚ finishfold) rfr[rÕrìr^Ú parentctxr>Ú newcommitsÚ middlecommitss r9rÞzfold.continuecleanYst€Ø�y‰yˆØ�4‰jˆØ�t—y‘y‘/ˆØŸ ™ ×0Ñ0ˆ Ø �8‰8‹:˜Ò &Ø �G‰G�L‰LœÐ3Ó4´u¸T¿Y¹YÓ7GÑGÔ Hؘ$Ÿ)™) mÐ%5Ð6Ð7Ð7Ð 7à˜Ñ'ˆ ð—X‘X˜o¨y¯}©}«À Ç Á ÃÔPó áP�ð �F‰F�HØPð ð ñØ �G‰G�L‰LÜð:óô˜Ÿ™Ó#¤U¨=Ó%9Ð:ñ ;ô ð˜$Ÿ)™) c§h¡h£j ]Ð3Ð4Ð4Ð 4à"Ÿ™Ó)ˆ Ø×јcŸh™h›jÔ)à�‰Ø �G‰G�T˜9 g¨s¯x©x«z¸=ó ð ùò# sà F)có—y)z�Returns true if the rule should skip the message editor. For example, 'fold' wants to show an editor, but 'rollup' doesn't want to. Fr¬r¦s r9r<zfold.skippromptxs€ð r;có—y)z¤Returns true if the rule should merge messages of multiple changes. This exists mainly so that 'rollup' rules can be a subclass of 'fold'. Tr¬r¦s r9Ú mergedescszfold.mergedescs€s€ð r;có—y)z¯Returns true if the rule should preserve the date of the first change. This exists mainly so that 'rollup' rules can be a subclass of 'fold'. Fr¬r¦s r9Ú firstdatezfold.firstdateˆs€ðr;c óÈ—tj|j««i}|j«|d<|j «s|j «}nWdj |j «g|D� cgc]} || j «‘Œc} z|j «gz«dz}||d<|j«r|j«|d<n+t|j«|j««|d<|jdd«rtj«|d<|j«j«} d|j«|j«fz| d <| |d <t|j!«|j!««} d | i} |j"j%| d «5t'||||||j)«¬ «} ddd« €|gfStj|| «|j+«|ff|j+«| ff|| ffg}|D]}|j-|| ff«Œ|| |fScc} w#1swYŒxxYw)Nr(s *** r2r'r)rïrðs%s,%srr*rr')r<)rrärròrrrùrCrtrórÓrNr rørôrrr rOrÎrAr<r°rE)rfrOr[rÕÚoldctxÚnewnodeÚinternalchangesr;Ú newmessager�rôr rÚnreÚichs r9rlzfold.finishfold‘s6€Ü�‰˜Ÿ™›Ô!àˆ Ø!Ÿh™h›jˆ �7Ñà�‰Ô ØŸ™Ó*‰Jð—‘Ø—_‘_Ó&Ð'Ù6EÓF±o°�t˜A‘w×*Ñ*Õ,°oÑFñGà×)Ñ)Ó+Ð,ñ-óð ñ ð ð",ˆ �:Ñà �>‰>Ô Ø"%§(¡(£*ˆJ�wÒ ä"% c§h¡h£j°&·+±+³-Ó"@ˆJ�wÑ à �=‰=˜Ð%8Ô 9Ü"*×"3Ñ"3Ó"5ˆJ�wÑ à— ‘ “ × Ñ Ó"ˆð%-°·±³ ¸6¿:¹:»<Ð/HÑ$HˆÐ Ñ!Ø$ˆ �8ÑÜ�s—y‘y“{ F§L¡L£NÓ3ˆØ/°Ð:ˆ Ø �W‰W× #Ñ # I¨{Õ ;ÜØØØ�W‘ ØØŸ?™?Ó,ô ˆA÷<ð ˆ9ؘ�7ˆNÜ�‰˜˜Q™Ô à �[‰[‹]˜W˜JÐ 'Ø �X‰X‹Z˜!˜Ð Ø �q�dˆOð ˆ ó #ˆCØ × Ñ   q d  Õ ,ð#à�A‰w˜ Ð$Ð$ùòSG÷.<Ð ;úsÁ9I Æ?"IÉI!) r©rªr«rÇrÝrÞr<rrrtrlrZr[s@r9rfrf<s&ø„ô ò  ò ò>òòö5%r;rfrhóbs:checkout changeset and apply further changesets from therecó$—eZdZd„Zd„Zd„Zd„Zy)r?cóΗ|jdj«|jk7r,tj|j|j«|j «S©Nrý)r[r°rÚ clean_updaterÞr¦s r9rßzbase.runÎsI€Ø �9‰9�T‰?× Ñ Ó ! T§Y¡YÒ .Ü × !Ñ ! $§)¡)¨D¯I©IÑ"6Ô 7Ø×!Ñ!Ó#Ð#r;có—t«yr5)rIr¦s r9rÝzbase.continuedirtyÓs€Ü� r;có(—|jd}|gfSrrE)rfÚbasectxs r9rÞzbase.continuecleanÖs€Ø—)‘)˜D‘/ˆØ˜ˆ{Ðr;cóº—|j|vrMtd«}tj||jt |j«fztd«¬«‚y)Ns.%s "%s" changeset was an edited list candidates&base must only use unlisted changesetsrÉ)r°rrr¸r~r)rfrÃrÄrÅÚmsgs r9rÂzbase._verifynodeconstraintsÚsT€à �9‰9˜Ñ ÜÐEÓFˆCÜ×"Ñ"Ø�t—y‘y¤%¨¯ © Ó"2Ð3Ñ3ÜÐ@ÓAôð ð !r;N)r©rªr«rßrÝrÞrÂr¬r;r9r?r?És„ò $ò òór;r?s _multifoldsvfold subclass used for when multiple folds happen in a row We only want to fire the editor for the folded message once when (say) four changes are folded down into a single change. This is similar to rollup, but we should preserve both messages so that when the last fold operation runs we can show the user all the commit messages in their editor. )rOcó—eZdZd„Zy)Ú _multifoldcó—y©NTr¬r¦s r9r<z_multifold.skippromptóó€Ør;N)r©rªr«r<r¬r;r9r‡r‡äs„ór;r‡órollr”s9like fold, but discard this commit's description and datecó—eZdZd„Zd„Zd„Zy)Úrollupcó—y)NFr¬r¦s r9rrzrollup.mergedescsüs€Ør;có—yr‰r¬r¦s r9r<zrollup.skippromptÿrŠr;có—yr‰r¬r¦s r9rtzrollup.firstdaterŠr;N)r©rªr«rrr<rtr¬r;r9r�r�÷s„ò òór;r�ódropódsremove commit from historycó—eZdZd„Zy)Údropcóz—|j|jj}||jt «fgfSr5)r[rr^r°rÿ)rfrms r9rßzdrop.runs3€Ø—I‘I˜dŸj™j×6Ñ6Ñ7ˆ ؘDŸI™I¤u£wÐ/Ð0Ð0Ð0r;N)r©rªr«rßr¬r;r9r”r”s„ó1r;r”ómessóms3edit commit message without changing commit contentcó—eZdZd„Zy)r@có0—tjdd¬«S)NTs histedit.messr+rar¦s r9rözmessage.commiteditorrbr;N)r©rªr«rör¬r;r9r@r@ s„ó Mr;r@cóæ—|€i}tjd|||«}|jtd«tj|j «z«t j|||jgfd«\}}t j|||«}|r|D� cgc]} |j| «‘Œ}} tj||||¬«} | jstjtd««‚t!|j#d| j««} t%| «dkDr-td«} td «} tj| | ¬ «‚|| d j'«Scc} w) zVutility function to find the first outgoing changeset Used by initialization codeNr'scomparing with %s )Úforcesno outgoing ancestorsó roots(%ln)r>s&there are ambiguous outgoing revisionss&see 'hg help histedit' for more detailrÉr)r"Úget_unique_push_pathÚstatusrÚ hidepasswordÚlocrÚ addbranchrevsrèÚpeerÚlookuprÚfindcommonoutgoingrCrrHr0Úrevsr7r°)rOr[Úremoter›rr r¥ÚcheckoutÚotherr»ÚoutgoingÚrootsr…rÊs r9Ú findoutgoingr«s@€ð €|ØˆÜ × 'Ñ '¨ °T¸2¸vÓ F€Dà‡I�IŒaÐ&Ó'¬'×*>Ñ*>¸t¿x¹xÓ*HÑHÔIä×%Ñ% d¨D°4·;±;ÀÐ2CÀTÓJ�N€Dˆ(Ü �G‰G�D˜$ Ó %€Eá Ù,0Ó1©D S�— ‘ ˜CÕ ¨DˆÐ1ä×+Ñ+¨D°%¸ÀUÔK€HØ × Ò Ü×ÑœqÐ!9Ó:Ó;Ð;Ü �—‘˜=¨(×*:Ñ*:Ó;Ó <€EÜ ˆ5ƒz�A‚~ÜÐ9Ó:ˆÜÐ:Ó;ˆÜ×јs¨Ô.Ð.Ø ��a‘‰>× Ñ Ó Ð ùò2sÂE.)rRr\rcr‘r–r‹s^folds^roll)rcr‹)r>éééé)ééé)é é é )r>r¬)r­r®r¯r°r±)rr>r¬r­óglobaló next-actionó prev-actionóquitó showpatchóhelp) óhs KEY_RIGHTrsKEY_LEFTóqócóCóvó?s action-drops action-edits action-folds action-messs action-picks action-rollr²óselectójódownókóupóKEY_DOWNóKEY_UPóJó move-downóKómove-upó KEY_NPAGEó KEY_PPAGEó0ógotoó page-downópage-upó line-downóline-up) r²rÍrÎrÃrÅrÇrÈrÉrËcót—tjdtjdtj d««S)Nshhr>s )ÚstructÚunpackÚfcntlÚioctlÚtermiosÚ TIOCGWINSZr¬r;r9Ú screen_sizerÜss&€Ü �=‰=˜¤§ ¡ ¨A¬w×/AÑ/AÀ7Ó KÓ LÐLr;cóx—eZdZdd„Zd„Zej e«Zed„«Z e jd„«Z d„Z y)Ú histeditrulecóX—||_||_||_||_||_g|_yr5)rOrÕr‘ÚorigposÚposÚ conflicts)rfrOrÕrár‘s r9rgzhisteditrule.__init__xs,€ØˆŒØˆŒØˆŒ ؈Œ ؈ŒØˆ�r;có8—d|j|jfzS)Ns%s%s)ÚprefixÚdescr¦s r9Ú __bytes__zhisteditrule.__bytes__€s€ð˜$Ÿ+™+ t§y¡yÐ1Ñ1Ð1r;có,—tj|j|j«}|jj «dd}|jj «}dd|j zjd«|jd«||fzS)NrrÀs#%s %s %d:%s s%dr¬r°)Ú ACTION_LABELSrr‘rÕrr»ràÚljust)rfr‘Úhr�s r9räzhisteditrule.prefixŽs}€ô ×"Ñ" 4§;¡;°· ± Ó<ˆà �H‰H�L‰L‹N˜1˜RÐ ˆØ �H‰H�L‰L‹Nˆà!Ø �T—\‘\Ñ !× (Ñ (¨Ó +Ø �L‰L˜‹OØ Ø ð % ñ ð r;cóØ—tj|j|jj dd««}|r|St j |jj««S)Nr'r-)r rÏrÕrOrÐr!rÑrù)rfrÖs r9råzhisteditrule.descŸsU€ä×(Ñ(Ø �H‰H�d—g‘g—n‘n [Ð2EÓFó ˆñ ؈Nô×#Ñ# D§H¡H×$8Ñ$8Ó$:Ó;Ð;r;có—|j|jkDr’|j|jkryt|jj ««t|jj ««zt«k7r'|j j |«|j S||j vr|j j|«|j Sr5)ráràr1rÕr/rârEÚremove)rfr¨s r9Úcheckconflictszhisteditrule.checkconflicts«s”€Ø �9‰9�t—x‘xÒ  E§M¡M°T·\±\Ò$AÜ�5—9‘9—?‘?Ó$Ó%¬¨D¯H©H¯N©NÓ,<Ó(=Ñ=ÄÃÒFØ—‘×%Ñ% eÔ,Ø—~‘~Ð%à �D—N‘NÑ "Ø �N‰N× !Ñ ! %Ô (Ø�~‰~Ðr;N)rR)r©rªr«rgrærÚ strmethodÚ__str__ÚpropertyrärÚ propertycacherårîr¬r;r9rÞrÞwsQ„óò 2ð!ˆh× Ñ  Ó+€Gà ñ óð ð  ×Ññ <óð <ór;rÞcól—g}|D],}|jd|j|jfz«Œ.|S)z[Returns a list of commands consumable by histedit --commands based on our list of ruless%s %s )rEr‘rÕ)r}Úcommandss r9Ú makecommandsrõ¶s6€ð€HÛˆØ�‰˜  e§l¡l°E·I±IÐ%>Ñ>Õ?ðà €Or;cóð—|j«\}}|dz |z }t|«j|«d|}|dkr||z}|dkr||z}|r|j||||«y|j|||«y)z‡Add a line to the given window left padding but 100% filled with whitespace characters, so that the color appears on the whole liner>Nr)ÚgetmaxyxÚbytesréÚaddstr)ÚwinÚyÚxr×ÚcolorÚmaxyÚmaxxÚlengths r9Úaddlnr¿s€€ð—‘“�J€Dˆ$Ø �A‰X˜‰\€FÜ �‹;× Ñ ˜VÓ $ W fÐ -€D؈1‚uØ �1‰HˆØˆ1‚uØ �1‰HˆÙ Ø � ‰ �1�a˜˜uÕ%à � ‰ �1�a˜Õr;có:—t|«|kr|Sd||dz dzS)Ns> r¬r6©r×rzs r9Ú _trunc_headrÏs*€Ü ˆ4ƒy�A‚~؈ Ø �4˜!˜a™%˜˜ Ð#Ñ #Ð#r;có8—t|«|kr|S|d|dz dzS)Nr¬s >r6rs r9Ú _trunc_tailrÕs'€Ü ˆ4ƒy�A‚~؈ Ø ��!�a‘%ˆ=˜5Ñ Ð r;có|—eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z dd„Z d „Z d „Z d „Z d „Zd „Zd„Zd„Zd„Zdd„Zd„Zy)Ú_chistedit_statecóê—||_||_||_|jj dd«|_d|_d|_ttf|_ d|_ tdditddii|_ y)Nr'r.ró line_offset)r[r}ÚstdscrrOrNÚ later_on_topráÚselectedÚ MODE_INITÚmodeÚ page_heightÚ MODE_RULESÚ MODE_PATCHÚmodes)rfr[r}r s r9rgz_chistedit_state.__init__Üs€ð ˆŒ ؈Œ ؈Œ Ø ŸG™G×.Ñ.Ø Ð/ó ˆÔ𠈌؈Œ ܤ Ð*ˆŒ ؈Ôä Ø ðô Ø ðð  ˆ� r;c óþ—|j|j|j«}|j}|j «|j «\}}|dz }d|j «|j«ddfz}|jdd|d|«d|j«z}|jdd|d|«|jj|j««}dd j|«z}|jdd|d|«d tj|j!««z}|jd d|d|«d }|jd d|«dt#|«z} || z dz} d } |d| zz dz } |j%«} t'| «D]s\}}t#| «| kDr>|| dz k(r6|j| | t)dj| |d«| ««| dz} n$|j| | t+|| ««| dz} Œu|j,}t#|«dkDr"djt/d„|««}d|z}nd}|j| d|d|«|j1«y)zSRenders the commit window that shows the log of the current selected commitr­schangeset: %d:%sNrÀr>s user: %sr¬s bookmark: %sr²s summary: %sr®s files: r¯ó,rcó<—|jj«ddS)NrÀ)rÕr)r�s r9r:z0_chistedit_state.render_commit.. s€°!·%±%·)±)³+¸c¸rÑ2Br;schanged files overlap with %ss no overlap)r}Údisplay_pos_to_rule_posrárÕÚboxr÷r»rrùròr[Ú nodebookmarksr°rCr!rÑrùr7r/Ú enumeraterrrâÚmapÚ noutrefresh)rfrúrŸrÕrþrÿrr×ÚbmsÚfnxÚfnmaxxrûÚfnmaxnr/r�Úline1râÚ conflictstrs r9Ú render_commitz_chistedit_state.render_commit÷sF€ð�z‰z˜$×6Ñ6°t·x±xÓ@ÑAˆà�h‰hˆØ �‰Œ à—\‘\“^‰ ˆˆdؘ‘ˆà" c§g¡g£i°·±³¸3¸B°Ð%@Ñ@ˆØ � ‰ �1�a˜˜g˜v˜Ô'à #§(¡(£*Ñ,ˆØ � ‰ �1�a˜˜g˜v˜Ô'à�i‰i×%Ñ% c§h¡h£jÓ1ˆØ $§)¡)¨C£.Ñ0ˆØ � ‰ �1�a˜˜g˜v˜Ô'à¤*×"6Ñ"6°s·±Ó7HÓ"IÑIˆØ � ‰ �1�a˜˜g˜v˜Ô'àˆØ � ‰ �1�a˜ÔØ”#�d“)‰mˆØ˜#‘ Ñ!ˆØ ˆØ˜˜Q™‘ !Ñ#ˆØ— ‘ “ ˆÜ! %Ö(‰HˆAˆuÜ�5‹z˜FÒ" q¨F°Q©J¢Ø— ‘ ˜1˜c¤;¨t¯y©y¸¸q¸r¸Ó/CÀVÓ#LÔMؘ‘E�ÙØ �J‰J�q˜#œ{¨5°&Ó9Ô :Ø�A‘‰Að )ð—N‘Nˆ Ü ˆy‹>˜AÒ ØŸ)™)¤CÑ(BÀIÓ$NÓOˆKØ:¸[ÑH‰Kà'ˆKà � ‰ �1�a˜ W fÐ-Ô.Ø �‰Õr;có—|jdtk(rd}|j«Sd}|jr|dz }|j«S|dz }|j«S)Nrs}?: help, k/up: line up, j/down: line down, v: stop viewing patch pgup: prev page, space/pgdn: next page, c: commit, q: abort sÁ?: help, k/up: move up, j/down: move down, space: select, v: view patch d: drop, e: edit, f: fold, m: mess, p: pick, r: roll pgup/K: move patch up, pgdn/J: move patch down, c: commit, q: abort s-Newer commits are shown above older commits. s-Older commits are shown above newer commits. )rrr Ú splitlines)rfÚhelps r9Ú helplinesz_chistedit_state.helplines(sn€Ø �9‰9�Q‰<œ:Ò %ðˆDð�‰Ó Ð ðˆDð × Ò ØÐIÑI�ð�‰Ó Ð ðÐIÑI�Ø�‰Ó Ð r;c óæ—|j«\}}t|j««D]2\}}||k\rn(t||d|t j t ««Œ4|j«y©Nr)r÷rr'rÚcursesÚ color_pairÚ COLOR_HELPr)rfrúrþrÿrûr×s r9Ú render_helpz_chistedit_state.render_help:s\€Ø—\‘\“^‰ ˆˆdÜ  §¡Ó!1Ö2‰GˆAˆtØ�DŠyÙÜ �#�q˜!˜T¤6×#4Ñ#4´ZÓ#@Õ Að3ð �‰Õr;cóü—|jj«\}}t|j««}||z dz }|dkr.t j t d«||fzt d«¬«‚d|f||f||fdœS)NrÀr>s:terminal dimensions %d by %d too small for curses histedits7enlarge your terminal or use --config ui.interface=textrÉ)ócommitr»ómain)r r÷r7r'rÚAbortr)rfrþrÿÚhelplenÚmainlens r9Úlayoutz_chistedit_state.layoutBs�€Ø—[‘[×)Ñ)Ó+‰ ˆˆdÜ�d—n‘nÓ&Ó'ˆØ˜‘. 2Ñ%ˆØ �QŠ;Ü—+‘+ÜÐOÓPؘ�,ñäØNóôð ð˜D�zؘt�_ؘt�_ñ ð r;cóT—|jrt|j«dz |z S|S)a/Converts a position in display order to rule order. The `display_pos` is the order from the top in display order, not considering which items are currently visible on the screen. Thus, `display_pos=0` is the item at the top (possibly after scrolling to the top) r>)r r7r})rfÚ display_poss r9rz(_chistedit_state.display_pos_to_rule_posTs+€ð × Ò Ü�t—z‘z“? QÑ&¨Ñ4Ð 4àÐ r;c óð—|jtd}|jD�cgc]}|jsŒ|j‘Œ}}t |«dkDrRddj ttj|««z}t|dd|tjt««t|t |j««D�]˜}||z }|dks||jk\rŒ|j!|«}|j|} t | j«dkDr,|j#|ddtjt««n"|j#|ddtj$«||j&k(r-t(} t||d| tjt*««na||j,k(r>t.} t||d| tjt0«tj2z«nt4} t||d| «| j6dk(s�ŒR|j#|dt | j8«z| j:tj| ««�Œ›|j=«ycc}w) Nr rspotential conflict in %srr•r²r¬r‹)rrr}rârÕr7rCrrÚbytestrrr*r+Ú COLOR_WARNr™rrrùÚ COLOR_BLACKr ÚCOLOR_ROLL_SELECTEDÚCOLOR_SELECTEDráÚCOLOR_ROLL_CURRENTÚ COLOR_CURRENTÚA_BOLDÚ COLOR_ROLLr‘rärår) rfÚrulesscrÚstartr�râr×r6rûÚrule_posrŸÚ rollcolors r9Ú render_rulesz_chistedit_state.render_rulesasö€Ø— ‘ œ:Ñ& ~Ñ6ˆà$(§J¢JÓ>¡J˜q°!·+³+�Q—U“U Jˆ Ð>Ü ˆy‹>˜AÒ Ø.°·±Ü”H×$Ñ$ iÓ0ó2ñˆDô �(˜B  4¬×):Ñ):¼:Ó)FÔ Gä  ¬¨D¯J©J«×8ˆKؘeÑ#ˆAØ�1Šu˜˜T×-Ñ-Ò-ØØ×3Ñ3°KÓ@ˆHØ—:‘:˜hÑ'ˆDÜ�4—>‘>Ó" QÒ&Ø—‘  1 d¬F×,=Ñ,=¼jÓ,IÕJà—‘  1 d¬F×,>Ñ,>Ô?à˜dŸm™mÒ+Ü/� Ü�h  1 d¬F×,=Ñ,=¼nÓ,MÕNØ §¡Ò(Ü.� ÜØØØØÜ×%Ñ%¤mÓ4´v·}±}ÑDõ ô'� Ü�h  1 dÔ+à�{‰{˜gÔ%Ø—‘ØØœ˜DŸK™KÓ(Ñ(Ø—I‘IÜ×%Ñ% iÓ0ö ð99ðF ×ÑÕùòU?s ¥I3·I3c óf—|j«\}}t|dz t|««}td|«D]ç}||}|rË|j d«r,|j |d|t jt««ŒG|j d«r,|j |d|t jt««Œ„|j d«r,|j |d|t jt««ŒÁ|j |d|«ŒÕ|j |d|«Œé|j«y)Nr>ró+ó-s@@ ) r÷Úminr7r™rxrùr*r+ÚCOLOR_DIFF_ADD_LINEÚCOLOR_DIFF_DEL_LINEÚCOLOR_DIFF_OFFSETr) rfrúÚoutputÚ diffcolorsrþrÿrrûr×s r9Ú render_stringz_chistedit_state.render_string�sö€Ø—\‘\“^‰ ˆˆdÜ�T˜A‘Xœs 6›{Ó+ˆÜ�q˜&Ö!ˆAؘ!‘9ˆDÙØ—?‘? 4Ô(Ø—J‘Jؘ1˜d¤F×$5Ñ$5Ô6IÓ$Jõð—_‘_ TÔ*Ø—J‘Jؘ1˜d¤F×$5Ñ$5Ô6IÓ$Jõð—_‘_ VÔ,Ø—J‘J˜q ! T¬6×+<Ñ+<Ô=NÓ+OÕPà—J‘J˜q ! TÕ*à— ‘ ˜1˜a Õ&ð!"ð" �‰Õr;cóŠ—|jtd}|jtd}|j|||dd¬«y)Nr ó patchcontentsT)rN)rrrO)rfrúrBÚcontents r9Ú render_patchz_chistedit_state.render_patch¦sD€Ø— ‘ œ:Ñ& ~Ñ6ˆØ—*‘*œZÑ(Ð)9Ñ:ˆØ ×ј3 ¨¨ ¸DÐÕAr;cóć—|j}‰tjdfvrtS‰}‰�d‰cxkrdkrnnd}|j\}}t |j |t dj |««}|€y|dvr\t|dzt|j«dz «}|j||«|j€|dk(r|j||«yy|d vrFtd |dz «}|j||«|j€|d k(r|j||«yy|d k(r|j|d ¬«y|dk(r|j|d¬«y|dk(r1|j€|nd|_ |j|j«y|dk(rŽt!‰«t|j«cxkrdkrgnndt#ˆfd„|jD««}|j||j«|j�|j||j«yy|j%d«r|j'||dd«y|dk(r&|j)|t*k7r t*«y|«y|dk(r&|j)|t,k7r t,«y|«y|dk(rt.S|dk(rt0S|dk(rt2S|dk(rt4S|dk(rt6S|dk(rt8Sy)z´Change state based on the current character input This takes the current state and based on the current character input from the user we change the state. s KEY_RESIZENrÏó9r¶)rÄrÊr>rÊ)rÆrÌrrÌr·T)Únextr¸FrÂrÐr´c3óT•K—|]}|jt‰«k(sŒ|–—Œ!y­wr5)ràr˜)rŒr�Úchs €r9rŽz)_chistedit_state.event..Òs!øèø€ÐJ¡z !°Q·Y±YÄ#ÀbÃ'Ó5IœA¡zùsƒ(¡(saction-r±rºr»r¹r'rÑrÒrÓrÔ)rár*Ú KEY_RESIZEÚE_RESIZErÚKEYTABLErrIr7r}Ú move_cursorr ÚswaprÓÚ cycle_actionÚmake_selectionr˜rVrxÚ change_actionÚ change_moderÚ MODE_HELPÚE_QUITÚ E_HISTEDITÚ E_PAGEDOWNÚE_PAGEUPÚ E_LINEDOWNÚE_LINEUP) rfrXÚoldposÚ lookup_chÚcurmodeÚprevmoder‘ÚnewposÚnewrules ` r9Úeventz_chistedit_state.event«sµø€ð —‘ˆà ”&×#Ñ# ]Ð3Ñ 3܈Oàˆ Ø ˆ>˜d bÔ0¨DÕ0؈Ià ŸI™Iш�ܘ'Ñ"×&Ñ&Ø ”x  Ñ*×.Ñ.¨yÓ9ó ˆð ˆ>Ø Ø Ð,Ñ ,ܘ !™¤S¨¯©£_°qÑ%8Ó9ˆFØ × Ñ ˜V VÔ ,Ø�}‰}Ð(¨F°lÒ,BØ— ‘ ˜& &Õ)ð-Cà Ð*Ñ *ܘ˜F Q™JÓ'ˆFØ × Ñ ˜V VÔ ,Ø�}‰}Ð(¨F°jÒ,@Ø— ‘ ˜& &Õ)ð-Aà �~Ò %Ø × Ñ ˜f¨4Ð Õ 0Ø �~Ò %Ø × Ñ ˜f¨5Ð Õ 1Ø �yÒ Ø&*§m¡mÐ&;™FÀˆDŒMØ × Ñ  § ¡ Õ .Ø �wÒ ¤3 r£7¬S°·±«_Ô#BÀÕ#BÜÓJ t§z¢zÓJÓKˆGØ × Ñ ˜V W§[¡[Ô 1Ø�}‰}Ð(Ø— ‘ ˜& '§+¡+Õ.ð)à × Ñ ˜zÔ *Ø × Ñ ˜v v¨a¨b zÕ 2Ø �|Ò #Ø × Ñ ¨7´jÒ+@œZÕ OÀhÕ OØ �wÒ Ø × Ñ ¨'´YÒ*>œYÕ MÀHÕ MØ �wÒ ÜˆMØ �{Ò "ÜÐ Ø �|Ò #ÜÐ Ø �zÒ !܈OØ �|Ò #ÜÐ Ø �zÒ !܈Oð"r;cóâ—|j}|j|j|j«}t j |j |dddœd¬«}ddi}|j j|d¬«5|j|j«|j«ddd«|j|jj«j«S#1swYŒ>xYw)NTsstatus)spatchstemplate)Úbuffered)r,sverboser')Úsource)r[r}rrárÚchangesetdisplayerrOrÎÚshowrÕršÚhunkr»r%)rfr[rŸÚ displayerrs r9Úpatch_contentsz_chistedit_state.patch_contentsés¾€Ø�y‰yˆØ�z‰z˜$×6Ñ6°t·x±xÓ@ÑAˆÜ×1Ñ1Ø �G‰GØ Ø¨)Ñ 4Øô  ˆ ð )¨$Ð/ˆ Ø �W‰W× #Ñ # I°kÐ #Õ BØ �N‰N˜4Ÿ8™8Ô $Ø �O‰OÔ ÷Cð�~‰~˜dŸh™hŸl™l›nÑ-×8Ñ8Ó:Ð:÷CÐ Bús Á<,C%Ã%C.có —||_|j\}}|tk(rN|jt}||dkr||d<n-||d|jzdz kDr||jz dz|d<d|jt d<y)z™Change the rule/changeset that the cursor is pointing to, regardless of current mode (you can switch between patches from the view patch window).r r>rN)rárrrrr)rfrirmrrÚ modestates r9r\z_chistedit_state.move_cursorøs“€ðˆŒà—)‘)‰ˆˆaØ ”:Ò ðŸ ™ ¤:Ñ.ˆIؘ  .Ñ1Ò1Ø,2� ˜.Ò)ؘ) NÑ3°d×6FÑ6FÑFÈÑJÒJØ,2°T×5EÑ5EÑ,EÈÑ,I� ˜.Ñ)ð23ˆ� ‰ ”:ј~Ò.r;có�—|j\}}||f|_|tk(r%|j«|jtd<yy)NrQ)rrrwr)rfrrkrs r9raz_chistedit_state.change_mode sD€Ø—Y‘Y‰ ˆ�ؘ7�OˆŒ Ø ”:Ò Ø7;×7JÑ7JÓ7LˆD�J‰J”zÑ "Ð#3Ò 4ð r;có—||_yr5)r )rfrás r9r_z_chistedit_state.make_selections €Øˆ� r;cóü—|j|«}|j|«}|j}d|cxkrt|«krnJ‚d|cxkrt|«ksJ‚J‚||||c||<||<|||_|||_t ||«}t ||«}t ||dz«D]0}||j||«||j||«Œ2|jr|j|«yy)zWSwap two positions and calculate necessary conflicts in O(|newpos-oldpos|) timerr>N) rr}r7rárIrÓr™rîr r_) rfrirmÚ old_rule_posÚ new_rule_posr}rBÚendr�s r9r]z_chistedit_state.swaps€ð×3Ñ3°FÓ;ˆ Ø×3Ñ3°FÓ;ˆ à— ‘ ˆØ�LÔ-¤3 u£:Ô-ÐPÐP°!°|Ô2PÄcÈ%ÃjÒ2PÐPÐPÐ2PÐPÐPð �,Ñ Ø �,Ñ ð 1ˆˆlјU <Ñ0ð #/ˆˆlÑÔØ".ˆˆlÑÔä�L ,Ó/ˆÜ�,  Ó-ˆÜ�u˜c A™gÖ&ˆAØ �,Ñ × .Ñ .¨u°Q©xÔ 8Ø �,Ñ × .Ñ .¨u°Q©xÕ 8ð'ð �=Š=Ø × Ñ  Õ 'ð r;cór—d|cxkrt|j«ksJ‚J‚||j|_y)z?Change the action state on the given position to the new actionrN)r7r}r‘)rfrár‘s r9r`z_chistedit_state.change_action/s3€à�CÔ)œ#˜dŸj™j›/Ò)Ð)Ñ)Ð)Ð)Ø!'ˆ� ‰ �3‰Õr;có&—d|cxkrt|j«ksJ‚J‚|j|j}|tvsJ‚tj |«}|r|dz }n|dz}|j |t|tt«z«y)zUChanges the action state the next or the previous action from the action listrr>N)r7r}r‘ÚKEY_LISTr›r`)rfrárVÚcurrentr›s r9r^z_chistedit_state.cycle_action4s‡€ð�CÔ)œ#˜dŸj™j›/Ò)Ð)Ñ)Ð)Ð)Ø—*‘*˜S‘/×(Ñ(ˆàœ(Ñ"Ð"Ð"ä—‘˜wÓ'ˆÙ Ø �Q‰J‰Eà �Q‰JˆEØ ×ј3¤¨´´X³Ñ)>Ñ ?Õ@r;có—|j\}}|tk7ry|j|}t|d«}|j}|dk(r|nd}d|dz |zz}|dz |z} |d||zz} t dt | | ««|d<y)z—Change the region of whatever is being viewed (a patch or the list of changesets). 'delta' is an amount (+/- 1) and 'unit' is 'page' or 'line'.NrQópager>r r)rrrr7rrÓrI) rfÚdeltaÚunitrrÚ mode_stateÚ num_linesrÚ num_pagesÚ max_offsetÚnewlines r9Ú change_viewz_chistedit_state.change_viewCsž€ð—)‘)‰ˆˆaØ ”:Ò Ø Ø—Z‘Z Ñ%ˆ ܘ Ð#3Ñ4Ó5ˆ Ø×&Ñ&ˆ Ø" gšo‰{°1ˆØ˜ Q™¨;Ñ6Ñ6ˆ Ø !‘m {Ñ2ˆ ؘ^Ñ,¨u°t©|Ñ;ˆÜ%(¨¬C° ¸GÓ,DÓ%Eˆ �>Ò"r;N©F)r©rªr«rgr#r'r-r4rrErOrSrorwr\rar_r]r`r^r�r¬r;r9rrÛsc„ò ò6/òb!ò$ò ò$ ò-ó^ò,Bò <ò| ;ò3ò&Mò ò(ò6(ó Aó Fr;rcó¬ — tj«tjttj tj «tjttjtj «tjttjtj«tjttjtj«tjttj tj«tjttjd«tjt tj"d«tjt$tjd«tjt&tj"d«tjt(tjtj«tjt*tj"tj « tj,d«d„}t/|||«}d}|j1«|j3« |j4\}}|t6k(r|j9t:«|j=|«}|t>k(ry|t@k(r |jBS|tDk(r/tG«} | |jI«k7rtjJ| Ž|jM«} |j4\} }| |k7r3| dd|_'|jQ|jR|jR«d\} } || d| | «\}} } || d| | «\}} } || d| | «\}} } |tTtVtXtZfvro|tTk(r|j]d d «nS|tVk(r|j]dd «n7|tXk(r|j]d d «n|tZk(r|j]dd «|j_«|j_«|j_«| t`k(r|jc|«n^| tdk(r3|jg|thjk«jm««n"|jo|«|jq|«|js|«tjt«twjx|j{««}�Œž#tj$rY�Œ"wxYw#tj$rY�ŒwxYw) Nr•rcóX—tj|d|d||«}||dz }|||fSrL)r*Únewwin)Úsizerûrürús r9Ú drawvertwinz#_chisteditmain..drawvertwinns7€Ü�m‰m˜D ™G T¨!¡W¨a°Ó3ˆØ ˆT�!‰W‰ ˆØ�A�qˆyÐr;Fr0)rrr»r/r>r…sline)>r*Úuse_default_colorsrÚ init_pairr,Ú COLOR_WHITEÚ COLOR_BLUEr<r:r9Ú COLOR_YELLOWÚCOLOR_OKÚ COLOR_GREENr>Ú COLOR_MAGENTArJrKÚ COLOR_REDrLr@r=r;Úcurs_setrr§Úrefreshrrrarrorcrdr}rZrÜr÷Ú resizetermr4rr\rárerfrgrhr�ÚeraserrSrbrOÚ__doc__r³r%rEr#r-ÚdoupdaterÚ strtolocalÚgetkey)r[r}r r“rrXÚoldmodeÚunusedÚer’ÚsizesrkrûrüÚhelpwinÚmainwinÚ commitwins r9Ú_chisteditmainr¬Ssî€ð Ü×!Ñ!Ô#ô  ×Ñ”Z¤×!3Ñ!3´V×5FÑ5FÔGÜ ×Ñ”^¤V×%7Ñ%7¼×9KÑ9KÔLÜ ×Ñ”Z¤×!3Ñ!3´V×5HÑ5HÔIÜ ×Ñ”Xœv×1Ñ1´6×3EÑ3EÔFÜ ×Ñ”]¤F×$6Ñ$6¼×8LÑ8LÔMÜ ×ÑÔ(¬&×*<Ñ*<¸bÔAÜ ×ÑÔ(¬&×*:Ñ*:¸BÔ?Ü ×ÑÔ&¬×(<Ñ(<¸bÔAÜ ×Ñ”Z¤×!1Ñ!1°2Ô6Ü ×ÑÜœF×.Ñ.´×0DÑ0Dôô ×ÑÔ(¬&×*:Ñ*:¼F×|| ««} ddd«tj@«tjB« d ur|jEtd ««y tG| «turu|jItd ««tK| «} |jMdd«5}| D]} |jE| «Œ|jN|d<ddd«tQ||||«S y#1swYŒØxYw#1swYŒ%xYw#tR$rYywxYw)zÊinteractively edit changeset history via a curses interface Provides a ncurses interface to histedit. Press ? in chistedit mode to see an extensive help. Requires python-curses to be installed.NsPython curses library requiredrkórevr>ó/histedit requires exactly one ancestor revisionó roots(%ld)ó9The specified revisions must have exactly one common rootró*%s is not an ancestor of working directoryFshistedit aborted sperforming changes s chisteditsw+ócommandsr•)*r*rr1rÚ _colormoderr ÚcheckunfinishedÚ bailifchangedrFr Ú desthisteditrEr7Ú InputErrorr0r1rÚrevranger°rærÚbetweenrrrÞrÚ with_lc_ctypeÚwrapperÚ functoolsÚpartialr¬ÚechoÚendwinr‡ÚtyperžrõrwÚnameÚ _texthisteditÚKeyboardInterrupt)rOr[Úfreeargsrr\r¥Ú defaultrevÚrrÚrootr]r}r�r�Úrcr|s r9Ú _chisteditrʲs¢€ô €~Ü�k‰kœ!Ð=Ó>Ó?Ð?ð€B„Mð4 Ø�x‰x˜Ó ˆØ�x‰x˜ Ó#¡AÐ&ˆÜ×Ñ Ô%Ü×јdÔ#à � ‰ �HÔÙÜ!×.Ñ.¨r°4Ó8ˆJØÐ%Ø— ‘ ˜JÔ'Ü ˆt‹9˜Š>Ü×"Ñ"ÜÐDÓEóð ô�$—(‘(˜=¬*×*=Ñ*=¸dÀDÓ*IÓJÓ KˆÜ ˆr‹7�aŠ<Ü×"Ñ"Üð/óóð ð �!‰u�z‰z‹|ˆà—-‘-×"Ñ"Ó$ˆÜ�t˜T 7¨DÓ1ˆÙÜ×"Ñ"ÜÐ?Ó@Ä5ÈÃ;ÑNóð ðˆÜ˜d–O‰DˆAˆqØ �L‰Lœ b¨$¨q©'°1Ó5Õ 6ð$ä × Ñ Õ !Ü—‘¤ × 1Ñ 1´.À$ÈÓ NÓOˆB÷"ä� ‰ Œ Ü� ‰ ŒØ �‰;Ø �H‰H”QÐ,Ó-Ô .ØÜ �‹8”tÑ Ø �I‰I”aÐ/Ó0Ô 1Ü  Ó$ˆEØ—‘˜,¨Ô.°"Û�AØ—H‘H˜Q•Kðà$&§G¡G��[Ñ!÷/ô!  T¨8°TÓ:Ð :ð ð ÷#"Ð !ú÷/Ð.ûô ò Ø Ø ð úsJ­GL Ç//K5ÈAL É-AL Ê5(LËL Ë5K>Ë:L ÌL ÌL Ì LÌLr;r³s*read history edits from the specified filesFILEr¾ócontinues$continue an edit already in progressó edit-plansedit remaining actions listrks,don't strip old nodes after edit is completeóabortsabort an edit in progressóoóoutgoings#changesets not found in destinationóforces.force outgoing even for unrelated repositoriesr®sfirst revision to be editedsREVs)[OPTIONS] ([ANCESTOR] | --outgoing [URL]))Ú helpcategorycó°—tj|«}|jd«dk(r t|«tk(rt ||||«St ||||«S)a< interactively edit changeset history This command lets you edit a linear series of changesets (up to and including the working directory, which should be clean). You can: - `pick` to [re]order a changeset - `drop` to omit changeset - `mess` to reword the changeset commit message - `fold` to combine it with the preceding changeset (using the later date) - `roll` like fold, but discarding this commit's description and date - `edit` to edit this changeset (preserving date) - `base` to checkout changeset and apply further changesets from there There are a number of ways to select the root changeset: - Specify ANCESTOR directly - Use --outgoing -- it will be the first linear changeset not included in destination. (See :hg:`help config.paths.default-push`) - Otherwise, the value from the "histedit.defaultrev" config option is used as a revset to select the base revision when ANCESTOR is not specified. The first revision returned by the revset is used. By default, this selects the editable history that is unique to the ancestry of the working directory. .. container:: verbose If you use --outgoing, this command will abort if there are ambiguous outgoing revisions. For example, if there are multiple branches containing outgoing revisions. Use "min(outgoing() and ::.)" or similar revset specification instead of --outgoing to specify edit target revision exactly in such ambiguous situation. See :hg:`help revsets` for detail about selecting revisions. .. container:: verbose Examples: - A number of changes have been made. Revision 3 is no longer needed. Start history editing from revision 3:: hg histedit -r 3 An editor opens, containing the list of revisions, with specific actions specified:: pick 5339bf82f0ca 3 Zworgle the foobar pick 8ef592ce7cc4 4 Bedazzle the zerlog pick 0a9639fcda9d 5 Morgify the cromulancy Additional information about the possible actions to take appears below the list of revisions. To remove revision 3 from the history, its action (at the beginning of the relevant line) is changed to 'drop':: drop 5339bf82f0ca 3 Zworgle the foobar pick 8ef592ce7cc4 4 Bedazzle the zerlog pick 0a9639fcda9d 5 Morgify the cromulancy - A number of changes have been made. Revision 2 and 4 need to be swapped. Start history editing from revision 2:: hg histedit -r 2 An editor opens, containing the list of revisions, with specific actions specified:: pick 252a1af424ad 2 Blorb a morgwazzle pick 5339bf82f0ca 3 Zworgle the foobar pick 8ef592ce7cc4 4 Bedazzle the zerlog To swap revision 2 and 4, its lines are swapped in the editor:: pick 8ef592ce7cc4 4 Bedazzle the zerlog pick 5339bf82f0ca 3 Zworgle the foobar pick 252a1af424ad 2 Blorb a morgwazzle Returns 0 on success, 1 if user intervention is required (not only for intentional "edit" command, but also for resolving unexpected conflicts). r'scurses)rÚ byteskwargsÚ interfaceÚ_getgoalÚgoalnewrÊrÃ)rOr[rÅrs r9Úhisteditr×ösU€ôF × Ñ  Ó %€Dð  ‡|�|�KÓ  IÒ-´(¸4³.ÄGÒ2Kܘ"˜d H¨dÓ3Ð3Ü ˜˜T 8¨TÓ 2Ð2r;c óè—t|«}|j«5}|j«5}||_||_t|||||«ddd«ddd«y#1swYŒxYw#1swYyxYwr5)rWr`r_Ú _histedit)rOr[rÅrrr`r_s r9rÃrÃsR€Ü ˜$Ó €EØ �‰Œ˜ § ¡ ¤ ¨t؈Œ ؈Œ Ü�"�d˜E 8¨TÔ2÷!,�ˆ§   ú�ˆús"œA(­AÁ A(ÁA% Á!A(Á(A1snewcó˜—|jd«rtS|jd«rtS|jd«rtStS)NrËrÍó edit_plan)rÚ goalcontinueÚ goalabortÚ goaleditplanrÖ)rs r9rÕrÕ‘s=€Ø ‡x�x� ÔÜÐØ ‡x�x�ÔÜÐØ ‡x�x� ÔÜÐÜ €Nr;cóò—|dk(r5|jd«5|jj«cddd«St|d«5}|j«cddd«S#1swYyxYw#1swYyxYw)NrHr'srb)ÚtimeblockedsectionÚfinrtr)rOr r†s r9Ú _readfilerâ›s]€Ø ˆt‚|Ø × "Ñ " ;Õ /Ø—6‘6—;‘;“=÷0Ñ /ô�$˜Ô  !Ø—6‘6“8÷Ñ ÷0Ð /ú÷Ð ús—A!ÁA-Á!A*Á-A6cóþ—t|dd«}|r*|jrtjt d««‚|j d«}|j d«} |j d«} |j d«} | r |stj t d««‚|dk(r0t|| |||| f«rtj t d ««‚y|dk(r/t||||| f«rtj t d ««‚y|d k(r-t|||f«rtj t d ««‚y|rM|rtj t d ««‚t|«dkDrtj t d««‚y|j|«t|«dk(r)tj||«} | �|j| «t|«dk7rtj t d««‚y)NÚmqssource has mq patches appliedrÏrÛrÍrÐs$--force only allowed with --outgoingrËs$no arguments allowed with --continues!no arguments allowed with --abortrÌs1only --commands argument allowed with --edit-plans$no revisions allowed with --outgoingr>s.only one repo argument allowed with --outgoingrr¯) rÚappliedrrHrrr¸Úanyr7rFr r·rE) rOr[rÅrÚgoalr}r¥räÚoutgÚeditplanÚabortr›rÆs r9Ú _validateargsrë¤sì€ô ��t˜TÓ "€BÙ ˆb�jŠjÜ×ÑœqÐ!AÓBÓCÐCð �8‰8�KÓ €DØ�x‰x˜ Ó%€HØ �H‰H�XÓ €EØ �H‰H�XÓ €EÙ ‘TÜ×ÑœqÐ!HÓIÓJÐJØ ˆ{ÒÜ ��e˜T 8¨U°HÐ=Ô >Ü×"Ñ"¤1Ð%LÓ#MÓNÐ Nð ?à �Ò Ü ��d˜H e¨XÐ6Ô 7Ü×"Ñ"¤1Ð%IÓ#JÓKÐ Kð 8à �Ò Ü ��d˜HÐ%Ô &Ü×"Ñ"ÜÐFÓGóð ð 'ñ ÙÜ×&Ñ&ÜÐ=Ó>óðô�8‹}˜qÒ Ü×&Ñ&ÜÐGÓHóðð!ð �K‰K˜Ô !Ü�4‹y˜AŠ~Ü%×2Ñ2°2°tÓ<� ØÐ)Ø—K‘K  Ô+ä�4‹y˜AŠ~Ü×&Ñ&ÜÐHÓIóððr;c ó–—|jd|«}|j«t|«}|jdg«}|j dd« }|jdd«} |jdd«|_t |||||| |«d} |r`tj||«}|D� cgc]} || ‘Œ } } | D]3} | j«D�cgc] }|d k7sŒ |‘Œ }}| rŒ)t|«} Œ5| r:|jtd «d ¬ «rtjtd ««‚|tk(r|j!«t#|||«}nA|t$k(rt'|||| «y|t(k(rt+||||¬«yt-||||||«t/|||«t1||||«|j3«ycc} wcc}w)Nr'r®rïó backup-bundler³r;rkFstips{warning: tags associated with the given changeset will be lost after histedit. do you want to continue (yN)? $$ &Yes $$ &Nor>r%shistedit cancelled ©Únobackup)Ú formatterÚ startitemrÕrrNr\rërr¹Útagsr7Ú promptchoicerrÚ CanceledErrorrÜrtÚbootstrapcontinuerÞÚ_edithisteditplanrÝÚ_aborthisteditÚ _newhisteditÚ_continuehisteditÚ_finishhisteditr)rOr[rrÅrÚfmrçr¥rïr}Úhastagsr»r=rÕÚtagròs r9rÙrÙÔs¸€Ø �‰�k 4Ó (€B؇L�L„NÜ �D‹>€DØ �8‰8�F˜BÓ €DØ—=‘= Ð-=Ó>Ð>€HØ �H‰H�[ #Ó &€EØ—‘˜' 5Ó)€E„Jä�"�d˜H d¨D°%¸Ô>à€GÙ Ü×"Ñ" 4¨Ó.ˆÙ%)Ó*¡T˜c��S“  TˆÐ*ÛˆCØ#&§8¡8¤:Ó?¡:˜C°¸³’C :ˆDÐ?Úܘd›)‘ðñØ �?‰?Ü ð@ó ð ð ô ô×%Ñ%¤aÐ(?Ó&@ÓAÐ Aà Œ|ÒØ � ‰ Œ Ü! " e¨TÓ2‰Ø ”Ò Ü˜"˜d E¨5Ô1ØØ ”Ò Ü�r˜4 °Õ:Øô �R˜˜u d¨H°dÔ;ä�b˜$ Ô&Ü�B˜˜e RÔ(؇F�F…Hùò?+ùâ?sÂ+ Gà GÃGcó0—|jdd}tt||dddgz««D]C\}\}}|jdk(sŒ|sŒ|jdk(sŒ,t|j|_ŒE|j «d}|jdd«r|jd«}|jtd«td«t|j«¬«}|5tj|«5|jrÚ|j |¬ «|jd } |j| j«¬ «|j!d | j| j«fz«| j#«\} } | j%«|_|j(j+| «|jj-d «|jrŒÚddd«ddd«|j «y#1swYŒ"xYw#1swYŒ&xYw) zƒThis function runs after either: - bootstrapcontinue (if the goal is 'continue') - _newhistedit (if the goal is 'new') Nr>rcr'r+seditingschanges)r‡Útotal)r…r)Úitemshistedit: processing %s %s )rIrÚzipr~r‡rYr‡rNÚ transactionÚ makeprogressrr7rÚacceptinterventionÚ incrementrÙrWrßr°r^rerFÚpop) rOr[rrIÚidxr‘Únextactr…ÚprogressÚactobjrmÚ replacement_s r9rùrùs§€ð�m‰m™AЀGÜ"+¬C°¸ÀÀ¸ÈÀvÑ9MÓ,NÖ"OÑˆÑ ˆf�gØ �;‰;˜'Ó !¢g°'·,±,À'Ó2IÜ+5ˆE�M‰M˜#Ñ Õ (ð#Pð  ‡K�K„Mà €Bð ‡}�}�[Ð"6Ô7ð× Ñ ˜kÓ *ˆØ�‰Ü ˆ*‹ œA˜j›M´°U·]±]Ó1Cðó€Hò ”4×*Ñ*¨2Õ.Ø�mŠmØ �K‰K˜2ˆKÔ Ø—]‘] 1Ñ%ˆFØ × Ñ  F§M¡M£OÐ Ô 4Ø �H‰HØ/°6·;±;ÀÇ Á ÃÐ2PÑPô ð'-§j¡j£lÑ #ˆI�|Ø"+§.¡.Ó"2ˆEÔ Ø × Ñ × %Ñ % lÔ 3Ø �M‰M× Ñ ˜aÔ ð�m‹m÷/�ð ‡K�K…M÷/Ð.ú�ˆús%Ã"H Ã8C&HÇH ÈH ÈH È Hc󂇗tj||j«t|«\}}}}|r›|j «D]ˆ\}} | s|j dt |«z«Œ&|j dt |«t | d«fz«t| «dkDsŒ`d} | ddD]} |j | t | «z«Œ!ŒŠ|js|rt||j|«ni}|D] } | |vsŒd|| <Œ|j«jjjŠ|j «D� � cic]$\} } ‰| «rtˆfd„| D««r| | “Œ&}} } t!j"||d «|j$}|j&}|j(}||j «D��� cic]*\}}||«||D� cgc] } || «‘Œ c} d ¬ «“Œ,c} }}d d ¬«}|j+|¬«|j-«t.j0j3|j5d««r$t/j6|j5d««|j8j3d«r|j8j7d«yycc} } wcc} wcc} }}w)z7This action runs when histedit is finishing its sessionshistedit: %s is dropped shistedit: %s is replaced by %s rr>s'histedit: %sNr¬c3ó.•K—|] }‰|«–—Œy­wr5r¬©rŒrzÚhas_nodes €r9rŽz"_finishhistedit..Ssøèø€Ð6±A¨q™x¨Ÿ{±Aùsƒr'snode)rÂsoldnodesnewnodes)r=Úvalue)Ú nodechangessundoóhistedit-last-edit.txt)rrär^ÚprocessreplacementÚitemsrWrr7r\Úmovetopmostbookmarksr]Ú unfilteredÚ changelogr›rrrÚ cleanupnodesÚhexfuncÚ formatlistÚ formatdictrsr§Úosr roÚsjoinr¥rw)rOr[rrûÚmappingÚtmpnodesÚcreatedÚntmÚprecÚsuccsÚmrzÚkr8ÚhfÚflÚfdÚoldnÚnewnrrs @r9rúrú0sdø€ä ‡O�O�D˜×,Ñ,Ñ-Ô.ä&8¸Ó&?Ñ#€GˆX�w ÙØ"Ÿ=™=ž?‰KˆD�%ÙØ—‘Ð5¼¸d» ÑCÕDà—‘Ø7ܘT“{¤E¨%°©(£OÐ4ñ5ôô�u“: “>ØB�AØ" 1 2›Y˜ØŸ™ ¤U¨1£X¡Õ.ñ'ð+ð �:Š:Ù Ü   u§}¡}°cÕ :ðˆã ˆØ �Š9؈G�AŠJðð �‰Ó ×*Ñ*×0Ñ0×9Ñ9€Hð—M‘M”Oôá#‰DˆAˆqÙ �AŒ;œ3Ó6±AÓ6Ô6ð ˆ1‰Ø#ð ñô  ×ј˜w¨ Ô4Ø �‰€BØ �‰€BØ �‰€BÙð&Ÿm™mœoõ á-‘ ��dñ ˆt‹H‘b©Ó.© A™"˜Q�%¨Ñ.°WÔ=Ñ =Ø-ó ð Øô €Kð‡G�G˜ €GÔ$à ‡K�K„MÜ ‡w�w‡~�~�d—j‘j Ó)Ô*Ü � ‰ �$—*‘*˜WÓ%Ô&Ø ‡x�x‡�Ð0Ô1Ø �‰�‰Ð1Õ2ð2ùó-ùò/ùô sÅ )J/ÇJ: ÇJ5Ç, J: Ê5J: c ó¶— |j«t|«\}}}}|jdt|j«z«|j|vrª|j rž|j j|j «}tj||«}tj|||«} |jd«5} tj|| | dd|z¬«ddd«tj |«|j#«j%d|j&||z«r#tj(||jdd¬«t+||||¬ «t+||||¬ « |j5«y#1swYŒŸxYw#t,$r,|j/«r|j1t3d ««‚wxYw#|j5«wxYw) Nsrestore wc to old parent %s shistedit.abortr'sbundle:)rrÚurlsparents() and (%n or %ln::)T)Ú show_statsrârîsrwarning: encountered an exception during histedit --abort; the repository may not have been completely cleaned up )rtrrWrr]rarwrCrÚopenpathrÚ readbundlerr Ú applybundlerrírr¥r^ÚcleanÚ cleanupnodeÚ Exceptionr¤rþrr§) rOr[rrïÚ__Úleafsrrar†Úgenr…s r9r÷r÷js�€ð)Ø � ‰ Œ Ü"4°UÓ";шˆE�8˜RØ �‰Ð1´E¸%¿-¹-Ó4HÑHÔIð�}‰} Ñ$¨×)9Ò)9ØŸ™Ÿ™ u×'7Ñ'7Ó8ˆJÜ— ‘ ˜B  Ó+ˆAÜ×%Ñ% b¨!¨ZÓ8ˆCØ×!Ñ!Ð"3Ô4¸Ü×#Ñ#ØØØØ&Ø" ZÑ/õ ÷5ô �I‰I�jÔ !ð �?‰?Ó × !Ñ !Ø +Ø × Ñ Ø �HÑ ô ô �H‰H�T˜5Ÿ=™=°TÀdÕ KÜ�B˜˜h°Õ:Ü�B˜˜e¨hÖ7ð � ‰ � ÷?5Ð4ûô( ò Ø × Ñ Ô Ø �G‰GÜð$óô ð ð ûð � ‰ � ús1‚CFÃFÃ$B FÆF ÆFÆ5GÇGÇGcó—t|«}|jdd« }|j«5}|j«5}||_||_t ||||¬«ddd«ddd«y#1swYŒxYw#1swYyxYw)Nrïrírî)rWrNr`r_r÷)rOr[rrïr`r_s r9Úhgaborthisteditr8—sd€Ü ˜$Ó €EØ—=‘= Ð-=Ó>Ð>€HØ �‰Œ˜ § ¡ ¤ ¨t؈Œ ؈Œ Ü�r˜4 °Õ:÷!,�ˆ§   ú�ˆús#¯A;ÁA/ÁA;Á/A8 Á4A;Á;Bcó¬—|j«|sLt|t|j«t|j««}t |||j |«}n t||«}t||«}|j D�cgc]}|jsŒ||j‘Œ }}t|||||«||_|j«ycc}wr5) rtrUrr^r]Ú ruleeditorrIrârrr°Úwarnverifyactionsr‡)rOr[rr}ÚcommentrIÚactr=s r9rörö s­€Ø ‡J�J„LÙ Ü Ø ”�e×)Ñ)Ó*¬E°%·-±-Ó,@ó ˆô˜4  U§]¡]°GÓ<‰ä˜"˜eÓ$ˆÜ˜ Ó&€GØ&+§m¢mÓ @¡m˜s°s·x³xˆD�—‘‹N m€DÐ @Ü�b˜$ ¨°Ô5Ø€E„MØ ‡K�K…Mùò As ÂCÂCc óú—|jd«}|jdd«}|jd«}tj|«tj|«|jj «} |r|r|d} nd} t ||| ||«} nnt|jdtj||«««} t| «dk7rtjtd««‚| dj«} t!|| | |j"«}|s*tjtd «t%| «z«‚|D� cgc]} || ‘Œ }} |d}|d g}|dj «g|zD] } t'j(||||d d d d ¬ «Œ"|sGt/|t%| «t%| ««}|D� cgc]} t1|| «‘Œ}} t3||||«}n t5||«}t7||«}t9|||||«|| j «j«}||_||_| |_g|_ |jCddt|«t|«¬«d}tEjF|tDjH«stKjL||g| g| d«}||_'ycc} w#tj*$r"tj,td «|z«‚wxYwcc} w)NrÏr³r;rÐrr°r>r±r²rýF)Ú branchmerger›Ú acceptremoteÚ followcopiess>untracked files in working directory conflict with files in %sr's%d actions to histedit )Úhistedit_num_actions)(rr rµr¶rærr«r0r1rr¹r7rr¸rr°rºr\rrÚcalculateupdatesr1rHrUrUr:rârrr;r^rIr]reÚlogrÚ isenabledÚcreatemarkersoptrÚ backupbundlera)rOr[rr¥rÅrrèr}r›r]r¦rÈrÇr�r=ÚwctxÚancsr>r<rIr^ras r9rørø°së€Ø �8‰8�KÓ €DØ �H‰H�[ #Ó &€EØ �H‰H�XÓ €Eä ×јDÔ!Ü ×ј$Ôà�m‰m×ÑÓ €G٠٠ؘa‘[‰FàˆFܘB  f¨e°TÓ:‰ä �$—(‘(˜=¬*×*=Ñ*=¸dÀDÓ*IÓJÓ KˆÜ ˆr‹7�aŠ<Ü×"Ñ"Üð/óóð ð �!‰u�z‰z‹|ˆä �4˜˜w¨¯ © Ó 3€DÙ Ü×ÑÜ Ð;Ó <¼uÀT»{Ñ Jó ð ñ"Ó "™T˜ˆD�‹G˜T€DÐ "à �‰:€Dð �‰Jˆ<€Dð �1‰g�j‰j‹lˆ^˜dÔ "ˆð Ü × %Ñ %ØØØØð"ØØ"Ø"ö ð#ñ, Ü  ¤U¨4£[´%¸³.ÓAˆÙ+/Ó0©4 a”4˜˜q•>¨4ˆÐ0ܘ4  W¨gÓ6‰ä˜"˜eÓ$ˆÜ˜ Ó&€GÜ�b˜$ ¨°Ô5à˜‘J—M‘M“O×(Ñ(Ó*€Mà'€EÔØ€E„MØ€E„MØ€EÔà‡F�FØØ#Ü ˆG‹ Ü  ›\ð  ôð€JÜ × Ñ ˜d¤H×$=Ñ$=Ô >Ü×(Ñ(Ø �=�/ G 9¨d°Kó ˆ ð"€EÕùò} #øô2�{‰{ò Ü×"Ñ"ÜØUóðñóð ð üò1sÅ J;Å?KÇK8Ë5K5cóH—tj|j««Sr5)r!rÑrù)rÕs r9Ú _getsummaryrK s€Ü × Ñ  §¡Ó 1Ó 2Ð2r;cóº—|j}tjj|«}t j |«|j rŽ|j jd«}t|«r%|j«t|«r t«|j«\}}|j«|_ |jj|«|Sr))r[Ú mergestatemodrrtrÚcheckunresolvedrIrrFrÝrIrÞr°r^rerF)rOrrr[Úmsr rmres r9rõrõ s¦€Ø �:‰:€Dä × !Ñ !× &Ñ & tÓ ,€BÜ ×јbÔ!à ‡}‚}Ø—‘×"Ñ" 1Ó%ˆä �dÔ Ø × Ñ Ô "ܘ$ÔÜ” à"(×"6Ñ"6Ó"8ш �<à'Ÿn™nÓ.ˆÔØ ×Ñ×!Ñ! ,Ô/à €Lr;có—|jd||«}|rI|sGtj||d«|jd|«rtjt d««‚t j|jj|«S)zoselect and validate the set of revision to edit When keep is false, the specified set can't have children.s%n::%nr\s(%ld) and merge()s(cannot edit history that contains merges) r¥rÚprecheckrrHrrÚmaplistrr°)r[Úoldr@r\r¥s r9rºrº+ sw€ð �9‰9�Y  SÓ )€DÙ ‘DÜ×јT 4¨Ô1Ø �9‰9Ð)¨4Ô 0Ü×"Ñ"ÜÐ=Ó>óð ô × Ñ ˜DŸN™N×/Ñ/°Ó 6Ð6r;có—|jjdd«�rBtj«}|D]ù}||j}t |«}|j dd«dj«}d} |jd«rŸ|dd }|ttztzvr„||_ |t|«dzdj«} tt!|j#«««D]9\} } || j} t | «}|| k(sŒ&d } | j%|«n| rŒõg||<Œûg}|j#«D]\} } |j%| «|| z }Œd j'|D�cgc]}|j)«‘Œc}«}|d z }||z }|j+||j-«d di|j.d¬«}|j1dd«5}|j3|«ddd«|Scc}w#1swY|SxYw)zeopen an editor to edit rules rules are in the format [ [act, ctx], ...] like in state.rules r#r$r²r>rFó!Nr•Tr2s sprefixr')Úrepopathr‘rswb)rOrNrÚsortdictr°rKrAÚlowerÚendswithrKrLrMr~r7ÚlstripÚreversedr0rrErCrÙr,Úusernamer rwr‡)r[rOrIÚ editcommentÚnewactr=rÕrÖÚfwordÚaddedÚtsumÚnarTÚactxÚasumr}r†s r9r:r:9 sï€ð  ‡w�w×ј/Ð+?Õ@Ü—‘“ˆÛˆCØ�s—x‘x‘.ˆCÜ! #Ó&ˆGØ—M‘M $¨Ó*¨1Ñ-×3Ñ3Ó5ˆE؈Eð�~‰~˜dÔ#ؘc˜r˜ �ØœNÔ-=Ñ=ÄÑOÑOØ$�C”Hà"¤3 u£:°¡>Ð#3Ð4×;Ñ;Ó=�Dô"*¬$¨v¯|©|«~Ó*>Ö!?™˜˜AØ# B§G¡G™}˜Ü*¨4Ó0˜Ø 4›<Ø$(˜EØŸH™H SœMÙ!ð "@òØ ��s’ ð1ð6ˆØ—\‘\–^‰EˆB�Ø �N‰N˜2Ô Ø �q‰L‰Gð$ð �J‰J±Ó8±¨˜Ÿ ™ � °Ñ8Ó 9€EØ ˆWÑ€EØ ˆ[Ñ€EØ �G‰GØ Ø � ‰ ‹ Ø �KÐ Ø—‘Øð ó €Eð �‰Ð+¨UÔ 3°qØ �‰�Œ÷ 4ð €Lùò#9÷ 4ð €LúsÅ/G5ÇG:Ç:Hcóª—d„|j«D«D�cgc]}|r|jd«s|‘Œ}}g}|D]�}d|vr!tjt d«|z«‚|j dd«\}}|t vr!tjt d«|z«‚t |j||«}|j|«Œ‘|Scc}w)z@Read the histedit rules string and return list of action objectsc3ó<K—|]}|j«–—Œy­wr5)r³r‹s r9rŽzparserules..x sèø€Ð8Ñ%7 �!—'‘'—)Ñ%7ùs‚ó#r²smalformed line "%s"r>sunknown action "%s") r%rxrr¸rrAr?r¾rE)r}rrTrIr�r~rr‘s r9rrrrt sÛ€ñ9 U×%5Ñ%5Ô%7Ô8ó á8ˆAÙ �Q—\‘\ $Ô'ò Ø8ð ð ð €GÛ ˆØ �q‰=Ü×"Ñ"¤1Ð%;Ó#<¸qÑ#@ÓAÐ AØ—W‘W˜T 1Ó%‰ ˆˆdà ”{Ñ "Ü×"Ñ"¤1Ð%;Ó#<¸tÑ#CÓDÐ Dä˜TÑ"×+Ñ+¨E°4Ó8ˆØ�‰�vÕðð €Nùò! sšCcóº— t|||«y#tj$r7|jj d«r|j t d««‚wxYw)Nrs=warning: histedit rules saved to: .hg/histedit-last-edit.txt )Ú verifyactionsrr¸rwrorþr)rOr[rIrr=s r9r;r;‰ sW€ð Ü�g˜u dÕ+øÜ × Ñ òØ �8‰8�?‰?Ð4Ô 5Ø �G‰GÜð8óô ð ðús ‚ �A Acó—|D�chc]}|j«’Œ}}t«}d}|r?|djdvr.tjt d«|djz«‚|D]?}|j |||«|}|j€Œ%|j|j«ŒAt||z «}|jjjdd«rVt|«dk(r)tjt d«t d«¬ «‚|D� cgc]} t|| «‘Œ} } | |ddy|rGtjt d «t|d«zt d «t|d«z¬ «‚ycc}wcc} w) zæVerify that there exists exactly one action per given changeset and other constraints. Will abort if there are to many or too few rules, a malformed rule, or a rule on a changeset outside of the user-given range. Nr)r‹rcs$first changeset cannot use verb "%s"r'r(sno rules provideds%use strip extension to remove commitsrÉsmissing rules for changeset %ss@use "drop %s" to discard, see also: 'hg help -e histedit.config')r°r1r~rr¸rrÇrMrDr[rOrNr7r”r) rIrr=r>rÄrÅrÃr‘rCrzÚdropss r9riri— s€ñ#'Ó'¡$˜Q�—‘• $€HÐ'Ü ‹5€DØ €Dá�7˜1‘:—?‘?Ð&8Ñ8Ü×ÑÜ Ð5Ó 6¸À¹¿¹Ñ Hó ð óˆØ� ‰ �d˜H dÔ+ØˆØ �;‰;Ñ "Ø �H‰H�V—[‘[Õ !ð ô �X ‘_Ó%€Gà ‡z�z‡}�}×Ñ  ¨^Ô<Ü ˆw‹<˜1Ò Ü×"Ñ"ÜÐ&Ó'ÜÐ?Ó@ôð ñ *1Ó1© A”�e˜Q•¨ˆÐ1ðˆ��‰ Ù Ü×ÑÜ Ð/Ó 0´5¸À¹Ó3DÑ DÜð0óô�G˜A‘JÓñ  ô ð ð ùò7(ùò.2s …FÄFcó�—tj|tj«s|S|j«}|jj j }|j}t|«}|D�cgc]}|d‘Œ }}t«j|Ž}t|«} | r�| j«} || «du} |jj| d«} | r| s|j| df«| D]H} | d}|j| |f«|D])}||vsŒ|j|«| j|«Œ+ŒJ| rŒ�|Scc}w)a Adjust replacements from obsolescence markers Replacements structure is originally generated based on histedit's state and does not account for changes that are not recorded there. This function fixes that by adding data read from obsolescence markersr>Nr¬)rrErFrrr›Úget_revÚobsstorer0r1ÚunionrÚ successorsrrErM)r[ÚoldreplacementsÚunfirmrnÚnewreplacementsr�ÚoldsuccsÚ seensuccsÚ succstocheckrzrCÚmarkersÚmarkerÚnsuccsÚnsuccs r9Úadjustreplacementsfrommarkersr{Ä s=€ô × Ñ ˜d¤H×$=Ñ$=Ô >ØÐà �?‰?Ó €DØ�n‰n×"Ñ"×*Ñ*€GØ�}‰}€Hܘ?Ó+€OÙ-Ó.™o˜��!“˜o€HÐ.à”“— ‘ Ø ð€Iô˜ “?€LÙ Ø × Ñ Ó ˆÙ˜!“* Ð$ˆØ×%Ñ%×)Ñ)¨!¨RÓ0ˆÙ ™7à × "Ñ " A r 7Ô +ÛˆFؘA‘YˆFØ × "Ñ " A v ;Ô /Û�Ø  Ò)Ø—M‘M %Ô(Ø ×'Ñ'¨Õ.ñ ðò ð Ðùò+/sÁ2 Ecó—t|j|j«}t«}t«}i}|D]Y}|j |d«|j |d«|j |dt««j |d«Œ[||z }||z}t|«}i} |rnt|«D]]} || } t| «D]2} | |vrŒ| | vsŒ| j| «| j | | «Œ4| | | <|j| «Œ_|rŒn|D]} | | =Œ|jjjj}| j«D]\}} t| |¬«| |<Œ|r/t||jjj¬«d}n^| sd}nY|jjj}|jt| |¬«dj«j!«}| |||fS)zÏprocess the list of replacements to return 1) the final mapping between original and created nodes 2) the list of temporary node created by histedit 3) the list of new commit created by histeditr>rr<r•N)r{r[rer1rärMÚ setdefaultr0rírr›rmrrDr»rr°)rreÚallsuccsÚreplacedÚ fullmappingÚrepr@rÚ toproceedÚfinalrür#Úsrzrmr"Ú newtopmostr�s r9rrê sï€ô 1°·±¸U×=OÑ=OÓP€LÜ‹u€HÜ‹u€HØ€KóˆØ�‰˜˜A™ÔØ� ‰ �S˜‘VÔØ×јs 1™v¤s£uÓ-×4Ñ4°S¸±VÕ<ðð �XÑ €Cؘ(Ñ"€Hô�KÓ €IØ €EÙ Ü�i–ˆAØ ‘NˆEܘ%–[�ؘ ‘>ñؘ%’Zà—L‘L ”OØ—L‘L  q¡Õ*ð!ð!��a‘Ø× Ñ  Õ#ð!ò ó ˆØ �!‰Hðð�j‰j×"Ñ"×(Ñ(×0Ñ0€GØ—{‘{–}‰ ˆˆeܘU¨Ô0ˆˆdŠ ð%ñ ܘC U§Z¡Z×%9Ñ%9×%=Ñ%=Ô>¸rÑB‰ Ù ð‰ ð �J‰J× Ñ × $Ñ $ˆØ—Z‘Z¤ u°!Ô 4°QÑ 7Ñ8×;Ñ;Ó=×BÑBÓDˆ à �(˜C Ð +Ð+r;cóB—|r|sy|j|«}|ro|j«5|jd«5}|j}g}|D]}|j ||f«Œ|j |||«ddd«ddd«yy#1swYŒxYw#1swYyxYw)zÔMove bookmark from oldtopmost to newly created topmost This is arguably a feature and we may only want that for the active bookmark. But the behavior is kept compatible with the old version for now. Nr')rr_rÚ _bookmarksrErå)r[Ú oldtopmostr…Ú oldbmarksr…ÚmarksÚchangesrÂs r9rr( sŒ€ñ ™ZØØ×"Ñ" :Ó.€IÙØ �Y‰Y�[˜$×*Ñ*¨;Ô7¸2Ø—O‘OˆE؈GÛ!�Ø—‘  jÐ1Õ2ð"à × Ñ ˜t R¨Ô 1÷ 8�[ˆ[ðß7Ð7ú�[ˆ[ús"©B».F søèø€Ð7¡%˜Q©8°A­;”q¡%ùsƒ ‘rœ)ÚbackupN) r_rrr›rrDr1r°rr³)rOr[Únodesrïr>rªrŽrs @r9r2r2: s›ø€ð �‰�ð�‰Ó ˆð—>‘>×'Ñ'×0Ñ0ˆÜÓ7¡%Ó7Ó7ˆØ#'§8¡8¨M¸5Ô#AÓBÑ#A˜a�—‘•Ð#AˆÐBÙ Ø!�\ˆFÜ �L‰L˜˜T 5°Õ 8÷ ˆùòC÷ ˆús’AB0Á+B+ B0Â+B0Â0B9có’—t|t«r|g}t|«}|j«r‡|j «|j D�chc]}|j sŒ|j ’Œ}}|t|«z} | r7tjtd«djd„| D««z«‚||||g|¢­i|¤ŽScc}w)Ns$histedit in progress, can't strip %sr3c3ó2K—|]}t|«–—Œy­wr5)r)rŒrüs r9rŽzstripwrapper..Z sèø€Ð<©|¨!œU 1ŸX©|ùr�) Ú isinstancerørWr¤rtrIr°r1rr1rrC) ÚorigrOr[ÚnodelistÚargsrrr‘Úhistedit_nodesÚ common_nodess r9Ú stripwrapperr˜M sÀ€Ü�(œEÔ"Ø�:ˆÜ ˜$Ó €EØ ×ÑÔØ � ‰ Œ à&+§m¢mó Ù&3˜F°v·{³{ˆF�K‹K mð ð ð&¬¨H« Ñ5ˆ Ù Ü—+‘+ÜÐ9Ó:Ø—*‘*Ñ<©|Ó<Ó<ñ=óð ñ ��D˜(Ð 4 TÒ 4¨VÑ 4Ð4ùò s Á CÁCsstripcó—t|«}|j«sy|j«|jrM|j t d«|j t d«d«t|j«zz«yy)Ns!hist: %s (histedit --continue) s %d remainingshistedit.remaining)rWr¤rtrIr‡rÚlabelr7)rOr[rs r9Ú summaryhookr›b so€Ü ˜$Ó €EØ × Ñ Ô ØØ ‡J�J„LØ ‡}‚}à �‰Ü Ð3Ó 4à—‘œ˜?Ó+Ð-BÓCÜ�e—m‘mÓ$ñ%ñ õ ðr;cóˆ—tjjdt«t j ddddt ¬«y)Nr'rZT)ÚfnameÚ allowcommitÚ continueflagÚ abortfunc)r Ú summaryhooksrMr›rbÚ addunfinishedr8)rOs r9Úextsetupr£r s5€Ü ×Ñ×ј[¬+Ô6Ü ×ÑØØØØÜ!ö r;rŽ)FF)NFNr5)r;)’r¡rØrÚÚ ImportErrorr´r½rrzrÖÚmercurial.i18nrÚmercurial.pycompatrrÚmercurial.noderrrÚ mercurialr r r r r rrrrrrrrrrrMrrrrrrrrrbrÚmercurial.utilsr r!r"ÚcmdtableÚcommandÚ configtableÚ configitemÚ testedwithr?r1rKrLrMrNrUrWr®r÷rårArFrIr‘rUr,rfr?r‡r�r”r@r«r*r‚rèr,r<r™r9r>rJrKrLr@r=r;rcrdrerfrhrgrZrrrrbr[rÜrÞrõrrrrr¬rÊÚ formatteroptsÚCATEGORY_CHANGE_MANAGEMENTr×rÃrÜrÝrÞrÖrÕrârërÙrùrúr÷r8rörørKrõrºr:rrr;rir{rrr2r˜Ú wrapfunctionr›r£r¬r;r9Úr²såðñxðxÛÛó ÛÛ Û Û å÷÷ñ÷ ÷÷÷÷÷ñ÷2ñð €Ø ˆ)× Ñ ˜HÓ %€à€ Ø !ˆY× !Ñ ! +Ó .€ Ù ØØØ õñ  ØØØ õñ  ØØØ õñ  ØØØ õñ  ØØØ õñ  Ø ØØ õñ  ˆ;Ð+Ð5NÕOñ ØÐ'°ÀTõð#€ à€ Ù“€Ù“5ÐÙ“%€Ù“%€ò0E÷fH7ñH7÷VF1ñF1òRò.ó8IòX*òóñ.ˆ�$ˆ™˜=Ó)°DÔ9ô'ˆ>ó'ó:ð'ñØ ˆd€OÙÐ=Ó>Ø ôô Mˆ>óMó ð Mñ"ˆ�$ˆ™ÐKÓLÓMôI%ˆ>óI%óNðI%ñXØ ˆd€OÙÐCÓDóôˆ>óó ðñ.Ø€OÙð ó ðô ô�óó ðñ Ø ˆd€OÙÐBÓCóôˆTóó ðñˆ�$ˆ™Ð8Ó9Ó:ô1ˆ>ó1ó;ð1ñ Ø ˆd€OÙÐ<Ó=Ø ôô MˆnóMó ð Mó !ð8Ûò B€à Ø ñ€ ð CPÑ?€ ˆN˜H j°-Ø>EÑ;ÐÐ(Ð*;Ø6?Ñ3€ Ð Ð 3àÑ€ˆ Ø7DÑ4€ ˆH�h  ¨HØ/9Ñ,€ ˆ:�z 9ðØØ$ØØ#ØØØØØñ ððØ ˆnðà ˆnðð ˆnðð ˆnð ð ˆnð ð ˆnð ð ˆiðð ˆgðð ˆeðð �Wðð �5ðð ˆlðð ˆjðð �lðð �jðð ˆgð!ð$ØØ"Ø ØØØ!ØØØñ ðˆrðS* €òZM÷<ñ<ò~ó ò $ò !÷ uFñuFòp \6ò~AñH Øð Ø Ø Ù Ð;Ó <Ù ˆg‹Jð  ð ˆ{˜E¡1Ð%LÓ#MÐNØ ˆl˜E¡1Ð%CÓ#DÐEà Ø Ø Ù Ð=Ó >ð  ð ˆh˜™qÐ!=Ó>Ð?Ø ˆ{˜E¡1Ð%KÓ#LÐMà Ø Ø Ù Ð?Ó @ð  ð ˆv�r™1Ð;Ó<¹aÀ»iÐHð1ð4×Ññ5ñ6Ð2Ó3Ø×3Ñ3ô=ñ@j3óAð@j3òZ3ð€ Ø € Ø€ Ø €òòò-ò`- ò`)òX73ót*òZ;ò ò ^"òB3òò, 7ó8òvò* ò* òZ#òL;,ò|2ó$9ò&5ð$€ ×Ò˜ ¨,Ô7ò  ó øðYMòØ €E؃Gðûð^òØ ƒFðús#„O2ÉPÏ2 O?Ï>O?ÐP Ð P