Ë ’³öú”gÐøã óΗdZddlZddlmZddlmZmZddlmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZddlmZdZiZej6e«ZiZej:e«Zedd d ¬ «edd d¬ «edd d¬ «ddddœZej>ZGd„d«Z Gd„d«Z!d„Z"d3d„Z#d3d„Z$Gd„dejJ«Z&d4d„Z'Gd„d«Z(Gd„d «Z)d!„Z*d"„Z+d5d#„Z,edd$d%ded&«fd'd(ded)«fd*d+ded,«fd-d.ded/«fge jZze j\ze j^zed0«ej`d ¬1«d2„«Z1y)6a?apply working directory changes to changesets (EXPERIMENTAL) The absorb extension provides a command to use annotate information to amend modified chunks into the corresponding non-public changesets. :: [absorb] # only check 50 recent non-public changesets at most max-stack-size = 50 # whether to add noise to new commits to avoid obsolescence cycle add-noise = 1 # make `amend --correlated` a shortcut to the main command amend-flag = correlated [color] absorb.description = yellow absorb.node = blue bold absorb.path = bold éN)Ú_)ÚhexÚshort)ÚcmdutilÚcommandsÚcontextÚcrecordÚerrorÚlinelogÚmdiffÚobsoleteÚpatchÚphasesÚpycompatÚ registrarÚ rewriteutilÚscmutilÚutil)Ú stringutilsships-with-hg-coreóabsorbó add-noiseT©Údefaults amend-flagómax-stack-sizeé2syellows blue boldsbold)óabsorb.descriptionó absorb.nodeó absorb.pathcó"—eZdZdZdZdZdZd„Zy)Únulluizblank ui object doing nothingFTcó —d„}|S)Ncó—y©N©)ÚargsÚkwdss ú0usr/lib/python3.12/site-packages/hgext/absorb.pyÚnullfuncz$nullui.__getitem__..nullfunc^s€Ø ór$)Únamer(s r'Ú __getitem__znullui.__getitem__]s€ò ðˆr)N)Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú debugflagÚverboseÚquietr+r$r)r'r r Vs„Ù'à€IØ€GØ €Eór)r có"—eZdZdZd„Zd„Zd„Zy)Úemptyfilecontextz.minimal filecontext representing an empty filecó—||_yr#)Ú_repo)ÚselfÚrepos r'Ú__init__zemptyfilecontext.__init__gs €Øˆ� r)có—y)Nr)r$©r7s r'Údatazemptyfilecontext.datajs€Ør)có.—|jjSr#)r6Únullidr;s r'Únodezemptyfilecontext.nodems€Ø�z‰z× Ñ Ð r)N)r,r-r.r/r9r<r?r$r)r'r4r4ds„Ù8òòó!r)r4cóz—t«}g}|D])}||vsŒ|j|«|j|«Œ+|S)z@list -> list. remove duplicated items without changing the order)ÚsetÚaddÚappend)ÚlstÚseenÚresultÚxs r'ÚuniqrHqs=€ä ‹5€DØ €FÛ ˆØ �DŠ=Ø �H‰H�QŒKØ �M‰M˜!Õ ðð €Mr)có@—|}g}|j«tjk7rh|rt|«|k\rnW|j «}t|«dk7rn8|j |«|d}|j«tjk7rŒh|j «|S)a)(ctx, int?) -> [ctx]. get a linear stack of non-public changesets. changesets are sorted in topo order, oldest first. return at most limit items, if limit is a positive number. merges are considered as non-draft as well. i.e. every commit returned has and only has 1 parent. ér)ÚphaserÚpublicÚlenÚparentsrCÚreverse)ÚheadctxÚlimitÚctxrFrNs r'Ú getdraftstackrS|s…€ð €CØ €FØ �)‰)‹+œŸ™Ò &Ù ”S˜“[ EÒ)Ø Ø—+‘+“-ˆÜ ˆw‹<˜1Ò Ø Ø� ‰ �cÔØ�a‰jˆð �)‰)‹+œŸ™Ó &ð ‡N�NÔØ €Mr)cóò—|€ t«}|sJ‚||dvrgifSg}i}|dj«}t|«D]X}||vr|}nP||}|j|«||vrd}n2|||<|j «}|sŒA|}||vsŒH|j«}n|�A||vr|j||«n(|jt |j «««|j«t|«|fS)aP([ctx], str, set) -> [fctx], {ctx: fctx} stack is a list of contexts, from old to new. usually they are what "getdraftstack" returns. follows renames, but not copies. seenfctxs is a set of filecontexts that will be considered "immutable". they are usually what this function returned in earlier calls, useful to avoid issues that a file was "moved" to multiple places and was then modified differently, like: "a" was copied to "b", "a" was also copied to "c" and then "a" was deleted, then both "b" and "c" were "moved" from "a" and we enforce only one of them to be able to affect "a"'s content. return an empty list and an empty dict, if the specified path does not exist in stack[-1] (the top of the stack). otherwise, return a list of de-duplicated filecontexts, and the map to convert ctx in the stack to fctx, for possible mutable fctxs. the first item of the list would be outside the stack and should be considered immutable. the remaining items are within the stack. for example, given the following changelog and corresponding filelog revisions: changelog: 3----4----5----6----7 filelog: x 0----1----1----2 (x: no such file yet) - if stack = [5, 6, 7], returns ([0, 1, 2], {5: 1, 6: 1, 7: 2}) - if stack = [3, 4, 5], returns ([e, 0, 1], {4: 0, 5: 1}), where "e" is a dummy empty filecontext. - if stack = [2], returns ([], {}) - if stack = [7], returns ([1, 2], {7: 2}) - if stack = [6, 7], returns ([1, 2], {6: 1, 7: 2}), although {6: 1} can be removed, since 1 is immutable. Néÿÿÿÿr) rAÚp1ÚreversedrCÚ copysourcer4r8rOrH) ÚstackÚpathÚ seenfctxsÚfctxsÚfctxmapÚpctxrRÚfctxÚcopys r'Ú getfilestackra“s €ðJÐÜ“Eˆ Ù €Lˆ5à �5˜‘9ÑØ�2ˆvˆ à €EØ€Gà �‰8�;‰;‹=€DÜ˜ŽˆØ �s‰?؈DÙ Ø�4‰yˆØ � ‰ �TÔØ �9Ñ ØˆD٠؈�‰ Ø�‰Ó ˆÚ ؈DØ�sŠ{Ø—v‘v“x�Ùðð" ÐØ �4‰<Ø �L‰L˜˜d™Õ $à �L‰LÔ)¨$¯)©)«+Ó6Ô 7à ‡M�M„Oô �‹;˜Ð Ðr)có—eZdZdZd„Zd„Zy)Ú overlaystorezsread-only, hybrid store based on a dict and ctx. memworkingcopy: {path: content}, overrides file contents. có —||_||_yr#)ÚbasectxÚmemworkingcopy)r7rerfs r'r9zoverlaystore.__init__ês€ØˆŒ Ø,ˆÕr)có—||jvry|j|}||jvr|j|}n|j«}|j«|j «f}|j «}|||fS)z-comply with mercurial.patch.filestore.getfile©NNN)rerfr<ÚislinkÚisexecrX)r7rZr_ÚcontentÚmoder`s r'Úgetfilezoverlaystore.getfileîsw€à �t—|‘|Ñ #Ø#Ø�|‰|˜DÑ!ˆØ �4×&Ñ&Ñ &Ø×)Ñ)¨$Ñ/‰Gà—i‘i“kˆGØ— ‘ “ ˜tŸ{™{›}Ð-ˆØ�‰Ó ˆØ˜˜dÐ"Ð"r)N)r,r-r.r/r9rmr$r)r'rcrcås„ñò-ó #r)rcc ó¼—|€7|j«jj|j««}|€|j «}|€|j «}|j «}|j«}t|j««j|«}t||«}tj|j«||||||d|¬« S)zi({path: content}, ctx, (p1node, p2node)?, {}?) -> memctx memworkingcopy overrides file contents. N) r8rNÚtextÚfilesÚ filectxfnÚuserÚdateÚbranchÚextra)r8Ú changelogrNr?ruÚ descriptionrsrrrArpÚunionrcrÚmemctx) rfrRrNruÚdescrsrrrpÚstores r'Úoverlaycontextr|üs»€ð €Ø—(‘(“*×&Ñ&×.Ñ.¨s¯x©x«zÓ:ˆØ €}Ø— ‘ “ ˆØ €|Ø�‰Ó ˆØ �8‰8‹:€DØ �8‰8‹:€DÜ �— ‘ “ Ó × "Ñ " >Ó 2€EÜ ˜˜nÓ -€EÜ �>‰>Ø �X‰X‹ZØØ ØØØ Ø ØØô ð r)cón—eZdZdZdd„Zdd„Zd„Zd„Zd„Ze d„«Z d „Z d „Z d „Z d „Zdd „Zd„Zd„Zy)Úfilefixupstatea state needed to apply fixups to a single file internally, it keeps file contents of several revisions and a linelog. the linelog uses odd revision numbers for original contents (fctxs passed to __init__), and even revision numbers for fixups, like: linelog rev 1: self.fctxs[0] (from an immutable "public" changeset) linelog rev 2: fixups made to self.fctxs[0] linelog rev 3: self.fctxs[1] (a child of fctxs[0]) linelog rev 4: fixups made to self.fctxs[1] ... a typical use is like: 1. call diffwith, to calculate self.fixups 2. (optionally), present self.fixups to the user, or change it 3. call apply, to apply changes 4. read results from "finalcontents", or call getfinalcontent Ncó—||_||_|xs t«|_|xsi|_|D�cgc]}|j «‘Œc}|_tjtj|j «|_ |j«|_ |jjr|j«|j k(sJ‚ddg|_g|_g|_g|_t)«|_ycc}w)z»([fctx], ui or None) -> None fctxs should be linear, and sorted by topo order - oldest first. fctxs[0] will be considered as "immutable" and will not be changed. rN)r\rZr ÚuiÚoptsr<ÚcontentsrÚmaplistr Ú splitnewlinesÚ contentlinesÚ _buildlinelogr r0Ú_checkoutlinelogÚ chunkstatsÚ targetlinesÚfixupsÚ finalcontentsrAÚ ctxaffected)r7r\rZr€r�Úfs r'r9zfilefixupstate.__init__.sҀ𠈌 ؈Œ Ø’.œ›ˆŒØ’J˜BˆŒ ñ,1Ó1©5 a˜Ÿ™�¨5Ñ1ˆŒ Ü$×,Ñ,¬U×-@Ñ-@À$Ç-Á-ÓPˆÔØ×)Ñ)Ó+ˆŒ Ø �7‰7× Ò Ø×(Ñ(Ó*¨d¯m©mÒ;Ð ;Ð;ð˜a˜&ˆŒØˆÔ؈Œ ؈ÔÜ›5ˆÕùò2s±C;có¾—|jd}|jd}|j«}tj|«}||_|j j|j j«|j j}t|«t|«k(sJ‚|r$|dd|dddzf}|j|«|j||||«D]x} |j| |«} |jdxxt| «z cc<|jdxxdz cc<|xj | z c_|€Œd|j#|||| | «Œzy)a³calculate fixups needed by examining the differences between self.fctxs[-1] and targetfctx, chunk by chunk. targetfctx is the target state we move towards. we may or may not be able to get there because not all modified chunks can be amended into a non-public fctx unambiguously. call this only once, before apply(). update self.fixups, self.chunkstats, and self.targetlines. rUrrJN)r‚r…r<r r„r‰r ÚannotateÚmaxrevÚannotateresultrMrCÚ_alldiffchunksÚ_analysediffchunkrˆÚboolrŠÚ _showchanges) r7Ú targetfctxÚfmÚaÚalinesÚbÚblinesÚ annotatedÚ dummyendlineÚchunkÚ newfixupss r'Údiffwithzfilefixupstate.diffwithGs=€ð �M‰M˜"Ñ ˆØ×"Ñ" 2Ñ&ˆØ �O‰OÓ ˆÜ×$Ñ$ QÓ'ˆØ!ˆÔà � ‰ ×јdŸl™l×1Ñ1Ô2Ø—L‘L×/Ñ/ˆ Ü�9‹~¤ V£Ò,Ð,Ð,á Ø% b™M¨!Ñ,¨i¸©m¸AÑ.>ÀÑ.BÐCˆLØ × Ñ ˜\Ô *ð×(Ñ(¨¨A¨v°vÖ>ˆEØ×.Ñ.¨u°iÓ@ˆIØ �O‰O˜AÓ ¤$ y£/Ñ 1Ó Ø �O‰O˜AÓ  !Ñ #Ó Ø �KŠK˜9Ñ $�K؉~Ø×!Ñ! " f¨f°e¸YÕGñ ?r)c ó.—t|j«D]¶\}}}}}|j||}|jjrjt |dz d«dz}|jj td«t|j|j««||t|«fz«|jj|||||«Œ¸|jjdd«r|j!«|_y|j%«|_y)zŽapply self.fixups. update self.linelog, self.finalcontents. call this only once, before getfinalcontent(), after diffwith(). rJrés%s: chunk %d:%d -> %d lines ó edit_linesFN)rWrŠr‰r€r0ÚmaxÚwriterrr\r?rMr Ú replacelinesr�ÚgetÚ_checkoutlinelogwitheditsr‹r‡)r7ÚrevÚa1Úa2Úb1Úb2r›Úidxs r'Úapplyzfilefixupstate.applyjsì€ô$,¨D¯K©KÖ#8Ñ ˆC��R˜˜RØ×%Ñ% b¨Ð,ˆFØ�w‰w× Ò Ü˜3 ™7 A“¨1Ñ,�Ø—‘— ‘ ÜÐ6Ó7ܘTŸZ™Z¨™_×1Ñ1Ó3Ó4°b¸"¼cÀ&»kÐJñKôð �L‰L× %Ñ % c¨2¨r°2°rÕ :ð$9ð �9‰9�=‰=˜¨Ô .Ø!%×!?Ñ!?Ó!AˆDÕ à!%×!6Ñ!6Ó!8ˆDÕ r)cóV—|jj|«}|j|S)z@(fctx) -> str. get modified file content for a given filecontext)r\Úindexr‹)r7r_r®s r'Úgetfinalcontentzfilefixupstate.getfinalcontents'€à�j‰j×јtÓ$ˆØ×!Ñ! #Ñ&Ð&r)cóT—|\}}}}|||}|s1|r/|td|dz «h}|D� cgc]} || ddk7sŒ|| ‘Œ}} t|D� � chc]\} } | ’Œ c} } «} g} t| «dk(r<|j||dz d«r&| d}|dkDr€|dz}| j |||||f«nd||z ||z k(s||k(rTt ||«D]E} || \}}|dkDsŒ||k(rdx}}n || z|z }|dz}|dz}| j || | dz||f«ŒG|j | «Scc} wcc} } w)a½analyse a different chunk and return new fixups found return [] if no lines from the chunk can be safely applied. the chunk (or lines) cannot be safely applied, if, for example: - the modified (deleted) lines belong to a public changeset (self.fctxs[0]) - the chunk is a pure insertion and the adjacent lines (at most 2 lines) belong to different non-public changesets, or do not belong to any non-public changesets. - the chunk is modifying lines from different changesets. in this case, if the number of lines deleted equals to the number of lines added, assume it's a simple 1:1 map (could be wrong). otherwise, give up. - the chunk is modifying lines from a single non-public changeset, but other revisions touch the area as well. i.e. the lines are not continuous as seen from the linelog. rrJT)r¤ÚlistrMÚ _iscontinuousrCÚrangeÚ_optimizefixups)r7ržrœrªr«r¬r­ÚinvolvedÚnearbylinenumsÚiÚrÚlÚ involvedrevsrŸr©ÚfixuprevÚlinenumÚnb1Únb2s r'r“z filefixupstate._analysediffchunk„s‚€ð&‰ˆˆB��Bà˜R Ð#ˆÙ™Ið!¤# a¨¨a©£.Ð1ˆNá&4óÙ&4 ¸ À!¹ ÀQ¹È1Ó8L� ˜!“  nð ðô©8Ô4©8¡4 1 ašQ¨8Ò4Ó5ˆ ؈ Ü ˆ|Ó  Ò ! d×&8Ñ&8¸¸RÀ!¹VÀTÔ&Jà˜q‘/ˆCØ�QŠwØ ™7�Ø× Ñ  (¨B°°B¸Ð!;Õ<Ø �"‰W˜˜R™Ò  2¨¢8ä˜2˜r–]�Ø(¨™|‘ ��Wؘ“7ؘR’xØ$%˜ ˜™cà  1™f r™k˜Ø! A™g˜Ø" Q™w�HØ×$Ñ$ h°°1°q±5¸#¸sÐ%CÕDð#ð×#Ñ# IÓ.Ð.ùò/ùó5s¦D·DÁ D$ c#ófK—tj||||¬«}|D]\}}|dk7rŒ |–—Œy­w)z5like mdiff.allblocks, but only care about differences)Úlines1Úlines2ó!N)r Ú allblocks)r˜ršr™r›ÚblocksržÚbtypes r'r’zfilefixupstate._alldiffchunks·s9èø€ô—‘  A¨f¸VÔDˆÛ"‰LˆE�5ؘŠ}ØØ‹Kñ#ùs‚/1c ó^—tj«}dg}}tt|j««D]s}|j||j|}}|dzdz}|j ||||«}t t|««D]\} } } } |j|| | | | «Œ||}}Œu|S)z~calculate the initial linelog based on self.content{,line}s. this is similar to running a partial "annotate". r)r¢rJ) r r¶rMr‚r…r’rWr´r¦) r7Úllogr˜r™rºršr›ÚllrevÚchunksrªr«r¬r­s r'r†zfilefixupstate._buildlinelogÀs²€ô�‰Ó ˆØ˜ˆ6ˆÜ”s˜4Ÿ=™=Ó)Ö*ˆAØŸ ™  aÑ(¨$×*;Ñ*;¸AÑ*>ˆvˆAؘ‘E˜A‘IˆEØ×(Ñ(¨¨A¨v°vÓ>ˆFÜ"*¬4°«<Ö"8‘��B˜˜BØ×!Ñ! %¨¨R°°RÕ8ð#9à˜6ˆv‰Að +ðˆ r)có*—g}tt|j««D]o}|dzdz}|jj |«dj t |j|jj««}|j|«Œq|S)z1() -> [str]. check out file contents from linelogrJr¢r)) r¶rMr‚r r�ÚjoinÚmapÚ_getliner‘rC)r7r‚rºr©rks r'r‡zfilefixupstate._checkoutlinelogÏst€àˆÜ”s˜4Ÿ=™=Ó)Ö*ˆAØ�q‘5˜A‘+ˆCØ �L‰L× !Ñ ! #Ô &Ø—h‘hœs 4§=¡=°$·,±,×2MÑ2MÓNÓOˆGØ �O‰O˜GÕ $ð +ð ˆr)c óâ—|jj«}td«|jdj «z}t |j«D��cgc]\}}t |t«s||f‘Œ}}}t |«D]j\}\}}|td«d|zdt|«|z dzzt|j««|j«jdd«dfzz }Œl|td «dt|«zzz }td „«}|D]U\}}|jj|dzd z«|jjD]}||j!|«ŒŒW|D]F}|d d j#|D�� cgc]\}} |||vrdnd‘Œc} }«|j%|«fzz }ŒH|j&j)|d d¬«} | st+j,td««‚d gt|j«z} d} | t|«zdz} t/j0| «D]�}|j3d«rŒ|| dz | d zdk7r!t+j,td«|z«‚|| d zd}t t5j6|| | dz ««D]\}}|dk(sŒ | ||dxx|z cc<Œ Œ’| |k7r ddg|_| Scc}}wcc} }w)z&() -> [str]. prompt all lines for editsZHG: editing %s HG: "y" means the line to the right exists in the changeset to the top HG: rUsHG: %s/%s %s %s ó|ó-rJó rsHG: %s có—t«Sr#)rAr$r)r'Úz:filefixupstate._checkoutlinelogwithedits..ôs€¤c¤er)r¢s %s : %sr)óyó r)Úactionsempty editor textésHG:s : smalformed line: %sN)r Ú getalllinesrr\rZÚ enumerateÚ isinstancer4rMrr?rwÚsplitÚ defaultdictr�r‘rBrÎrÐr€Úeditr Ú InputErrorr r„Ú startswithrÚbytestrrˆ)r7ÚalllinesÚ editortextrºr�Ú visiblefctxsÚjÚlinesetr¼Ú_fÚ editedtextr‚Ú leftpadposÚcolonposÚ linecontentÚchs r'r¨z(filefixupstate._checkoutlinelogwitheditsÙs€à—<‘<×+Ñ+Ó-ˆô ð=ó ð�j‰j˜‰n×!Ñ!Ó#ñ  $ð ô" $§*¡*Ô-ô á-‘��1ܘaÔ!1Ô2ð�ŠFØ-ð ñ ô # <Ö0‰IˆA‰v��1Ø œ!Ð0Ó1Ø�q‘Øœ˜LÓ)¨AÑ-°Ñ1Ñ2Ü�a—f‘f“h“Ø— ‘ “×%Ñ% e¨QÓ/°Ñ2ð 5ññ ‰Jð1ð ”a˜ “n¨¬s°<Ó/@Ñ(@ÑAÑAˆ ô™mÓ,ˆÛ ‰DˆAˆqØ �L‰L× !Ñ ! 1 q¡5¨A¡+Ô .Ø—\‘\×0Ô0�ؘ‘ —‘˜qÕ!ñ1ð!ó ˆAØ ˜.Ø—‘ñ&2ôá%1™E˜A˜rð"# g¨a¡j¡™°dÑ:Ø%1òóð — ‘ ˜aÓ ð,ññ ‰Jðð—W‘W—\‘\ *¨c¸)�\ÓDˆ ÙÜ×"Ñ"¤1Ð%9Ó#:Ó;Ð ;à�5œ3˜tŸz™z›?Ñ*ˆØˆ ؤ LÓ 1Ñ1°AÑ5ˆÜ×$Ñ$ ZÖ0ˆAØ�|‰|˜FÔ#ØØ�˜A‘ ¨1¡ Ð-°Ò7Ü×&Ñ&¤qÐ)>Ó'?À!Ñ'CÓDÐDؘH q™L˜NÐ+ˆKÜ"Ü× Ñ   :°¸1± Ð!=Ó>ö‘��2ð˜“:ؘ\¨!™_¨QÑ/Ó0°KÑ?Ô0ñ ð 1ð ˜Ò #Ø  !˜fˆDŒO؈ùóm ùó0s ÁK%ÆK+có^—|\}}|dzr|j|dz|S|j|S)z@((rev, linenum)) -> str. convert rev+line number to line contentrJr¢)r…r‰)r7Úlineinfor©r¿s r'rÐzfilefixupstate._getlines=€à‰ ˆˆWØ �Š7Ø×$Ñ$ S¨A¡XÑ.¨wÑ7Ð 7à×#Ñ# GÑ,Ð ,r)cóà—||k\ry|j}|j|«}|j|«t|«z}|j||«}t |«||z t|«zk(S)a(a1, a2 : int) -> bool check if these lines are continuous. i.e. no other insertions or deletions (from other revisions) among these lines. closedinterval decides whether a2 should be included or not. i.e. is it [a1, a2), or [a1, a2] ? T)r Ú getoffsetÚintrÛrM)r7rªr«ÚclosedintervalrÊÚoffset1Úoffset2Úlinesinbetweens r'rµzfilefixupstate._iscontinuous%sm€ð �Š8ØØ�|‰|ˆØ—.‘. Ó$ˆØ—.‘. Ó$¤s¨>Ó':Ñ:ˆØ×)Ñ)¨'°7Ó;ˆÜ�>Ó" b¨2¡g´°NÓ0CÑ&CÑCÐCr)có@‡ ‡—gŠgd¢gŠ ˆ ˆfd„}t|«D]y\}}|\}}}}} ‰ dd} ‰ dd} ‰ dd} || k(r:|| k(r5|| k(r0|jt|dz d«|«r|‰ dd<| ‰ dd<Œe|«t|«‰ d<Œ{|«‰S)zx[(rev, a1, a2, b1, b2)] -> [(rev, a1, a2, b1, b2)]. merge adjacent fixups to make them less fragmented. )rUrUrUrUrUcóX•—‰dddk7r‰jt‰d««yy)NrrU)rCÚtuple)Ú pcurrentchunkrFs€€r'Ú pushchunkz1filefixupstate._optimizefixups..pushchunk=s0ø€Ø˜QÑ Ñ" bÒ(Ø— ‘ œe M°!Ñ$4Ó5Õ6ð)r)rr¢rÚrJ)rÜrµr¤r´)r7rŠrürºržr©rªr«r¬r­ÚlastrevÚlasta2Úlastb2rûrFs @@r'r·zfilefixupstate._optimizefixups6s×ù€ðˆÚ-Ð.ˆ õ 7ô" &Ö)‰HˆAˆuØ"'Ñ ˆC��R˜˜RØ# AÑ& qÑ)ˆGØ" 1Ñ% aÑ(ˆFØ" 1Ñ% aÑ(ˆFà�f’ ؘ&’Lؘ7’NØ×&Ñ&¤s¨2°©6°1£~°rÔ:ð')� ˜aÑ  Ñ#Ø&(� ˜aÑ  Ò#á” Ü#'¨£;� ˜aÒ ð!*ñ" Œ ؈ r)c óX‡‡—d„}|\}}} } dg||z zdg| | z z} } |D]Z\} }}}}t||«D]}t| d«dz dz| ||z <Œt||«D]}t| d«dz dz| || z <ŒŒ\‰j«‰jddd|||z | | | z fzd¬ «‰j ‰j d¬ «ˆˆfd „}t||«D]}|| ||z d |||«d d«Œt| | «D]}|| || z d|||«dd«Œy)Ncó2—|jd«r|dd}|S)NrÔrU)Úendswith)Úlines r'Útrimz)filefixupstate._showchanges..trimVs€Ø�}‰}˜UÔ#ؘC˜R�y�؈Kr)rrJr¢shunks %s s@@ -%d,%d +%d,%d @@s diff.hunk©Úlabel©rZÚlinetypecóx•—‰j«d}|rZ‰j|}‰j|¬«|j«}‰jj |j ««‰jdd|d¬«‰jd|zd|||¬«‰j‰j|¬ «y) Nr))r_ónodeó%-7.7s rrs diffchar s%s%s r) Ú startitemr\rrrŒrBÚ changectxr¥r<rZ) r®ÚdiffcharrrÚ linelabelr?rRr—r7s €€r'Ú writelinez.filefixupstate._showchanges..writelinens£ø€Ø �L‰LŒN؈DÙØ—j‘j ‘o�Ø— ‘  � Ô$Ø—w‘w“y�Ø× Ñ ×$Ñ$ S§]¡]£_Ô5Ø �H‰H�W˜j¨$°nˆHÔ EØ �H‰HؘxÑ'ØØØØð ô ð �G‰G˜Ÿ™¨XˆGÕ 6r)rÓsdeleteds diff.deletedó+sinserteds diff.inserted)r¶r¤r r¥r<rZ)r7r—r™r›ržrŠrrªr«r¬r­ÚaidxsÚbidxsr®Úfa1Úfa2Úfb1Úfb2rºrs`` r'r•zfilefixupstate._showchangesUslù€ò ð‰ˆˆB��BØ�s˜b 2™g‘¨¨¨r°B©w©ˆuˆÛ'-Ñ #ˆC��c˜3 Ü˜3 –_�Ü!$ S¨!£¨q¡°QÑ 6��a˜"‘f’ ð%ä˜3 –_�Ü!$ S¨!£¨q¡°QÑ 6��a˜"‘f’ ñ%ð(.ð � ‰ ŒØ �‰Ø Ø Ø " b¨"¨r©'°2°r¸B±wÐ%?Ñ ?Øð ô ð �‰�T—Y‘Y¨ˆÔ1õ 7ô$�r˜2–ˆAÙ Ø�a˜"‘f‘ ØÙ�V˜A‘Y“ØØõ  ðô�r˜2–ˆAÙ Ø�a˜"‘f‘ ØÙ�V˜A‘Y“ØØ õ  ñr)©NNr#)F)r,r-r.r/r9r r¯r²r“Ú staticmethodr’r†r‡r¨rÐrµr·r•r$r)r'r~r~s]„ñó*!ó2!HòF9ò*'ò 1/ðfñóðò òòBòH-óDò"ó>:r)r~cóÈ—eZdZdZdd„Zdd„Zd„Zed„«Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zedd„«Zdd„Zej(d„«Zd„Zej(d„«Zy)Ú fixupstatea^state needed to run absorb internally, it keeps paths and filefixupstates. a typical use is like filefixupstates: 1. call diffwith, to calculate fixups 2. (optionally), present fixups to the user, or edit fixups 3. call apply, to apply changes to memory 4. call commit, to commit changes to hg database Ncó—|sJ‚|xs t«|_|xsi|_||_|dj «j «|_g|_d|_i|_i|_ i|_ d|_ t«|_ y)z¤([ctx], ui or None) -> None stack: should be linear, and sorted by topo order - oldest first. all commits in stack are considered mutable. rUN)r r€r�rYr8Ú unfilteredÚpathsÚstatusr]ÚfixupmapÚ replacemapÚ finalnoderArŒ)r7rYr€r�s r'r9zfixupstate.__init__Ÿs{€ñ ˆ ˆuØ’.œ›ˆŒØ’J˜BˆŒ ؈Œ ؘ"‘I—N‘NÓ$×/Ñ/Ó1ˆŒ ðˆŒ ØˆŒ ؈Œ ؈Œ ؈ŒØˆŒÜ›5ˆÕr)có"—|jdj||«|_g|_|jj d«}|jj s|r|r|j «}n|jj }t«}t|«D�]o}|jjd|z«||}t|j||«\} } td„|g| zD««rŒX|j«| dj«k(r|sŒ|j| dd«| |j|<t!| ||j|j¬«} |�H|j#«|j%d«|j'd d |d ¬ «|jd ¬ «| j)||«| |j*|<|jj-|«|j.j| j.«�Œry)z9diff and prepare fixups. update self.fixupmap, self.pathsrUr£scalculating fixups for %s c3ó¦K—|]I}t|t«s7|j«xs#tj|j ««–—ŒKy­wr#)rÝr4rirÚbinaryr<)Ú.0r�s r'Ú z&fixupstate.diffwith..ÉsBèø€ðá-�AÜ! !Ô%5Ô6ð—‘“ Ò9œj×/Ñ/°·±³Ó9Ó9Ù-ùs‚AArJN©r€r�sshowing changes for spathó%s rr©r)rYrrr�r§ÚmodifiedrprAÚsortedr€ÚdebugraÚanyr<Úupdater]r~r Úplainr¥r r rCrŒ) r7Ú targetctxÚmatchr—ÚeditoptÚinterestingpathsr[rZr–r\Úctx2fctxÚfstates r'r zfixupstate.diffwith´sµ€ð—j‘j ‘n×+Ñ+¨I°uÓ=ˆŒ ؈Œ ð—)‘)—-‘-  Ó.ˆØ�{‰{×#Ò#©±EØ$Ÿ{™{›}Ñ à#Ÿ{™{×3Ñ3Ð ä“Eˆ ôÐ+×,ˆDØ �G‰G�M‰MÐ8¸4Ñ?Ô @Ø" 4™ˆJÜ*¨4¯:©:°t¸YÓG‰OˆE�8äñà$˜¨Ò-óôð Ø�‰Ó  E¨"¡I§N¡NÓ$4Ò4¹WØØ × Ñ ˜U 1 2˜YÔ 'Ø!)ˆD�L‰L˜Ñ Ü# E¨4°D·G±GÀ$Ç)Á)ÔLˆF؈~Ø— ‘ ”Ø—‘Ð0Ô1Ø—‘˜ '¨4°~�ÔFØ—‘ �Ô)Ø �O‰O˜J¨Ô +Ø"(ˆD�M‰M˜$Ñ Ø �J‰J× Ñ ˜dÔ #Ø × Ñ × #Ñ # F×$6Ñ$6Ö 7ñ1-r)cóâ—|jj«D]R\}}|jjr'|jj t d«|z«|j «ŒTy)z*apply fixups to individual filefixupstatessapplying fixups to %s N)r Úitemsr€r0r¥rr¯©r7rZÚstates r'r¯zfixupstate.applyÞsN€àŸ=™=×.Ñ.Ö0‰KˆD�%Ø�w‰w× Ò Ø—‘— ‘ œaÐ :Ó;¸dÑBÔCØ �K‰K�Mñ1r)có~—|jj«D��cic]\}}||j“Œc}}Scc}}w)z>-> {path: chunkstats}. collect chunkstats from filefixupstates)r r8rˆr9s r'rˆzfixupstate.chunkstatsås:€ð;?¿-¹-×:MÑ:MÔ:OÔPÑ:O©;¨4°��e×&Ñ&Ñ&Ð:OÒPÐPùÓPsž9cód—|jjd«5}|j«|j|«|jdj «|j vr|j «|j«ddd«|jS#1swY|jSxYw)z6commit changes. update self.finalnode, self.replacemapró.N) r8Ú transactionÚ _commitstackÚ_movebookmarksr?r!Ú_moveworkingdirectoryparentÚ_cleanupoldcommitsr")r7Útrs r'Úcommitzfixupstate.commitêsˆ€à �Y‰Y× "Ñ " 9Ô -°Ø × Ñ Ô Ø × Ñ  Ô #Ø�y‰y˜‰×#Ñ#Ó%¨¯©Ñ8Ø×0Ñ0Ô2Ø × #Ñ #Ô %÷ .ð �~‰~Ð÷ .ð �~‰~Ðús œA+BÂB/cól‡—|j}|j}|jrE|j«D]1\}}|dsŒ |j t d«||d|dfz«Œ3y|j s>|j«Šˆfd„dD«\}}|j t d«||fz«yy)z+print things like '1 of 2 chunk(s) applied'rs%s: %d of %d chunk(s) applied rJc3óH•‡K—|]Štˆfd„‰D««–—Œy­w)c3ó(•K—|] }|‰–—Œ y­wr#r$)r&Úsrºs €r'r'z7fixupstate.printchunkstats...søèø€Ð!6±¨1 ! A¥$±ùsƒN)Úsum)r&rºÚstatss @€r'r'z-fixupstate.printchunkstats..sùèø€ÐGÁ¸1œcÓ!6±Ó!6×6Áùs„")rrJs%d of %d chunk(s) applied N)r€rˆr1r8r¥rr2Úvalues)r7r€rˆrZÚstatÚappliedÚtotalrJs @r'Úprintchunkstatszfixupstate.printchunkstatsôs¬ø€à �W‰WˆØ—_‘_ˆ Ø �:Š:à(×.Ñ.Ö0‘ ��dؘ“7Ø—H‘HÜÐ<Ó=Ø  a¡¨$¨q©'Ð2ñ3õñ1ð —’à×%Ñ%Ó'ˆEÛGÁÓG‰NˆG�UØ �H‰H”QÐ5Ó6¸'À5Ð9IÑIÕ Jð r)cóD—d}d}|jD�]s}|j|«}|s|s|}Œ|j«xr|j|||«}|jr+|r)d|j |j «<td«}n¨|j|||¬«}|j|}|}|j «|j |j «<|r9|r td«}n td«}|t|«|j|«fz}ntd«|j|«z}|jjs�Œ8|s�Œ<|jjtd«|j|«|fz«�Œv|xr|j «|_y)z†make new commits. update self.finalnode, self.replacemap. it is splitted from "commit" to avoid too much indentation. Nsbecame empty and was dropped)rVs&%d file(s) changed, became empty as %ss%d file(s) changed, became %ss became %ss%s: %s )rYÚ_getnewfilecontentsrpÚ_willbecomenoopÚskip_empty_successorr!r?rÚ _commitsingler8rMÚ_ctx2strr€r1r¥r")r7Ú lastcommittedÚnextp1rRrfÚwillbecomenoopÚmsgÚnodestrs r'r?zfixupstate._commitstacksx€ð ˆ ðˆØ—:•:ˆCØ!×5Ñ5°cÓ:ˆNÙ!©-à�ØØ ŸY™Y›[ò¨T×-AÑ-AØ  Vó.ˆNð×(Ò(©^à.2�—‘ §¡£ Ñ+ÜÐ7Ó8‘ð×,Ñ,¨^¸SÀVÐ,ÓL�Ø $§ ¡ ¨'Ñ 2� Ø&�Ø.;×.@Ñ.@Ó.B�—‘ §¡£ Ñ+Ù!Ù%ÜÐ IÓJ™äÐ @ÓA˜ØÜ˜NÓ+ØŸ ™  mÓ4ð!ñ‘Cô ˜L›/¨D¯M©M¸-Ó,HÑH�CØ�w‰w�Œ£3Ø—‘— ‘ œa  ›n°· ± ¸cÓ0BÀCÐ/HÑHÖIð?ð@'Ò?¨=×+=Ñ+=Ó+?ˆ�r)cóÌ—|jjr#d|j«|j«fzSd|j«t |j ««fzS)Ns%d:%s)r€r0r©rrr?)r7rRs r'rUzfixupstate._ctx2str1sL€Ø �7‰7× Ò Ø˜sŸw™w›y¨#¯'©'«)Ð4Ñ4Ð 4à˜sŸw™w›y¬%°·±³ Ó*;Ð<Ñ<Ð {path: str} fetch file contents from filefixupstates. return the working copy overrides - files different from ctx. )rr]r<r r²rZ)r7rRrFrZr5r_rkÚ newcontents r'rQzfixupstate._getnewfilecontents7s|€ð ˆØ—J”JˆDØ—|‘| DÑ)ˆHؘ(Ñ"ØØ˜C‘=ˆDØ—i‘i“kˆGØŸ™ tÑ,×<Ñ<¸TÓBˆJؘ*Ó$Ø&0��t—y‘y“{Ò#ððˆ r)cól—|j}|jj«D��cgc]$\}}||jvr||j|f‘Œ&}}}g}|D]µ\}}|r]|j ||f«|j j sŒ2|j jtd«|t|«fz«Œe|j |df«|j j sŒ�|j jtd«|z«Œ·|jj|||«ycc}}w)Nsmoving bookmark %s to %s sdeleting bookmark %s ) r8Ú _bookmarksr8r!rCr€r1r¥rrÚ applychanges)r7rCr8r*ÚhshÚ needupdateÚchangess r'r@zfixupstate._movebookmarksIs€Ø�y‰yˆð"Ÿ_™_×2Ñ2Ô4ô á4‘ ��cØ�d—o‘oÑ%ð�4—?‘? 3Ñ'Ò (Ø4ð ñ ð ˆÛ#‰IˆD�#ÙØ—‘  c˜{Ô+Ø—7‘7—?“?Ø—G‘G—M‘MÜÐ7Ó8¸DÄ#ÀcÃ(Ð;KÑKõð—‘  d˜|Ô,Ø—7‘7—?“?Ø—G‘G—M‘M¤!Ð$=Ó">ÀÑ"EÕFð$ð �‰×$Ñ$ T¨2¨wÕ7ùó# sª)D0cóÖ‡‡—|jsg|jjd|jj ««}|j|j «}|j «|_n|j|j}|jjŠd„}|}tj‰d«r-‰jjŠˆˆfd„}|‰j_ ‰j|j«5‰j|j «|j«|j«ddd«|«y#1swYŒxYw#|«wxYw)Nsmax(::. - %ln)có—y)Nrr$r$r)r'rÖz8fixupstate._moveworkingdirectoryparent..js€�qr)Ú_fsmonitorstatecó(•—‰‰j_yr#)rfÚ invalidate)ÚbakÚdirstates€€r'Úrestorez7fixupstate._moveworkingdirectoryparent..restoreosø€Ø69�×(Ñ(Õ3r))r"r8Úrevsr!ÚkeysÚfirstr?rjrÚ safehasattrrfrhÚchanging_parentsÚrebuildÚmanifestr)r7rlrRÚnooprkrirjs @@r'rAz&fixupstate._moveworkingdirectoryparent^sù€Ø�~Š~à—9‘9—>‘>Ð"3°T·_±_×5IÑ5IÓ5KÓLˆDØ—)‘)˜DŸJ™J›LÑ)ˆCØ ŸX™X›ZˆD�Nà—)‘)˜DŸN™NÑ+ˆCà—9‘9×%Ñ%ˆñˆØˆÜ × Ñ ˜HÐ&7Ô 8Ø×*Ñ*×5Ñ5ˆCõ :ð37ˆH× $Ñ $Ô /ð Ø×*Ñ*¨4¯9©9Õ5Ø× Ñ  §¡£¨S¯\©\«^¸T¿Z¹ZÔH÷6ñ �I÷6Ð5ûñ �Iús$Ã.EÄ :EÅEÅEÅEÅ E(có—|s$|j«}t|«dk7ry|d}|j«|j«k7ry|j«j d«ryt |j ««jt |««sy|j«D]Q\}}||vs||vry||}||}|j«|j«k7ry|j«|k7sŒQyy)zã({path: content}, ctx, ctx) -> bool. test if a commit will be noop if it will become an empty commit (does not change anything, after the memworkingcopy overrides), return True. otherwise return False. rJFrscloseT) rNrMrtrur§rArpÚissubsetr8Úflagsr<)rfrRr^rNrZrkr_Úpfctxs r'rRzfixupstate._willbecomenoopysÞ€ñØ—k‘k“mˆGÜ�7‹|˜qÒ ØØ˜1‘:ˆDØ �:‰:‹<˜4Ÿ;™;›=Ò (ØØ �9‰9‹;�?‰?˜8Ô $Øä�3—9‘9“;Ó×(Ñ(¬¨^Ó)<Ô=ØØ+×1Ñ1Ö3‰MˆD�'ؘ4Ñ 4¨s¡?ÙØ�t‘9ˆDؘ‘JˆEØ�{‰{‹} § ¡ £ Ò,ÙØ�z‰z‹|˜wÓ&Ùð4ðr)c óÜ—|xr||jjf}|j«}|jr/|jj dd«r|j «|d<tj|j«|j«|jj«D��cic] \}}||g“Œ c}}«}t|||||¬«} | j«Scc}}w)zÎ(ctx, {path: content}, node) -> node. make a single commit the commit is a clone from ctx, with a (optionally) different p1, and different file contents replaced by memworkingcopy. rrs absorb_source)rurz)r8r>ruÚ _useobsoleter€Ú configboolrrÚupdate_hash_refsrwr!r8r|rD) r7rfrRrVrNruÚoldnodeÚnewnoderzÚmctxs r'rTzfixupstate._commitsingle—sØ€ð Ò/˜"˜dŸi™i×.Ñ.Ð/ˆØ— ‘ “ ˆØ × Ò  §¡×!3Ñ!3°I¸|Ô!LØ&)§g¡g£iˆEÐ"Ñ #ä×+Ñ+Ø �H‰H‹JØ �O‰OÓ ð)-¯©×(=Ñ(=Ô(?ô á(?Ñ$�G˜Wð˜'˜Ñ"Ø(?ò ó ˆôØ ˜C °¸Dô ˆð�{‰{‹}Ðùó sÂ2C(có^—tj|jtj«S)z () -> bool)r Ú isenabledr8Úcreatemarkersoptr;s r'ryzfixupstate._useobsolete¯s!€ô×!Ñ! $§)¡)¬X×-FÑ-FÓGÐGr)cóÀ—|jj«D��cic] \}}||�|gng“Œ}}}|r$tj|j|dd¬«yycc}}w)NrT)Ú operationÚfixphase)r!r8rÚ cleanupnodesr8)r7ÚkÚvÚ replacementss r'rBzfixupstate._cleanupoldcommits´sl€ðŸ™×-Ñ-Ô/ô á/‘��1ð �q�}�‘¨"Ñ ,Ø/ð ñ ñ Ü × Ñ Ø— ‘ ˜<°9Àtö ð ùó  sžAcóB—tj|jd«S)Nr)rrSr€r;s r'rSzfixupstate.skip_empty_successor¾s€ä×/Ñ/°·±¸ÓCÐCr)rr#)r,r-r.r/r9r r¯ÚpropertyrˆrDrOr?rUrQr@rArrRrTrÚ propertycacheryrBrSr$r)r'rr’s©„ñ ó!ó*(8òTðñQóðQòòKò$)@òV=ò ò$8ò*ð6òóðó:ð0 ×ÑñHóðHòð ×ÑñDóñDr)rcó—t|«tjtjfvry|j j «}|jt|j«zdz }gx|_ |_ tj«}|j|«tj|j!««}||j"z}|ddD�cgc]}|j%d«rŒ|dd‘Œ}}||||ffScc}w)zA(crecord.uihunk or patch.recordhunk) -> (path, (a1, a2, [bline]))rrJNrÓ)Útyper ÚuihunkrÚ recordhunkÚheaderÚfilenameÚfromlinerMÚbeforeÚafterrÚstringior¥r r„ÚgetvalueÚremovedrâ)ÚhunkrZrªÚbufÚ patchlinesr«r¼r›s r'Ú _parsechunkr›ÃsÙ€ä ˆDƒzœ'Ÿ.™.¬%×*:Ñ*:Ð;Ñ;ØØ �;‰;× Ñ Ó !€DØ �‰œ˜TŸ[™[Ó)Ñ )¨AÑ -€Bà!Ð!€D„K�$”*Ü �-‰-‹/€C؇J�Jˆs„OÜ×$Ñ$ S§\¡\£^Ó4€Jà ˆd�l‰lÑ €BØ'¨¨™^Ó F™^˜°1·<±<ÀÕ3Eˆa��Še˜^€FÐ FØ �"�b˜&Ð!Ð !Ð!ùòGs ÃC?Ã/C?cóŽ—i}td„«}tt|«D]\}}|r|sŒ ||j|«Œ |j «D]h\}}||vs|sŒ |j d¬«t j||j««}|D] \}} } | ||| Œ dj|«||<Œjt||«S)z·(ctx, [crecord.uihunk]) -> memctx return a memctx with some [1] patches (chunks) applied to ctx. [1]: modifications are handled. renames, mode changes, etc. are ignored. có—gSr#r$r$r)r'rÖz$overlaydiffcontext..äs€¡2r)T)rOr)) rßrÏr›rCr8Úsortr r„r<rÎr|) rRrÌrfÚpatchmaprZÚinfoÚpatchesÚlinesrªr«r›s r'Úoverlaydiffcontextr£ÔsÊ€ð€NÜ™:Ó&€HÜœ+ vÖ.‰ ˆˆdÙ™4Ø Ø�‰×јdÕ#ð/ð"Ÿ™Ö)‰ ˆˆgØ �s‰?¡'Ø Ø� ‰ ˜Tˆ Ô"Ü×#Ñ# C¨¡I§N¡NÓ$4Ó5ˆÛ%‰NˆB��FØ!ˆE�"�R‰Lð&à"Ÿx™x¨›ˆ�tÒð*ô ˜.¨#Ó .Ð.r)có—|€Š|jdd«}|d}t|j««dkDrtjt d««‚t ||«}|r+t|«|k\r|jt d«|z«|stjt d««‚|€|d}|€d }|€i}t|||¬ «}tj|||«} |jd «rutj||d j«|j«| «} tj| «} t!j"|| | «d } t%|d | «}|jd«rd|d<d} |jd«s|jd«s|j'd|«} |j)|| | «| ��| j+«| j-ddt|j.««| j1d¬«t3|«D] }||j.vrŒ| j+«| j5|¬«| j1d¬«| j-dd|j7«d¬«t9j:|j=««}| j-dd|d¬«Œ¢| j?«|jd«s¦|jd«s=|j.r1|jAd d¬!«rtjBt d"««‚|jE«|jG«r|jI«|S|jJs|j-t d#««|S)$zÐpick fixup chunks from targetctx, apply them to stack. if targetctx is None, the working copy context will be used. if stack is None, the current draft stack will be used. return fixupstate. Nrrr=rJscannot absorb into a merges7absorb: only the recent %d changesets will be analysed sno mutable changeset to changer$r(ó interactiverUrr£Ts apply_changess print_changesscounts %d changesets affected ssummaryr*)rRs changesetr r rrs descfirstliner)ródry_runs#apply changes (y/N)? $$ &Yes $$ &Norsabsorb cancelled snothing applied )&Ú configintrMrNr rárrSÚwarnrrr2r§rÚdiffr?Ú parsepatchrÚ recordfilterr£Ú formatterr r r¥rŒr<rWrrrÚ firstlinerwÚendÚ promptchoiceÚ CanceledErrorr¯rDrOr2)r€r8rYr1Úpatsr�rQrPr:Úmatcherr©Ú origchunksrÌr—rRÚ descfirstlines r'Úabsorbrµôs€ð €}Ø— ‘ ˜YÐ(9Ó:ˆØ�t‘*ˆÜ ˆw�‰Ó Ó ! AÒ %Ü×"Ñ"¤1Ð%BÓ#CÓDÐ Dܘg uÓ-ˆÙ ”S˜“Z 5Ò(Ø �G‰GÜð%óðñ ô ñ Ü×ÑœqÐ!BÓCÓDÐDØÐؘ‘Jˆ Ø €|ØˆØ €|ØˆÜ �u ¨$Ô /€EÜ�m‰m˜I t¨TÓ2€GØ ‡x�x�ÔÜ�z‰z˜$  b¡ §¡Ó 0°)·.±.Ó2BÀGÓLˆÜ×%Ñ% dÓ+ˆ Ü×%Ñ% b¨*°gÓ>¸qÑAˆÜ& u¨R¡y°&Ó9ˆ Ø ‡x�x� Ôð"&ˆÐ ÑØ €BØ ‡x�xÐ Ô!¨¯©Ð2BÔ)CØ �\‰\˜) TÓ *ˆØ ‡N�N�9˜g rÔ*Ø �~Ø � ‰ ŒØ �‰Ø Ð3´S¸×9JÑ9JÓ5Kô ð �‰˜ˆÔ$ܘE–?ˆCؘ%×+Ñ+Ñ+ØØ �L‰LŒNØ �J‰J˜3ˆJÔ Ø �G‰G˜\ˆGÔ *Ø �H‰H�W˜j¨#¯'©'«)¸>ˆHÔ JÜ&×0Ñ0°·±Ó1BÓCˆMØ �H‰HØ ØØØ+ð õ ð#ð �‰ŒØ �8‰8�JÔ à—‘Ð)Ô*Ø×!Ò!Ø—‘Ø6Àð ôô×%Ñ%¤aÐ(=Ó&>Ó?Ð ?à � ‰ Œ Ø �<‰<Œ>Ø × !Ñ !Ô #ð €Lð—’Ø �H‰H”QÐ+Ó,Ô -Ø €Lr)óas apply-changess0apply changes without prompting for confirmationóps print-changess;always print which changesets are modified by which changesóir¥s*interactively select which chunks to applyóes edit-linessGedit what lines belong to which changesets before commit (EXPERIMENTAL)shg absorb [OPTION] [FILE]...)Ú helpcategoryÚ helpbasiccó”—tj|«}|j«5|j«5|dst j |«t ||||¬«}td„|jj«D««dk(r ddd«ddd«y ddd«ddd«y#1swYŒxYw#1swYyxYw)aäincorporate corrections into the stack of draft changesets absorb analyzes each change in your working directory and attempts to amend the changed lines into the changesets in your stack that first introduced those lines. If absorb cannot find an unambiguous changeset to amend for a change, that change will be left in the working directory, untouched. They can be observed by :hg:`status` or :hg:`diff` afterwards. In other words, absorb does not write to the working directory. Changesets outside the revset `::. and not public() and not merge()` will not be changed. Changesets that become empty after applying the changes will be deleted. By default, absorb will show what it plans to do and prompt for confirmation. If you are confident that the changes will be absorbed to the correct place, run :hg:`absorb -a` to apply the changes immediately. Returns 0 on success, 1 if all chunks were ignored and nothing amended. r¦)r±r�c3ó&K—|] }|d–—Œ y­w)rNr$)r&rHs r'r'zabsorbcmd..Œsèø€Ð7Ñ6˜ˆq��tÑ6ùs‚rNrJ) rÚ byteskwargsÚwlockÚlockrÚcheckunfinishedrµrIrˆrK)r€r8r±r�r:s r'Ú absorbcmdrÂGs’€ô| × Ñ  Ó %€Dà �‰��t—y‘y•{Ø�JÒÜ × #Ñ # DÔ )ä�r˜4 d°Ô6ˆÜ Ñ7˜U×-Ñ-×4Ñ4Ô6Ó7Ó 7¸1Ò <Ø÷ #�ˆð =÷ #�ˆ—{�{ú�ˆús)¦B>·AB2ÂB>Â!B>Â2B; Â7B>Â>Cr#rh)NNNN)2r/Ú collectionsÚmercurial.i18nrÚmercurial.noderrÚ mercurialrrrr r r r r rrrrrrrÚmercurial.utilsrÚ testedwithÚcmdtableÚcommandÚ configtableÚ configitemÚ colortablerßr r4rHrSraÚ filestorercr|r~rr›r£rµÚ dryrunoptsÚ templateoptsÚwalkoptsÚCATEGORY_COMMITTINGrÂr$r)r'ÚrÓsëðñó6å÷÷÷÷÷ñõ"'ð #€ à €Ø ˆ)× Ñ ˜HÓ %€à€ Ø !ˆY× !Ñ ! +Ó .€ á ˆ9�l¨DÕ1Ù ˆ9�m¨TÕ2Ù ˆ9Ð'°Õ4ð%Ø Øñ€ ð ×%Ñ%€ ÷ ñ ÷ !ñ !òóó.O ôd#�5—?‘?ô#ó.÷8wñw÷t nDñnDòb "ò"/ó@Pñf Ø ð Ø Ø Ù ÐAÓ Bð  ð Ø Ø Ù ÐLÓ Mð  ð Ø Ø Ù Ð;Ó <ð  ð Ø Ø Ù ð"ó ð  ð'ð:×Ññ;ð<×Ññ=ð>×Ññ?ñ@Ð%Ó&Ø×,Ñ,ØôI%ñL óM%ñL r)