^cgddlZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z mZmZmZmZmZmZmZmZmZmZmZmZmZejZejZ d Z!d/d Z"Gd d Z#d Z$dZ%dZ&dZ'dZ(dZ)GddZ* d0dZ+dZ, d1dZ-dZ.dZ/dZ0dZ1ej2dGdd Z3 d/d!Z4d"Z5d#Z6d$Z7d%Z8d&Z9 d2d'Z:d3d(Z;d4d)Z d5d,Z?d4d-Z@ d6d.ZAdS)7N)_)nullrev)attr) stringutil) timestamp)copiesencodingerror filemergematch mergestateobsutilpathutilpolicypycompatscmutil subrepoutilutilworkerc|j||}gd}||vrKdd|D}td}|||||fz}t j||S)N)abortsignorewarns, cg|] }d|zdz S)').0vs 1/usr/lib/python3/dist-packages/mercurial/merge.py z*_getcheckunknownconfig..*s >>>1tax$>>>s$%s.%s not valid ('%s' is none of %s))uiconfigjoinrr ConfigError)reposectionnamer#validvalidstrmsgs r_getcheckunknownconfigr,&s W^^GT * *F * * *E U::>>>>>??788 vx00$$$ Mr!c,|rdS||}|jj|o[|j|oA|j||jvo ||||SNF) isinmemorywvfsauditcheck isfileorlinkdirstate normalizecmp)r&wctxmctxff2s r_checkunknownfiler;1s  u z  a   " I " "1 % % " M # #A & &dm ; " HLLa ! ! r!ceZdZdZdZdZdS)_unknowndirscheckeray Look for any unknown files or directories that may have a path conflict with a file. If any path prefix of the file exists as a file or link, then it conflicts. If the file itself is a directory that contains any file that is not tracked, then it conflicts. Returns the shortest path at which a conflict occurs, or None if there is no conflict. cRt|_t|_dSN)set_unknowndircache_missingdircacheselfs r__init__z_unknowndirschecker.__init__Os$!$ !$r!c|rdStttj|D]}||jvrdS||jvr|jj |r|j |r%|j ||j vr|cS|j |s|j|dS|j||jj |r|j|r~|j|D]c\}}}|D]Z}t#j|j||}|j |d}||j vr|ccS[ddS)NFT)isknown)r/reversedlistrfinddirsrBrAr0r1r2r3r4r5lexistsaddisdirwalkrpconvertreljoin) rDr&r7r9pdirsfilesfnrelfs r__call__z_unknowndirschecker.__call__Zs ??   5$x0334455 - -AD)))D)))y$$Q'' -I**1-- //22$-GGHHHy((++)--a000FF%))!,,, 9?  # # ! (:(: !"&).."3"3 ! !4!!B=):):1b)A)ABBD=2242FFD4=00 1! tr!N)__name__ __module__ __qualname____doc__rErVrr!rr=r=Ds< & & &r!r=c t}ttttdd}tdd}jdd} |sfd} t } |t jt jfD]T} t||| r| | *| r(| |vr$| || } |  | U| t j gD]4\} }}t||| |dr| | 5|z}fd |D}||z }| ||| ||nt| t jgD]\} }}|\}}t||| }j| r|}n|}|s%|| t j|d fd c|s|d kr(|| t j| | dd |fd |d kr | |dkr | || t j|dfd t)D]} jj}| vrRj| r|t1d| zH|t1d| zd|t1d| zr!t3jt1dt)D]q} j| r+jt1d| zGjt1d| zrt| t jgD]c\} }}| |vp0| vp,t7fdt9j| D}|\}|| t j||f|ddS)z Considers any actions that care about the presence of conflicting unknown files. For some actions, the result is to abort; for others, it is to choose a different action. merges checkunknowns checkignored experimentalmerge.checkpathconflictsc||dkr|dS|dkr|dSdS)Nrr)update) conflictsr#abortconflicts warnconflictss rcollectconflictsz,_checkunknownfiles..collectconflictssU!!%%i000007""$$Y/////#"r!NrcHh|]}j||Sr)r4_ignore)rcr&s r z%_checkunknownfiles..s.PPP!t}7L7LQ7O7OPAPPPr!Fremote createdrs#remote differs from untracked localrTs,%s: untracked file conflicts with directory s,%s: untracked directory conflicts with file s%s: untracked file differs sLuntracked files in working directory differ from files in requested revisions%s: replacing untracked file s+%s: replacing untracked files in directory c3 K|]}|vV dSr?r)rrQ pathconflictss r z%_checkunknownfiles..s(DD!1 %DDDDDDr!)r@r,r" configboolr=rS mergestatemodACTION_CREATEDACTION_DELETED_CHANGEDr;rL getactionsACTION_LOCAL_DIR_RENAME_GETrIACTION_CREATED_MERGEr4rfaddfile ACTION_GET ACTION_MERGEsortedwarnr0r3rr StateErroranyrrJ)r&r7r8forcemresult mergeforce fileconflicts unknownconfig ignoredconfig pathconfigrdcheckunknowndirsr9pathargsr+ allconflictsignoredconflictsunknownconflictsfl2anc differentr#rxbackupflagsrbrkrcs` @@@r_checkunknownfilesr|sw EEMEEMEEMUUN*4?KKM*4?KKM##4J O 0 0 0 0 0 0 /00,4   , ,A !tT155 ,!!!$$$$ , ''dA66#!%%d+++#..  6 7   % %LAtS!tT1d1g>> %!!!$$$$}4 PPPP|PPP'*::)=999)=9999    BC D D  . . LAtSHC)$dA>>I}$$Q'' '&& !,%L%   v11!.4,:  8##""1%%%%W$$!%%a(((!,$K% N # #99w|  y%%a(( NQGHH1LMMMMQGHH1LMMMM D233a7 8 8 8 8  ;     M " "QQ 9 ! !! $ $ Q GLL<==A B B B B GLLJKKaO P P P PM89:: K K 4   EM! EDDDDx/@/C/CDDDDD  =3eV_cJJJJ K Kr!c"tj}|r tj}|D]}||vr|||dd|s=|D]*}||vr"||tjdd)dSdS)a Forget removed files If we're jumping between revisions (as opposed to merging), and if neither the working directory nor the target rev has the file, then we need to remove it from the dirstate, to prevent the dirstate from listing the file when it is no longer in the manifest. If we're merging, and the other revision has removed a file that is not present in the working directory, we need to mark it as removed. Nsforget deletedsforget removed)rn ACTION_FORGET ACTION_REMOVEdeletedrtremoved)r7r8 branchmerger|mr9s r_forgetremovedrs #A(  ' \\^^;; D== OOAq$(9 : : :   A}}!/%   r!c.|}|sit||}|rDt |D]"}||s||#nt|}|r|tjtj tj tj tj tj fD]}|||tjfD]}|||tjgD]5\}}}|\}} ||||6|tjfD]}|||tjgD]:\}}}|\} }} } } | r|| ||;i}|D]O}t+j|}||vr0t/d}||||fz}t1j||||<Pdx}x}}t5|D]e\}}||r?||s*t/d}|||fz}t1j||dz}|dz}|}fdS)z, Check for case-folding collisions. s(case-folding collision between %s and %sr!s5case-folding collision between %s and directory of %s/N) narrowmatchalwaysr@rNrIrS removefilern ACTION_ADDACTION_ADD_MODIFIEDrruACTION_CHANGED_DELETEDrprLrdiscardrqACTION_DIR_RENAME_MOVE_LOCALrrrvrnormcaserr ryrwitems startswith)r&wmfr|rpmmfr9rr+r:rf1famoverfoldmapfold foldprefix unfoldprefixlastfulls r_checkcollisionr s7 ""$$K     388K(())  *'--//** * *"{1~~*&&q)))3xx(1+(44      A HHQKKKK ;=>>  A LLOOOO#..  7 8    LAtSIB LL    HHQKKKK IKLL  A HHQKKKK#.. 0J/KLL  LAtS$( !BBc ! R   HHQKKKKG }Q 7???@@C Awt}% %C"3'' ' ,/.J.'--//**a ??: & & (q||L/I/I (LMMC Ha= C"3'' 'D[ 4x r!c#ZK|D]%}tj|D]}||vr||fVn&dS)z Generator that yields pairs of all the files in the manifest that are found inside the directories listed in dirs, and which directory they are found in. N)rrJ)r&manifestrRr9rQs r _filesindirsrds\ "1%%  ADyyd r!c  |}t}t}t}t}t} |tjtjtjtjfD]S} |tj | | | r| | T|tj fD]} | | |tjfD]%\} } } | \} }}}}|r| | &|tjfD] \} } } | \}}| |!|D]}||vr/||vr| |n| |||}|rK|dtjtjtjtjfvr| ||D]}|| vrt#|d}t'j|||t|}||p|}||tj||fd||tj|dfd|r&t#|d}t3|||D]\} }| | vr||\}} } t'j|||t|}|tjtjfvr|||| | n,| d}||tj||fd||tj|dfd||n|rP|D],}|jt=d|z-t?j t=d d S) z Check if any actions introduce path conflicts in the repository, updating actions to record or handle the path conflict accordingly. r+slocal path conflictls path conflictsremote path conflictrs#%s: is both a file and a directory s,destination manifest contains path conflictsN)!rr@rSrnrorprvrsr`rrJhasdirrLrrqrgetfilebytesrstriprsafename copysourcertACTION_PATH_CONFLICT_RESOLVEACTION_PATH_CONFLICTrrrremover"rxrr ry)r&r7r8r|mflocalconflictsremoteconflictsinvalidconflictscreatedfiledirs deletedfilesr9rr+rr:rrrrrQpdctxnamepnewporigrfls rcheckpathconflictsrqs BUUNeeO uueeO55L ]]  (  0  &  .  ## x033444 99Q<< #    " " " ]]M79 : :!,,m.H-JKK!!D# $BD#  !   R !,,  35D# E$$ 77Dyy!$$Q''''""1%%% __Q   $"Q%  (  0  &  .       # # # L Dkk((..G=GT3w}}3G3GHHDG&&((-AE OO:E &     OO2t     ++$$T** r?;;  DAq $$&q11 4}Qs7==??7K7KLL!8!. OOD!T37777aBOO%AB/  !64L$   &&q)))3%6 ! I IA GLLBCCaG H H H H = > >     r!c6|D]\}}||r|s||*|djr||M|djr|ds8||||d|djtd}td}tj ||z|td}tj ||zdS) z Filters out actions that can ignored because the repo is narrowed. Raise an exception if the merge cannot be completed because the repo is narrowed. rrsoutside-narrow-merge-actionsBmerge affects file '%s' outside narrow, which is not yet supporteds'merging in the other direction may workhints-conflict in file '%s' is outside narrow cloneN) filemaprno_op narrow_safeendswith addcommitinfochangesrr Abortry)rrr|r9actionr+rs r_filternarrowactionsrsG__&&,, 6 ;q>> ,  ,   q ! ! ! ! AY_ ,   q ! ! ! ! AY " ,::d## 6""1%%%%%5vay7H2CDDk#'5555FGGC"37++ +/,,r!ceZdZdZdZdZdZddZddZdZ dd Z dd Z dd Z d Z edZedZedZedZdZdZdS) mergeresultzAn object representing result of merging manifests. It has information about what actions need to be performed on dirstate mapping of divergent renames and other such cases.ci|_i|_i|_tjt |_tjt |_dS)aY filemapping: dict of filename as keys and action related info as values diverge: mapping of source name -> list of dest name for divergent renames renamedelete: mapping of source name -> list of destinations for files deleted on one side and renamed on other. commitinfo: dict containing data which should be used on commit contains a filename -> info mapping actionmapping: dict of action names as keys and values are dict of filename as key and related data as values N) _filemapping_diverge _renamedelete collections defaultdictdict _commitinfo_actionmappingrCs rrEzmergeresult.__init__!sG &2488)5d;;r!c"||_||_dSr?)rr)rDdiverge renamedeletes r updatevalueszmergeresult.updatevalues3s )r!c||jvr|j|\}}}|j||=|||f|j|<||f|j||<dS)aadds a new file to the mergeresult object filename: file which we are adding action: one of mergestatemod.ACTION_* data: a tuple of information like fctx and ctx related to this merge message: a message about the merge Nrr)rDfilenamerdatamessageadrs rrtzmergeresult.addfile7se t( ( ('1GAq!#A&x0'-tW&=(#15wF#H---r!Nc2||jvr |j|S|S)zfreturns (action, args, msg) about this file returns default_return if the file is not present)r)rDrdefault_returns rrzmergeresult.getfileHs& t( ( ($X. .r!c#`K||jD]}|VdS|D]}|j|D]}|VdS)zvreturns files on which provided action needs to perfromed If actions is None, all files are returned Nr)rDactionsr9rs rrSzmergeresult.filesPsv ?&      ,Q/AGGGG  r!cT|j|\}}}|j|=|j||=dS)zXremoves a file from the mergeresult object as the file might not merging anymoreNr)rDrrrrs rrzmergeresult.removefile`s9!% 1( ;g  h '   ' 1 1 1r!Fc#K|D]n}|r;t|j|D]}|j||\}}|||fV ?|j|D]\}\}}|||fVodS)zget list of files which are marked with these actions if sort is true, files for each action is sorted and then added Returns a list of tuple of form (filename, data, message) N)rwrr)rDrsortrr9rr+s rrqzmergeresult.getactionsgs  ' 'A ' 3A 677''A $ 3A 6q 9ID#T3,&&&&''+&9!&<&B&B&D&D''NA{cT3,&&&&'  ' 'r!cf|tjStfd|DS)zreturns number of files which needs actions if actions is passed, total of number of files in that action only is returnedNc3LK|]}tj|VdSr?)lenr)rrrDs rrlz"mergeresult.len..s3@@13t*1-..@@@@@@r!)rrsum)rDrs` rrzmergeresult.lenvs> ?t()) )@@@@@@@@@@r!c#Ktr4t|jD] \}}||fV dS|jD] \}}||fV dSr?)rwrr)rDrkeyvals rrzmergeresult.filemaps  "4#4#:#:#<#<==  S3h  !-3355  S3h  r!c&||j||<dS)zdadds key-value information about filename which will be required while committing this mergeNr)rDrrvalues rrzmergeresult.addcommitinfos+0"3'''r!c|jSr?)rrCs rrzmergeresult.diverges }r!c|jSr?)rrCs rrzmergeresult.renamedeletes !!r!c|jSr?rrCs r commitinfozmergeresult.commitinfos r!ctjt}|jD]@\}}|D]&\}\}}|||||f'A|S)z}returns a dictionary of actions to be perfomed with action as key and a list of files and related arguments as values)rrrIrrappend)rDresrrr9rr+s r actionsdictzmergeresult.actionsdicts~%d++'--// . .DAq"#'')) . .;D#A q$n---- . r!c||_tjt|_|jD]\}\}}}||f|j||<dSr?)rrrrrr)rDrr9actrr+s r setactionszmergeresult.setactionssj#)5d;;#'#4#:#:#<#< 4 4 AT3*.)D  $Q ' ' 4 4r!c|jD]I}|tjtjtjtjfvr|j|r |jsdSJdS)z^tells whether this merge resulted in some actions which can result in conflicts or notTF)rkeysrnru ACTION_EXECrrr)rDrs r hasconflictszmergeresult.hasconflictssy$))++  A!,!-!/!> '*ttur!r?F)rWrXrYrZrErrtrrSrrqrrrpropertyrrrrrr rr!rrrs^:: <<<$***@@@" 222 ' ' ' ' A A A A000 X""X"  X X444 r!rFc t} ||rd}dt||gztjDt j} t j} i} |rt j|||\} } } tj t|}tj t|}tj t|}|j td|j d|||fz|j d||fz||}}}t#| j}|| jt#| j}|| jd|vrC/t/fdjDr|jj|d<||gzvr| s|j d d s|jd kst#||}| jD]\}}||vr| || jD]}| |t j!||}tEj#||}||| }|D]\}\\}}\}} |r|r||vr| j$|dp| j$|d}!d \}"}#|!|||!d|%f}"d|!z}#n||dd|%f}"d}#| &|tNj(|"|#|| jvrK| j|}!| &|tNj(||!|!d|%fd|!z|| jvrK| j|}!| &|tNj(|!||!d|%fd|!z[||}$|)|}%d|| z|%zv}&||$kr*| |%kr$| &|tNj*dd||$krp||%krj||kr%| &|tNj+| fd| &|tNj,| dfd|r| -|dd(|&r+||$kr%| &|tNj+| fdU|&rE||$kr?| &|tNj,|dfd|r| -|dd| &|tNj(|||d|%fd|r||vr|| jvru| j|}'|'|vr;| &|'tNj(||'dd|%fd5| &|'tNj.||fd|z^|| jvrK| j|}'| &|tNj(||'|'d|%fd|'z||vr|||krz|r$| &|tNj/dd| &|tNj0|d|d|%fd |r| -|d!d"<||jj1kr$| &|tNj2dd#p| &|tNj/dd$|r| -|d!d"| &|tNj3dd%|r||vr|| jvru| j|}'|'|vr;| &|'tNj(|'|dd|%fd&/| &|'tNj4|| fd'|zX|| jvrw| j|}'d \}#}"|'|vr|'||'d|%f}"d(|'z}#n|'||'d|%f}"d)|'z}#| &|tNj(|"|#||vr|s%| &|tNj5| fd*|s%| &|tNj5| fd**| &|tNj6| |%fd+b|||krd}(| j7D]>})|8|)r'| j7|)|ts|)dz}(n?|(B|(|vr>| &|(tNj(|(||d|%fd,|z|r%| &|tNj5| fd-"| &|tNj:d||d|%fd.|r| -|d!d"v| &|tNj;dd/|r| -|d!d"|j d d0rty||| |=}*|*st}|*|| | j?}+|+| j?| @| |+| S)1a Merge wctx and p2 with ancestor pa and generate merge action list branchmerge and force are as passed in to update matcher = matcher to filter file lists acceptremote = accept the incoming changes without prompting Returns an object of mergeresult class Nc6g|]}|Sr)r)rxs rr z!manifestmerge..s0  r!)rsresolving manifests s) branchmerge: %s, force: %s, partial: %s s% ancestor: %s, local: %s, remote: %s .hgsubstatec3fK|]+}|V,dSr?)subdirty)rsr7s rrlz manifestmerge..s9::qtxx{{  ""::::::r!r]smerge-track-salvagedschangeset-sidedata)r NNFsboth renamed from %ss both createdslocal replaced from %ssother replaced from %srrsremote unchangedsupdate permissionssremote is newersfilenode-sourcesothersversions differTs%remote directory rename, both createds&remote directory rename - move from %sslocal copied/moved from %ss remote deletesprompt changed/deletedsmerge-removal-candidateyessremote deleteds other deleteds ancestor missing, remote missings$local directory rename, both createds$local directory rename - get from %ssremote copied from %ssremote moved from %srisremote created, get or merges-local directory rename - respect move from %ssremote recreatingsprompt deleted/changeds#local not present, remote unchangedr^)Arrrwparentsrintrevr branch_copies mergecopiesrbytestrboolr"noterdebugrr@copyvaluesr` movewithdirrevrzsubstate nodeconstantsmodifiednodeidrmfilecopiesmodediffr rrL matchfilesmatchmodintersectmatchersgetnodertrnrvr ACTION_KEEPr rurrrr addednodeidrACTION_KEEP_NEWrrrorsdirmoverrrpACTION_KEEP_ABSENTrrrrr),r&r7p2parr{matcher acceptremote followcopies forcefulldiffr|branch_copies1branch_copies2rboolbmboolfboolmm1m2macopied1copied2 relevantfilescopykey copyvalue movedirkey filesmatcherr(r9n1fl1n2rrrr+rflanolr:dfrrrs, ` r manifestmergerNs *mmGw~~// "b1w~FFF )++N)++NG 282D $B3 3 / d;// 0 0F  T%[[ ) )E  T']] + +EGLL+,,---GMM58NN GMM;r4nLMMM"++--BB.%,,..//G NN>-4466777.%,,..//G NN>-4466777 2 ::::DM::: : : C!%!3!BB~  D": .// 0 G  0G H H 0"&;;; BGGBKK,,..// #1"5";";"="= + + GYM))!!'***(4 * *J   j ) ) ) ))$ >> ,WlCC 772W7 % %D%)ZZ\\QQQQ! !IRyC P Q"P Q{{#(,,t6#(,,Q55' c>q"eRWWYY7D1B6CCq$rwwyy9D)C=#=tSIIIIn)))#(+!.Brwwyy1-2  n)))#(+!.Brwwyy1-2 qEhhqkk#)c/177sczzOO%1+  1WWRxx)5 F1  )4 %L.  '#11 !#5xR1WWOO%1-  R1WWOO%0e *  #O--a1CXNNNOO%2Aq%3*  } QG||^///#/288OO%2BdBGGII6@ OO%BCAAE  n)))#(+!.Brwwyy11B6  bA;;#)7 ,  )@a :5  '#11 !#=v4-999OO%3) OO%3(  #  --96 !17 k QG||n000#/288OO%2QeRWWYY7? OO%AC?!C  n)))#(+& T882ubggii8D2R7CC2tRWWYY7D1B6C=#=tSIIII"OO%4)  % OO%4) OO%:bggii(7  r!u'/A||A+3A63q6688D>bBhhOO%2Q5"''))4#%&' "OO%4, OO%<q!UBGGII61  #--96!4:  Q ))!-GPPP w/+FGG44r7333""$$K     @[+w???!.L3444 ,/// Nr!ct|tjfD]I}||vrC||||s"||tjddJt|tjfD]<}||vr6||||s||=dS)zXResolves false conflicts where the nodeid changed but the content remained the same.Ns prompt same) rIrSrnrr6rtrrpr)r&r7r8ancestorr|r9s r_resolvetrivialrQ?s '--!E GHH I I ==aXa[!9!9= OO=.n   '--!E GHH I I"" ==aXa[!9!9=   q ! ! !""r!c ddlm} d} t|dkr3t||||d||||| } t ||||| | n;|jtd||tdd|Dfzi} t} d\} }|D]d}|jtd |zt|||||||||d }t |||||| | %t|j t| kr|j } |%t|t|j kr|j }| j |j |d D]x\}}|\}}}|jd |||fz|| vr/| |}||vr|||i|g||<p||gi| |<yf|jtdt|zt%| D]\}}|jjr~|jd|zt%|D]?\}D]7\}}}|jd||fz8@t|dkrt+|d\}t-fdddDrT|jtd||fz| j|gdRDt0j|vrP|jtd|z| j|g|t0jdRt0j|vrP|jtd|z| j|g|t0jdRt0j|vr^t0j|vrP|jtd|z| j|g|t0jdRlt0j|vrP|jtd|z| j|g|t0jdRt0j|vr^t0j|vrP|jtd|z| j|g|t0jdR6t0j|vr|t0jdt-fd|t0jddDr:|jtd|z| j|gR|jtd|zt%|D]?\}D]7\}}}|jd||fz8@t+|d\}|jtd||fz| j|gdR|jtd| | ||!tE|||| | #||||| tI||||d| | S)a Calculate the actions needed to merge mctx into wctx using ancestors Uses manifestmerge() to merge manifest and get list of actions required to perform for merging two manifests. If there are multiple ancestors, uses bid merge if enabled. Also filters out actions which are unrequired if repository is sparse. Returns mergeresult object same as manifestmerge(). rsparseNrs5note: merging %s and %s using bids from ancestors %s s and c3>K|]}tj|VdSr?)rr)rrs rrlz#calculateupdates..s- L L3!1#!6!6 L L L L L Lr!rs" calculating bids for ancestor %s T)r8r %s: %s -> %s s/ auction for merging merge bids (%d ancestors) s list of bids for %s: s %s -> %s c30K|]}|dkVdS)rNr)rrls rrlz#calculateupdates..s+00QqAaDy000000r!s %s: consensus for %s s %s: picking 'keep' action s" %s: picking 'keep absent' action s& %s: picking 'changed/deleted' action s %s: picking 'keep new' action s% %s: picking 'delete/changed' action c3$K|] }|kV dSr?r)rrga0s rrlz#calculateupdates..s'LLAqCxLLLLLLr!s %s: picking 'get' action s% %s: multiple bids for merge action: s %s -> %s s( %s: ambiguous merge - picked %s action send of auction )%rTrrNrr"rrr$rrrrr`rr __bytes__rrwr debugflagrIallrtrnr.r2rr0rprurxrr#rfilterupdatesactionsrQ)r&r7r8 ancestorsrr{r6r7r5r}rTr|fbidsrrrPmresult1r9rrrr+rbids_fr[rYs @@rcalculateupdatesrfQse0G 9~~    aL         4tUGZHHHH  G H H(   L L) L L LLL    -- *!) () (H GLLBCChN O O O$"   H tT4* M M M#h&6"7"7#g,,"F"F"*#s<'8'83%<<(( (4   & &x'; < < < ((d(33 ( (1 4 0AsAKKMM3JJKKK::aAAvv! A !s! !A3xE!HH (  B C C)nn    ekkmm,,O O GAtw  O 81<==="4::<<00OODAq)*OO D# &6#q{{}}9M&MNNNNO4yyA~~DJJLL))!,10000!ABB%00000GLL455AKKMM8JJ$GOA-!----(D00 Q>??!CDDDGD)B$CA$FGGGG/477 QEFFJKKKND)I$J1$MNNNN4<<!1T99 QIJJQNOOO]AB1E,44 QBCCaGHHHKD)F$G$JKKKK4<<!,44 QHIIAMNNN]AB1E'4//=34Q7LLLLm.F)G)KLLLLLGLL#A!B!BQ!FGGG#GOA,,,,, GLLDEEI J J Jtzz||,, I I1%&IIMBcGLLC3G!GHHHHI %%a(DAq GLL>??akkmm$%    GOA %! % % % %   Q,--...Wl333 xxzztT;888 dD+wGGGD$ilG<<< Nr!cL tjS#t$rYdSwxYwr?)r getcwdFileNotFoundErrorrr!r_getcwdrjs7   tts  ##c #K|jj}t}d}|D]\}}}|jd||fz|r*|jt d|z|| ||dnZ#t$rM} |j t d|tj | j fzYd} ~ nd} ~ wwxYw|dkr||fVd}|d z }|dkr||fV|r?ts3|j t d |j zdSdSdS) zSapply removes to the working directory yields tuples for progress updates rs %s: %s -> r removing %s T) ignoremissings update failed to remove %s: %s! NdrsCcurrent directory was removed (consider changing to repo root: %s) )r"verboserjrrrr1rOSErrorrxr forcebytestrstrerrorroot) r&r7rrocwdir9rr+insts r batchremoverw s goG ))C A 4  '1c(2333  2 GLL+,,q0 1 1 1 Q   GNNN . . . .    GLL677j-dm<<=>          88Q$JJJA Q1uud   799    :  i            s B** D4AC<<Dc#bKi}|jj}|j}|j}d} |j|t |5|D]\} \} } } |jd| | fz|r*|jtd| z| r| }|j | s5tj | D] }|j |r|}n!|j |r>tj|||}tj||||| }||dd}||| | d|}|r7|}|j}t1j|}|||f|| <| d kr d | | ffVd} | d z }  d d d n #1swxYwY| dkrd | | ffVd|fVd S) ajapply gets to the working directory mctx is the context to get from Yields arbitrarily many (False, tuple) for progress updates, followed by exactly one (True, filedata). When wantfiledata is false, filedata is an empty dict. When wantfiledata is true, filedata[f] is a triple (mode, size, mtime) of the file f written for each action. r) expectedcounts %s: %s -> g s getting %s r]supdate.atomic-fileT)backgroundclose atomictemprnFrN)r"rofilectxr0backgroundclosingrrrrrKrrJr3r backuppathrrenamewjoin clearunknownrmwriterlstatst_modermtime_of)r&r8r7 wantfiledatarfiledatarofctxr"rur9rrr+ conflictingrQorigwfctxr{sizermodemtimes rbatchgetrGsHgoG >>GE    8MNNJ;;Q  $% D ! 2:KKMMy!*1--#T51 CxxaVm### FAAA@ AAAAAAAAAAAAAAAD 1uuaVm .s F9HHHc|tjtjtjtjg}t j}t j}||| |||fgdS)zInvoke ``scmutil.prefetchfiles()`` for the files relevant to the dict of merge actions. ``ctx`` is the context being merged in.N) rSrnrurprrrvr prefetchfilesr)r#)r&ctxr|rSprefetchr)s r_prefetchfilesrs MM  $  0  5  &    E$H#J H   4''  r!T)frozenceZdZejZejZejZejZdZ dS) updateresultc<|jp|jp |jp|j Sr?) updatedcount mergedcount removedcountunresolvedcountrCs risemptyzupdateresult.isemptys5   $ $  $#   r!N) rWrXrYribrrrrrrr!rrrsW4799L$'))K4799LdgiiO     r!rc Ft|||d\}}} |d} | ||||jD]\} } | | | |tj j } || z }|j tdtd|}d|jtjvrt#j|||||||tjgdD]\} }}|\}}|j j}|td | z|d kr|td |zn|td |z|td | z| | |||| |rdnd}t3j|j |t4||ft7|tjgd}|D]\}}||||tjf} |tjgdD]!\} }}|j d| |fz|\}}||r|j td|| fz||  || !|"|#|"|$||%|| #|j &dd}t3j|j |tN||||ft7|tj(gd|d}i}|D]&\}}|r|} |\}}|||'d|jtj(vrt#j|||||||tj)fdD];\} }}|j d| |fz|| <|tj*fdD];\} }}|j d| |fz|| <|tj+fdD];\} }}|j d| |fz|| }+| ?\},}-}.||,z }||-z }| |.z } | @}/|At||| |+||/fS)'aapply the merge action list to the working directory mresult is a mergeresult object representing result of the merge wctx is the working copy context mctx is the context to be merged into the working copy Return a tuple of (counts, filedata), where counts is a tuple (updated, merged, removed, unresolved) that describes how many files were affected by the update, and filedata is as described in batchget. )rrrT)cleansupdatingsfiles)unittotalrrVsD%s: path conflict - a file or link has the same name as a directory rs&the local file has been renamed to %s s'the remote file has been renamed to %s s1resolve manually then use 'hg resolve --mark %s' )itemrgMbP?)steprs %s: %s -> pr smoving %s to %s r]sworker.wdir-get-thread-safe) threadsafe hasretvals %s: %s -> f s %s: %s -> a s %s: %s -> am rWs %s: %s -> dm s %s: %s -> dg sgetting %s to %s s %s: %s -> e xNs! preserving %s for resolve of %s )fileidrls %s: %s -> m smergedr)Crrstartp1r-rrrrrn MergeAction NO_OP_ACTIONSr" makeprogressrrrrsubmergerqrstatusaddpathconflict incrementr/rrwrIrrrKrr1rr|rrrrmrrurrrr]rrrr setflagsrrprvr absentfilectxrrLrrPresolver InterventionRequiredcommitrcountsrcompleter)0r&r|r7r8 overwriterlabelsupdatedmergedrmsr9op num_no_op numupdatesprogressrr+rforcostprogrurf0origf0r getfiledatafinalrrrmoves mergeactionsr:rrrfclfcoactxfca unresolved msupdatedmsmerged msremoved extraactionss0 r applyupdatesrs *4w'''&GVW t $ $BHHTWWYY^^  tyy{{F333#))++  2 B M5CDDI*Jw## +Qx[[ $H/ 0KLLLT4tYGGG **  +,4+## 4B GN          :: Aa:;;b@ A A A A Aa;<>,@@FJ !!! !       dk ! ! * * *  + +,A B B +  1             " ! * * * *s):B$$ B32B3rsnoneslinears noconflictc ddlm} |J|s;|s9| t} tttf} | | vrd}|| | fz}t || (| rtj}n }|5| d} | }|d}|}| |g}nj dddgkrcj ||}fd t!|pjgD}n||| g}||t'|t'|f\}}}}|o| }|st)|dkr!t+jt/d | }|r4t/d }t/d }t+j|||rBt/d}||gkrt+j|||gkr`|s^| |kr4t/d}t/d}t+j|||s\| s| r4t/d}t/d}t+j||| s>t!| jD])}| | *n|s||krP!dd|d!d|ddtEddddcdddS| tkr||g|gfvr| #d}|rytIj%|g}||vrn5t/d}t/d}t+j&|| |r| g}n|s|g}j 'dd} |rd} n |dsd} |s| #dsd} tQ| |||||| || }!| tkrH|!)r4t/d}t/d}t+j|||!*d }"|"rdd }#|"\}$}%}tWj,|}&|#|&d!<|$tZj.krj /t/d"|&zdr#|!0|#tZj1dd#n|#|vr#|!0|#tZj2dd$n|!0|#tZj3dd$n|$tZj4kr|%\}'}(})}*}+||(5},j /t/d%|&zddkr%|!0|#tZj6|,dfd&n|!7|#tj8j9sb|s=|s| #dd's$tu|;dn#tu| ;|!t!|!j<=D]^\}#}-j >t/d(|#zt!|-D]}.j >d)|.z _t!|!j?=D]^\}#}-j >t/d*|#zt!|-D]}.j >d)|.z _|s|j|df\}}}}|dup|@}/| o|/o|  } | rF!dd||jABd+|Ct|!tZj6f|| o| }0t|!| |||0|,\}1}2}3| r|3r^|3=D]I\}4}5|5D]}6|!j0|6d|4g|6ddR |4tZj6kr|0r|5D] }6d|2|6d<Jt)|2|0r |!tZj6fndksJjFG5|2ri}7tjIjA}8|8d}2ni|8d}9|2=D]-\}#}$|$&|$d-d|9kr|$d|$ddf|7|#<.|7=D] \}#}$|$|2|#< J||t[jK|!jL||2tjMjANd+|s,jFO||s| Pdddn #1swxYwYdddn #1swxYwY| r!d|||1j|1S).a Perform a merge between the working directory and the given node node = the node to update to branchmerge = whether to merge between branches force = whether to force branch merging or file overwriting matcher = a matcher to filter file lists (dirstate not updated) mergeancestor = whether it is merging with an ancestor. If true, we should accept the incoming changes for any prompts that occur. If false, merging with an ancestor (fast-forward) is only allowed between different named branches. This flag is used by rebase extension as a temporary fix and should be avoided in general. labels = labels to use for local, other, and base mergeforce = whether the merge was run with 'merge --force' (deprecated): if this is True, then 'force' should be True as well. The table below shows all the behaviors of the update command given the -c/--check and -C/--clean or no options, whether the working directory is dirty, whether a revision is specified, and the relationship of the parent rev to the target rev (linear or not). Match from top first. The -n option doesn't exist on the command line, but represents the experimental.updatecheck=noconflict option. This logic is tested by test-update-branches.t. -c -C -n -m dirty rev linear | result y y * * * * * | (1) y * y * * * * | (1) y * * y * * * | (1) * y y * * * * | (1) * y * y * * * | (1) * * y y * * * | (1) * * * * * n n | x * * * * n * * | ok n n n n y * y | merge n n n n y y n | (2) n n n y y * * | merge n n y n y * * | merge if no conflict n y n n y * * | discard y n n n y * * | (3) x = can't happen * = don't-care 1 = incompatible options (checked in commands.py) 2 = abort: uncommitted changes (commit or update --clean to discard changes) 3 = abort: uncommitted changes (checked in commands.py) The merge is performed inside ``wc``, a workingctx-like objects. It defaults to repo[None] if None is passed. Return the same tuple as applyupdates(). rrSNz&Invalid updatecheck %r (can accept %r)rr\spreferancestor*c g|] }| Srr)rrr&s rr z_update..osLLLStCyLLLr!)rxsoutstanding uncommitted mergesoutstanding merge conflictssuse 'hg resolve' to resolvers7merging with a working directory ancestor has no effectsnothing to merges#use 'hg update' or check 'hg heads'suncommitted changessuse 'hg status' to list changess preupdateTr!)throwparent1parent2supdate)rrr )missings+commit or update --clean to discard changess followcopiesF)r5r}sconflicting changesrfsjlocal%(l)s changed %(f)s which other%(o)s deleted use (c)hanged version or (d)elete?$$ &Changed $$ &Deletes prompt deletes prompt keepsrother%(o)s changed %(f)s which local%(l)s deleted use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deletedsprompt recreating)rbranchs<note: possible conflict - %s was renamed multiple times to: s %s s9note: possible conflict - %s was deleted and renamed to: s updatestate)r)Qr\rTUPDATECHECK_LINEARUPDATECHECK_NONEUPDATECHECK_NO_CONFLICT ValueErrorr/rnullcontextmanagerwlockrr" configlist changelogcommonancestorsheadsr-rwrrPrrr ryrrrrrrSrr$r bailifchangedhookrrr foreground UpdateAbortrmrfr rr partextrasrnr promptchoicertrrrrprrurfscasesensitiverrrrrrxrrvfsrhexrrr4 parentchanger get_fs_now setparents recordupdatesrunlinkr$ setbranchprunetemporaryincludes):r&r-rr{rP mergeancestorrr5r}updatedirstate updatecheckwcrTokayr+ maybe_wlockplrr3pascahsfp1fp2xp1xp2rrrm_arrrr7r|valsr9rrpromptsrr:rrrrrnfrrstatsrrkactsrambiguous_mtimenownow_secs:` r_updater sy F      "u "  ,K "46MN d " ";C K& &CS// ! ~"--//~-// jjll @8@8 :dB ZZ\\ U $Z  >"CCw!!(,=>>4&HH~::27799bggiiPPLLLLVD\\-Jdk]LLL{{2K{889WWYY 599eBiiGS#s-+o  72ww{{&q)I'J'JKKKB!!## 7677788&s6666 * NOOCrd{{k#&&&$6 )C)C/00CCDDD+c5555 7bhhjj 7BJJLL 7.//;<<&s6666==?? . ,,..AFF1II++---- Rxx ,dC MMM )S#Q GGG#Aq!Q//c@8@8@8@8@8@8@8@8f000SA66.. ")!3D27799+!F!FJDz((J66 677 !OPP#/$????  $CC $Cw))(ODD  ! LLQ ! L !288D8#9#9 ! L#        !     1 1 1##%% 7.//GHH&s6666 ~.. 9 *ALAtS*622GGDMM8887''2   OO%3(  "WWOO%9& OO%0&  m:::(,%BD#2 G((7 " "   OO%0, &&q)))#DI.. > > >XXd5XAA > bkkmmT::::bkkmmW===GO113344 , ,EAr GLL,    Rjj , , X]++++ ,G0668899 , ,EAr GLL)    Rjj , , X]++++ , 26688 4 4 4 '++}79::BGGII   &9k/ +7      , , , ({L \ 8 5+113355GAt!99'!a8!ABB%88888M4444!%55A04K!--{##|d}tj||}t ||dd|dS)Ns/must specify parent of merge commit to back outTF)rr{rPr)r3r ProgrammingErrorrrr&r-)rparentr r+s rback_outr4; sq ~ 6688 DC(-- -       r!c fd} |j} g} |rg} | j|_|||} |r d}t| j}t| j}|r|rt d}|||fz}nw|rt d}||z}n`|rt d}||z}nI|rGd}| D],}||rj|s|dz }-|rt d }||z}| | | |_S|d z }j |d dkr!tj t d |rvt| j| jzD]Y}|s@j t d |z| jj|| |Z|rt| dD]~}||rqj|sW|s@j t d|z| jj|| || | |_S#| |_wxYw)aPurge the working directory of untracked files. ``matcher`` is a matcher configured to scan the working directory - potentially a subset. ``unknown`` controls whether unknown files should be purged. ``ignored`` controls whether ignored files should be purged. ``removeemptydirs`` controls whether empty directories should be removed. ``removefiles`` controls whether files are removed. ``abortonerror`` causes an exception to be raised if an error occurs deleting a file or directory. ``noop`` controls whether to actually remove files. If not defined, actions will be taken. ``confirm`` ask confirmation before actually removing anything. Returns an iterable of relative paths in the working directory that were or would be removed. c ||dS#t$rVtd|z}rtj|jtd|zYdSwxYw)Ns%s cannot be removeds warning: %s )rprr rr"rx)removefnrr abortonerrorr&s rrzpurge..removeo s 6 HTNNNNN 6 6 6)**T1A 6k!nn$ Q/0014555555  6s AA0/A0)r ignoredunknownNs3permanently delete %d unknown and %d ignored files?s$permanently delete %d unknown files?s$permanently delete %d ignored files?rrs1permanently delete at least %d empty directories?s (yN)$$ &Yes $$ &No)defaultsremoval cancelledsremoving file %s T)reversesremoving directory %s ) traversedirrrrr9r:rr0listdirr"rr CanceledErrorrwrrrmdir)r&r5r:r9removeemptydirs removefilesr8noopconfirmroldtraversedirr directoriesrr+ nb_ignored nb_unknown dir_countr9s` ` rpurgerJK s H666666(N C7-  5K"-"4G 7GWMM  GCV^,,JV^,,J %j %NOO J// %?@@z! %?@@z! % $''Awqzz'$)*;*;A*>*>'!Q %LC9$C{0----7''Q'771<<-a0D.E.EFFF  FNV^;<<  0GLL#8!9!9A!=>>>F49+Q/// 1  "K666 " "71::"di&7&7&:&:"3 Q'A%B%BQ%FGGGty222JJqMMM-n,,,,sC*IEI I'r?r r.)NFNNFTNN)NFNr)NNFFN)TFTTFFF)Brstructi18nrr-r thirdpartyrutilsr dirstateutilsrr\r r r r r r*rrnrrrrrrrrpack_packunpack_unpackr,r;r=rrrrrrrrNrQrfrjrwrrrrrrUPDATECHECK_ABORTrrrrr!r`r$r&r0r4rJrr!rrUs) $$$$$$"   -&55555555p@K@K@KFBAAAH   D D D N , , ,F````````Z~~~~B """6 EEEEP$ $ $ NSSSl:t          , EEEEP2 2 2 j'   ]]]]@ ",PPPP*   IIIIX    &    k-k-k-k-k-k-r!