Ë LC §R¼aãó”—ddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z ddl mZddlmZmZmZmZmZmZmZmZm Z mZmZmZmZddlmZmZm Z m!Z!ejDZ"ejFd«Z$ejFd «Z%ejFd «Z&ejNZ'ejPZ(ejRZ)d „Z*gd ¢Z+ejXd „«Z-d„Z.Gd„d«Z/d„Z0Gd„d«Z1Gd„d«Z2Gd„de2«Z3Gd„de3«Z4Gd„d«Z5Gd„de2«Z6ejFd«Z7ejFd«Z8gd ¢Z9Gd!„d"«Z:Gd#„d$«Z;Gd%„d&«ZGd)„d*«Z?Gd+„d,«Z@d-„ZAd.„ZBdSd/„ZCd0„ZDd1„ZEd2„ZFd3„ZGd4„ZHd5„ZIdTd6„ZJd7„ZK dTd8„ZLd9„ZM dUd:„ZN dVd;„ZO dUd<„ZP dWd=„ZQdXd>„ZRGd?„d@eS«ZTejªZVejªZUej®ZW dYdA„ZX dZdB„ZYdC„ZZdD„Z[dE„Z\dF„Z]dG„Z^dH„Z_dIdJdKdLœZ`dM„ZadN„ZbdO„ZcdP„Zdd[dQ„ZedR„Zfy)\éNé©Ú_)ÚhexÚsha1nodeconstantsÚshort)Úopen) ÚcopiesÚ diffhelperÚdiffutilÚencodingÚerrorÚmailÚmdiffÚpathutilÚpycompatÚscmutilÚsimilarÚutilÚvfs)ÚdateutilÚhashutilÚprocutilÚ stringutilsdiff --git a/(.*) b/(.*)s (\t+|[^\t]+)s9(\t+| +|[a-zA-Z0-9_\x80-\xff]+|[^ \ta-zA-Z0-9_\x80-\xff])có ‡ ‡ —d„Š d„Š ˆ fd„}ˆ fd„}ˆ fd„}ˆ ˆ fd„}ˆ fd„}Gd„d «}d }g}d g} tj|d «s||«}|D]¦} |j| «| jd «r |||«cS| jd«r |||«cS‰ | |«r3d}| j dd«dj «| vsŒ}|||«cS| jd«sŒš|sŒ�|||«cS||«S)z6return an iterator of individual patches from a streamcó —|r|jd«ry|jd«ry|jdd«}t|«dk(xrd|d vS) N)ó ó T)ró-ó+Fó: rérr)Ú startswithÚsplitÚlen)ÚlineÚinheaderÚls ú3usr/lib/python3.12/site-packages/mercurial/patch.pyÚisheaderzsplit..isheaderAsO€Ù ˜Ÿ™¨ Ô6àØ �?‰?Ð-Ô .àØ �J‰J�u˜aÓ ˆÜ�1‹v˜‰{Ò/˜t¨1¨Q©4Ð/Ð/ócó6—tdj|««S©Nr+)ÚstringioÚjoin)Úliness r)Úchunkzsplit..chunkKs€Ü˜Ÿ™ ›Ó(Ð(r+c3ó•K—d}|D]F}|j«sd}|s|jd«r‰|«–—g}d}|j|«ŒH|r ‰|«–—yy­w)NTFó# HG changeset patch)Ústripr#Úappend)ÚstreamÚcurr'r&r1s €r)Úhgsplitzsplit..hgsplitNsgøèø€ØˆãˆDØ—:‘:”<Ø �Ù §¡Ð0GÔ HÙ˜C“jÒ Ø�Ø�à �J‰J�tÕ ðñ Ù˜“*Ó ð ùsƒAAc3óÞ•K—|D]C}|jd«rt‰|dd««D]}|–—Œg}|j|«ŒE|rt‰|dd««D]}|–—Œyy­w)NóFrom r)r#r$r5)r6r7r&Úcr1s €r)Ú mboxsplitzsplit..mboxsplit^støèø€ÛˆDØ�‰˜xÔ(Ü™u S¨¨ W›~Ö.�AØ“Gð/à�à �J‰J�tÕ ð ñ Ü™5  Q R ›>Ö*�Ø“ñ+ð ùsƒA*A-c3ó •K—d„}|D]}|j|«Œ‰ |«}tj|«}|j«s ||«–—yd}|j «D]!}|j «}||vrŒ||«–—Œ#y­w)NcóŒ—t«}tj|d¬«}|j|«|j d«|S)NF)Ú mangle_from_r)r.rÚ GeneratorÚflattenÚseek)ÚmÚfpÚgs r)Úmsgfpz'split..mimesplit..msgfpls4€Ü“ˆBä—‘˜r°Ô6ˆAà �I‰I�aŒLØ �G‰G�AŒJ؈Ir+©ó text/plains text/x-diffs text/x-patch)r5rÚparseÚ is_multipartÚwalkÚget_content_type) r6r7rFr&r;rCÚok_typesÚpartÚctr1s €r)Ú mimesplitzsplit..mimesplitks…øèø€ò óˆDØ �J‰J�tÕ ðá �#‹Jˆä �J‰J�q‹MˆØ�~‰~ÔÙ˜“(‹NàGˆHØŸ™ž�Ø×*Ñ*Ó,�ؘXÑ%ØÙ˜D“kÓ!ñ !ùsƒB Bc3ó¨•K—d}|D]9}|s‰||«r‰|«–—g}d}|r ‰||«sd}|j|«Œ;|r ‰|«–—yy­w©NFT©r5)r6r7r'r&r1r*s €€r)Ú headersplitzsplit..headersplit„sgøèø€ØˆãˆDÙ¡¨¨xÔ 8Ù˜C“jÒ Ø�Ø�Ù¡¨¨xÔ 8Ø �à �J‰J�tÕ ðñ Ù˜“*Ó ð ùsƒAAc3ó"•K—‰|«–—y­w©N©)r7r1s €r)Ú remainderzsplit..remainder”søèø€Ù�C‹jÓùsƒ có"—eZdZd„Zd„Zd„ZeZy)úsplit..fitercó—||_yrV)rD©ÚselfrDs r)Ú__init__zsplit..fiter.__init__˜s €ØˆD�Gr+có—|SrVrW©r]s r)Ú__iter__zsplit..fiter.__iter__›s€ØˆKr+cóJ—|jj«}|st‚|SrV)rDÚreadlineÚ StopIteration©r]r(s r)Únextzsplit..fiter.nextžs"€Ø—‘× Ñ Ó"ˆAÙÜ#Ð#؈Hr+N)Ú__name__Ú __module__Ú __qualname__r^rarfÚ__next__rWr+r)ÚfiterrZ—s„ò ò ò ð ‰r+rkFs content-typerfr3r:Tó:rró--- )rÚ safehasattrr5r#r$Úlower) r6r8r<rPrTrXrkr'r7Ú mimeheadersr&r1r*s @@r)r$r$>s ù€ò0ò)ôô ô"õ2ô ÷ ñ ð€HØ €Cà"Ð#€Kä × Ñ ˜F FÔ +á�v“ˆãˆØ � ‰ �4ÔØ �?‰?Ð2Ô 3Ù˜6 3Ó'Ò 'Ø �_‰_˜XÔ &Ù˜V SÓ)Ò )Ù �d˜HÔ %؈HØ�z‰z˜$ Ó" 1Ñ%×+Ñ+Ó-°Ò<á  ¨Ó-Ò-Ø �_‰_˜WÕ %ª(á˜v sÓ+Ò +ðñ" �S‹>Ðr+))sDatesdate)sBranchsbranch)sNode IDónodeidc#ó*K—tjd¬«\}}tj|d«} t ||||«–—|j «tj |«y#|j «tj |«wxYw­w)a¤extract patch from data read from fileobj. patch can be a normal patch or contained in an email message. return a dictionary. Standard keys are: - filename, - message, - user, - date, - branch, - node, - p1, - p2. Any item can be missing from the dictionary. If filename is missing, fileobj did not contain a patch. Caller must unlink filename when done.ó hg-patch-©ÚprefixÚwbN)rÚmkstempÚosÚfdopenÚ_extractÚcloseÚunlink)ÚuiÚfileobjÚfdÚtmpnameÚtmpfps r)Úextractr‚Ìsoèø€ô$×"Ñ"¨,Ô7�K€BˆÜ �I‰I�b˜$Ó €EðÜ�r˜7 G¨UÓ3Ò3à � ‰ Œ Ü � ‰ �'Õøð � ‰ Œ Ü � ‰ �'Õüs‚0B³A)Á&BÁ)'BÂBc óÒ—tjdtjtjz«}i}t j |«}|dxrt j |d«}|dxrt j |d«|d<|s.|ds)djd„|j«D««dz}g}|d} | r.t j | «x|d<} |jd | z«|rh|jd «r,|jd «} | d k\r|| d zdj«}tjdd|«}|jd|z«|dr|jd|dz«d } d} d} |j«D�]p}tj |j#««}|jd|z«|| vrŒ@|j%d¬«}|j'|«}|�rôd}d}d}|jd|j)d «z«| d z } t+«}|d|j)d «j-«D�]K}|jd«r;|s9|jd«d}d}|j/d «|j1«d}nÒ|rÉ|jd«r |dd|d<|jd|dz«nŸ|jd«r#|j3|ddj««nk|jd«rPt4D]F\}}d |z}|j|«sŒ|t7|«d||<|jd!|||fz«ŒHn d}n|d"k(rd}|r�Œ&|r�Œ*|j9|«|j9d«�ŒN|j;«} |s�Œ#|j9|«|j=d«r�ŒG|j9d«�ŒZ| r�Œ^| s�Œb|d#k(s�Œi| d|zz } �Œs|r| j|«sd$|| fz} | |d%<|j?«|r*|jAd «|d&<|r|jAd «|d'<| r||d(<|S))Ns}^(?:Index:[ \t]|diff[ \t]-|RCS file: |retrieving revision [0-9]+(\.[0-9]+)*$|---[ \t].*?^\+\+\+[ \t]|\*\*\*[ \t].*?^---[ \t])ÚSubjectÚFromsuseró c3ónK—|]-}djttj|««–—Œ/y­w)r!N)r/Úmapr Ú strtolocal©Ú.0Úhs r)Ú z_extract..üs*èø€ðÙAL¸A�— ‘ œ3œx×2Ñ2°AÓ6×7Áùs‚35zX-Mercurial-Noderqs Node ID: %s s[PATCHó]rrs\n[ \t]+rs Subject: %s s From: %s rGr+sContent-Type: %s T)ÚdecodeFsfound patch at byte %d r3spatch generated by hg export s# User és # Parent é ó# s# %s s%s: %s ó---rHs%s %ssmessagesp1sp2sfilename)!ÚreÚcompileÚ MULTILINEÚDOTALLrrIÚ headdecoder/ÚitemsÚdebugr#ÚfindÚlstripÚsubrKrÚbytestrrLÚ get_payloadÚsearchÚstartr.Ú splitlinesrBÚtruncater5Úpatchheadermapr%ÚwriteÚgetvalueÚendswithr{Úpop)r}r~r€r�ÚdiffreÚdataÚmsgÚsubjectÚparentsÚnodeidÚpendÚ diffs_seenrMÚmessagerNÚ content_typeÚpayloadrCÚhgpatchÚ hgpatchheaderÚ ignoretextÚcfpr&ÚheaderÚkeyrus r)rzrzçs&€ô�Z‰Zð %ô � ‰ ”r—y‘yÑ ó €Fð €Dä �*‰*�WÓ €Cà�)‰nÒ@¤§¡°°Y±Ó!@€Gؘ‘KÒ@¤D§O¡O°C¸±KÓ$@€Dˆ�MÙ ˜4 š=ð �J‰JñØADÇÁÄóó ðñ ð ð€Gà Ð#Ñ $€FÙ Ü#'§?¡?°6Ó#:Ð:ˆˆY‰˜&Ø �‰Ð! FÑ*Ô+áØ × Ñ ˜iÔ (Ø—<‘< Ó%ˆDØ�qŠyØ! $¨¡( *Ð-×4Ñ4Ó6�Ü—&‘&˜ t¨WÓ5ˆØ �‰Ð! GÑ+Ô,Ø ˆG‚}Ø �‰�  g¡Ñ.Ô/Ø€JØ?€HØ€GØ—‘— ˆÜ×'Ñ'¨×(=Ñ(=Ó(?Ó@ˆ Ø �‰Ð&¨Ñ5Ô6Ø ˜xÑ 'Ø Ø×"Ñ"¨$Ð"Ó/ˆØ �M‰M˜'Ó "ˆÚ ؈GØ!ˆM؈Jà �H‰HÐ0°1·7±7¸1³:Ñ=Ô >Ø ˜!‰OˆJÜ“*ˆCØ   !§'¡'¨!£*Ð-×8Ñ8×:�Ø—?‘?Ð#:Ô;ÁGØ—H‘HÐ>Ô?Ø"�GØ$(�Mà—H‘H˜Q”KØ—L‘L”NØ"‘GÙ"Ø—‘ zÔ2Ø(,¨Q¨R¨˜˜W™ ØŸ™ °°g±Ñ!>Õ?ØŸ™¨Ô6ØŸ™ t¨A¨B x§¡Ó'8Õ9ØŸ™¨Ô/ß+9™K˜F CØ%-°Ñ%6˜FØ#Ÿ™¨vÕ6Ø,0´°V³°Ð,?  S¡ Ø "§¡¨¸ÀÀSÁ Ð7JÑ)JÕ Kñ ,:ð ).™ ؘV’^Ø!%�JÛ$«ZØ—I‘I˜d”OØ—I‘I˜eÖ$ð7;ð8—l‘l“nˆGÛØ— ‘ ˜GÔ$Ø×'Ñ'¨Ö.Ø—K‘K Ö&Û£¨L¸MÔ,IØ �u˜w‘Ñ &ŠGðcñf�w×)Ñ)¨'Ô2ؘw¨Ð0Ñ0ˆØ€DˆÑØ ‡K�K„MÙØ—k‘k !“nˆˆU‰ Ù Ø!Ÿ+™+ a›.ˆD�‰KáØ#ˆˆ[Ñà €Kr+có:—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z y ) Ú patchmetaa¬Patched file metadata 'op' is the performed operation within ADD, DELETE, RENAME, MODIFY or COPY. 'path' is patched file path. 'oldpath' is set to the origin file when 'op' is either COPY or RENAME, None otherwise. If file mode is changed, 'mode' is a tuple (islink, isexec) where 'islink' is True if the file is a symlink and 'isexec' is True if the file is executable. Otherwise, 'mode' is None. cóJ—||_d|_d|_d|_d|_y)NsMODIFYF)ÚpathÚoldpathÚmodeÚopÚbinary)r]r½s r)r^zpatchmeta.__init__cs%€ØˆŒ ؈Œ ؈Œ ؈ŒØˆ� r+có*—|dz}|dz}||f|_y)Ni é@)r¿)r]r¿ÚislinkÚisexecs r)Úsetmodezpatchmeta.setmodejs €Ø˜‘ˆØ˜‘ˆØ˜VÐ$ˆ� r+có¸—t|j«}|j|_|j|_|j|_|j |_|SrV)r»r½r¾r¿rÀrÁ)r]Úothers r)Úcopyzpatchmeta.copyosA€Ü˜$Ÿ)™)Ó$ˆØŸ ™ ˆŒ Ø—Y‘YˆŒ Ø—7‘7ˆŒØ—{‘{ˆŒ ؈ r+cój—|dk(r|jdk(S|d|jxs |jzk(S)Nó /dev/nullóADDóa/)rÀr¾r½)r]Úafiles r)Ú _ispatchingazpatchmeta._ispatchingaws6€Ø �LÒ Ø—7‘7˜fÑ$Ð $ؘ §¡Ò!:°·±Ñ;Ñ;Ð;r+cóN—|dk(r|jdk(S|d|jzk(S)NrËóDELETEób/©rÀr½)r]Úbfiles r)Ú _ispatchingbzpatchmeta._ispatchingb|s-€Ø �LÒ Ø—7‘7˜iÑ'Ð 'ؘ § ¡ Ñ)Ñ)Ð)r+cóJ—|j|«xr|j|«SrV)rÏrÕ)r]rÎrÔs r)Ú ispatchingzpatchmeta.ispatching�s#€Ø× Ñ  Ó'ÒD¨D×,=Ñ,=¸eÓ,DÐDr+có<—d|j›d|j›d�S)Nz rÓr`s r)Ú__repr__zpatchmeta.__repr__„s�Ø&*§g£g¨t¯y«yÐ9Ð9r+N) rgrhriÚ__doc__r^rÆrÉrÏrÕr×rÛrWr+r)r»r»Xs+„ñòò%ò ò<ò *ò Eó:r+r»có¢—d}g}|D�]±}|jd«}|jd«rHtj|«}|sŒ>|r|j |«|j d«}t |«}Œn|sŒq|jd«r|j |«d}Œ–|jd«rd|_|dd|_Œ¹|jd «r |d d|_ ŒÕ|jd «rd |_|d d|_Œø|jd «r |dd|_ �Œ|jd«r d|_�Œ/|jd«r'd|_|jt|ddd««�Œg|jd«r |jt|ddd««�Œ˜|jd«s�Œ«d|_ �Œ´|r|j |«|S)z9extract git-style metadata about patches from Nó ó diff --git a/r"rms rename from óRENAMEé s rename to é s copy from óCOPYscopy to és deleted filerÑsnew file mode rÌiúÿÿÿs new mode óGIT binary patchT) Úrstripr#ÚgitreÚmatchr5Úgroupr»rÀr¾r½rÆÚintrÁ)ÚlrÚgpÚ gitpatchesr&rCÚdsts r)Ú readgitpatchrïˆs–€ð €BØ€J܈Ø�{‰{˜7Ó#ˆØ �?‰?Ð+Ô ,Ü— ‘ ˜DÓ!ˆAÚÙØ×%Ñ% bÔ)Ø—g‘g˜a“j�ܘs“^‘Ú Ø�‰˜wÔ'Ø×!Ñ! "Ô%Ø�ØØ�‰˜Ô/Ø!�”Ø! " #˜Y�• Ø—‘ Ô/ؘr˜s˜)�•Ø—‘ Ô/Ø�”Ø! " #˜Y�• Ø—‘ Ô-ؘq˜r˜(�–Ø—‘ Ô1Ø!�–Ø—‘Ð!2Ô3Ø�”Ø— ‘ œ3˜t B C˜y¨!Ó,Ö-Ø—‘ Ô.Ø— ‘ œ3˜t B C˜y¨!Ó,Ö-Ø—‘Ð!4Ö5Ø �– ðAñB Ø×ј"Ôà Ðr+có$—eZdZd„Zd„Zd„Zd„Zy)Ú linereadercó —||_g|_yrV)rDÚbufr\s r)r^zlinereader.__init__·s€ØˆŒØˆ�r+có@—|�|jj|«yyrV)rór5©r]r&s r)Úpushzlinereader.push»s€Ø Ð Ø �H‰H�O‰O˜DÕ !ð r+cóŠ—|jr|jd}|jd=|S|jj«S©Nr)rórDrcres r)rczlinereader.readline¿s9€Ø �8Š8Ø—‘˜‘ ˆAØ—‘˜� ؈HØ�w‰w×ÑÓ!Ð!r+có.—t|jd«Sr-)Úiterrcr`s r)razlinereader.__iter__Æs€Ü�D—M‘M 3Ó'Ð'r+N)rgrhrir^rörcrarWr+r)rñrñµs„òò"ò"ó(r+rñcó6—eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z y) Úabstractbackendcó—||_yrV)r})r]r}s r)r^zabstractbackend.__init__Ës €Øˆ�r+có—t‚)z€Return target file data and flags as a (data, (islink, isexec)) tuple. Data is None if file is missing/deleted. ©ÚNotImplementedError©r]Úfnames r)Úgetfilezabstractbackend.getfileÎs €ô"Ð!r+có—t‚)a Write data to target file fname and set its mode. mode is a (islink, isexec) tuple. If data is None, the file content should be left unchanged. If the file is modified after being copied, copysource is set to the original file name. rÿ©r]rrªr¿Ú copysources r)Úsetfilezabstractbackend.setfileÔs €ô "Ð!r+có—t‚)zUnlink target file.rÿrs r)r|zabstractbackend.unlinkÜs€ä!Ð!r+có—y)zŸWrite rejected lines for fname. total is the number of hunks which failed to apply and total the total number of hunks for this files. NrW)r]rÚfailedÚtotalr0s r)Úwriterejzabstractbackend.writerejàs�r+có—t‚rVrÿrs r)Úexistszabstractbackend.existsæó€Ü!Ð!r+có—t‚rVrÿr`s r)r{zabstractbackend.closeérr+N) rgrhrir^rrr|r rr{rWr+r)rürüÊs%„òò"ò "ò"ò ò "ó"r+rücó<‡—eZdZˆfd„Zd„Zd„Zd„Zd„Zd„ZˆxZ S)Ú fsbackendcó`•—tt|� |«tj|«|_yrV)Úsuperrr^ÚvfsmodrÚopener)r]r}ÚbasedirÚ __class__s €r)r^zfsbackend.__init__îs"ø€Ü Œi˜Ñ'¨Ô+Ü—j‘j Ó)ˆ� r+cóJ—|jj|«r|jj|«dfSd} |jj|«jdzdk7} |jj |«d|ffS#t $rYŒ+wxYw#t $rYywxYw)N©TFFrÃr©NN)rrÄÚreadlinkÚlstatÚst_modeÚFileNotFoundErrorÚread)r]rrÅs r)rzfsbackend.getfileòs¦€Ø �;‰;× Ñ ˜eÔ $Ø—K‘K×(Ñ(¨Ó/°Ð?Ð ?àˆð Ø—[‘[×&Ñ& uÓ-×5Ñ5¸Ñ=ÀÑBˆFð Ø—K‘K×$Ñ$ UÓ+¨e°V¨_Ð=Ð =øô!ò Ù ð ûô!ò Ùð ús#¼+BÁ(B BÂB B"Â!B"có—|\}}|€|jj|||«y|r|jj||«y|jj||«|r|jj|dd«yyrR)rÚsetflagsÚsymlinkr¥)r]rrªr¿rrÄrÅs r)rzfsbackend.setfilesr€Ø‰ˆ�Ø ˆ<Ø �K‰K× Ñ  ¨°Ô 7Ø Ù Ø �K‰K× Ñ   eÕ ,à �K‰K× Ñ ˜e TÔ *ÙØ— ‘ ×$Ñ$ U¨E°4Õ8ðr+cóx—|jjdd«}|jj|d|¬«y)Ns experimentalsremoveemptydirsT)Ú ignoremissingÚrmdir)r}Ú configboolrÚ unlinkpath)r]rr&s r)r|zfsbackend.unlink s2€Ø—‘×"Ñ" ?Ð4FÓGˆØ � ‰ ×јu°DÀÐÕFr+cóÈ—|dz}|jjtd«|||fz«|j|d«}|j |«|j «y)Ns.rejs7%d out of %d hunks FAILED -- saving rejects to file %s ów)r}ÚwarnrrÚ writelinesr{)r]rr r r0rDs r)r zfsbackend.writerejsZ€Ø˜‘ˆØ �‰� ‰ Ü ÐIÓ JØ�u˜eÐ$ñ %ô ð�[‰[˜ Ó %ˆØ � ‰ �eÔØ �‰� r+có8—|jj|«SrV)rÚlexistsrs r)rzfsbackend.existss€Ø�{‰{×"Ñ" 5Ó)Ð)r+) rgrhrir^rrr|r rÚ __classcell__©rs@r)rrís"ø„ô*ò ò 9òGòö*r+rcó>‡—eZdZˆfd„Zd„Zˆfd„Zˆfd„Zd„ZˆxZS)Úworkingbackendc󨕗tt|� ||j«||_||_t «|_t «|_g|_ yrV) rr2r^ÚrootÚrepoÚ similarityÚsetÚremovedÚchangedÚcopied)r]r}r5r6rs €r)r^zworkingbackend.__init__s?ø€Ü Œn˜dÑ,¨R°·±Ô;؈Œ Ø$ˆŒÜ“uˆŒ Ü“uˆŒ ؈� r+có´—|jjj|«js)|j |«rt t d«|z«‚yy©Ns$cannot patch %s: file is not tracked)r5ÚdirstateÚ get_entryÚ any_trackedrÚPatchApplicationErrorrrs r)Ú _checkknownzworkingbackend._checkknown'sU€Ø�y‰y×!Ñ!×+Ñ+¨EÓ2×>Ò>À4Ç;Á;Ø ôD ô(ÜÐ9Ó:¸UÑBóð ðD Ð>r+cóÈ•—|j|«tt|�||||«|�|jj ||f«|j j|«yrV)rArr2rr:r5r9Úadd)r]rrªr¿rrs €r)rzworkingbackend.setfile/sUø€Ø ×јÔÜ Œn˜dÑ+¨E°4¸¸zÔJØ Ð !Ø �K‰K× Ñ   ¨EÐ2Ô 3Ø � ‰ ×јÕr+c󺕗|j|«tt|�|«|jj |«|j j |«yrV)rArr2r|r8rCr9)r]rrs €r)r|zworkingbackend.unlink6sDø€Ø ×јÔÜ Œn˜dÑ*¨5Ô1Ø � ‰ ×Ñ˜ÔØ � ‰ ×јÕr+c ó°—|jjj|j«5|jd}t|j«}|j D]2\}}t j|j|j|||«Œ4|jr_|jt|j««|jD],}||jjvsŒ|j|«Œ.|r+t j|j||j«t|j«cddd«S#1swYyxYwrV)r5r=Úchanging_filesr7r9r:rÚ dirstatecopyr}r8ÚforgetÚsortedÚdiscardÚ marktouchedr6)r]Úwctxr9ÚsrcrîÚfs r)r{zworkingbackend.close<sê€Ø �Y‰Y× Ñ × .Ñ .¨t¯y©yÕ 9Ø—9‘9˜T‘?ˆDܘ$Ÿ,™,Ó'ˆGØ ŸKœK‘��SÜ×$Ñ$ T§W¡W¨d¯i©i¸¸sÀCÕHð(à�|Š|Ø— ‘ œF 4§<¡<Ó0Ô1ØŸœ�AØ § ¡ × 2Ñ 2Ò2ð  Ÿ™¨Õ*ð &ñÜ×#Ñ# D§I¡I¨w¸¿¹ÔHܘ$Ÿ,™,Ó'÷!:× 9Ò 9ús°B=E Ã.AE Å E) rgrhrir^rArr|r{r/r0s@r)r2r2sø„ôòô ô ö (r+r2có(—eZdZdd„Zdd„Zd„Zd„Zy)Ú filestoreNcó~—d|_i|_d|_||_|j€d|_d|_i|_y)Nri@)rÚfilesÚcreatedÚmaxsizeÚsizerª)r]rTs r)r^zfilestore.__init__Qs=€ØˆŒ ؈Œ ؈Œ ؈Œ Ø �<‰<Ð Ø(ˆDŒL؈Œ ؈� r+cóê—|jdks%t|«|jz|jkr1|||f|j|<|xjt|«z c_y|j€0t j d¬«}tj|«|_d|jz}|jj||«|xjdz c_ |||f|j|<y)Nrrsrtó%dr) rTr%rUrªrrÚmkdtemprrrSr¥rR)r]rrªr¿r:r4Úfns r)rzfilestore.setfile[s¼€Ø �<‰<˜!Ò ¤ D£ ¨D¯I©IÑ 5¸$¿,¹,ÒFØ $ d¨FÐ3ˆD�I‰I�eÑ Ø �IŠIœ˜T›Ñ "ŽIà�{‰{Ð"Ü×'Ñ'¨|Ô<�Ü$Ÿj™j¨Ó.�” à˜Ÿ™Ñ%ˆBØ �K‰K× Ñ ˜b $Ô 'Ø �LŠL˜AÑ �LØ!# T¨6Ð 2ˆD�J‰J�uÒ r+cóÔ—||jvr|j|S|jr||jvry|j|\}}}|jj|«||fS)N)NNN)rªrrRr )r]rrYr¿r:s r)rzfilestore.getfileisc€Ø �D—I‘IÑ Ø—9‘9˜UÑ#Ð #Ø�{Š{˜e¨4¯:©:Ñ5Ø#ØŸ:™: eÑ,шˆD�&Ø�{‰{×Ñ Ó# T¨6Ð1Ð1r+cóp—|jr*tj|jj«yyrV)rÚshutilÚrmtreeÚbaser`s r)r{zfilestore.closeqs$€Ø �;Š;Ü �M‰M˜$Ÿ+™+×*Ñ*Õ +ð r+rV)rgrhrir^rrr{rWr+r)rPrPPs„óó 3ò2ó,r+rPcóB‡—eZdZˆfd„Zd„Zd„Zd„Zd„Zd„Zd„Z ˆxZ S)Ú repobackendcó •—tt|� |«||_||_||_t «|_t «|_i|_ yrV) rr`r^r5ÚctxÚstorer7r9r8r:)r]r}r5rbrcrs €r)r^zrepobackend.__init__ws@ø€Ü Œk˜4Ñ)¨"Ô-؈Œ ؈ŒØˆŒ Ü“uˆŒ Ü“uˆŒ ؈� r+cóN—||jvrttd«|z«‚yr<)rbr@rrs r)rAzrepobackend._checkknown€s.€Ø ˜Ÿ™Ñ Ü'ÜÐ9Ó:¸UÑBóð ð !r+có¤— |j|}|j«}|j «d|vd|vffS#tj$rYywxYw)Nrólóx)rbrÚ LookupErrorÚflagsrª)r]rÚfctxris r)rzrepobackend.getfile†sY€ð Ø—8‘8˜E‘?ˆDð— ‘ “ ˆØ�y‰y‹{˜T U˜]¨D°E¨MÐ:Ð:Ð:øô× Ñ ò Ùð ús‚9¹AÁAcóþ—|r|j|«|€|j|j«}|jj ||||«|j j |«|r||j|<yyrV)rArbrªrcrr9rCr:rs r)rzrepobackend.setfileŽsn€Ù Ø × Ñ ˜ZÔ (Ø ˆ<Ø—8‘8˜E‘?×'Ñ'Ó)ˆDØ � ‰ ×ј5 $¨¨jÔ9Ø � ‰ ×јÔÙ Ø!+ˆD�K‰K˜Ò ð r+có\—|j|«|jj|«yrV)rAr8rCrs r)r|zrepobackend.unlink˜s"€Ø ×Ñ˜ÔØ � ‰ ×јÕr+có—||jvSrV)rbrs r)rzrepobackend.existsœs€Ø˜Ÿ™Ð Ð r+có4—|j|jzSrV)r9r8r`s r)r{zrepobackend.closeŸs€Ø�|‰|˜dŸl™lÑ*Ð*r+) rgrhrir^rArrr|rr{r/r0s@r)r`r`vs&ø„ôòò ;ò,ò ò!ö+r+r`s*@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@s.(?:---|\*\*\*) (\d+)(?:,(\d+))? (?:---|\*\*\*))óstrictócrlfólfóautocó8—eZdZd d„Zd„Zd„Zd„Zd„Zd„Zd„Z y) Ú patchfilecóX—|j|_||_d|_||_||_g|_d|_d|_|j|_ |j|_ |jdv|_ |jdk(|_|j€|j|j«\}}n!|j|j«dd\}}|��|jduxs|j|j«|_d|_|rt!j"|«|_|j€||_ |j r»|j dj%d«rd|_n%|j dj%d«rd|_|d k7rkg}|j D],} | j%d«r| dd dz} |j'| «Œ.||_n&|jrd|_|j€d |_ |jrU|j j)t+d «|jz«|j j)t+d ««i|_d|_d|_d|_g|_d|_|j9d«d|_y)NFT)rÌrãràrÑr"rrÞr†roéþÿÿÿ)FFs!unable to find '%s' for patching sB(use '--prefix' to apply patch relative to the current directory) )r½rÚeolmodeÚeolÚbackendr}r0rÚmissingr¿r¾rrÀÚcreateÚremoverrÚ splitnewlinesr§r5r+rÚhashÚdirtyÚoffsetÚskewÚrejÚ fileprintedÚ printfileÚhunks) r]r}rìryrcrwrªr¿Únlinesr(s r)r^zpatchfile.__init__ªs5€Ø—W‘WˆŒ ؈Œ ؈ŒØˆŒ ؈ŒØˆŒ ؈Œ ؈Œ Ø—G‘GˆŒ ØŸ*™*ˆŒØ—e‘eÐ;Ð;ˆŒ Ø—e‘e˜yÑ(ˆŒ Ø �?‰?Ð "Ø Ÿ™¨¯©Ó4‰JˆD‘$àŸ™ t§¡Ó7¸¸Ð;‰JˆD�$Ø Ñ ØŸ/™/¨TÐ1ÒO°W·^±^ÀDÇJÁJÓ5OˆDŒKØ ˆDŒLÙÜ"×0Ñ0°Ó6�” Ø�y‰yÐ Ø �” Ø�zŠzà—:‘:˜a‘=×)Ñ)¨'Ô2Ø&�D•HØ—Z‘Z ‘]×+Ñ+¨EÔ2Ø$�D”HؘiÒ'Ø�FØ!ŸZœZ˜ØŸ:™: gÔ.Ø ! # 2 ¨¡˜AØŸ ™  aÕ(ð(ð"(�D•Jà�{Š{Ø$�” Ø�y‰yÐ Ø*�” Ø �<Š<Ø �G‰G�L‰LœÐ@ÓAÀDÇJÁJÑNÔ OØ �G‰G�L‰LÜð,óô ðˆŒ ØˆŒ ؈Œ ؈Œ ؈ŒØ ˆÔØ �‰�uÔØˆ� r+cól—|jdk(r |j}n|jdk(rd}nd}|jdk7r>|r<|dk7r7g}|D].}|r|jd«r|dd|z}|j|«Œ0|}|jj |dj |«||j«y)NrrrprÞr†roéÿÿÿÿr+)rwrxr§r5ryrr/r)r]rr0r¿rxÚrawlinesr(s r)r,zpatchfile.writelinesæs¤€Ø �<‰<˜7Ò "Ø—(‘(‰CØ �\‰\˜WÒ $؉CàˆCà �<‰<˜9Ò $©°¸²ØˆHÛ�Ù˜Ÿ™ EÔ*ؘ#˜2˜ ™ �AØ—‘ Õ"ððˆEà � ‰ ×јU C§H¡H¨U£O°T¸4¿?¹?ÕKr+cóþ—|jry|s|jjrd|_td«|jz}|r|jj |«y|jj |«y)NTspatching file %s )rƒr}Úverboserrr+Únote)r]r+Úss r)r„zpatchfile.printfileøsX€Ø × Ò Ø Ù �4—7‘7—?’?Ø#ˆDÔ Ü Ð#Ó $ t§z¡zÑ 1ˆÙ Ø �G‰G�L‰L˜�Oà �G‰G�L‰L˜�Or+c󆇗|jj|g«}t|«dkDr|jˆfd„¬«|S)Nrcó •—t|‰z «SrV)Úabs)ÚxÚlinenums €r)Úz%patchfile.findlines.. sø€¤C¨¨G© Ô$4r+)r¹)r~Úgetr%Úsort)r]r(r’Úcands ` r)Ú findlineszpatchfile.findliness8ø€ð �y‰y�}‰}˜Q Ó#ˆÜ ˆt‹9�qŠ=à �I‰IÓ4ˆIÔ 5؈ r+cóÆ—|jsytjj|j«}d||fzg}|jD]O}|j D]>}|j |«|dddk7sŒ|j dtjz«Œ@ŒQ|jj|jt|j«|j|«y)Ns--- %s +++ %s rˆr†) r‚rxr½ÚbasenamerÚhunkr5r ÚMISSING_NEWLINE_MARKERryr r%r…)r]r^r0r‘r(s r)Ú write_rejzpatchfile.write_rejs¬€ð �xŠxØ Ü�w‰w×Ñ § ¡ Ó+ˆØ$¨¨d |Ñ3Ð4ˆØ—”ˆAØ—V”V�Ø— ‘ ˜Q”Ø�R�S�6˜U“?Ø—L‘L ¬×)JÑ)JÑ!JÕKñðð � ‰ ×јdŸj™j¬#¨d¯h©h«-¸¿¹ÀUÕKr+c óÞ —|j«skttd«|j|jt |j «|jt |j«|jfz«‚|xjdz c_ |jr|jj|«y|jr—|jr‹|j r2|j"j%td«|j&z«n1|j"j%td«|j&z«|jj|«yt)|t*«r‚|j,r&|j.j1|j&«y|j3|j4«}||j4dd|xj6t |«z c_d|_y|}|j:dvs|j:d k(r|j<r|j?«}|jAdd «\}}}}||j6z }|}|jBdk(r tEjF||j4|«r|j,r&|j.j1|j&«y||j4||t |«z|xj6t |«t |«z z c_d|_yi|_$tK|j4«D]0\} } |jHjM| g«j| «Œ2tO|j"jQd d «dz«D�]”} d D�]‹} |jA| | «\}}}}||j6z|jBz}tS|t |j4««}|r|jU|ddd|«} n|g} | D�]}|r"tEjF||j4|«sŒ(||j4||t |«z|xj6t |«t |«z z c_||z |_!d|_||z | z }| rLtd«}|jWd«|j"j%||j|dz| |fz«n9td«}|j"jY||j|dz|fz«| cccS�ŒŽ�Œ—|jWd«|j"j%td«|j|fz«|jj|«y)Nsbad hunk #%d %s (%d %d %d %d)rrˆs-cannot create %s: destination already exists sfile %s already exists Tr)rprqrrFópatchsfuzzrs9Hunk #%d succeeded at %d with fuzz %d (offset %d lines). s,Hunk #%d succeeded at %d (offset %d lines). sHunk #%d FAILED at %d )-ÚcompleteÚPatchParseErrorrÚnumberÚdescr%ÚaÚlenaÚbÚlenbr…rzr‚r5rr{rr}r+rÚ isinstanceÚbinhunkr|ryr|Únewr0r€rrwrxÚ getnormalizedÚfuzzitr�r Útesthunkr~Ú enumerateÚ setdefaultÚrangeÚ configintÚminr—r„rŒ)r]rŒr(ÚhorigÚoldÚoldstartr©ÚnewstartÚ orig_startr‘r�ÚfuzzlenÚtoponlyr–r€r«s r)Úapplyzpatchfile.applysW€Ø�z‰zŒ|Ü!ÜÐ2Ó3Ø—8‘8˜QŸV™V¤S¨¯©£X¨q¯v©v´s¸1¿3¹3³xÀÇÁÐHñIóð ð � Š �a‰� à �<Š<Ø �H‰H�O‰O˜AÔ Øà �;Š;˜4Ÿ;š;Ø�ŠØ—‘— ‘ ÜÐGÓHØ—j‘jñ!õð —‘— ‘ œQÐ:Ó;¸d¿j¹jÑHÔIØ �H‰H�O‰O˜AÔ Øä �aœÔ !Ø�{Š{Ø— ‘ ×#Ñ# D§J¡JÔ/ð ð —E‘E˜$Ÿ*™*Ó%�Ø !�— ‘ ™1� Ø— ’ œs 1›vÑ%• Ø!�” Øàˆà �L‰LÐ,Ñ ,Ø�|‰|˜wÒ&Ø—’ð —‘Ó!ˆAð()§x¡x°°5Ó'9Ñ$ˆˆX�s˜HØ�D—K‘Kш؈ ð �9‰9˜Š>œj×1Ñ1°#°t·z±zÀ8ÔLØ�{Š{Ø— ‘ ×#Ñ# D§J¡JÔ/ð ð>A�— ‘ ˜8 h´°S³Ñ&9Ð:Ø— ’ œs 3›x¬#¨c«(Ñ2Ñ2• Ø!�” ØðˆŒ ܘdŸj™jÖ)‰DˆAˆqØ �I‰I× Ñ   BÓ '× .Ñ .¨qÕ 1ð*ô˜TŸW™W×.Ñ.¨x¸ÓAÀAÑE×FˆGÜ(�Ø/0¯x©x¸ÀÓ/IÑ,��X˜s HØ# d§k¡kÑ1°D·I±IÑ=�ܘx¬¨T¯Z©Z«Ó9�ÙØŸ>™>¨#¨a©&°°¨*°hÓ?‘Dð%˜:�Dä�AÙ¤*×"5Ñ"5°c¸4¿:¹:ÀqÕ"IØ7:˜Ÿ ™  1 q¬3¨s«8¡|Ð4ØŸ š ¤s¨3£x´#°c³(Ñ':Ñ:� Ø$%¨ ¡N˜œ Ø%)˜œ Ø!" Z¡°'Ñ!9˜Ù"Ü"#ð!8ó#˜Cð !ŸN™N¨4Ô0Ø ŸG™GŸL™LØ # q§x¡x°°Q±¸ÀÐ&HÑ Hõô#$ð!8ó#˜Cð!ŸG™GŸL™L¨°·±¸!¸a¹%ÀÐ/HÑ)HÔIØ&žò/ò)ðGðH �‰�tÔØ �‰� ‰ ”QÐ1Ó2°a·h±hÀ Ð5KÑKÔLØ �‰�‰˜ÔØr+cóÆ—|jr1|j|j|j|j«|j «t |j«SrV)rr,rr0r¿rœr%r‚r`s r)r{zpatchfile.close‰s=€Ø �:Š:Ø �O‰O˜DŸJ™J¨¯ © °D·I±IÔ >Ø �‰ÔÜ�4—8‘8‹}Ðr+N)ro) rgrhrir^r,r„r—rœr¹r{rWr+r)rtrt©s*„ó:òxLò$ ò òLò ióVr+rtcó$—eZdZdZej d«Zej d«Zej d«Zej d«Z ej d«Z ej d«Z d„Z d „Z d „Zd „Zd „Zd „Zd„Zd„Zd„Zd„Zy)r¸z patch headersdiff --git a/(.*) b/(.*)$sdiff -r .* (.*)$s(?:index|deleted file) s(?:new file|deleted file) s'(?:index|deleted|copy|rename|new mode) s(?:new file|copy to|rename to)có —||_g|_yrV)r¸r…)r]r¸s r)r^zheader.__init__šs€ØˆŒ ؈� r+có:—td„|jD««S)Nc3ó>K—|]}|jd«–—Œy­w)óindex N©r#rŠs r)r�z header.binary..Ÿsèø€Ð@±K¨q�1—<‘<  ×*±Kùs‚©Úanyr¸r`s r)rÁz header.binaryžs€ÜÑ@°D·K²KÓ@Ó@Ð@r+cóh—|jD�]}|jd«r|jtd««y|jj |«r=|j|«|j «r|jtd««y|jd«rs|jtd«t|j«t|jD�cgc]"}t|j|j«‘Œ$c}«fz«y|j|«�Œ ycc}w)Nr¿s-this modifies a binary file (all or nothing) sthis is a binary file r“s%d hunks, %d lines changed ) r¸r#r¥rÚ pretty_rerèrÁr%r…ÚsumÚmaxÚaddedr8)r]rDrŒs r)Úprettyz header.pretty¡sâ€Ø—•ˆAØ�|‰|˜IÔ&Ø—‘œÐLÓMÔNÙØ�~‰~×#Ñ# AÔ&Ø—‘˜” Ø—;‘;”=Ø—H‘HœQÐ9Ó:Ô;ÙØ�|‰|˜FÔ#Ø—‘ÜÐ5Ó6ä˜DŸJ™J›Ü¸d¿jºjÓI¹j¸œS §¡¨!¯)©)Õ4¸jÑIÓJðñôñØ �H‰H�QŽKñ%ùòJsÃ#'D/cóX—|jdj|j««yr-)r¥r/r¸r\s r)r¥z header.write¶s€Ø �‰�—‘˜$Ÿ+™+Ó&Õ'r+có@‡—tˆfd„‰jD««S)Nc3óT•K—|]}‰jj|«–—Œ!y­wrV)Ú allhunks_rerè©r‹rŒr]s €r)r�z"header.allhunks..ºs#øèø€ÐB±k°�4×#Ñ#×)Ñ)¨!×,±kùóƒ%(rÁr`s`r)Úallhunkszheader.allhunks¹sø€ÜÓB°d·k²kÓBÓBÐBr+có—|jj|jd«}|r|j«\}}||k(r|gS||gS|jj|jd«j«Srø)Ú diffgit_rerèr¸ÚgroupsÚdiff_re)r]rèÚfromfileÚtofiles r)rRz header.files¼sr€Ø—‘×%Ñ% d§k¡k°!¡nÓ5ˆÙ Ø$Ÿ|™|›~Ñ ˆH�fؘ6Ò!Ø �zÐ!ؘfÐ%Ð %à—<‘<×%Ñ% d§k¡k°!¡nÓ5×<Ñ<Ó>Ð >r+có(—|j«dS)Nrˆ)rRr`s r)Úfilenamezheader.filenameÆs€Ø�z‰z‹|˜BÑÐr+cóŠ—ddjtjtj|j «««zS)Nz
rÙ)r/rÚrapplyÚfsdecoderRr`s r)rÛzheader.__repr__És2€ØØ �H‰H”X—_‘_¤X×%6Ñ%6¸¿ ¹ » ÓEÓ Fñ ð r+có@‡—tˆfd„‰jD««S)Nc3óT•K—|]}‰jj|«–—Œ!y­wrV)Ú newfile_rerèrÍs €r)r�z#header.isnewfile..Ïs!øèø€ÐA±[°�4—?‘?×(Ñ(¨×+±[ùrÎrÁr`s`r)Ú isnewfilezheader.isnewfileÎsø€ÜÓA°T·[²[ÓAÓAÐAr+có ‡—t‰j«dk(}‰j«xr|}|xstˆfd„‰jD««S)Nr"c3óT•K—|]}‰jj|«–—Œ!y­wrV)Ú special_rerèrÍs €r)r�z!header.special..Ûs$øèø€ð# Ù.9¨ˆD�O‰O× !Ñ ! !× $©kùrÎ)r%r¸rÞrÂ)r]Ú nocontentÚ emptynewfiles` r)Úspecialzheader.specialÑsNø€ô˜Ÿ ™ Ó$¨Ñ)ˆ Ø—~‘~Ó'Ò5¨Iˆ Øò œsó# Ø.2¯kªkó# ó ð r+N)rgrhrirÜr”r•rÑrÓrÌrÄrárÝr^rÁrÈr¥rÏrRr×rÛrÞrärWr+r)r¸r¸�s „Ùà�—‘Ð8Ó9€J؈b�j‰jÐ,Ó-€GØ�"—*‘*Ð7Ó8€KØ�— ‘ Ð8Ó9€IØ�—‘ÐFÓG€JØ�—‘Ð=Ó>€JòòAòò*(òCò?ò ò ò Bó  r+r¸cóf—eZdZdZ d d„Zd„Zd„Zd„Zd„Zd„Z e Z d „Z e jd „«Zy) Ú recordhunkzKpatch hunk XXX shouldn't we merge this with the other hunk class? Nc óø‡—dˆfd„ } ||_| |d«\} |_|| z|_|| z|_| |d«\} |_||_||_|j|j «\|_|_ y)NFcóV•—‰�#t|«‰z }|dkDr|r|||dfS||d‰fSd|fSrø)r%)r0ÚreverseÚdeltaÚ maxcontexts €r)Ú trimcontextz(recordhunk.__init__..trimcontextñsMø€ØÐ%ܘE›  ZÑ/�ؘ1’9ÙØ$ e¨E¨F mÐ3Ð3à$ e¨K¨ZÐ&8Ð8Ð8Ø�e�8ˆOr+T)F) r¸ÚbeforeÚfromlineÚtolineÚafterÚprocršÚ countchangesrÇr8) r]r¸rîrïrñríršrðrërìÚ trimedbeforeÚ _trimedafters ` r)r^zrecordhunk.__init__æszø€õ ðˆŒ Ù$/°¸Ó$=Ñ!ˆ �d”kØ  <Ñ/ˆŒ ؘ|Ñ+ˆŒ Ù#.¨u°eÓ#<Ñ ˆ �d”j؈Œ ؈Œ Ø#'×#4Ñ#4°T·Y±YÓ#?Ñ ˆŒ �D•Lr+có0—t|t«sy|j|jk(xrk|j|jk(xrP|j|jk(xr5|j j «|j j «k(S)NF)r§ræršrñrîr¸rR)r]Úvs r)Ú__eq__zrecordhunk.__eq__sw€Ü˜!œZÔ(Øð�V‰V�t—y‘yÑ ò :Ø—‘˜4Ÿ9™9Ñ$ò :à—‘ !§*¡*Ñ,ò :ð—‘×"Ñ"Ó$¨¯©¯©Ó(8Ñ8ð  r+có°—tt|j«t|jj ««|j |j f«SrV)r~Útupleršr¸rRrîrñr`s r)Ú__hash__zrecordhunk.__hash__sC€Üä�d—i‘iÓ Ü�d—k‘k×'Ñ'Ó)Ó*Ø— ‘ Ø— ‘ ð  ó ð r+cóÊ—t|D�cgc]}|jd«sŒ|‘Œc}«}t|D�cgc]}|jd«sŒ|‘Œc}«}||fScc}wcc}w)zhunk -> (n+,n-)r r)r%r#)r]ršrŒrCÚrems r)ròzrecordhunk.countchangess[€ä™dÓ9™d˜ a§l¡l°4Õ&8’1˜dÑ9Ó:ˆÜ™dÓ9™d˜ a§l¡l°4Õ&8’1˜dÑ9Ó:ˆØ�Cˆxˆùò:ùÚ9sŠA¡AµA Á A c ó—ddddœ}|jD�cgc]}d||dd|ddfz‘Œ}}t|j|j|j|j |j ||j«Scc}w) zëreturn another recordhunk which is the reverse of the hunk If this hunk is diff(A, B), the returned hunk is diff(B, A). To do that, swap fromline/toline and +/- signs while keep other things unchanged. rr ó\)r rrþs%s%srrN)ršrær¸rïrîrñrírð)r]rCr(ršs r)Ú reversehunkzrecordhunk.reversehunks‚€ð˜t¨EÑ 2ˆØ6:·i²iÓ@±i°�˜1˜Q˜q ˜V™9 a¨¨ eÐ,Ó,°iˆÐ@ÜØ �K‰KØ �K‰KØ �M‰MØ �I‰IØ �K‰KØ Ø �J‰Jó ð ùòAs•A;c ó—t|j«t|j«z}|jr%|jdtjk(r|dz}||j z}||j z}|jd|j||j||jxrd|jzfz«|jdj|j|jz|jz««y)Nrˆrs@@ -%d,%d +%d,%d @@%s rr+) r%rírðr r›r8rÇr¥rîrïrñr/rš)r]rDrêÚfromlenÚtolens r)r¥zrecordhunk.write2sÍ€Ü�D—K‘KÓ ¤3 t§z¡z£?Ñ2ˆØ �:Š:˜$Ÿ*™* R™.¬J×,MÑ,MÒMØ �Q‰JˆEؘ$Ÿ,™,Ñ&ˆØ˜Ÿ ™ Ñ"ˆØ �‰Ø &à— ‘ ØØ— ‘ ØØ— ‘ Ò0˜t d§i¡iÑ/ð ñ ô ð �‰�—‘˜$Ÿ+™+¨¯ © Ñ1°D·J±JÑ>Ó?Õ@r+có6—|jj«SrV)r¸r×r`s r)r×zrecordhunk.filenameFs€Ø�{‰{×#Ñ#Ó%Ð%r+có@—d|j«|jfzS)Ns )r×rîr`s r)rÛzrecordhunk.__repr__Is€à $§-¡-£/°4·=±=Ð!AÑAÐAr+rV)rgrhrirÜr^r÷rúròrÿr¥rÈr×r Ú strmethodrÛrWr+r)ræræàsT„ñðó@ò<  ò òò  ò&Að$€Fò&ð×ÑñBóñBr+ræcó—td«td«td«td«dœtd«td«td«td «dœtd «td «td «td «dœdœS)Nsapply change %d/%d to '%s'?sdiscard change %d/%d to '%s'?skeep change %d/%d to '%s'?srecord change %d/%d to '%s'?)sapplysdiscardskeepórecordsapply this change to '%s'?sdiscard this change to '%s'?skeep this change to '%s'?srecord this change to '%s'?s0[Ynesfdaq?]$$ &Yes, apply this change$$ &No, skip this change$$ &Edit this change manually$$ &Skip remaining changes to this file$$ Apply remaining changes to this &file$$ &Done, skip remaining changes and files$$ Apply &all changes to all remaining files$$ &Quit, applying no changes$$ &? (display help)s8[Ynesfdaq?]$$ &Yes, discard this change$$ &No, skip this change$$ &Edit this change manually$$ &Skip remaining changes to this file$$ Discard remaining changes to this &file$$ &Done, skip remaining changes and files$$ Discard &all changes to all remaining files$$ &Quit, discarding no changes$$ &? (display help)s-[Ynesfdaq?]$$ &Yes, keep this change$$ &No, skip this change$$ &Edit this change manually$$ &Skip remaining changes to this file$$ Keep remaining changes to this &file$$ &Done, skip remaining changes and files$$ Keep &all changes to all remaining files$$ &Quit, keeping all changes$$ &? (display help)s4[Ynesfdaq?]$$ &Yes, record this change$$ &No, skip this change$$ &Edit this change manually$$ &Skip remaining changes to this file$$ Record remaining changes to this &file$$ &Done, skip remaining changes and files$$ Record &all changes to all remaining files$$ &Quit, recording no changes$$ &? (display help))ómultipleósingleóhelprrWr+r)Ú getmessagesr Ns¤€ôÐ6Ó7ÜÐ:Ó;ÜÐ4Ó5ÜÐ8Ó9ñ  ôÐ5Ó6ÜÐ9Ó:ÜÐ3Ó4ÜÐ7Ó8ñ  ôð (ó ôð (ó ôð (ó ôð (ó ñK1 ñ? ð?r+c󇇇‡—t«Š‰€dŠˆˆˆfd„}t«}i}d\}}dtd„|D««} } |D�]u} | t| j«z } d}d} dj | j «} | |vrŒ@|j| «|€| j‰«| j«}td «td «j d „|D««z}tˆfd „|D««rd \}}}n||||d«\}}}}|sŒÏ| g|| j«<| j«r'|| j«xx| jz cc<�Œt| j«D�]C\}}|€|€|j‰«| dk(r‰d‰|j«z}n7| t| j«z |z}‰d‰|| |j«fz}|||||«\}}}}|rO| r*tj|«}|xj | z c_||j«j#|«ŒÓ|�S|D]L}|jD];}| r|xj | z c_||j«j#|«Œ=ŒN�Œ(| |j$|j&z z } �ŒF�Œxt|j)«D� cgc]&} | dj+«st| «dkDsŒ%| ‘Œ(c} g«ifScc} w)z:Interactively filter patch chunks into applied-only chunksNrc óÚ•—d}|�||||fS|�||||fS ‰d‰}‰jd||fz«}‰jd«|dk(rF‰j|«dD].\}}‰jd|tj|«fz«Œ0Œ{|d k(rd} �n¯|dk(rd } �n¦|d k(�rU|€,‰jt d ««‰jd«ŒÁ|j j«r-‰jt d ««‰jd«�Œdt d«z} tjdd¬«\} } d} tjtj| d««}|j j|«|j|«|jdj| j«D�cgc] }d|zdz‘Œ c}««|j!«‰j#«}‰j%d|| fzd‰j'«id¬«} | d k7r6‰j)t d«| z« tj*| «~ �ŒNt-| d«}t/«} |D]:}tj0|«}|j3d«rŒ*| j|«Œ<|j!«| j5d «t7| «}tj*| «~ d } nK|dk(rd x} }nA|dk(rdx} }n7|dk(rd x} }n-|d k(rdx} }n#|d!k(rt9j:t d"««‚ |||fScc}w#tj*| «~ wxYw)#zÙprompt query, and process base inputs - y/n for the rest of file - y/n for the rest - ? (help) - q (quit) Return True/False and possibly updated skipfile and skipall. NTr s%s (enter ? for help) %sr†rärs%s - %s rFr"s cannot edit patch for whole files!cannot edit patch for binary filer“s® To remove '-' lines, make them ' ' lines (context). To remove '+' lines, delete them. Lines starting with # will be removed from the patch. If the patch applies cleanly, the edited hunk will immediately be added to the record list. If it does not apply cleanly, a rejects file will be generated: you can use that when you try again. If all lines of the hunk are removed, then the edit is aborted and the hunk is left unchanged. s hg-editor-s.diff)ruÚsuffixrvr+r’s%s "%s"sHGUSERs filterpatch)ÚenvironÚ blockedtags editor exited with exit code %d Úrbó#éééér�s user quit)Ú promptchoicer¥Úextractchoicesr rorr¸rÁrrwrÚnativeeolwriterrxryr/r¢r{Ú geteditorÚsystemÚusernamer+r|r r.Ú fromnativeeolr#rBÚ parsepatchrÚ CanceledError)ÚskipfileÚskipallÚqueryr1Ú newpatchesÚrespsÚrr;ÚtÚretÚphelpÚpatchfdÚpatchfnÚ ncpatchfprNÚiÚeditorÚpatchfpr&ÚmessagesÚ operationr}s €€€r)Úpromptzfilterpatch..prompt˜s^ø€ðˆ Ø Ð Ø˜H g¨zÐ9Ð 9Ø Ð Ø˜X w° Ð:Ð :ØØ˜WÑ% iÑ0ˆEð—‘Ð <ÀÀu¸~Ñ MÓNˆAØ �H‰H�UŒOØ�AŠvØ×-Ñ-¨eÓ4°QÔ7‘D�A�qØ—H‘H˜\¨Q´·±¸qÓ0AÐ,BÑBÕCð8àØ�a’Ø’Ø�a’Ø’Ø�a“Ø�=Ø—H‘HœQÐBÓCÔDØ—H‘H˜U”OØØ—<‘<×&Ñ&Ô(Ø—H‘HœQÐCÓDÔEØ—H‘H˜U”OÙð¤ð ó "ñ �ô&.×%5Ñ%5Ø(°ô&Ñ"�˜'ð!� ð!"ä×,Ñ,¬R¯Y©Y°wÀÓ-EÓF�AØ—L‘L×&Ñ& qÔ)Ø—K‘K ”NØ—G‘GØŸ™Ø8=×8HÑ8HÔ8JÓKÑ8J°1˜U Q™Y¨Ó.Ð8JÑKóôð —G‘G”IàŸ\™\›^�FØŸ)™)Ø$¨°Ð'8Ñ8Ø!*¨B¯K©K«MÐ :Ø#1ð$ó�Cð ˜a’xØŸ™¤Ð"FÓ GÈ#Ñ MÔNØ ô—I‘I˜gÔ&Ú!ô# 7¨DÓ1�GÜ (£ �IÛ '˜Ü#×1Ñ1°$Ó7˜Ø#Ÿ™¨tÕ4Ø%ŸO™O¨DÕ1ð!(ð—M‘M”OØ—N‘N 1Ô%Ü!+¨IÓ!6�Jä—I‘I˜gÔ&Ø!ð‘Ø�a’Ø!&Ð&�‘hØ�a’Ø!%Ð%�‘hØ�a’Ø %Ð%�‘gØ�a’Ø $Ð$�‘gØ�a’Ü×)Ñ)¬!¨L«/Ó:Ð:ؘ '¨:Ð5Ð 5ùòQLøô2—I‘I˜gÔ&Ù!ús-ÅA=MÇM ÇA6MÉ"AMÊ$?MÍ MÍM*rrc3óFK—|]}t|j«–—Œy­wrV)r%r…rŠs r)r�zfilterpatch..sèø€Ð6©g¨œ˜AŸG™GŸ ©gùs‚!rr+sexamine changes to %s?s and c3ó&K—|] }d|z–—Œ y­w)s'%s'NrW©r‹rNs r)r�zfilterpatch..sèø€ð> Ù!&˜AˆG�a�K¡ùs‚c3ó@•K—|]}‰j|«–—Œy­wrV)Úexact)r‹rNrès €r)r�zfilterpatch..søèø€Ð-¡u !ˆu�{‰{˜1�~¡uùóƒ)TNNr r)r r7rÅr%r…r/r¸rCrÈrRrÚallr×rÏr­rÉrïr5r8rÇÚvaluesrä)r}Úheadersrèr0r1ÚseenÚappliedr r!Úposr rŒÚ fixoffsetÚhdrrRr«r%Únpr,r1Úidxr#ÚnewpatchÚnewhunkr/s` `` @r)Ú filterpatchrD‘sðû€ä‹}€HàÐØˆ öh6ôT ‹5€DØ€GØ"Ñ€HˆgØ”CÑ6©gÓ6Ó6ˆ€CÜ ˆØ Œs�1—7‘7‹|ш؈؈ Ø�h‰h�q—x‘xÓ ˆØ �$‰;Ø Ø �‰�Œ Ø ˆ?Ø �H‰H�RŒLØ—‘“ ˆÜÐ)Ó*¬Q¨x«[×-=Ñ-=ñ> Ù!&ó> ó. ñ ˆô Ó-¡uÓ-Ô -Ø-‰NˆAˆw™á'-¨h¸ÀÀdÓ'KÑ $ˆAˆx˜ "ÙØ Ø!" ˆ�— ‘ “ ÑØ �:‰:Œ<Ø �A—J‘J“LÓ ! Q§W¡WÑ ,Ó !Ù Ü! !§'¡'×*‰HˆAˆuØÐ G OØ— ‘ ˜RÔ Ø˜ŠzؘyÑ)¨)Ñ4°u·~±~Ó7GÑG‘àœC §¡›LÑ(¨1Ñ,�ؘ{Ñ+¨IÑ6ØØØ—N‘NÓ$ð:ñ�ñ 06ؘ' 3¨ó0Ñ ,ˆAˆx˜ *ñÙÜ ŸI™I eÓ,�EØ—L’L IÑ-•LؘŸ™Ó(Ñ)×0Ñ0°Õ7ØÐ'Û *�HØ#+§>¤>˜Ù$Ø#ŸNšN¨iÑ7�NØ × 0Ñ 0Ó 2Ñ3×:Ñ:¸7ÕCñ$2ò!+ð ˜UŸ]™]¨U¯[©[Ñ8Ñ8’ ò7+ð1ôj ØŸ™Ô(Ó IÑ(�1¨A¨a©D¯L©L¬N¼cÀ!»fÀq»jŠQÐ(Ñ IØ ó ð ð  ðùâ Is Ë&LË8Lcó<—eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z y ) ršcóÔ—||_||_|g|_g|_g|_dx|_|_dx|_|_|�&|r|j|«y|j|«yyrV) r¡r¢ršr£r¥Ústartar¤Ústartbr¦Úread_context_hunkÚread_unified_hunk)r]r¢ÚnumrëÚcontexts r)r^z hunk.__init__Dsl€ØˆŒ ؈Œ Ø�FˆŒ ؈ŒØˆŒØ"&Ð&ˆŒ �d”iØ"&Ð&ˆŒ �d”iØ ˆ>ÙØ×&Ñ& rÕ*à×&Ñ& rÕ*ð r+cóš—d„}t|j|jdd«}|j|_|j|_|j|_||j«|_||j«|_|j |_|j |_|j|_|j|_|S)z1Return a copy with line endings normalized to LF.cól—g}|D],}|jd«r|dddz}|j|«Œ.|S)NrÞrvr†)r§r5)r0r†r&s r)Ú normalizez%hunk.getnormalized..normalizeUs@€ØˆFÛ�Ø—=‘= Ô)Ø  ˜9 uÑ,�DØ— ‘ ˜dÕ#ððˆMr+N) ršr¢r¡r£r¥rGrHr¤r¦)r]rOÚnhs r)rªzhunk.getnormalizedRs“€ò ô�$—)‘)˜TŸ[™[¨$°Ó 5ˆØ—K‘KˆŒ Ø—)‘)ˆŒØ—)‘)ˆŒÙ˜Ÿ™Ó ˆŒÙ˜Ÿ™Ó ˆŒØ—K‘KˆŒ Ø—K‘KˆŒ Ø—)‘)ˆŒØ—)‘)ˆŒØˆ r+cóB—tj|j«}|s!tt d«|j z«‚|j «\|_|_|_ |_ |j€d|_nt|j«|_|j€d|_ nt|j«|_ t|j«|_t|j«|_ tj||j|j|j|j|j «t'|jd«dk(rm|jd=|jd=|j d=|xjdzc_|xjdzc_ t'|jd«dk(rŒm|j)|«y#t"j$$r(}tt d«|j |fz«‚d}~wwxYw)Nó bad hunk #%drsbad hunk #%d: %srˆr)Úunidescrèr¢r rr¡rÒrGr¤rHr¦rêr Úaddlinesršr£r¥rÚ ParseErrorr%Ú _fixnewline)r]rërCÚes r)rJzhunk.read_unified_hunkjs“€Ü �M‰M˜$Ÿ)™)Ó $ˆÙÜ!¤! OÓ"4°t·{±{Ñ"BÓCÐ CØ9:¿¹»Ñ6ˆŒ �T”Y ¤ ¨T¬YØ �9‰9Р؈D�Iä˜DŸI™I›ˆDŒIØ �9‰9Р؈D�Iä˜DŸI™I›ˆDŒIܘ$Ÿ+™+Ó&ˆŒ ܘ$Ÿ+™+Ó&ˆŒ ð MÜ × Ñ Ø�D—I‘I˜tŸy™y¨$¯)©)°T·V±V¸T¿V¹Vô ô�$—)‘)˜B‘-Ó  AÒ%Ø— ‘ ˜"� Ø—‘�r� Ø—‘�r� Ø �IŠI˜‰N�IØ �IŠI˜‰N�Iô �$—)‘)˜B‘-Ó  AÓ%ð ×Ñ˜Õøô×Ñò MÜ!¤!Ð$7Ó"8¸D¿K¹KÈÐ;KÑ"KÓLÐ Lûð MúsÃ=A G#Ç#HÇ6#HÈHcó —|j«|_tj|j«}|s!t t d«|j z«‚|j«\|_}t|j«|_|€ |j}t|«|jz |_ |jr|xjdz c_ t|j«D]Ó}|j«}|jd«r|j|«nŸ|dd}|jd«s|jd«rd|z}n:|jd«rd |z}n#t t d «|j |fz«‚|jj|«|j j|«ŒÕ|j«}|jd «r@|jd dd }||jd <||j d <|j«}tj|«}|s!t t d«|j z«‚|j«\|_}t|j"«|_|€ |j"}t|«|j"z |_|j"r|xj$dz c_d} t|j$«D�]ƒ}|j«}|jd «r4|j&d dd }||j&d <||j | dz <ŒY|s|j|«�n|dd}|jd «s|jd«rd|z}ne|jd«rd |z}nNt)|j&«dk(r|j|«n©t t d «|j |fz«‚|j&j|« | t)|j «k\rd} n|j | } | dz } | |k(r�ŒS| jd«rŒI|j j+| dz |«�Œ†|jsO|j D]@}|jd«s|jd «sŒ&|jj|«ŒB|j&sR|j D]C}|jd«s|jd «sŒ&|j&j|dd«ŒEd|j|j|j"|j$fz|_|j|j d<|j-|«y)NrRrr“r"s- s! rs rsbad hunk #%d old text line %dó\ rˆs+ r rr+s@@ -%d,%d +%d,%d @@ )rcr¢Ú contextdescrèr rr¡rÒrGrêr¤r¯r#rör£r5ršrHr¦r¥r%ÚinsertrV) r]rërCÚaendr‘r(r�ÚuÚbendÚhunkirŒs r)rIzhunk.read_context_hunk‰sn€Ø—K‘K“MˆŒ Ü × Ñ ˜dŸi™iÓ (ˆÙÜ!¤! OÓ"4°t·{±{Ñ"BÓCÐ CØŸH™H›JшŒ �Tܘ$Ÿ+™+Ó&ˆŒ Ø ˆ<Ø—;‘;ˆDܘ“I § ¡ Ñ+ˆŒ Ø �;Š;Ø �IŠI˜‰N�IÜ�t—y‘yÖ!ˆAØ— ‘ “ ˆAØ�|‰|˜FÔ#à—‘˜” ÙØ�!�"�ˆAØ�|‰|˜EÔ" a§l¡l°5Ô&9ؘ1‘H‘Ø—‘˜eÔ$ؘ1‘H‘ä%ÜÐ6Ó7¸4¿;¹;ÈÐ:JÑJóðð �F‰F�M‰M˜!Ô Ø �I‰I× Ñ ˜QÕ ð!"ð$ �K‰K‹MˆØ �<‰<˜Ô Ø—‘�r‘ ˜3˜B�ˆA؈D�F‰F�2‰J؈D�I‰I�b‰MØ— ‘ “ ˆAÜ × Ñ ˜aÓ ˆÙÜ!¤! OÓ"4°t·{±{Ñ"BÓCÐ CØŸH™H›JшŒ �Tܘ$Ÿ+™+Ó&ˆŒ Ø ˆ<Ø—;‘;ˆDܘ“I § ¡ Ñ+ˆŒ Ø �;Š;Ø �IŠI˜‰N�I؈Ü�t—y‘y×!ˆAØ— ‘ “ ˆAØ�|‰|˜FÔ#ð—F‘F˜2‘J˜s �O�Ø�—‘�r‘ Ø'(�— ‘ ˜% !™)Ñ$ØÙà—‘˜” ÚØ�!�"�ˆAØ�|‰|˜EÔ" a§l¡l°5Ô&9ؘ1‘H‘Ø—‘˜eÔ$ؘ1‘H‘Ü�T—V‘V“ Ò!à—‘˜” Ùä%ÜÐ6Ó7¸4¿;¹;ÈÐ:JÑJóðð �F‰F�M‰M˜!Ô ØØœC § ¡ ›NÒ*Ø‘AàŸ ™  %Ñ(�Aؘ‘ �ؘ’6ÙØ—\‘\ $Ô'Øà—I‘I×$Ñ$ U¨Q¡Y°Ô2ÙðQ"ðT�vŠvà—Y”Y�Ø—<‘< Ô%¨¯©°dÕ);Ø—F‘F—M‘M !Õ$ðð�vŠvà—Y”Y�Ø—<‘< Ô%¨¯©°dÕ);Ø—F‘F—M‘M ! A B %Õ(ðð-Ø �K‰KØ �I‰IØ �K‰KØ �I‰Ið 0 ñ ˆŒ ð —y‘yˆ� ‰ �!‰ Ø ×јÕr+cóÔ—|j«}|jd«r6tj|j|j |j «y|j|«y)NrY)rcr#r Ú fixnewlineršr£r¥rö)r]rër(s r)rVzhunk._fixnewlineösB€Ø �K‰K‹MˆØ �<‰<˜Ô Ü × !Ñ ! $§)¡)¨T¯V©V°T·V±VÕ <à �G‰G�A�Jr+cóŽ—t|j«|jk(xr"t|j«|jk(SrV)r%r£r¤r¥r¦r`s r)rŸz hunk.completeýs/€Ü�4—6‘6‹{˜dŸi™iÑ'ÒD¬C°·±«K¸4¿9¹9Ñ,DÐDr+cóØ—t|t|««}|rÏd}d}t|j«}t|dz «D]*}|j|dzj d«r|dz }Œ*n|s>t|dz «D]-}|j||z dz j d«r|dz }Œ-nt||«}t||«}||t|«|z ||t|«|z |fS||dfS)Nrrr)r±r%ršr¯r#) r]r³r©Úfuzzr¸ÚtopÚbotÚhlenr‘s r)Ú_fuzzitz hunk._fuzzitsø€ô�4œ˜S›Ó"ˆÙ ؈C؈CÜ�t—y‘y“>ˆDܘ4 !™8–_�à—9‘9˜Q ™UÑ#×.Ñ.¨tÔ4ؘ1‘H‘Cáð %ñ ܘt a™xž�AØ—y‘y ¨¡¨a¡Ñ0×;Ñ;¸DÔAؘq™™áð )ô �d˜C“.ˆCÜ�d˜C“.ˆCØ�sœS ›X¨™^Ð,¨c°#¼¸C»À3¹Ð.GÈÐLÐ LØ�C˜ˆ{Ðr+cóú—|j|j|j||«\}}}|j|z}|j|z}|j r |dkDr|dz}|j r |dkDr|dz}||||fS)Nrr)rhr£r¥rGrHr¤r¦)r]rdr¸r³r©rer´rµs r)r«z hunk.fuzzits{€ØŸ ™  T§V¡V¨T¯V©V°T¸7ÓC‰ ˆˆS�#Ø—;‘; Ñ$ˆØ—;‘; Ñ$ˆà �9Š9˜ AšØ ˜‰MˆHØ �9Š9˜ AšØ ˜‰MˆHØ�H˜c 8Ð+Ð+r+N) rgrhrir^rªrJrIrVrŸrhr«rWr+r)ršršCs-„ò +òò0ò>kòZòEòó6 ,r+ršcó(—eZdZdZd„Zd„Zd„Zd„Zy)r¨zA binary patch file.có`—d|_d|_dg|_||_|j |«y)NFsGIT binary patch )ÚtextrêršÚ_fnameÚ_read)r]rërs r)r^zbinhunk.__init__*s,€ØˆŒ ؈Œ Ø*Ð+ˆŒ ؈Œ Ø � ‰ �2�r+có—|jduSrV)rlr`s r)rŸzbinhunk.complete1s€Ø�y‰y Ð$Ð$r+có€—|jr&t|jdj|««gS|jgSr-)rêÚ applybindeltarlr/)r]r0s r)r©z binhunk.new4s1€Ø �:Š:Ü! $§)¡)¨S¯X©X°e«_Ó=Ð>Ð >Ø— ‘ ˆ{Ðr+có—d„} |||j«}|s!ttd«|jz«‚|j d«rt |ddj ««}n6|j d«r$t |ddj ««}d|_nŒšg}|||j«}t|«dkDr‘|d d}|d kr |d k\rt|«td «z dz}nt|«td «z d z} |jtj|dd«d|«|||j«}t|«dkDrŒ‘t!j"dj%|««}t|«|k7r-ttd«|jt|«|fz«‚||_y#t$r;}ttd«|jtj|«fz«‚d}~wwxYw)Ncóf—|j«}|j|«|jd«S)NrÞ)rcr5ræ)rëršr(s r)Úgetlinezbinhunk._read..getline:s'€Ø— ‘ “ ˆAØ �K‰K˜ŒNØ—8‘8˜GÓ$Ð $r+Ts"could not extract "%s" binary datasliteral räsdelta rrróZóAóaés&could not decode "%s" binary patch: %sr+s%"%s" length is %d bytes, should be %d)ršr rrmr#rêrærêr%Úordr5rÚ b85decodeÚ ValueErrorrÚ forcebytestrÚzlibÚ decompressr/rl) r]rërtr&rUÚdecr(rWrls r)rnz binhunk._read9så€ò %ð Ù˜2˜tŸy™yÓ)ˆDÙÜ%ÜÐ;Ó<¸t¿{¹{ÑJóðð�‰˜{Ô+ܘ4  ˜8Ÿ?™?Ó,Ó-�ØØ�‰˜yÔ)ܘ4  ˜8Ÿ?™?Ó,Ó-�Ø!�” ØððˆÙ�r˜4Ÿ9™9Ó%ˆÜ�$‹i˜!ŠmØ�Q�q� ˆAØ�DŠy˜Q $šYܘ“FœS ›YÑ&¨Ñ*‘䘓FœS ›YÑ&¨Ñ+�ð Ø— ‘ œ4Ÿ>™>¨$¨q¨r¨(Ó3°B°QÐ7Ô8ñ ˜2˜tŸy™yÓ)ˆDô�$‹i˜!‹mô�‰˜sŸx™x¨›}Ó-ˆÜ ˆt‹9˜Ò Ü!ÜÐ:Ó;Ø—;‘;¤ D£ ¨4Ð0ñ1óð ðˆ� øôò Ü%ÜÐ?Ó@Ø—{‘{¤J×$;Ñ$;¸AÓ$>Ð?ñ@óðûð úsÄ*F:Æ: G>Ç6G9Ç9G>N)rgrhrirÜr^rŸr©rnrWr+r)r¨r¨'s„Ùòò%òó )r+r¨có�—|ddjd«}|jd«}|dkr|jd«}|dkr|S|d|S)NrrÞrrr)rær›)Ústrr�r,s r)Ú parsefilenamer‚esN€à ˆAˆBˆ�‰�wÓ€AØ �‰ˆu‹ €A؈1‚uØ �F‰F�4‹LˆØ ˆqŠ5؈HØ ˆRˆaˆ5€Lr+có†—g}|D]9}tj|d«r|j«}|j|«Œ;|S)a³reverse the signs in the hunks given as argument This function operates on hunks coming out of patch.filterpatch, that is a list of the form: [header1, hunk1, hunk2, header2...]. Example usage: >>> rawpatch = b"""diff --git a/folder1/g b/folder1/g ... --- a/folder1/g ... +++ b/folder1/g ... @@ -1,7 +1,7 @@ ... +firstline ... c ... 1 ... 2 ... + 3 ... -4 ... 5 ... d ... +lastline""" >>> hunks = parsepatch([rawpatch]) >>> hunkscomingfromfilterpatch = [] >>> for h in hunks: ... hunkscomingfromfilterpatch.append(h) ... hunkscomingfromfilterpatch.extend(h.hunks) >>> reversedhunks = reversehunks(hunkscomingfromfilterpatch) >>> from . import util >>> fp = util.stringio() >>> for c in reversedhunks: ... c.write(fp) >>> fp.seek(0) or None >>> reversedpatch = fp.read() >>> print(pycompat.sysstr(reversedpatch)) diff --git a/folder1/g b/folder1/g --- a/folder1/g +++ b/folder1/g @@ -1,4 +1,3 @@ -firstline c 1 2 @@ -2,6 +1,6 @@ c 1 2 - 3 +4 5 d @@ -6,3 +5,2 @@ 5 d -lastline rÿ)rrnrÿr5)r…Únewhunksr;s r)Ú reversehunksr…psB€ðp€HÛ ˆÜ × Ñ ˜A˜}Ô -Ø— ‘ “ˆAØ�‰˜Õðð €Or+có^‡—Gˆfd„d«}|«}t«}|jdj|««|jd«d}t |«D]!\}} |j ||||«|}Œ#~|j«S#t $rtd||fz«‚wxYw)aDpatch -> [] of headers -> [] of hunks If maxcontext is not None, trim context lines if necessary. >>> rawpatch = b'''diff --git a/folder1/g b/folder1/g ... --- a/folder1/g ... +++ b/folder1/g ... @@ -1,8 +1,10 @@ ... 1 ... 2 ... -3 ... 4 ... 5 ... 6 ... +6.1 ... +6.2 ... 7 ... 8 ... +9''' >>> out = util.stringio() >>> headers = parsepatch([rawpatch], maxcontext=1) >>> for header in headers: ... header.write(out) ... for hunk in header.hunks: ... hunk.write(out) >>> print(pycompat.sysstr(out.getvalue())) diff --git a/folder1/g b/folder1/g --- a/folder1/g +++ b/folder1/g @@ -2,3 +2,2 @@ 2 -3 4 @@ -6,2 +5,4 @@ 6 +6.1 +6.2 7 @@ -8,1 +9,2 @@ 8 +9 cóv•—eZdZdZd„Zd„Zˆfd„Zd„Zd„Zd„Z d„Z eeeed œeeee d œeeed œeed œd e idœZ y)úparsepatch..parserzpatch parsing state machinecót—d|_d|_d|_d|_g|_g|_g|_g|_y)Nrr+)rîrïrñr¸rLríršr:r`s r)r^z#parsepatch..parser.__init__ßs:€ØˆDŒM؈DŒK؈DŒI؈DŒK؈DŒL؈DŒK؈DŒI؈D�Lr+có„—|jg«|\}}}}}t|«|_t|«|_||_yrV)Ú addcontextrêrîrïrñ)r]ÚlimitsÚ fromstartÚfromendÚtostartÚtoendrñs r)Úaddrangez#parsepatch..parser.addrangeés;€Ø �O‰O˜BÔ Ø7=Ñ 4ˆI�w ¨°Ü  ›NˆDŒMܘg›,ˆDŒK؈D�Ir+c ó•—|jrët|j|j|j|j |j |j|‰«}|jjj|«|xjt|j «|jzz c_|xjt|j «|jzz c_g|_g|_||_ yrV) ršrær¸rîrïrñrír…r5r%r8rÇrL)r]rLrŒrës €r)r‹z%parsepatch..parser.addcontextðs³ø€Ø�yŠyÜØ—K‘KØ—M‘MØ—K‘KØ—I‘IØ—K‘KØ—I‘IØØó �ð— ‘ ×!Ñ!×(Ñ(¨Ô+Ø— ’ ¤ T§[¡[Ó!1°A·I±IÑ!=Ñ=• Ø— ’ œs 4§;¡;Ó/°!·'±'Ñ9Ñ9• Ø �” Ø�” Ø"ˆD�Lr+có”—|jr|j|_g|_|jr|jg«||_yrV)rLríršr‹)r]ršs r)Úaddhunkz"parsepatch..parser.addhunks5€Ø�|Š|Ø"Ÿl™l�” Ø!�” Ø�yŠyØ—‘ Ô#؈D�Ir+có€—|jg«t|«}|jj|«||_yrV)r‹r¸r:r5)r]r?rŒs r)Únewfilez"parsepatch..parser.newfile s0€Ø �O‰O˜BÔ Ü�s“ ˆAØ �L‰L× Ñ  Ô "؈D�Kr+có—yrVrWrõs r)Úaddotherz#parsepatch..parser.addothers€Ø r+có<—|jg«|jSrV)r‹r:r`s r)Úfinishedz#parsepatch..parser.finisheds€Ø �O‰O˜BÔ Ø—<‘<Ð r+)ócontextófileóhunkórange)rœr�ržóother)r›rœrž)r›r�rŸ)rœr›r�ržrŸN) rgrhrirÜr^r‘r‹r”r–r˜ršÚ transitions)rës€r)ÚparserrˆÜsxø„Ù)ò ò ô #ò& ò ò  ò ð 'Ø Ø Ø"ñ ð!Ø Ø"Ø"ñ ð'Ø Ø"ñð $.¸Ñ@Ø Ð*ñ' ‰ r+r¡r+rr›sunhandled transition: %s -> %s) r.r¥r/rBÚ scanpatchr ÚKeyErrorr rš)Úoriginalchunksrër¡ÚprDÚstateÚnewstaterªs ` r)rr°sºø€÷XP óP ñd ‹€AÜ ‹€B؇H�HˆS�X‰X�nÓ %Ô&؇G�GˆA„Jà €EÜ# Bž-‰ˆ�$ð Ø *ˆA�M‰M˜%Ñ  Ñ *¨1¨dÔ 3ð ‰ð(ð Ø �:‰:‹<Ðøô ò Ü!Ø1°U¸HÐ4EÑEóð ð ús Á$BÂB,cóŠ—t|«}d}|dk(rd||j«zfS|}|dkDrm|jd|«}|dk(rtt d«|||fz«‚|dz }||dz kr$|||dzdk(r|dz }||dz kr |||dzdk(rŒ|dz}|dkDrŒm|d|j «|||dj«zfS)aªturn a path from a patch into a path suitable for the repository prefix, if not empty, is expected to be normalized with a / at the end. Returns (stripped components, path in repository). >>> pathtransform(b'a/b/c', 0, b'') ('', 'a/b/c') >>> pathtransform(b' a/b/c ', 0, b'') ('', ' a/b/c') >>> pathtransform(b' a/b/c ', 2, b'') ('a/b/', 'c') >>> pathtransform(b'a/b/c', 0, b'd/e/') ('', 'd/e/a/b/c') >>> pathtransform(b' a//b/c ', 2, b'd/e/') ('a//b/', 'd/e/c') >>> pathtransform(b'a/b/c', 3, b'') Traceback (most recent call last): PatchApplicationError: unable to strip away 1 of 3 dirs from a/b/c rr+ó/rˆs*unable to strip away %d of %d dirs from %srN)r%rær›r@rrœ)r½r4ruÚpathlenr,Úcounts r)Ú pathtransformr¬@s€ô*�$‹i€GØ €AØ �‚zØ�F˜TŸ[™[›]Ñ*Ð*Ð*Ø €EØ �!Š)Ø �I‰I�d˜AÓ ˆØ �Š7Ü'ÜÐ?Ó@ؘ% Ð&ñ'óð ð ˆQ‰ˆà�'˜A‘+Šo $ q¨1¨q©5 /°TÒ"9Ø �‰FˆAð�'˜A‘+Šo $ q¨1¨q©5 /°TÓ"9à �‰ ˆð �!‹)ð ��ˆ8�?‰?Ó ˜f t¨A¨B x§¡Ó'8Ñ8Ð 8Ð8r+có—|dk(}|dk(}|xr |jdk(xr|jdk(}|xr |jdk(xr|jdk(} t |||«\} } | xr|j | «} t |||«\} }| |k(r| }n| xr|j |«}| xr| xr| }| d| j d«dz}|d|j d«dz}|r8||k(r3| j|«r"|jdk(r|jdk(rd}d}| | k(xr|j| «}d}|s| r |r|r| }n|}n| r| }|s#|s|r| }n|}n|s| }nttd««‚t|«}|r d|_ |S| rd |_ |S) NrËrr©rTFs&undefined source and destination filesrÌrÑ) rGr¤rHr¦r¬rÚrfindr#r rr»rÀ)ryÚ afile_origÚ bfile_origršr4ruÚnullaÚnullbr{r|ÚabaserÎÚgoodaÚbbaserÔÚgoodbrzÚabasedirÚbbasedirÚisbackuprrìs r)Ú makepatchmetarºisÌ€Ø ˜,Ñ &€EØ ˜,Ñ &€EØ Ò :�t—{‘{ aÑ'Ò :¨D¯I©I¸©N€FØ Ò :�t—{‘{ aÑ'Ò :¨D¯I©I¸©N€FÜ  ¨U°FÓ;�L€Eˆ5؈IÒ /˜'Ÿ.™.¨Ó/€EÜ  ¨U°FÓ;�L€Eˆ5Ø �‚~؉à� Ò3˜gŸn™n¨UÓ3ˆØˆiÒ4 ˜IÒ4¨f¨*€GðÐ,�u—{‘{ 4Ó(¨1Ñ,Ð-€HØÐ,�u—{‘{ 4Ó(¨1Ñ,Ð-€HáØ ˜Ò Ø × Ñ ˜UÔ #Ø �K‰K˜1Ò Ø �I‰I˜ŠNàˆØˆð ˜‰~Ò9 %×"2Ñ"2°5Ó"9€HØ €EÙ Ù ‘UÙØ‘à‘٠؈Eá ÙÙØ‘à‘ÙØ‰Eä!¤!Ð$MÓ"NÓOÐ Oä �5Ó €B٠؈Œð €Iñ ؈ŒØ €Ir+c#óz‡ ‡ K—tjd«}t|«Š ˆ fd„}t‰ jd«D]÷}|j d«s|j d«r]d„}|||«}‰ j «}|j d«r‰ j «}|||gz }n‰ j |«d|f–—Œ‚|j d «rd Š d ||ˆ fd „«f–—Œ¦|j d «rdŠ d||ˆ fd„«f–—ŒÊ|j|«}|rd|j«f–—Œòd|f–—Œùy­w)zálike patch.iterhunks, but yield different events - ('file', [header_lines + fromfile + tofile]) - ('context', [context_lines]) - ('hunk', [hunk_lines]) - ('range', (-start,len, +start,len, proc)) s'@@ -(\d+),(\d+) \+(\d+),(\d+) @@\s*(.*)cóž•—|g}t‰jd«D]/}||«r|j|«Œ‰j|«|S|S)zscan lr while predicate holdsr+)rúrcr5rö)Úfirstr¥r0r&rës €r)Ú scanwhilezscanpatch..scanwhile±sLø€à�ˆÜ˜Ÿ™ cÖ*ˆDÙ�ŒwØ— ‘ ˜TÕ"à—‘˜” ØØˆ ð +ð ˆ r+r+rßsdiff -r có>—|jdd«}| xs|ddvS)Nrr)r“ódiff)r$)r&r�s r)Ú notheaderzscanpatch..notheader¿s)€Ø—J‘J˜t QÓ'�Ø�uÒ=  !¡Ð,=Ð =Ð=r+r“rœr)rrþr›có&•—|j‰«SrVrÀ©r(Úcss €r)r“zscanpatch..Ísø€¸¿ ¹ ÀRÔ8Hr+)rr )rr rþr�có&•—|j‰«SrVrÀrÃs €r)r“zscanpatch..Ðsø€°Q·\±\À"Ô5Er+ržrŸN) r”r•rñrúrcr#rörèrÒ) rDÚlines_rer¾r&rÁr¸rÔrÕrCrÄrës @@r)r¢r¢¦s%ùèø€ô�z‰zÐEÓF€HÜ �B‹€Bô ô�R—[‘[ #Ö&ˆØ �?‰?Ð+Ô ,°·±À Ô0Lò >ñ˜t YÓ/ˆFØ—{‘{“}ˆHØ×"Ñ" 6Ô*ØŸ™›�ؘ8 VÐ,Ñ,‘à—‘˜Ô!ؘ6�/Ó !Ø �_‰_˜TÔ "؈BØ™i¨Ó.HÓIÐIÓ IØ �_‰_˜\Ô *Ø$ˆBØ™9 TÓ+EÓFÐFÓ Fà—‘˜tÓ$ˆAÙØ §¡£ Ð*Ó*à �nÓ$ñ5'ùs„D7D;có,—d} |jj«}|j}t |«}|j |«t|«}|j|«|S#t$r&t|jj ««}YŒhwxYw)a› Git patches can emit: - rename a to b - change b - copy a to c - change c We cannot apply this sequence as-is, the renamed 'a' could not be found for it would have been renamed already. And we cannot copy from 'b' instead because 'b' would have been changed already. So we scan the git patch for copy and rename commands so we can perform the copies ahead of time. r) rDÚtellÚIOErrorr.r rñrörïrB)rëÚ firstliner=rDÚgitlrrís r)Ú scangitpatchrÌÙs}€ð €Cð$Ø�e‰e�j‰j‹lˆØ �U‰Uˆô �r‹N€EØ ‡J�JˆyÔܘeÓ$€J؇G�GˆC„LØ Ðøô ò$Ü �b—e‘e—j‘j“lÓ #Šð$ús„&A$Á$,BÂBc#óŠK—d}d}d}d}dx}}d}d}d} t|«} t| jd«D�];} ||k(rá| s| jd«s&| dur| jd«s| jd«r¨d} |r%|d j ||«r|j «} | jd«rt | | j«} n&| €| jd«rd } t| |dz| | «} |dz }|r"d}d ||| | xr| j«xsdff–—d | f–—�nF| jd «�r0tj| jd««}|s�Œ$|€Mt| | «}d|D�cgc]!}|jdvsŒ|j«‘Œ#c}f–—|j«d|j!d«z}d|j!d«z}|ro|d j ||«sZ|j «} d d| jzd| jzd| j«ff–—|r|d j ||«sŒZ|st#t%d«|ddz«‚d }�n| jd«rO| j«}|jd«s| j'|«�Œqd }d} t)| «}t)|«}n¤| jd«r“| j«}|jd«s| j'|«�ŒÑ| j«}| j'|«|jd«s| j'|«�Œd }d } t)| «}t)|«}|s�Œ4d}d }|}d}�Œ>|rF|j «} d d| jzd| jzd| j«ff–—|rŒEyycc}w­w)aDRead a patch and yield the following events: - ("file", afile, bfile, firsthunk): select a new target file. - ("hunk", hunk): a new hunk is ready to be applied, follows a "file" event. - ("git", gitchanges): current diff is in git format, gitchanges maps filenames to gitpatch records. Unique event. r+NrFró@s***************rårˆTrœr�rßrÞógit)rãràrÍrÒr"s'failed to synchronize metadata for "%s"r“ó+++s***)rñrúrcr#r×r¨r¨r½ršrÉrçrèrærÌrÀrérér rrör‚)rDrÎrÔr¦ÚhunknumÚemitfiler–ríÚBFILErLrër‘rìrŒrCrEÚl2Úl3s r)Ú iterhunksrÖôs¥èø€ð €EØ €EØ €EØ€GØÐ€HˆwØ€Jð €EØ€GÜ �B‹€Bä �"—+‘+˜s× #ˆØ �EŠ>Ù˜QŸ\™\¨$Ô/ؘuÑ$¨¯©Ð6HÔ)IØ�|‰|Ð/Ô0àˆBÙ˜j¨™n×7Ñ7¸¸uÔEØ—^‘^Ó%�Ø�|‰|Ð/Ô0ܘB §¡Ó(‘à�? q§|¡|Ð4FÔ'GØ"�Gܘ˜G a™K¨¨WÓ5�Ø �q‰LˆGÙØ �Ø  u¨a°Ò1A¸¿¹» Ò1IÀTÐJÐJÒJؘ1�*Ô Ø �\‰\Ð*Õ +Ü— ‘ ˜AŸH™H WÓ-Ó.ˆAÙÙØÐ!ä)¨"¨aÓ0� ØÙ&0óÙ&0 °A·D±DÐÑ%>¸uÀeÔ%LØ—^‘^Ó%�ØØ˜BŸG™G‘OؘBŸG™G‘OØØ—G‘G“Ið  ðòñ Z°¡^×%>Ñ%>¸uÀeÕ%LñÜ%ÜÐ@ÓAÀEÈ!È"ÀIÑMóððŠGØ �\‰\˜&Ô !à—‘“ˆBØ—=‘= Ô(Ø—‘˜” ÙØˆG؈GÜ! !Ó$ˆEÜ! "Ó%‰EØ �\‰\˜&Ô !à—‘“ˆBØ—=‘= Ô(Ø—‘˜” ÙØ—‘“ˆBØ �G‰G�BŒKØ—=‘=Ð!3Ô4Ø—‘˜” ÙØˆG؈GÜ! !Ó$ˆEÜ! "Ó%ˆEã ØˆG؈H؈EØŠGðY$ñ\ Ø �^‰^Ó ˆØ˜ §¡™¨°·±©¸$ÀÇÁà ÐJÐJÒJô ùògùs-‚E+OÅ-N>ÆN>ÆB.OÉD&OÍ*AOÎ<Ocóü—d„}d}||«}||d}||«}||d}d}|t|«k�rKt|||dz«}|dz }|dzrôd}d}|dzrt|||dz«}|dz }|dzr|t|||dz«dzz}|dz }|d zr|t|||dz«d zz}|dz }|dzr|t|||dz«d zz}|dz }|d zrt|||dz«}|dz }|d zr|t|||dz«dzz}|dz }|d zr|t|||dz«d zz}|dz }|dk(rd}||z} |||| z }n,|dk7r||z} |||| z }||z }nttd««‚|t|«kr�ŒK|S)z_Apply a binary delta hunk The algorithm used is the algorithm from git's patch-delta.c cól—d}tj|«D]}|dz }t|«dzrŒ|cS|S)Nrré€)rržry)Úbinchunkr,r;s r)Ú deltaheadz applybindelta..deltahead`s<€Ø ˆÜ×!Ñ! (Ö+ˆAØ �‰FˆAܘ“F˜T“MØ’ð,ðˆr+r+NrrrÙr"rärééé rÃisunexpected delta opcode 0)r%ryr@r) rÚrªrÛÚoutr�r,Úcmdr€rUÚ offset_ends r)rqrq[s%€ò ð €CÙ�(Ó€Aؘ˜ˆ|€HÙ�(Ó€Aؘ˜ˆ|€HØ €AØ Œc�(‹mÓ Ü�(˜1˜q 1™uÐ%Ó&ˆØ ˆQ‰ˆØ �Š:؈F؈DØ�TŠzܘX a¨!¨a©%Ð0Ó1�Ø�Q‘�Ø�TŠzØœ#˜h q¨1¨q©5Ð1Ó2°aÑ7Ñ7�Ø�Q‘�Ø�TŠzØœ#˜h q¨1¨q©5Ð1Ó2°bÑ8Ñ8�Ø�Q‘�Ø�TŠzØœ#˜h q¨1¨q©5Ð1Ó2°bÑ8Ñ8�Ø�Q‘�Ø�TŠzܘ8 A¨¨A©Ð.Ó/�Ø�Q‘�Ø�TŠzØœ˜H Q¨¨Q©Ð/Ó0°AÑ5Ñ5�Ø�Q‘�Ø�TŠzØœ˜H Q¨¨Q©Ð/Ó0°BÑ6Ñ6�Ø�Q‘�Ø�qŠyØ�Ø $™ˆJØ �4˜˜zÐ*Ñ *‰CØ �AŠXؘS™ˆJØ �8˜A˜jÐ)Ñ )ˆCØ �‰H‰Aä'¬Ð*FÓ(GÓHÐ HðI Œc�(‹mÔ ðJ €Jr+c ó0—t||t|||||¬«S)aNReads a patch from fp and tries to apply it. Returns 0 for a clean patch, -1 if any rejects were found and 1 if there was any fuzz. If 'eolmode' is 'strict', the patch content and patched file are read in binary mode. Otherwise, line endings are ignored when patching then normalized according to 'eolmode'. ©r4rurw)Ú _applydiffrt)r}rDryrcr4rurws r)Ú applydiffrå–s)€ô Ø Ø ÜØØ ØØØô ð r+có|—|r9tj|j|j«|«}|dk7r|dz }|S)Nr+r©)rÚ canonpathr4Úgetcwd)r5rus r)Ú _canonprefixré¬s8€Ù Ü×#Ñ# D§I¡I¨t¯{©{«}¸fÓEˆØ �SŠ=Ø �d‰NˆFØ €Mr+c óꇇ—t|j‰«Šˆˆfd„}d} d} d} t|«D�]b\} } | dk(r| sŒ| j| «}|dkDsŒ&d} Œ)| dk(�rË| r| | j «z } d} | \}}}}|r;||j «|_|j r(||j «|_nt||||‰‰«}|jdk(r|j|j «|�s#|jdk(r|j|j «Œòd\}}|jd vrD|j|j «dd \}}|€!ttd «|j z«‚|jr|j}|jd k(rd }|s|rr|jdvr<|j|j «r!ttd«|j z«‚|j|j |||j «�Œê ||||||¬«} �Œú| dk(rE| D]>}||j «}|j|«\}}|€Œ,|j|||«Œ@�ŒDt)j*td«| z«‚| r| | j «z } | ry| S#t $r9}|j#t%j&|«dz«d} | dz } Yd}~�Œ½d}~wwxYw)Ncó*•—t|‰dz ‰«dS)Nr)r¬)r¥rur4s €€r)Úpstripz_applydiff..pstrip¹sø€Ü˜Q ¨¡ ¨6Ó2°1Ñ5Ð5r+rr�rrœràrÑr)ràrãr"ssource file '%s' does not existrÌr+)rÌràrãs,cannot create %s: destination already exists)rwr†rÏóunsupported parser state: %srˆ)rér5rÖr¹r{r½r¾rºrÀr|rr@rr¿rrÚ PatchErrorr+rr|rÚAbort)r}rDÚpatcherryrcr4rurwrìÚrejectsÚerrÚ current_filer¦r9r'rÎrÔÚ first_hunkrìrªr¿Úinstr½s `` r)rärä´såù€ô˜'Ÿ,™,¨Ó /€Fõ6ð€GØ €CØ€Lä" 2Ÿ‰ ˆˆvØ �GÒ ÙØØ×$Ñ$ VÓ,ˆCØ�Q‹wØ‘Ø �gÓ ÙØ˜<×-Ñ-Ó/Ñ/�Ø#� Ø+1Ñ (ˆE�5˜* bÙÙ  §¡›/�”Ø—:’:Ù!'¨¯ © Ó!3�B•Jä"ؘU E¨:°u¸fó�ð�u‰u˜ Ò!Ø—‘˜rŸz™zÔ*ÚØ—5‘5˜IÒ%Ø—N‘N 2§7¡7Ô+ØØ'‘ ��dØ—5‘5Ð0Ñ0Ø!&§¡¨r¯z©zÓ!:¸2¸AÐ!>‘J�D˜$Ø�|ä3ÜÐ@ÓAÀBÇJÁJÑNóðð—7’7ØŸ7™7�DØ—u‘u ’ð #˜Ù™4Ø—u‘uÐ <Ñ<ÀÇÁØŸ™ôBô4Üð!2óð!Ÿg™gñ &óðð—O‘O B§G¡G¨T°4¸¿¹ÔDÙð Ù& r¨2¨w¸ÀwÔO’ ð �fŠ_Û�Ù˜bŸj™jÓ)�Ø$Ÿ_™_¨TÓ2‘ ��dØ�<ð à—M‘M $¨¨dÕ3òô—+‘+œaÐ ?Ó@À5ÑHÓIÐ IðS'ñVØ�<×%Ñ%Ó'Ñ'ˆáØØ €Jøô3ò Ø—‘œ ×/Ñ/°Ó5¸Ñ=Ô>Ø#� ؘ1‘ �Ýûð  úsÈ J0Ê0 K2Ê9.K-Ë-K2có8—d}g}|j} | r'|jdtj| «z«d|dj |«|tj|«fz} |j d| z«tj | d«} | D�]} | j«} |j| dz«| jd«r)tj| «} d}|j| «Œb| jd «d k\r/d }s|j dz«d }|j| dz«Œ¥| jd «d k\r|j| dz«ŒÎ| jd «d k\sŒãs|j dz«d }|j| dz«�Œ |rtj |||« | j#«}|r*t%t'd«tj(|«z«‚|S#|rtj |||«wwxYw)ztuse to apply to the working directory. returns whether patch was applied with fuzz factor.Fs-d %ss%s %s -p%d < %srsUsing external patch tool: %s órbr†spatching file s with fuzzrTssaving rejects to filesFAILEDspatch command failed: %s)r4r5rÚ shellquoter/ršÚpopenrærŒr#rÚparsepatchoutputrCr›r+rrKr{r@rÚ explainexit)r}r5rðÚ patchnamer4rRr6rdÚargsÚcwdràrDr&ÚpfÚ printed_fileÚcodes r)Ú_externalpatchr sè€ð €DØ €DØ �)‰)€CÙ Ø � ‰ �Hœx×2Ñ2°3Ó7Ñ7Ô8Ø ØØ � ‰ �$‹Ø Ü×јIÓ&ð  ñ €Cð ‡H�HÐ /°#Ñ 5Ô6Ü �‰˜˜UÓ #€Bð9܈DØ—;‘;“=ˆDØ �G‰G�D˜5‘LÔ !Ø�‰Ð0Ô1Ü×*Ñ*¨4Ó0�Ø$� Ø— ‘ ˜"• Ø—‘˜<Ó(¨AÒ-Ø�Ù#Ø—G‘G˜B ™JÔ'Ø#'�LØ—‘˜˜u™ Õ%Ø—‘Ð4Ó5¸Ò:Ø—‘˜˜u™ Õ%Ø—‘˜9Ó%¨Ó*Ù#Ø—G‘G˜B ™JÔ'Ø#'�LØ—‘˜˜u™ Ö%ñ'ñ* Ü × Ñ   e¨ZÕ 8Ø �8‰8‹:€DÙ Ü#Ü Ð)Ó *¬X×-AÑ-AÀ$Ó-GÑ Gó ð ð €Køñ Ü × Ñ   e¨ZÕ 8ð úsÂC$G=Å5/G=Ç=Hc óœ—|€ t«}|€|jdd«}|j«tvr!t j t d«|z«‚|j«}t«} t|d«} t|||||||¬«} ||k7r|j«|j|j««|j«| dkrtt d««‚| dkDS#t$r|}YŒ‚wxYw#||k7r|j«|j|j««|j«wxYw)Nržseols!unsupported line endings type: %sr÷rãrspatch failed to apply)r7ÚconfigroÚeolmodesrrïrrPr Ú TypeErrorrår{Úupdater@) r}ryÚpatchobjr4rurRrwrcrDr's r)Ú patchbackendr D s €ð €}Ü“ˆØ€Ø—)‘)˜H fÓ-ˆØ‡}�}ƒœhÑ&Ü�k‰kœ!Ð@ÓAÀGÑKÓLÐLØ�m‰m‹o€Gä ‹K€EðÜ �(˜EÓ "ˆðÜØ ��G˜U¨%¸Èô ˆð �Š>Ø �H‰HŒJØ � ‰ �W—]‘]“_Ô%Ø � ‰ Œ Ø ˆQ‚wÜ#¤AÐ&>Ó$?Ó@Ð@Ø �‰7€Nøô òØ Šðûð �Š>Ø �H‰HŒJØ � ‰ �W—]‘]“_Ô%Ø � ‰ � úsÁ3 C4ÂDÃ4 DÄDÄAE c ó>—t|||«}t|||||||«S)zwuse builtin patch to apply to the working directory. returns whether patch was applied with fuzz factor.)r2r ) r}r5rr4rurRrwr6rys r)Ú internalpatchr b s)€ô˜R  zÓ2€GÜ ˜˜G X¨u°f¸eÀWÓ MÐMr+c ó@—t||||«} t|| |||||«SrV)r`r ) r}r5rbrcrr4rurRrwrys r)Ú patchrepor r s+€ô˜"˜d C¨Ó/€GÜ ˜˜G X¨u°f¸eÀWÓ MÐMr+c óˆ—|jdd«}|€ t«}|rt|||||||«St||||||||«S)aêApply to the working directory. 'eolmode' specifies how end of lines should be handled. It can be: - 'strict': inputs are read in binary mode, EOLs are preserved - 'crlf': EOLs are ignored when patching and reset to CRLF - 'lf': EOLs are ignored when patching and reset to LF - None: get it from user settings, default to 'strict' 'eolmode' is ignored when using an external patcher program. Returns whether patch was applied with fuzz factor. suirž)rr7rr ) r}r5rür4rurRrwr6rðs r)Úpatchry s_€ð*�i‰i˜˜xÓ(€GØ €}Ü“ˆÙÜØ ��g˜y¨%°¸ ó ð ô Ø ˆD�)˜U F¨E°7¸Jó ðr+c ó~—t||j«}t||«}t|d«5}t «}t |«D]à\}} |dk(r±| \} } } } | rQt | j|dz |«d| _| jr3t | j|dz |«d| _nt|| | | ||«} |j| j«| jdk(sŒ |j| j«Œ¼|dvsŒÁtjtd«|z«‚|cddd«S#1swYyxYw)Nr÷rœrrà)r�rÏrí)rr4rér r7rÖr¬r½r¾rºrCrÀrrïr)r}r5Ú patchpathr4ruryrDr9r¦r9rÎrÔrôrìs r)Ú changedfilesrš s€Ü˜˜DŸI™IÓ&€GÜ ˜$ Ó '€FÜ ˆi˜Ô  2Ü“%ˆÜ& rž]‰MˆE�6Ø˜ÒØ/5Ñ,��u˜j¨"ÙÜ+¨B¯G©G°U¸Q±YÀÓGÈÑJ�B”GØ—z’zÜ%2ØŸJ™J¨°© °6ó&àñ&˜� ô'Ø ¨¨z¸5À&ó�Bð— ‘ ˜BŸG™GÔ$Ø—5‘5˜IÓ%Ø—K‘K § ¡ Õ+ØÐ/Ò/Ü—k‘k¤!Ð$CÓ"DÀuÑ"LÓMÐMð#+ð$÷) × Ò ús¯B5D3Ã% D3Ä#D3Ä3D<có —eZdZy)ÚGitDiffRequiredN)rgrhrirWr+r)rr´ s„Ør+rc #óPK—|s|s|jj«}||} ||} t|| | ||||||| ¬« D]b\} }}}| �|€Jd«‚| ||«}djd„|D««}|r&|st |«dkDrdj|«dz–—|sŒ_|–—Œdy­w)a‘yields diff of changes to files between two nodes, or node and working directory. if node1 is None, use first dirstate parent instead. if node2 is None, compare node1 with working directory. losedatafn(**kwarg) is a callable run when opts.upgrade=True and every time some change cannot be represented with the current patch format. Return False to upgrade to git patch format, True to accept the loss or raise an exception to abort the diff. It is called with the name of current file being diffed as 'fn'. If set to None, patches will always be upgraded to git format when necessary. prefix is a filename prefix that is prepended to all filenames on display (used for subrepos). relroot, if not empty, must be normalized with a trailing /. Any match patterns that fall outside it will be ignored. copy, if not empty, should contain mappings {dst@y: src@x} of copy information. if copysourcematch is not None, then copy sources will be filtered by this matcher hunksfilterfn, if not None, should be a function taking a filectx and hunks generator that may yield filtered hunks. ) Úctx1Úctx2rèÚchangesÚoptsÚ losedatafnÚpathfnrÉÚcopysourcematchNs-fctx2 unexpectly None in diff hunks filteringr+c3óDK—|]\}}dj|«–—Œy­w)r+N©r/)r‹ÚhrangeÚhliness r)r�zdiff.. sèø€ÐE¹u©^¨V°V˜Ÿ™ ×(¹uùs‚ rr†)r=Úp1Ú diffhunksr/r%)r5Únode1Únode2rèrrrrrÉrÚ hunksfilterfnrrÚfctx1Úfctx2r?r…rls r)Údiffr(½ sÔèø€ñT ™Ø— ‘ × Ñ Ó"ˆà �‰;€DØ �‰;€Dä$-Ø Ø Ø ØØØ ØØØ Ø'÷ %Ñ ˆˆu�c˜5ð Ð $ð Ð!ð @à?ó @Ø!á! %¨Ó/ˆEØ�x‰xÑE¹uÓEÓEˆÙ ‘DœC ›H qšLØ—*‘*˜S“/ EÑ)Ò )Ú Ø‹Jñ1 %ùs ‚BB&ÂB&c ó懇‡‡‡‡‡‡‡‡—|€tj}d„} | «Š|s‰j‰|¬«}t|t«r |dd\ŠŠŠn%|j |j |jcŠŠŠ‰s‰s‰sgS‰jjrt} nt} ‰j«‰j«fD� cgc] } | sŒ| | «‘Œc} Љ€2iŠ|js |jrtj ‰‰|¬«Š| r.‰j"«D� �cic]\} }| |«sŒ| |“Œc}} Št%‰«}t%‰«}t%‰«}‰D])}|‰vsŒ|j'|«|j)|«Œ+‰D]}|‰vsŒ|j'|«Œt+|«Št+|«Št+|«Št ‰j"««D] \} }|‰vsŒ ‰| =Œt-j.‰t ||z|z««}‰j1«|f‰j1«|fg}t-j2‰|«ˆˆˆˆˆˆˆˆˆˆf d„}|jr4|js( ˆfd„}t ||j5d¬«|««S||d«Scc} wcc}} w#t6$r||j5d ¬«d«cYSwxYw) zîYield diff of changes to files in the form of (`header`, `hunks`) tuples where `header` is a list of diff headers and `hunks` is an iterable of (`hunkrange`, `hunklines`) tuples. See diff() for the meaning of parameters. NcóB‡‡—iŠtj«Šˆˆfd„}|S)Ncóþ•—|j|‰j|«¬«}|‰vr3t‰«dkDr‰‰j«=|j «‰|<n‰j |«‰j |«|S)N)Úfilelogé)Úfilectxr”r%Úpopleftr,r|r5)rNrbrjÚcacheÚorders €€r)Ú getfilectxz4diffhunks..lrugetfilectx..getfilectx" sgø€Ø—;‘;˜q¨%¯)©)°A«,�;Ó7ˆDؘ‰~Ü�u“: ’?ؘeŸm™m›oÐ.ØŸ<™<›>��a’à— ‘ ˜Q”Ø �L‰L˜ŒO؈Kr+)Ú collectionsÚdeque)r2r0r1s @@r)Ú lrugetfilectxz diffhunks..lrugetfilectx s#ù€ØˆÜ×!Ñ!Ó#ˆõ ðÐr+)rèrcó0• —t‰ ‰ ‰‰‰‰‰ ‰‰||‰« SrV)Útrydiff) rÚlosedatarÇrÉrrr2Úmodifiedrr8r5Úrevss €€€€€€€€€€r)Údifffnzdiffhunks..difffno s4ø€ÜØ Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø ó  ð r+có(•—‰r ‰|¬«st‚y)N)rY)r)rYrs €r)r8zdiffhunks..losedata‚ sø€Ù!©°rÕ):Ü)Ð)ð*;r+F)ÚgitT)rÚ defaultoptsÚstatusr§Úlistr9rÇr8r}Ú debugflagrrÚnoder=Úupgrader Ú pathcopiesr™r7r|rCrIrÚ matchfilesÚrevÚ prefetchfilesrÉr)r5rrrèrrrrrÉrr5ÚhexfuncrBrîrMÚ modifiedsetÚaddedsetÚ removedsetrNÚ prefetchmatchÚ revmatchesr;r8rÇr2r9r8r:s``` ``` @@@@@r)r"r" sÀÿú€ð& €|Ü× Ñ ˆòñ"“€Já Ø—+‘+˜d¨%�+Ó0ˆÜ�'œ4Ô Ø#*¨2¨A ;Ñ ˆ�%™ð × Ñ Ø �M‰MØ �O‰Oð !ˆ�%˜ñ ™E©'؈ à ‡w�w×ÒÜ‰äˆØ'+§y¡y£{°D·I±I³KÑ&@Ó IÑ&@˜dÂD‰G�D�MÐ&@Ñ I€Dà €|ØˆØ �8Š8�t—|’|Ü×$Ñ$ T¨4°uÔ=ˆDáð*4¨¯©¬ÔN©™X˜S #¹ÈÕ9M��S‘¨ÒNˆä�h“-€KÜ�5‹z€HÜ�W“€JÛ ˆØ �DŠ=ð × Ñ ˜qÔ !Ø �L‰L˜�Oð ó ˆØ �DŠ=ð × Ñ ˜aÕ ð ô �kÓ"€HÜ �8Ó €EÜ�ZÓ €Gܘ˜Ÿ™›Ö&‰ˆˆSØ �dŠ?ð�S‘ ð 'ô ×&Ñ&Ø Œd�; Ñ)¨JÑ6Ó7ó€Mð �‰‹�]Ð#Ø �‰‹�]Ð#ð€Jô ×ј$  Ô+÷ õ ð  ‡|‚|˜DŸHšHð 5ô *ô ™˜tŸy™y¨U˜yÓ3°XÓ>Ó?Ð ?ñ�d˜DÓ!Ð!ùòQ JùóOøôvò 5Ù˜$Ÿ)™)¨˜)Ó-¨tÓ4Ò 4ð 5ús*à J/à J/Ä(J4Ä9J4É?&J:Ê:"KËKc#óªK—|D]Ê}|jd«}|j«}|jd«rd}n,|jd«rd}ntjd|z«‚tj |«D] }|jd«r|df–—Œ||f–—Œ"||k7r|t |«d d f–—||k7sŒ¹|t |«d d f–—ŒÌy ­w) z1yield tokens for a list of lines in a single hunkrÞró diff.deletedr ó diff.insertedóunexpected hunk line: %sródiff.tabNódiff.trailingwhitespacer+)rær#rÚProgrammingErrorÚ tabsplitterÚfindallr%)Ú hunklinesr&Ú chomplineÚ striplineÚlabelÚtokens r)Údiffsinglehunkr\Ž sÞèø€ãˆà—K‘K Ó(ˆ à×$Ñ$Ó&ˆ Ø �?‰?˜4Ô Ø#‰EØ �_‰_˜TÔ "Ø$‰Eä×(Ñ(Ð)DÀtÑ)KÓLÐ LÜ ×(Ñ(¨Ö3ˆEØ×Ñ Ô&ؘkÐ*Ó*à˜e�nÓ$ð 4ð ˜ Ò !ØœS ›^Ð-Ð.Ð0JÐKÒ KØ ˜Ó Øœ˜I›Ð(Ð)¨3Ð/Ó /ñ)ùs ‚B;CÂ>Cc#óK—t«}t«}|D];}|dddk(r ||ddz }Œ|dddk(r ||ddz }Œ%tjd|z«‚|r|st|«D]}|–—Œytj t |««}tj t |««}|D�cgc]}|dk(r|n|dz‘Œ}}|D�cgc]}|dk(r|n|dz‘Œ} }dj|«} dj| «} g} g} tj| | || ¬ «}|D]�\\}}}}}|d k(}tjdj|||««D]}| j||f«Œtjdj|||««D]}| j||f«ŒŒ�dd | fdd | ffD]Á\}}}d }|D]´\}}|r||f–—d}|jd«}|rG|dd}|jd«r|dd}|t|«d}|j«}|t|«d}tj |«D] }d|ddk(rd}n |r|dz}n|dz}||f–—Œ"|sŒ¥r|df–—df–—d }Œ¶ŒÃycc}wcc}w­w)zEyield tokens for a list of lines in a single hunk, with inline colorsrrrNr rQr†r+)Úlines1Úlines2ó!rOrPTFrˆó rrRs.changeds .unchangedrS)Ú bytearrayrrTr\Ú wordsplitterrVÚbytesr/rÚ allblocksr}r5r§r%rærU) rWr£r¥r&r&ÚalÚblr�ÚalnÚblnÚanÚbnÚatokensÚbtokensÚblocksÚa1Úa2Úb1Úb2Úbtyper9r[rurZÚtokensÚ nextisnewlineÚ isendoflineÚchompÚ endoflineÚ endspacesÚmaybetabÚ currentlabels r)Údiffsinglehunkinliner|§ såèø€ô ‹ €AÜ‹ €AÛˆØ ��!ˆ9˜Ò Ø ��a�b�‰M‰AØ �!�AˆY˜$Ò Ø ��a�b�‰M‰Aä×(Ñ(Ð)DÀtÑ)KÓLÐ Lð ñ ‘AÜ  Ö*ˆAØ‹Gð+àä × Ñ œe A›hÓ '€BÜ × Ñ œe A›hÓ '€Bá35Ó 6±2¨a��U’ ‰1  E¡ Ñ )°2€CÐ 6Ù35Ó 6±2¨a��U’ ‰1  E¡ Ñ )°2€CÐ 6Ø �‰�#‹€BØ �‰�#‹€Bà€GØ€GÜ �_‰_˜R ¨C¸Ô <€FÛ#)ÑшˆR��R˜%ؘ4‘-ˆÜ×(Ñ(¨¯©°"°R¸°)Ó)<Ö=ˆEØ �N‰N˜G UÐ+Õ ,ð>ä×(Ñ(¨¯©°"°R¸°)Ó)<Ö=ˆEØ �N‰N˜G UÐ+Õ ,ñ>ð $*ð ˆ Ð(Ø Ð Ð)ó"ш��vðˆ Û$‰NˆG�UÙØ˜u�oÒ%Ø %� àŸ.™.¨Ó/ˆKÙØ˜c˜r˜ �Ø—>‘> %Ô(Ø! # 2˜J�EØ!¤# e£* ,Ð/� ØŸ ™ ›�Ø!¤# e£* ,Ð/� ä'×/Ñ/°Ö6�ؘH Q q˜MÒ)Ø#.‘LáØ',¨{Ñ':™ à',¨}Ñ'<˜ Ø Ð.Ó.ð7òÙØ$Ð&@ÐAÒAØ  #Ð&Ò&Ø $‘ ñ7%ñ "ùò! 7ùÚ 6ùs%‚B.JÂ0I>ÃJà JÃF JÉ)Jc/ó܇‡K—|jd«r|djrtŠntŠgd¢}dg}d}gŠˆˆfd„}||i|¤ŽD�]}|j d«}t |«} t |«D]ß\} } |r| jd«rd}n| r| jd«sd }d} |s| r| jd «rd } |} |r|} | r!| }| d z| kr|dz }‰j|«Œs|«D]}|–—Œ| j«}| D]5\}}|j|«sŒ||f–—| |k7r| t |«d d f–—n| df–—| d z| ksŒÜd–—Œá|«D]}|–—Œ�Œy ­w)z@yields 2-tuples of (output, label) based on the output of func()r) )rÀs diff.diffline)ócopyó diff.extended)órenamer)soldr)snewr)sdeletedr)sindexr)s similarityr)r“s diff.file_a)rÐs diff.file_b)rÎs diff.hunkFc3ó@•K—‰r‰‰«D]}|–—Œg‰ddyy­wrVrW)r[Ú dodiffhunkÚ hunkbuffers €€r)Úconsumehunkbufferz$difflabel..consumehunkbuffer s,øèø€Ù Ù# JÖ/�Ø“ ð0àˆJ‘q‰Mð ùr7r†rÎ)rr rrÎrþT)r rrNrSr+©r†r+) r”Úworddiffr|r\r$r%r­r#r5ræ)ÚfuncrýÚkwÚ headprefixesÚ textprefixesÚheadr„r1r0Ú linecountr,r&ÚdifflineÚprefixesÚ bufferedliner[rYrurZr‚rƒs @@r)Ú difflabelr�ï s±ùèø€à ‡v�vˆf„~˜"˜V™*×-Ò-Ü)‰ ä#ˆ ò €Lð ð€Lð €Dð€Jõñ �tÐ"˜rÕ"ˆØ— ‘ ˜EÓ"ˆÜ˜“Jˆ Ü  Ö'‰GˆAˆtÙØ—?‘? 4Ô(Ø ‘Dá §¡Ø3ô!ð �D؈HÙ™D T§_¡_°\Ô%BØ�à#ˆHÙØ'�Ùà#� Ø�q‘5˜9Ò$Ø  EÑ)�LØ×!Ñ! ,Õ/ñ/Ö0�EØ“Kð1à ŸK™K›M� Û%-‘M�F˜EØ ×+Ñ+¨FÕ3Ø(¨%Ð0Ò0Ø 9Ò,à $¤S¨£^Ð%5Ð 6Ø :ð#òñð&.ð  ˜+Ò%Ø�q‘5˜9Ó$Ø&Ó&ðO(ñP'Ö(ˆEØ‹Kò)ñW#ùs„DE,Ä#.E,ÅE,có(—ttg|¢­i|¤ŽS)zBlike diff(), but yields 2-tuples of (output, label) for ui.write())r�r()rýrˆs r)Údiffuir’? s€ä ”TÐ '˜DÒ ' BÑ 'Ð'r+c#ó¬K—t«}|j«D��cic]\}}||“Œ }}}t|«t|«} } t||z|z«D]r} d} | | }} | | vr6d} | |vrY|jrM|| } | | vr| |vrd} |j | «n,d} n)| | vr%d}|jr| |vr|| | vr ||| | k(rŒl| || f–—Œtycc}}w­w)agenerates tuples (f1, f2, copyop), where f1 is the name of the file before and f2 is the the name after. For added files, f1 will be None, and for removed files, f2 will be None. copyop may be set to None, 'copy' or 'rename' (the latter two only if opts.git is set).Nr€r~)r7r™rIr=rC)r9rÇr8rÉrÚgoneÚkröÚcopytorJrKrNÚcopyopÚf1Úf2s r)Ú _filepairsršD sýèø€ô ‹5€Dà)˜tŸz™zœ|Ô ,™|‘t�q˜!ˆa�‰d˜|€FÑ ,ä˜u›:¤s¨7£|ˆj€Hä �H˜uÑ$ wÑ.Ö /ˆØˆØ�AˆBˆØ �‰=؈BØ�D‰yØ—8’8ؘa™�BؘZÑ'¨B°d©NØ!*˜ØŸ™ � à!(™Ø �*‰_؈BØ�xŠxð˜‘Kؘq™  XÑ-ؘV A™Y™¨1Ò,àØ�"�fˆnÓñ/0ùó -ùs‚C¡ C®B&Ccó¤—|sd}t|«}tjd|z«}|j|«t |j ««S)Nr+sblob %d)r%rÚsha1rrÚdigest)rlr(r�s r)Ú _gitindexrži sA€Ù ØˆÜ ˆD‹ €AÜ� ‰ �l QÑ&Ó'€A؇H�HˆT„NÜ ˆq�x‰x‹z‹?Ðr+s120000s100755s100644)rfrgr+c #óDK—| jrdx} } nd} d} d„}d„}tj|j««}tj|j««}| sd„} t ||||| «D�]£\}}}d}d}d}d}d}d}|r(|||«}| j s| r|j |«}|r(|||«}| j s| r|j |«}| jrd}ntd „||fD««}| r?| j s3|s%||vs!|s||«s||«r|r |s|s |r|r||k7r | |xs|«| |xs|«}| |xs|«}g}| j �r|jd | || |fz«|s|jd t|z«nå|s|jd t|z«nÇt|t|} }|| k7r(|jd |z«|jd| z«|�†| jr3tj||||«dz}!|jd|!z«|jd||fz«|jd||fz«n|r|j|||««|rO| j r$| j r7| jr+| js|�d}|�=|�|j!|«sd}n'd}n$|�|j#«}|�|j#«}||||||f}"||||||f}#t%|"|#||| «–—�Œ¦y­w)zígiven input data, generate a diff and yield it in blocks If generating a diff would lose data like flags or binary data and losedatafn is not None, it will be called. pathfn is applied to every path in the diff output. r+rÍrÒcó^—dj|D�cgc]}d|z‘Œ c}«}d||fzScc}w)Nrs-r %ss diff %s %sr)rNr:rFÚrevinfos r)r�ztrydiff..diffline‘ s7€Ø—)‘)±tÓ<±t°˜X¨›^°tÑ<Ó=ˆØ ¨˜|Ñ+Ð+ùò=s� *có4—|duxs|j«dk(Srø)rU)rjs r)Úisemptyztrydiff..isempty• s€Ø�tˆ|Ò/˜tŸy™y›{¨aÑ/Ð/r+có—|SrVrW)rNs r)r“ztrydiff..œ s€™1r+NFc3óBK—|]}|€Œ|j«–—Œy­wrV)Úisbinaryr4s r)r�ztrydiff..± sèø€ÐO©~¨!ÀÁ˜Ÿ™Ÿ©~ùs‚Šsdiff --git %s%s %s%ssnew file mode %ssdeleted file mode %ss old mode %ss new mode %sédssimilarity index %d%%s %s from %ss%s to %sós)ÚnoprefixrÚdatestrÚdateršr=rirlrÂr5Ú_gitmodeÚshowsimilarityrÚscoreÚnobinaryÚindexÚcmprªÚ diffcontent)$r5r:rrr9rÇr8rÉr2rrrÚaprefixÚbprefixr�r£Údate1Údate2r˜r™r—Úcontent1Úcontent2r&r'Úflag1Úflag2rÁÚpath1Úpath2r¸Úmode1Úmode2ÚsimÚdata1Údata2s$ r)r7r7u s-èø€ð, ‡}‚}ØÐˆ‘'àˆØˆò,ò0ô × Ñ ˜TŸY™Y›[Ó )€EÜ × Ñ ˜TŸY™Y›[Ó )€Eá Ùˆä$ X¨u°g¸tÀT×J‰ˆˆB�؈؈؈؈؈؈٠٘r 4Ó(ˆEØ�xŠx™:ØŸ ™  2›�Ù Ù˜r 4Ó(ˆEØ�xŠx™:ØŸ ™  2›�à �9Š9؉FäÑO°°u©~ÓOÓOˆFá ˜dŸhšháð�d‘ ñ™G EœNñ˜”©ñ™Eñ™˜u¨š~á˜2š8 Ô$á�r’x˜RÓ ˆÙ�r’x˜RÓ ˆØˆØ �8‹8Ø �M‰MØ'¨7°E¸7ÀEÐ*JÑJô ñØ— ‘ Ð1´H¸U±OÑCÕDÙØ— ‘ Ð5¼À¹ÑGÕHä'¨™´¸±�u�ؘE’>Ø—M‘M .°5Ñ"8Ô9Ø—M‘M .°5Ñ"8Ô9ØÐ%Ø×*Ò*Ü%Ÿm™m¨D°©K¸¸e¹ÓEÈÑK˜ØŸ ™ Ð&>ÀÑ&DÔEØ—M‘M -°6¸5°/Ñ"AÔBØ—M‘M +°¸°Ñ"?Õ@Ù Ø �M‰M™( 5¨$Ó/Ô 0ñ Ø—’˜TŸXšX¨$¯-ª-ÀÇ Â ð Ð Ø �ØÐ ØÐ$¨U¯Y©Y°uÔ-=Ø$‘Hà&‘HðÐ Ø Ÿ:™:›<�ØÐ Ø Ÿ:™:›<�à�u˜e U¨H°eÐ<ˆØ�u˜e U¨H°eÐ<ˆÜ˜% ¨°¸Ó=Ô=ñIKùs‚LL c ó`—|\}}}}} } |\} } } }}}||vr t| «ntj}| | vr t|«ntj}|rM|jrA|js5t j | |«}|r|jd||fz«d|gff}nŠ|jrM|jdkDr>|}|€|}|jd|d|j|d|jt|fz«t j| | |||| ||¬«\}}|j|«|| ||fS)aOdiffs two versions of a file. data1 and data2 are tuples containg: * ctx: changeset for the file * fctx: file context for that file * path1: name of the file * flag: flags of the file * content: full content of the file (can be null in case of binary) * date: date of the changeset header: the patch header binary: whether the any of the version of file is binary or not opts: user passed options It exists as a separate function so that extensions like extdiff can wrap it and use the file content directly. s index %s..%sNrsindex %s..%s %s)rÁr) ržrÚnullhexr=r¯rÚb85diffr5r°r¬ÚunidiffÚextend)rÀrÁr¸rÁrrr&r»r¹r·rµrr'r¼rºr¸r¶Úindex1Úindex2rlr…ÚflagÚuheaderss r)r²r² sE€ð(27Ñ.€Dˆ%�˜˜x¨Ø16Ñ.€Dˆ%�˜˜x¨Ø$)¨T¡MŒY�xÔ Ô7H×7PÑ7P€FØ$)¨T¡MŒY�xÔ Ô7H×7PÑ7P€FÙ �$—(’( 4§=¢=Ü�}‰}˜X xÓ0ˆÙ Ø �M‰M˜/¨V°VÐ,<Ñ<Ô =ؘ˜�Ð!‰à �8Š8˜Ÿ ™  QšØˆD؈|Ø�Ø �M‰MØ"à˜1˜tŸz™zÐ*ؘ1˜tŸz™zÐ*ܘT‘Nðñô ô Ÿ-™-Ø Ø Ø Ø Ø Ø ØØô  ‰ˆ�%ð � ‰ �hÔØ �%˜ Ð &Ð&r+có´—d\}}}}}|D]E\}}}} t|tj|««}t|||z«}||z }||z }|xs| }ŒG|||||fS)N)rrrrF)rÆr Úcolwidth) ÚstatsÚmaxfileÚmaxtotalÚaddtotalÚ removetotalrÁrNr£r%r¥s r)Ú diffstatsumrÒ> sz€Ø7HÑ4€GˆX�x ¨fÛ‰ ˆˆ1ˆa�Ü�gœx×0Ñ0°Ó3Ó4ˆÜ�x  Q¡Ó'ˆØ�A‰ ˆØ�qш Ø’˜1‰ð ð �H˜h¨ °VÐ ;Ð;r+cóÖ‡‡‡‡‡ —tjd«}gŠ d\ŠŠŠŠˆˆˆˆˆ fd„}d}|D�]-}|jd«rx|«d}d\ŠŠŠ|jd«r%tj |«j d «ŠŒZ|jd «sŒl|j |«j d «ŠŒ�|jd «rd}Œ¡|jd «r|s‰d z ŠŒº|jd«r|s‰d z ŠŒÓ|jd«s|jd«rdŠŒø|jd«r|ddŠ�Œ|jd«s�Œ#‰d|ddzz Š�Œ0|«‰ S)Ns^diff .*-r [a-z0-9]+\s(.*)$)NrrFcó6•—‰r‰j‰‰‰‰f«yyrVrS)Úaddsr×r¦ÚremovesÚresultss€€€€€r)Ú addresultzdiffstatdata..addresultP s ø€Ù Ø �N‰N˜H d¨G°XÐ>Õ ?ð r+FrÀT)rrFrßr"sdiff -rrs@@r rrås Binary files rename fromrás rename tos => %srâ)r”r•r#rçr ré) r0r©rØr'r&rÕr×r¦rÖr×s @@@@@r)Ú diffstatdatarÙJ sVü€Ü �Z‰ZÐ7Ó 8€Fà€GØ(9Ñ%€Hˆd�G˜X÷@ð@ð€HäˆØ �?‰?˜7Ô #Ù ŒKðˆHØ&1Ñ #ˆD�'˜8Ø�‰Ð/Ô0Ü Ÿ<™<¨Ó-×3Ñ3°AÓ6‘Ø—‘ Õ,à!Ÿ=™=¨Ó.×4Ñ4°QÓ7‘Ø �_‰_˜UÔ #؉HØ �_‰_˜TÔ "©8Ø �A‰I‰DØ �_‰_˜TÔ "©8Ø �q‰L‰GØ �_‰_Ð0Ô 1°T·_±_Ø ô6 ð‰HØ �_‰_˜^Ô ,ؘB˜C�yŠHØ �_‰_˜\Ö *Ø ˜  D¨¨ IÑ-Ñ -ŠHð3ñ4„KØ €Nr+c ó臇—g}t|«}t|«\}Š}}}tt‰««}|r|dkrd}||z |z dz ЉdkrdŠˆˆfd„} |D]]\} } } } | rd}nd| | zz}d| | «z}d| | «z}|j d | d |t j | «z z||||fz«Œ_|r)|j td «t|«||fz«d j|«S) NrrrâcóZ•—‰‰kr|St|‰z‰ztt|«««SrV)rÆrêÚbool)r,Ú graphwidthrÏs €€r)Úscalezdiffstat..scaleƒ s0ø€Ø �zÒ !؈Hô�1�z‘> XÑ-¬s´4¸³7«|Ó<ÐØØØØð ñ õ ð.3ñ& Ø� ‰ Ü ÐGÓ HÜ�5‹z˜9 lÐ3ñ 4ô ð �8‰8�FÓ Ðr+c/ó`K—t|i|¤Žj«D]Ž}|r€|ddvry|jdd«\}}|dzdf–—tjd|«}|r|j d«df–—tjd |«}|r|j d«d f–—n|df–—d –—Œ�y ­w) zOlike diffstat(), but yields 2-tuples of (output, label) for ui.write() rˆs+-rrr+s\++rsdiffstat.inserteds-+sdiffstat.deletedr…N)rèr¢Úrsplitr”r ré)rýrˆr&ÚnameÚgraphrCs r)Ú diffstatuirí§ s´èø€ô ˜$Ð% "Ñ%×0Ñ0Ö2ˆÙ �D˜‘H Ñ%ØŸ+™+ d¨AÓ.‰KˆD�%ؘ$‘; Ð$Ò $Ü— ‘ ˜' 5Ó)ˆAÙØ—w‘w˜q“zÐ#7Ð8Ò8Ü— ‘ ˜& %Ó(ˆAÙØ—w‘w˜q“zÐ#6Ð7Ó7à˜�+Ò ØÓñ3ùs‚B,B.rV)rr+ro)Nro)r+Nror)rr+Nror)rr+) NNNNNNNNNN)NNNNNNN)éP)gr3Ú contextlibrÉrxr”r\r}Úi18nrrBrrrrr Úr r r r rrrrrrrrrÚutilsrrrrr.r•rçrUrcrîr r@r$r¤Úcontextmanagerr‚rzr»rïrñrürr2rPr`rSrZrrtr¸rær rDršr¨r‚r…rr¬rºr¢rÌrÖrqrårérärr r r rrÚ ExceptionrÚ diffalloptsÚdiffoptsÚdifffeatureoptsr(r"r\r|r�r’ršržr¬r7r²rÒrÙrèrírWr+r)ÚrøsðóÛÛ Û Û Û Û å÷ñõ ÷÷÷õ÷óð �=‰=€àˆ� ‰ Ð/Ó0€Øˆb�j‰jÐ)Ó*€ ؈r�z‰zØAó€ ð× Ñ € Ø×'Ñ'€Ø×3Ñ3Ðò BòN€ð ×Ññóðò4n÷b-:ñ-:ò`*÷Z(ñ(÷* "ñ "ôF.*�ô.*ôb/(�Yô/(÷d#,ñ#,ôL*+�/ô*+ð\ ˆ"�*‰*ÐCÓ D€Øˆb�j‰jÐKÓL€ Ú /€÷dñd÷NM ñM ÷`kBñkBò\@óFo÷da,ña,÷H;ñ;ò|ò=ó@Mò`&9òR:òz0%òfò6dKòN8óvò,ðCLó\ò~.ðd?HóðF Ø Ø Øó Nð"HQóNð Ø Ø Ø ØóóBô4 �iô ð × Ñ €Ø×"Ñ"€ Ø×*Ñ*€ð Ø Ø Ø Ø ØØ Ø ØØóHð^ Ø Ø ØØ Ø ØóC"òL0ò2E%òPMò`(ò "òJð 9°9Ñ =€òM>ò`6'òr <ò*óZ-ó`r+