\x89\x50\x4E\x47\x0D\x0A\x1A\x0A PNG  \x89\x50\x4E\x47\x0D\x0A\x1A\x0A  13\c@@s0ddlmZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z mZmZddlmZddlmZmZmZmZmZmZmZmZmZmZmZejZ ej!Z"dZ#d Z$d Z%d Z&d Z'd Z(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?d Z@d!ZAdZBd"ZCd#ZDd$ZEd%ZFd&ZGd'eHfd(YZId)ZJeKd*ZLd+eHfd,YZMd-ZNd.ZOd/ZPeKd0ZQeKd1ZRd2ZSd3ZTd4ZUeVd5ZWd6ZXeKeVd7ZYd8ZZd9Z[d:Z\d;Z]ej^d<e_d=eHfd>YZ`eKd?Zad@ZbeKeVeKeKeVeKeKdAZceVeVdBZdeVe_e_eVeVdCZedS(Di(tabsolute_importNi(t_(t addednodeidtbinthextmodifiednodeidtnullhextnullidtnullrev(tattr( tcopiestencodingterrort filemergetmatchtobsutiltpycompattscmutilt subrepoutiltutiltworkercC@s.|jd}|d |d}dj|S(Nsii(tsplittjoin(tdatatbits((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyt _droponode-stLtOtFtCtDtPtmtftltttXtxtutstrtputprtdtatgtptamtctdctcdtdgtdmtktetcmt mergestatecB@seZdZdZdZed+d+d+dZedZdZ d+d+d+dZ dZ dZ d Z d Zd Zejd Zejd ZejdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%d Z&d!Z'd"Z(d#Z)d$Z*d%Z+d&Z,d'Z-d(Z.d)Z/d*Z0RS(,strack 3-way merge state of individual files The merge state is stored on disk when needed. Two files are used: one with an old format (version 1), and one with a new format (version 2). Version 2 stores a superset of the data in version 1, including new kinds of records in the future. For more about the new format, see the documentation for `_readrecordsv2`. Each record can contain arbitrary content, and has an associated type. This `type` should be a letter. If `type` is uppercase, the record is mandatory: versions of Mercurial that don't support it should abort. If `type` is lowercase, the record can be safely ignored. Currently known records: L: the node of the "local" part of the merge (hexified version) O: the node of the "other" part of the merge (hexified version) F: a file to be merged entry C: a change/delete or delete/change conflict D: a file that the external merge driver will merge internally (experimental) P: a path conflict (file vs directory) m: the external merge driver defined for this merge plus its run state (experimental) f: a (filename, dictionary) tuple of optional values for a given file X: unsupported mandatory record type (used in tests) x: unsupported advisory record type (used in tests) l: the labels for the parts of the merge. Merge driver run states (experimental): u: driver-resolved files unmarked -- needs to be run next time we're about to resolve or commit m: driver-resolved files marked -- only needs to be run before commit s: success/skipped -- does not need to be run any more Merge record states (stored in self._state, indexed by filename): u: unresolved conflict r: resolved conflict pu: unresolved path conflict (file conflicts with directory) pr: resolved path conflict d: driver-resolved conflict The resolve command transitions between 'u' and 'r' for conflicts and 'pu' and 'pr' for path conflicts. s merge/states merge/state2cC@s#t|}|j||||S(sPInitialize a brand new merge state, removing any existing state on disk.(R8treset(trepotnodetothertlabelstms((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytcleans cC@st|}|j|S(s1Initialize the merge state, reading it from disk.(R8t_read(R:R>((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytreads  cC@s||_t|_d|_dS(s^Initialize the merge state. Do not use this directly! Instead call read() or clean().N(t_repotFalset_dirtytNonet_labels(tselfR:((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyt__init__s  cC@si|_i|_d|_d|_||_x0dD](}|t|kr4t||q4q4W|r{||_||_nd|_|j rt |_ n t |_ t j|jjjdti|_t|_dS(Ntlocalctxtotherctxtmerge(RIRJ(t_statet _stateextrasREt_localt_otherRFtvarstdelattrt_readmergedrivert mergedrivertMERGE_DRIVER_STATE_SUCCESSt_mdstatetMERGE_DRIVER_STATE_UNMARKEDtshutiltrmtreeRBtvfsRtTruet_resultsRCRD(RGR;R<R=tvar((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyR9s$             cC@si|_i|_d|_d|_x0dD](}|t|kr+t||q+q+Wd|_t|_ t }|j }x|D]\}}|t krt ||_q|tkrt ||_q|tkr>|jdd}|d}t|dks|tttfkr%t}n|d|_||_ q|ttttfkr}|jd}|d|j|dIi( RBRYt statepathv2RARbt_unpacktRECORD_OVERRIDER|RRRR( RGRnR!RtofftendRotlengthRpR((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRy9s*       cC@s^|jjjdd}|jdk rZ|j|krZtjtddtdn|S(Nt experimentalRSs(merge driver changed since merge startedthints)revert merge driver change or abort merge(RBtuitconfigRRRER t ConfigErrorR(RGtconfigmergedriver((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRSas  cC@s5|jdkr'd}tj|n|j|jS(Ns+localctx accessed but self._local isn't set(RNRER tProgrammingErrorRB(RGtmsg((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRItscC@s5|jdkr'd}tj|n|j|jS(Ns+otherctx accessed but self._other isn't set(RORER RRB(RGR((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRJ{scC@sLt|jpKt|jpK|jjj|jpK|jjj|jS(sWhether mergestate is active. Returns True if there appears to be mergestate. This is a rough proxy for "is a merge in progress." (tboolRNRLRBRYtexistsRR(RG((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytactivescC@s2|jr.|j}|j|t|_ndS(s*Write current state on disk (if necessary)N(RDt _makerecordst _writerecordsRC(RGRn((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytcommits   cC@s g}|jtt|jf|jtt|jf|jrr|jtdj|j|j gfnx|j j D]\}}|dt kr|jt dj|g|fq|dttfkr|jtdj|g|fq|dtks |dtkrF|jtdj|g|fq|jtdj|g|fqWx_t|jj D]H\}}djd|j D}|jtd||ffqW|jdk rdj|j}|jt|fn|S(Nsiiics@s%|]\}}d||fVqdS(s%s%sN((t.0R5tv((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pys ss%s%s(R|R_RRNR`RORSRaRRURLt iteritemstMERGE_RECORD_DRIVER_RESOLVEDRgtMERGE_RECORD_UNRESOLVED_PATHtMERGE_RECORD_RESOLVED_PATHRfRReRdtsortedRMRhRFRERi(RGRnRrRRuRsR=((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRs8        "  cC@s|j||j|dS(s,Write current state on disk (both v1 and v2)N(t_writerecordsv1t_writerecordsv2(RGRn((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRs cC@s|jj|jd}t|}t|}|jt|jdx:|D]2\}}|tkrQ|jdt |qQqQW|j dS(s/Write current state on disk in a version 1 filetwbs s%s N( RBRYRtitertnexttwriteRRNRdRR(RGRnR!tirecordstlrecordsRoR((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRs   cC@stttf}|jj|jd}xl|D]d\}}||kr`td||f}}ndt|}|jt ||t||q.W|j dS(sqWrite current state on disk in a version 2 file See the docstring for _readrecordsv2 for why we use 't'.Rs%s%ss>sI%isN( R_R`RdRBRYRRRbRt_packR(RGRnt allowlistR!tkeyRtformat((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRs &cC@s|jrt}nAttj|jj}|jjj d||j t ||j|jt|j |jt|j |j g|j|hsN(R]RRt configboolRRtACTION_CREATEDtACTION_DELETED_CHANGEDRRkREtACTION_LOCAL_DIR_RENAME_GETRt_ignoretACTION_CREATED_MERGERRCt ACTION_MERGERZRRRRRR tAborttanyRR!(R:RRtforceRt mergeforcet fileconflictst unknownconfigt ignoredconfigt pathconfigR1tcheckunknowndirsR!R targsRRt allconflictsR0tignoredconflictstunknownconflictstfl2tanct differentRRtbackupR((R/R2R0s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyt_checkunknownfiles s~     "   !  "        " % cC@si}t}|rt}nx6|jD](}||kr(|ddf||RR=((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytdriverpreprocessscC@stS(strun the conclude step of the merge driver, if any This is currently not implemented -- it's an extension point.(RZ(R:R>RR=((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytdriverconcludescc@sJxC|D];}x2tj|D]!}||kr||fVPqqWqWdS(s 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(RR!(R:tmanifestR'R!R.((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyt _filesindirss    cC@s|j}t}t}t}t}t} x|jD]\} \} } } | ttttfkr|jtj | |j | r|j | qn| t kr| j | n| tkr| \}}}}}|r| j |qn| t krF| \}}| j |qFqFWx|D]z}||krr||krb|j |qr|j |n||kr4||dttttfkr4|j |q4q4Wx|D]}}|| krt|jd}tj|||t|j}t|fdf||sRRwsboth renamed from %ss both createdR"sremote unchangedsupdate permissionssremote is newersversions differs%remote directory rename, both createds&remote directory rename - move from %sslocal copied/moved from %ss remote deletesprompt changed/deletedsremote deleteds other deleteds$local directory rename, both createds$local directory rename - get from %ssremote copied from %ssremote moved from %ssremote createdsremote created, get or merges-local directory rename - respect move from %ssremote recreatingsprompt deleted/changedRsmerge.checkpathconflictsN((6RERORR{RtintrevReR t mergecopiesRtbytestrRRtnoteRtdebugR]tvaluesR-trevR;tsubstateRtdiffRRRkt matchfilestmatchmodtintersectmatchersRR9RCR;Rt ACTION_KEEPt ACTION_EXECRRZRSRRQRRR6R4R8RURbR5R3RwRNRz(,R:RRtpaRR<tmatchert acceptremotet followcopiest forcefulldifftcopyt movewithdirtdiverget renamedeletetdirmoveR%trettboolbmtboolftboolmtm1tm2tmatcopiedt relevantfilestcopykeyt copyvaluet movedirkeyt filesmatcherRRR!tn1tfl1tn2RGR[R,RtnolRtdfR+RN((Rs5/usr/lib64/python2.7/site-packages/mercurial/merge.pyt manifestmerge`s  $9 &#   +                           c C@sxt|jD]\}\}}}|tkrn||krn||j|| rntddf||t|||}| j|n| j||||| }t||||d| || | fS(sDCalculate the actions needed to merge mctx into wctx using ancestorsi(tsparseis5note: merging %s and %s using bids from ancestors %s s and cs@s|]}tj|VqdS(N(RR(RRH((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pys @ss" calculating bids for ancestor %s Rs %s: %s -> %s s auction for merging merge bids c3@s|]}|dkVqdS(iN((RR,(R"(s5/usr/lib64/python2.7/site-packages/mercurial/merge.pys iss %s: consensus for %s s %s: picking 'keep' action c3@s|]}|kVqdS(N((RR,(tga0(s5/usr/lib64/python2.7/site-packages/mercurial/merge.pys wss %s: picking 'get' action s% %s: multiple bids for merge action: s %s -> %s s( %s: ambiguous merge - picked %s action send of auction N(NN(RwRRbRRKRRRRRERZRRRR|RRtallRSRRRRRRLR-tfilterupdatesactionsR( R:RRt ancestorsRR<RRRR=RRRRtfbidsRtdiverge1t renamedelete1R!R,R RCRR+tdmstbidst_fR4tf0Rt fractionst prunedactions((RR"s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytcalculateupdates0s    $ $          $  "    cC@sAytjSWn,tk r<}|jtjkr6dSnXdS(N(R tgetcwdtOSErrorRRRE(R((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyt_getcwds c c@sI|jj}t}d}x|D]\}}}|jjd||f|rn|jjtd|n||jy||jdtWn6t k r} |jj td|| j fnX|dkr||fVd}n|d7}q"W|dkr||fVn|rEt rE|jj td|j nd S( sSapply removes to the working directory yields tuples for progress updates is %s: %s -> r s removing %s Rs update failed to remove %s: %s! idisCcurrent directory was removed (consider changing to repo root: %s) N( RtverboseRRRRRRRZRRtstrerrortroot( R:RRRtcwdRvR!RCRtinst((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyt batchremoves,      c c@s|jj}|j}|j}d}|jj|dt|~xv|D]n\}\} } } |jjd|| f|r|jjtd|n| rB|j |} |jj |sx?t j |D]+} |jj | r|j | } PqqWntj||| }|jj | rBt j| |qBn||j|jdd}||j||j| dtd||d kr||fVd}n|d 7}qJWWd QX|dkr||fVnd S( suapply gets to the working directory mctx is the context to get from yields tuples for progress updates it expectedcounts %s: %s -> g s getting %s Rsupdate.atomic-filetbackgroundcloset atomictempidiN(RRRRtbackgroundclosingRbRRRtwjoinR"RR!RRtorigpathtrenamet clearunknownR3RRRZ(R:RRRRtfctxRRvR!RRJRtabsfR.torigR((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytbatchgets:    %    c C@sgttttfD]}||^q}tj}tj}|||jg||g|D]"}|D]\}} } |^qdqZdS(sInvoke ``scmutil.prefetchfiles()`` for the files relevant to the dict of merge actions. ``ctx`` is the context being merged in.N(RR5R6R9Rt prefetchfilesRR( R:RRR,toplisttprefetchRtsublistR!RCR((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyt_prefetchfiless    tfrozent updateresultcB@sAeZejZejZejZejZdZRS(cC@s&|j o%|j o%|j o%|j S(N(t updatedcountt mergedcountt removedcountR(RG((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytisemptys( RRR tibRRRRR(((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRs     c5C@s t|||d)\}}}tj||jj|j|} g} x$|jD]\} } | jq\Wt|t} | j t|t | j |t x| D]\}}}|\}}}}}|dkrqn|d&kr t j||}n$|jjd||f||}|d&krQt j||}n ||}||}||kr~||}n|j|dt}| j||||||kr|r| j|qqWxQ| D]I}||jr|jjd|||j||jqqWtd|jD}|jjtddtd d |}g|tD]}|ddkrt|^qtrtj||||||nx|tD]\}}}|\}}|jj}|td ||d kr|td |n|td||td|| j ||||j!d|qW|j"rdnd}t#j#|j|t$||f|t} x*| D]"\}!}"|j!d|!d|"qWt%|t}x|t&D]\}}}|jjd||f|\}#||#jr|jj'td|#|f||j||j(|j|#j)|j|#j*||#jn|j!d|qW|jj+dd}$t#j#|j|t,|||f|t-d|$} x*| D]"\}!}"|j!d|!d|"q Wt%|t-}g|t-D]}|ddkrJ|^qJrtj||||||nxE|t.D]9\}}}|jjd||f|j!d|qWxE|t/D]9\}}}|jjd||f|j!d|qWxE|t0D]9\}}}|jjd||f|j!d|q&Wx5|t1D])\}}}|jjd||fqnWx|t2D]\}}}|jjd||f|j!d||\}#}%|jj'td|#|f||j||j(|j|#j)|%||#j|d7}qWx|t3D]\}}}|jjd||f|j!d||\}#}%|jj'td|#|f||j(|j|#j)|%|d7}qcWx|t4D]z\}}}|jjd ||f|j!d||\}%||j||j5d |%kd!|%k|d7}qW| o| o| j6}&|&rf |j"rt7j8d"n| j9t:|| |d#|}'t;| j<}(|'s t=|||t>t%|(dSg})x<| D]4\}}}||(kr% |)j|||fq% q% W|)} nz.g}*x| D]\}}}|jjd$||f|j!d||dkr tj||||j?|||qv n||j| j@||\}+},|+sv |d7}|*j|||fqv qv WxW|*D]O\}}}|jjd%||f|j!d|d || jA||q@ WWd&| j9X| jB}-|&r |- r | jCtDkr tE|| |d#|s t>|-d}-n| j9n| jF\}.}/}0||.7}||/7}||07}| jG}1|1r t;d'|t D}2xB|1jHD]4\}3}4||3j |4|2jId(|4Dqp Wg|t D]}|d|2kr |^q |t <s tupdatingtunitRttotalsD%s: path conflict - a file or link has the same name as a directory R"s&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' titemgMbP?tsteps %s: %s -> pr smoving %s to %s Rsworker.wdir-get-thread-safet threadsafes %s: %s -> f s %s: %s -> a s %s: %s -> am s %s: %s -> k s %s: %s -> dm is %s: %s -> dg sgetting %s to %s s %s: %s -> e R%s,in-memory merge does not support mergedriverR=s %s: %s -> m (premerge) s %s: %s -> m (merge) Ncs@s|]}|dVqdS(iN((RR,((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pys scs@s|]}|dVqdS(iN((RR,((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pys s(iii(KRR8R?tp1R;RtsortRRQtextendR5R9RER RRRRRRkR|R"RRtsumt makeprogressRRRtsubmergeRmtstatusRt incrementRRRRbRlRRRRR3RRRRRRRSR6RtsetflagsRSR tInMemoryMergeConflictsErrorRRcR]RRtmaxRRRRRqRTRdRRRtdifference_updateR(5R:RRRt overwriteR=RRRR>tmovesR R"t mergeactionsR!RCRRZRR[R\RHRRRRt numupdatestprogressR,tfoR'tcosttprogRvRRRRtusemergedrivertproceedt unresolvedft newactionst tocompleteRR(Rt msupdatedtmsmergedt msremovedt extraactionstmfilesR5tacts((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyt applyupdatessB *         ! -       2    -  #  #                  # cC@s7xL|jtgD]8\}}}|r;|jj|q|jj|qWx3|jtgD]\}}}|jj|qbWx|jtgD]\}}}|\}|jj|p|}|jj||jj ||||kr |jj|q|jj|qWx3|jt gD]\}}}|jj|q1WxL|jt gD]8\}}}|r|jj |qg|jj|qgWx3|jt gD]\}}}|jj |qWx#|jtgD]\}}}qWxL|jtgD]8\}}}|r:|jj|q|jj|qWx|jtgD]\}}}|\}} } } } |r|jj||| kr3| r|jj|n||kr|jj ||q|jj | |q3qa| |kr|jj |n| ra|jj|qaqaWx|jtgD]w\}}}|\}} |r|jj||jj||jj ||qJ|jj||jj|qJWxk|jtgD]W\}}}|\}} |r|jj||jj ||q|jj|qWdS(s$record merge actions to the dirstateN(RRRRtdropRRlRRkRRRt normallookupRRRt otherparenttnormalR9RKRSR6(R:RRR!RCRRtorigf0RZRR[R\RHtflag((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRsp"""  """"""   " " c 3C@s ddlm} | r6| r6| d6kr6d} q6n|d6ksN|jrWt} nt} |j | d6kr|d6} n| j} | d}d6g}|d6k r||g}n|o| }||}|dd6krn|jj dddgkrS|j j |j |j }gt |p9tgD]}||^q:}qn|j|d|g}n|j |j t|t|f\}}}}|st| dkrtjtd ntj|}t|jrtjtd qn|r||gkr=tjtd nU||gkr| r| j|jkrtjtd d tdqn| r| js| jrtjtdd tdn| jsx-t | jD]}| j|jqWqn |s||krw|j ddtd|dd|j dd|ddddt!ddddS| dkr||g|gfkr| j"dt}|rt#j$||j g}||j |krqtd}td}tj%|d |qqn|r/| g}n|sA|g}n|jj&dd}|ret}n|dsxt}n| r| j"dt rt}nt'|| ||||||d|d|\}} }!| dkrQxq|j(D]`\}"\}#}$}|#t)t*t+t,t-fkrtd}td}tj|d |qqWnd|krd}"||"\}#}$}t.j/|}%|"|%d <|#t0kr|jj1td!|%drt,d6d"f||"|j?s| rq|sX| j"dtd't rqt@||jAd6qt@|| jA|+nx_t | j(D]K\}"},|jjBtd(|"x"|,D]}-|jjBd)|-qWqWx_t |!j(D]K\}"},|jjBtd*|"x"|,D]}-|jjBd)|-q,WqW|su|t|df\}}}}n| r| j r|j ddtd|d||jCjDd+|jEn|jj&d,d-}.|jjFd,d.}/y<dd/lmG}0|0jHd,|jjId,d0d1k}1WntJk rC t}1nX|.r |1 r |j tkr t|+t)|/kr tKjLjMd7r |jjBtd4ntN||+| ||d5|}2| rG | j rG |jOjP]|jQ||tR||+|t=jS|jCjTd+|s> |jOjU|jnWd6QXnWd6QX|sc | jV|n| s |j dd|d|d|2jWn|2S(8s 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 base, local and other 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(). i(RtlineariRKtpreferancestort*Rsoutstanding uncommitted mergesoutstanding merge conflictss7merging with a working directory ancestor has no effectsnothing to mergeRs#use 'hg update' or check 'hg heads'suncommitted changessuse 'hg status' to list changest preupdatetthrowtparent1tparent2RwR-R tmissings+commit or update --clean to discard changesRRR=t noconflictsconflicting changess .hgsubstateR!sjlocal%(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 recreatingcs@s|]}|gfVqdS(N((RR ((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pys -stbranchs<note: possible conflict - %s was renamed multiple times to: s %s s9note: possible conflict - %s was deleted and renamed to: t updatestatet fsmonitortwarn_when_unusedtwarn_update_file_count(t extensionstmodeRtlinuxtdarwins(warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor") R=N(RR(XRwRRERORCRZtwlockR{Rt configlistt changelogtcommonancestorsheadsR;RRRRiRbR R:RR8RARRRRRRRR{t bailifchangedthookRR|Rt foregroundt UpdateAbortR3RRRRRRRlR t partextrasRQt promptchoiceRRR5RtdictRRSR6R9RmR|RtfscasesensitiveRRbReRRYRRt configintRtfindRtKeyErrorRt sysplatformRURRt parentchanget setparentsRtunlinkRt setbranchtprunetemporaryincludesR(3R:R;RR<Rt mergeancestorR=RR=t updatechecktwcRtpartialtplRtpasRRtcahsRHtfp1tfp2txp1txp2R>R'R|RRRRt actionbyfileRRR!R RCtpromptsRZRR[R\RRRvtnftfsmonitorwarningtfsmonitorthresholdRtfsmonitorenabledtstats((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyR-csV8            !/6            "                "    !       ( c C@s9|jj|dj|j}t||jtt|jd|d|}|rs|jrs|j}nVt}|j} |rt| dkr|| kr| j || dj}n|j j [|j |dj||j j |jtj||d|j|jWdQX|S(s5Do a graft-like merge. This is a merge where the merge ancestor is chosen such that one or more changesets are grafted onto the current changeset. In addition to the merge, this fixes up the dirstate to include only a single parent (if keepparent is False) and tries to duplicate any renames/copies appropriately. ctx - changeset to rebase pctx - merge base, usually ctx.p1() labels - merge labels eg ['local', 'graft'] keepparent - keep second parent if any keepparent - if unresolved, keep parent used for the merge t.R-R=iiN(Rt isancestorR;R-RZRRR{RbRRR(R)RtcurrenttransactionR tduplicatecopiesRER( R:RtpctxR=t keepparenttkeepconflictparentR-R>tpotherR{((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytgrafts%! $ ,c@sfd}|j}|j} g} z@|rOg} | j|_|_njd|d|dt} |rxdt| j| jD]I} |sjj t d| |j j | n| j| qWn|rext| dtD]k} || rj j |  r|sNjj t d| |j j| n| j| qqWn| SWd||_| |_XdS( sPurge the working directory of untracked files. ``matcher`` is a matcher configured to scan the working directory - potentially a subset. ``ignored`` controls whether ignored files should also 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. Returns an iterable of relative paths in the working directory that were or would be removed. c@shy||WnStk rctd|}rFtj|qdjjtd|nXdS(Ns%s cannot be removeds warning: %s (RRR R:RR(tremovefnRR (t abortonerrorR:(s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyRs Rtignoredtunknownsremoving file %s treversesremoving directory %s N(t explicitdirt traversedirR|RRZRRKRJRRRRR*tlistdirtrmdir(R:RRJtremoveemptydirst removefilesRItnoopRtoldexplicitdirtoldtraversedirtrest directoriesRR!((RIR:s5/usr/lib64/python2.7/site-packages/mercurial/merge.pytpurges2   (ft __future__RRRRWtstructti18nRR;RRRRRRRt thirdpartyR RwR R R R RRRRRRRRtpackRtunpackRRR_R`RdReRgRfRaRhRiRtRECORD_UNSUPPORTED_MANDATORYtRECORD_UNSUPPORTED_ADVISORYRVRcRTRRRRRRRRRRmRlRR4R5RQR9R6RSRRR8tobjectR8RRERRRKRLRbRcRdRfRwRzRCRRRRRRRR'RZRRRR-RGRX(((s5/usr/lib64/python2.7/site-packages/mercurial/merge.pyts    4 L   a 4 c  =   f   l   )  _ 4 ,