Ë  b…q´+lãó¨—ddlmZddlmZmZddlmZd„Zd„ZGd„d«Z d„Z d „Z d „Z d „Z dd „Zd„Zd„Zd„ZGd„d«Z dd„Zy )é)Ú_)ÚerrorÚmdiff)Ú stringutilcó’—|d|dksJ‚|d|dksJ‚t|d|d«}t|d|d«}||kr||fSy)aGiven two ranges return the range where they intersect or None. >>> intersect((0, 10), (0, 6)) (0, 6) >>> intersect((0, 10), (5, 15)) (5, 10) >>> intersect((0, 10), (10, 15)) >>> intersect((0, 9), (10, 15)) >>> intersect((0, 9), (7, 15)) (7, 9) érN)ÚmaxÚmin)ÚraÚrbÚsaÚsbs ú9usr/lib/python3.12/site-packages/mercurial/simplemerge.pyÚ intersectrsg€ð ˆa‰5�B�q‘EŠ>Ј>Ø ˆa‰5�B�q‘EŠ>Ј>ä ˆR�‰U�B�q‘EÓ €BÜ ˆR�‰U�B�q‘EÓ €BØ ˆB‚wØ�2ˆvˆ àócó†—||z ||z k7rytt||«t||««D]\}}||||k7sŒyy)z:Compare a[astart:aend] == b[bstart:bend], without slicing.FT)ÚzipÚrange)ÚaÚastartÚaendÚbÚbstartÚbendÚiaÚibs rÚ compare_ranger3sP€à ˆv‰ ˜4 &™=Ò)ØÜ”e˜F DÓ)¬5°¸Ó+>Ö?‰ˆˆBØ ˆR‰5�A�b‘E‹>Ùð@ðrcó*—eZdZdZdd„Zd„Zd„Zd„Zy)Ú Merge3Textz 3-way merge of texts. Given strings BASE, OTHER, THIS, tries to produce a combined text incorporating the changes from both BASE->OTHER and BASE->THIS.Ncóâ—||_||_||_|€tj|«}|€tj|«}|€tj|«}||_||_||_y©N)ÚbasetextÚatextÚbtextrÚ splitnewlinesÚbaserr)Úselfr"r#r$r&rrs rÚ__init__zMerge3Text.__init__Dsk€Ø ˆŒ ؈Œ ؈Œ Ø ˆ<Ü×&Ñ& xÓ0ˆDØ ˆ9Ü×#Ñ# EÓ*ˆAØ ˆ9Ü×#Ñ# EÓ*ˆA؈Œ ؈ŒØˆ�rc#ó¨K—|j«D]»}|d}|dk(r||j|d|df–—Œ'|dk(s|dk(r||j|d|df–—ŒK|dk(r||j|d|df–—Œj|dk(rC||j|d|d|j|d |d |j|d |d ff–—Œ²t |«‚y ­w)a­Yield sequence of line groups. Each one is a tuple: 'unchanged', lines Lines unchanged from base 'a', lines Lines taken from a 'same', lines Lines taken from a (and equal to b) 'b', lines Lines taken from b 'conflict', (base_lines, a_lines, b_lines) Lines from base were changed to either a or b and conflict. ró unchangedréóaósameóbóconflictééééN)Ú merge_regionsr&rrÚ ValueError)r'ÚtÚwhats rÚ merge_groupszMerge3Text.merge_groupsRsèø€ð$×#Ñ#Ö%ˆAØ�Q‘4ˆDØ�|Ò#ؘDŸI™I a¨¡d¨Q¨q©TÐ2Ð2Ó2ؘ’ ¨¢Ø˜DŸF™F 1 Q¡4¨!¨A©$Ð/Ð/Ó/ؘ’ؘDŸF™F 1 Q¡4¨!¨A©$Ð/Ð/Ó/ؘÒ$ààŸ ™  ! A¡$¨¨1©Ð.ØŸ™˜q ™t a¨¡dÐ+ØŸ™˜q ™t a¨¡dÐ+ððóô! Ó&Ð&ñ%&ùs‚CCc #ó˜K—dx}x}}|j«D�],}|\}}}}} } ||z } | dk\sJ‚| ||z k(sJ‚| | | z k(sJ‚||z } | |z } ||z }| dk\sJ‚| dk\sJ‚|dk\sJ‚| s| r­t|j|||j||«}t|j|| |j||«}t|j|||j|| «}|rd||f–—n3|r |sd|| f–—n'|r |sd||f–—n|s|s d|||||| f–—n t d«‚|}| }|}| dkDs�Œ ||k(sJ‚|| k(sJ‚||k(sJ‚d||f–—|}|}| }�Œ/y­w) aîReturn sequences of matching and conflicting regions. This returns tuples, where the first value says what kind we have: 'unchanged', start, end Take a region of base[start:end] 'same', astart, aend b and a are different from base but give the same result 'a', start, end Non-clashing insertion from a[start:end] 'conflict', zstart, zend, astart, aend, bstart, bend Conflict between a and b, with z as common ancestor Method is as follows: The two sequences align only on regions which match the base and both descendants. These are found by doing a two-way diff of each one against the base, and then finding the intersections between those regions. These "sync regions" are by definition unchanged in both and easily dealt with. The regions in between can be in any of three cases: conflicted, or changed on only one side. rr-r.r,r/s#can't handle a=b=base but unmatchedr*N)Úfind_sync_regionsrrr&rÚAssertionError)r'ÚizrrÚregionÚzmatchÚzendÚamatchrÚbmatchrÚmatchlenÚlen_aÚlen_bÚlen_baseÚequal_aÚequal_bÚsames rr4zMerge3Text.merge_regionsxsÎèø€ð>ЈЈR�"à×,Ñ,×.ˆFØ7=Ñ 4ˆF�D˜& $¨°ð˜f‘}ˆHؘq’=Ð �=Ø  v¡ Ò.Ð .Ð.Ø  v¡ Ò.Ð .Ð.à˜R‘KˆEؘR‘KˆEØ ‘{ˆHؘA’:Ð �:ؘA’:Ð �:ؘq’=Ð �=ñ™ä'Ø—F‘F˜B ¨¯ © °2°vó�ô(Ø—F‘F˜B ¨¯ © °2°vó�ô% T§V¡V¨R°¸¿¹ÀÀVÓL�áØ! 2 vÐ-Ó-Ù¡WØ  FÐ*Ó*Ù¡WØ  FÐ*Ó*Ù ©Ø% r¨6°2°v¸rÀ6ÐIÓIä(Ð)OÓPÐPà�Ø�؈Bð ˜!Œ|ؘV’|Ð#�|ؘV’|Ð#�|ؘV’|Ð#�|à" F¨DÐ0Ò0Ø�Ø�Ø’ñm/ùs ‚D E Ä$&E cóÀ—dx}}tj|j|j«}tj|j|j«}t |«}t |«}g}||k�r||k�r ||\}} } ||\} } } t ||| zf| | | zf«}|r¿|d}|d}||z }|| ksJ‚|| ksJ‚||ksJ‚| |ksJ‚| ||z z}| || z z}||z}||z}|j|||j||k(s#J|j|||j||f«‚|j|||j||k(sJ‚|j||||||f«|| z| | zkr|dz }n|dz }||kr||kr�Œ t |j«}t |j«}t |j«} |j||||| | f«|S)zÛReturn a list of sync regions, where both descendants match the base. Generates a list of (base1, base2, a1, a2, b1, b2). There is always a zero-length sync region at the end of all the files. rr) rÚget_matching_blocksr"r#r$Úlenrr&rrÚappend)r'rrÚamatchesÚbmatchesrCrDÚslÚabaser@ÚalenÚbbaserAÚblenÚiÚintbaseÚintendÚintlenÚasubÚbsubrrs rr:zMerge3Text.find_sync_regionsÑs0€ðˆ ˆˆRÜ×,Ñ,¨T¯]©]¸D¿J¹JÓGˆÜ×,Ñ,¨T¯]©]¸D¿J¹JÓGˆÜ�H“ ˆÜ�H“ ˆà ˆà�5‹j˜R %›ZØ"*¨2¡,Ñ ˆE�6˜4Ø"*¨2¡,Ñ ˆE�6˜4ô˜5 %¨$¡,Ð/°%¸À¹Ð1FÓGˆAÙØ˜A™$�ؘ1™�Ø 'Ñ)�ð ’~Ð%�~Ø ’~Ð%�~Ø Ò'Ð'Ð'Ø Ò'Ð'Ð'à ¨5¡Ñ1�Ø ¨5¡Ñ1�ؘf‘}�ؘf‘}�à—y‘y ¨Ð0°D·F±F¸4ÀÐ4EÒEðØ—I‘I˜g fÐ-Ø—F‘F˜4 Ð%ðHóÐEð —y‘y ¨Ð0°D·F±F¸4ÀÐ4EÒEÐEÐEà— ‘ ˜7 F¨D°$¸¸dÐCÔD𘑠 ¨¡Ò.Ø�a‘‘à�a‘�ðK�5Šj˜R %œZôN�d—i‘i“.ˆÜ�D—F‘F“ ˆÜ�D—F‘F“ ˆØ � ‰ �7˜G U¨E°5¸%Ð@ÔAàˆ r)NNN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r(r8r4r:©rrrr>s„ñGó ò$'òLWór;rrcóÀ—tj|j««r;td«|jj «z}t j|«‚y)zUverifies that text is non-binary (unless opts[text] is passed, then we just warn)s%s looks like a binary file.N)rÚbinaryÚtextrÚfctxÚpathrÚAbort)ÚinputÚmsgs rÚ _verifytextrgsG€ô×јŸ™›Ô&ÜÐ/Ó0°5·:±:·?±?Ó3DÑDˆÜ�k‰k˜#ÓÐð'rcóV—td„|D««}g}|D]�}|jrp|jr2|jdzj|dz«dz|jz}n |j}|j t j |d««Œ|j d«Œ‘|S)Nc3óbK—|]'}|jrt|j«nd–—Œ)y­w)rN)ÚlabelrK)Ú.0res rÚ z!_format_labels..s%èø€Ð IÁ&¸ %§+¢+Œc�%—+‘+Ô°1Ó4Á&ùs‚-/ó:ró éH)r rjÚ label_detailÚljustrLrÚellipsis)ÚinputsÚpadÚlabelsrerjs rÚ_format_labelsrvsž€Ü Ñ IÁ&Ó IÓ I€CØ €FÛˆØ �;Š;Ø×!Ò!à—[‘[ 4Ñ'×.Ñ.¨s°Q©wÓ7Øñà×(Ñ(ñ)ñð Ÿ ™ �à �M‰Mœ*×-Ñ-¨e°VÓ<Õ =à �M‰M˜$Õ ðð €Mrcó°—t|j«dkDr>|jdjd«ry|jdjd«ryy)Nrs ó ó )rKrÚendswith)Úm3s rÚ_detect_newliner|+sF€Ü ˆ2�4‰4ƒy�1‚}Ø �4‰4�‰7× Ñ ˜GÔ $ØØ �T‰T�!‰W× Ñ ˜eÔ $ØØ rcód—t|«}t|«}d}||kr+||kr&||||k(r|dz }||kr||kr ||||k(rŒ|}d}||kr;||kr6|| dz || dz k(r#|dz }||kr||kr|| dz || dz k(rŒ#|}|d|}||||z }||||z } |||z d} ||| | fS)zýTrim conflict regions of lines where A and B sides match. Lines where both A and B have made the same changes at the beginning or the end of each merge region are eliminated from the conflict region and are instead considered the same. rrN)rK) Úa_linesÚb_linesrQrSÚiiÚ startmatchesÚ endmatchesÚ lines_beforeÚ new_a_linesÚ new_b_linesÚ lines_afters rÚ _minimizer‡4s€ô ˆw‹<€DÜ ˆw‹<€Dð €BØ ˆtŠ)˜˜Tš  g¨b¡k°W¸R±[Ò&@Ø ˆa‰ˆð ˆtŠ)˜˜Tš  g¨b¡k°W¸R±[Ó&@à€Lð €BØ ˆtŠ)˜˜Tš  g¨r¨c°A©gÑ&6¸'À2À#ÈÁ'Ñ:JÒ&JØ ˆa‰ˆð ˆtŠ)˜˜Tš  g¨r¨c°A©gÑ&6¸'À2À#ÈÁ'Ñ:JÓ&Jà€Jà˜=˜LÐ)€Lؘ,¨° Ñ):Ð;€Kؘ,¨° Ñ):Ð;€Kؘ$ Ñ+Ð-Ð.€KØ ˜ k°;Ð >Ð>rNcóè—t|«}d}|r|dz|z}|r|dz|z}|j«}g} |D]·\} } | dk(rœd}| \} } }t| |«}|\}} }}| j|«| j ||z«| j| «| j ||z«| j|«| j ||z«| j|«Œ§| j| «Œ¹| |fS)zReturn merge in cvs-like form.Frnr/T)r|r8r‡ÚextendrL)r{Úname_aÚname_bÚ start_markerÚ mid_markerÚ end_markerÚnewlineÚ conflictsr8Úlinesr7Ú group_linesÚ base_linesr~rÚ minimizedrƒr†s rÚrender_minimizedr•Qs€ô˜bÓ!€GØ€IÙ Ø# dÑ*¨VÑ3ˆ Ù Ø $Ñ&¨Ñ/ˆ Ø—?‘?Ó$€LØ €EÛ)шˆkØ �;Ò ØˆIØ+6Ñ (ˆJ˜ Ü! '¨7Ó3ˆIØ:CÑ 7ˆL˜' 7¨KØ �L‰L˜Ô &Ø �L‰L˜¨Ñ/Ô 0Ø �L‰L˜Ô !Ø �L‰L˜ gÑ-Ô .Ø �L‰L˜Ô !Ø �L‰L˜ gÑ-Ô .Ø �L‰L˜Õ %à �L‰L˜Õ %ð*ð �)Ð Ðrcó®—t|«}d}g}|j«D]°\}}|dk(r•|\} } } d}|jd|z|z«|j| «|jd|z|z«|j| «|jd|z«|j| «|jd|z|z«Œ |j|«Œ²||fS)z+Render conflicts as 3-way conflict markers.Fr/Ts<<<<<<< s||||||| ó=======s>>>>>>> )r|r8rLr‰) r{rŠr‹Ú name_baser�r�r‘r7r’r“r~rs rÚ render_merge3r™tsÕ€ä˜bÓ!€GØ€IØ €EØŸ_™_Ö.шˆkØ �;Ò Ø+6Ñ (ˆJ˜ ØˆIØ �L‰L˜ vÑ-°Ñ7Ô 8Ø �L‰L˜Ô !Ø �L‰L˜ yÑ0°7Ñ:Ô ;Ø �L‰L˜Ô $Ø �L‰L˜ gÑ-Ô .Ø �L‰L˜Ô !Ø �L‰L˜ vÑ-°Ñ7Õ 8à �L‰L˜Õ %ð/ð �)Ð Ðrc óÀ—t|«}g}d}|j«D�]¸\}}|dk(�r›|\} } } dj| «} tt j | dj| «| | ¬««} tt j | dj| «| | ¬««}d„}d„}|j d|z«||«|| «krp|j d|z|z«|j| «|j d |z|z«|j d |z|z«|j|| | | ««no|j d |z|z«|j d |z|z«|j||| | ««|j d|z|z«|j| «|j d |z«d }�Œ¨|j|«�Œ»||fS) zDRender conflicts as conflict markers with one snapshot and one diff.Fr/r)Úlines1Úlines2có&—td„|D««S)Nc3óBK—|]\}}|dk(r |d|dz –—Œy­w)ó=rrNr^)rkÚblockÚkinds rrlz;render_mergediff..matching_lines..¤s0èø€ðá'-™ ˜˜tؘt’|ð˜!‘H˜u Q™xÕ'Ù'-ùs‚)Úsum)Úblockss rÚmatching_linesz(render_mergediff..matching_lines£s€Üñá'-óóðrc3ó¶K—|D]P\}}|dk(r||d|dD] }d|z–—Œ Œ#||d|dD] }d|z–—Œ ||d|dD] }d|z–—Œ ŒRy­w) NrŸrrrnó-r+r0ó+r^)r£r›rœr r¡Úlines rÚ diff_linesz$render_mergediff..diff_linesªs‰èø€Û#)‘K�E˜4ؘt’|Ø$*¨5°©8°e¸A±hÓ$?˜DØ"&¨¡+Ó-ñ%@ð%+¨5°©8°e¸A±hÓ$?˜DØ"&¨¡+Ó-ð%@à$*¨5°©8°e¸A±hÓ$?˜DØ"&¨¡+Ó-ñ%@ñ$*ùs‚AAó<<<<<<>>>>>>T)r|r8ÚjoinÚlistrÚ allblocksrLr‰)r{rŠr‹r˜r�r‘r�r7r’r“r~rÚ base_textÚb_blocksÚa_blocksr¤r©s rÚrender_mergediffr²‰sÌ€ä˜bÓ!€GØ €EØ€IØŸ_™_×.шˆkØ �;Ó Ø+6Ñ (ˆJ˜ ØŸ™ Ó,ˆIÜÜ—‘ØØ—H‘H˜WÓ%Ø%Ø"ô óˆHôÜ—‘ØØ—H‘H˜WÓ%Ø%Ø"ô óˆHò ò .ð �L‰L˜ gÑ-Ô .Ù˜hÓ'©.¸Ó*BÒBØ— ‘ ˜[¨6Ñ1°GÑ;Ô<Ø— ‘ ˜WÔ%Ø— ‘ ˜[¨9Ñ4°wÑ>Ô?Ø— ‘ ˜[¨6Ñ1°GÑ;Ô<Ø— ‘ ™Z¨°*¸gÓFÕGà— ‘ ˜[¨9Ñ4°wÑ>Ô?Ø— ‘ ˜[¨6Ñ1°GÑ;Ô<Ø— ‘ ™Z¨°*¸gÓFÔGØ— ‘ ˜[¨6Ñ1°GÑ;Ô<Ø— ‘ ˜WÔ%Ø �L‰L˜ gÑ-Ô .ØŠIà �L‰L˜Ö %ðo/ðp �)Ð Ðrcóž—g}|j«D]7\}}|dk(r|D]}|j||«ŒŒ'|j|«Œ9|S)Nr/)r8r‰)r{Úsidesr‘r7r’Úsides rÚ_resolver¶ÉsU€Ø €EØŸ_™_Ö.шˆkØ �;Ò Û�Ø— ‘ ˜[¨Ñ.Õ/ñð �L‰L˜Õ %ð /ð €Lrcó —eZdZdd„Zd„Zd„Zy)Ú MergeInputNcó<—||_||_||_d|_yr!)rbrjrpÚ_text)r'rbrjrps rr(zMergeInput.__init__Õs!€ØˆŒ ؈Œ ð)ˆÔ؈� rcóp—|j€|jj«|_|jSr!)rºrbÚ decodeddata)r's rrazMergeInput.textÞs,€Ø �:‰:Ð ðŸ™×.Ñ.Ó0ˆDŒJØ�z‰zÐrcó—||_yr!)rº)r'ras rÚset_textzMergeInput.set_textês €Øˆ� r)NN)rZr[r\r(rar¾r^rrr¸r¸Ôs„óò órr¸có2—|s!t|«t|«t|«t|j«|j«|j««}d}|dk(r t|d«}n•|dk(r t|d«}nƒ|dk(r t|d«}nq|dk(r t|d «}n_|d k(rt |||«}t |g|¢­Ž\}}n=|d k(rt |||«}t |g|¢­Ž\}}nt ||«}t|g|¢­Ž\}}d j|«} | |fS) z[Performs the simplemerge algorithm. The merged result is written into `localctx`. Fsunion)rr+sunion-other-first)r+rslocal)rsother)r+s mergediffsmerge3r) rgrrar¶rvr²r™r•r¬) Úlocalr&ÚotherÚmodeÚ allow_binaryr{r�r‘ruÚ mergedtexts rÚ simplemergerÅîs!€ñ Ü�EÔÜ�DÔÜ�EÔä �D—I‘I“K §¡£¨u¯z©z«|Ó <€BØ€IØ ˆxÒܘ˜VÓ$‰Ø Ð%Ò %ܘ˜VÓ$‰Ø �Ò Ü˜˜TÓ"‰Ø �Ò Ü˜˜TÓ"‰à �<Ò Ü# E¨5°$Ó7ˆFÜ/°Ð<°VÒ<Ñ ˆE‘9Ø �YÒ Ü# E¨5°$Ó7ˆFÜ,¨RÐ9°&Ò9Ñ ˆE‘9ä# E¨5Ó1ˆFÜ/°Ð<°VÒ<Ñ ˆE�9à—‘˜%“€JØ �yÐ Ð r)NNrªr—r«)smergeF)Úi18nrÚrrÚutilsrrrrrgrvr|r‡r•r™r²r¶r¸rÅr^rrÚrÉs}ðõ(÷õòò.÷NñNòbòò(ò?ð> Ø ØØØó òFò*=ò@÷ñð< Øô '!r