o ö]Lb²Eã@s*ddlmZddlZddlZddlZddlZddlmZddlm Z ddl m Z m Z m Z mZmZmZmZddlmZmZdZejrldd lmZmZmZmZmZmZdd l mZmZmZ m!Z!m"Z"m#Z$ee%ee%e%e%ffZ&d d „Z'd d„Z(ddd„Z)d dd„Z*dd„Z+dd„Z,dd„Z-d!dd„Z.dd„Z/dS)"é)Úabsolute_importNé)Ú_)Úgetattr)ÚconfigÚerrorÚ filemergeÚpathutilÚphasesÚpycompatÚutil)Ú stringutilÚurlutil)órsempty)ÚAnyÚDictÚListÚOptionalÚSetÚTuple)ÚcontextÚ localrepoÚmatchÚscmutilÚsubrepoÚuic s&t ¡‰ˆ ¡‰d‡‡‡‡‡fdd„ ‰dˆvrˆdƒˆ d¡D]\}}ˆ d||ˆ d|¡¡q i}dˆvrz>tˆd ¡ ¡ƒD]1\}}| ¡}|sMqBz |  dd¡\}}Wnt ynt   t d ƒˆ d¡|df¡‚w|||<qBWntyŽ}z |jtjkr„‚WYd}~nd}~ww‡fd d „} i} ˆ d ¡D]t\}}d } | d¡rÄd|vr²t   t dƒ¡‚|  dd¡\} }| dd…} | ¡}t |¡ ¡sütˆdd} | rüt | ¡} t | jpÞd |¡| _t | j¡| _t| ƒ} | | ƒ}|| krú| |ƒ}n|}| |ƒ}| ¡| |d ¡| f| t  |¡<qœ| S)z return a state dict, mapping subrepo paths configured in .hgsub to tuple: (source from .hgsub, revision from .hgsubstate, kind (key in types dict)) Nc s”|ˆvr>zˆ| ¡}Wn&ty2}z|jtjkr‚ˆ tdƒˆ |¡¡WYd}~dSd}~wwˆ ||||ˆ¡dSt  tdƒˆ |¡¡‚)Ns*warning: subrepo spec file '%s' not found s subrepo spec file '%s' not found) ÚdataÚIOErrorÚerrnoÚENOENTÚwarnrÚpathtoÚparserÚAbort)ÚfÚsectionsÚremaprÚerr©ÚctxÚpÚreadÚrepor©ú7/usr/lib/python3/dist-packages/mercurial/subrepoutil.pyr+?s$ ÿÿ€ø ÿzstate..readó.hgsubósubpathsó .hgsubstateó rs8invalid subrepository revision specifier in '%s' line %dc s‚ˆ d¡D]9\}}t |¡}t dd|¡}z t |||d¡}Wqtjy>}zt tdƒˆ d|¡t  |¡f¡‚d}~ww|S)Nr0s \\\\([0-9]+)s\\\1rs#bad subrepository pattern in %s: %s) Úitemsr Ú escapestrÚreÚsubrr#rÚsourceÚ forcebytestr)ÚsrcÚpatternÚreplÚe)r*r-r.r&ns   þÿÿ€ÿzstate..remaprshgó[ó]s!missing ] in subrepository sourceF©Úabort)NN)!rr,Ú configitemsÚsetÚ configsourceÚ enumeraterÚ splitlinesÚlstripÚsplitÚ ValueErrorrr#rr!rrrr3Ú startswithrÚurlÚisabsÚ _abssourceÚ posixpathÚjoinÚpathÚnormpathÚbytesÚstripÚgetr Úpconvert)r)rrOr9ÚrevÚiÚlÚrevisionr'r&ÚstateÚkindÚparentÚjoinedÚremappedr-r(r.rY6sr ÿüÿÿ ò  ÿ€ÿ      "rYcs.‡fdd„tˆƒDƒ}| dd |¡d¡dS)z=rewrite .hgsubstate in (outer) repo with these subrepo statescs4g|]}ˆ|dtdkrdˆ|d|f‘qS)rs%s %s )Ú nullstate©Ú.0Ús©rYr-r.Ú ¦s þzwritestate..r1rN)ÚsortedÚwwriterN)r,rYÚlinesr-rbr.Ú writestate£s þrgcs²||kr| ¡}|j}|j}|j}i} ˆj d|||f¡d‡fdd„ } t |¡} tt |¡ƒD]D\} } |  | t ¡}| }|  | ¡  ¡rO| d| ddf}||krU|}|   ¡}| |d<| |vr=|| }||ksn||krs| | | <q1||kr‹| | d |ƒ|  | ¡  ||¡|| | <q1|d|dkr¾| d|d <|d|d <ˆj td ƒ|d¡r½| | d |ƒ|  | ¡  ||¡|| | <q1|d|dkrÚ| | d|ƒ|  | ¡  ||¡|| | <q1| | dƒ|  | ¡}| | d¡|d<| |d¡|d<ˆj tdƒ|d¡}|dkr|  | ¡ |¡| | | <| | d|ƒq1|dkr)| | | <| | d| ƒq1|  | ¡  ||¡|| | <| | d|ƒq1||krO| | dƒ|  | ¡ ¡q1|t kr^| | dƒ| | | <q1ˆj tdƒ|d¡rv| | dƒ|  | ¡ ¡q1t| ¡ƒD]T\} }| |vrˆq}| |vr¡| | d|ƒ|  | ¡  |¡|| | <q}||| krÐ|   ¡}| |d<ˆj tdƒ|d¡dkrÐ| | d|ƒ|  | ¡  |¡|| | <q}tˆ| ƒ| S)z{delegated from merge.applyupdates: merging of .hgsubstate file in working context, merging context and ancestor contextssubrepo merge %s %s %s rcs&|rd|}ˆj d|||f¡dS)Ns%s:%s:%ss subrepo %s: %s %s )rÚdebug)raÚmsgÚr©r,r-r.rh¼szsubmerge..debugrró+óssother changed, getslosrosž subrepository sources for %(s)s differ you can use (l)ocal%(l)s source (%(lo)s) or (r)emote%(o)s source (%(ro)s). what do you want to do?$$ &Local $$ &Remotesprompt changed, getsother side changed, getsboth sides changedsslssrs¿ subrepository %(s)s diverged (local revision: %(sl)s, remote revision: %(sr)s) you can (m)erge, keep (l)ocal%(l)s or keep (r)emote%(o)s. what do you want to do?$$ &Merge $$ &Local $$ &Remotes merge withskeep local subrepo revisionsget remote subrepo revisionsremote removed, removeslocal added, keepsz local%(l)s changed subrepository %(s)s which remote%(o)s removed use (c)hanged version or (d)elete?$$ &Changed $$ &Deletes prompt removesremote added, getsz remote%(o)s changed subrepository %(s)s which local%(l)s removed use (c)hanged version or (d)elete?$$ &Changed $$ &Deletesprompt recreateN)r)Úp1ÚsubstaterrhrÚ partextrasrdr Ú iteritemsrSr^r6ÚdirtyÚcopyÚ promptchoicerÚshortidÚmergeÚremover3rg)r,ÚwctxÚmctxÚactxÚ overwriteÚlabelsÚs1Ús2ÚsaÚsmrhÚ promptssrcrarWÚaÚldÚpromptsrjÚsrepoÚoptionr-rkr.Úsubmerge®sà       ÿù÷ €    ÿø ö      ÿúø €    ÿúø ö € r‡FcsÜg}tƒ}|j ¡‰d|vrÎ|j|j|jfD] }d|vr!| d¡q| ¡j}tˆ  ¡ƒD]e} ˆ| ƒsI| |vr>|| ˆ| <q-|sIt   t dƒ| ¡‚|  | ¡ d¡} | rm| dd¡sbt j | t dƒd‚| | ¡| | ¡q-|  | ¡ ¡} ˆ| d | ˆ| d fˆ| <| | d ¡d | kr’| | ¡q-| ¡D]} ‡fd d„| jDƒ} |‡fdd„| Dƒ7}q—|r͈dƒsÆd| ¡| ¡vrÆt   t dƒ¡‚|j d d¡nd|jvréd|vréd|j|j|jvré|j d d¡||ˆfS)ayCalculate .hgsubstate changes that should be applied before committing Returns (subs, commitsubs, newstate) where - subs: changed subrepos (including dirty ones) - commitsubs: dirty subrepos which the caller needs to commit recursively - newstate: new state dict which the caller must write to .hgsubstate This also updates the given status argument. r/r1s#commit with new subrepo %s excludedTsuiscommitsubreposs#use --subrepos for recursive commit)Úhintré)NNNrcsg|]}|ˆvr|‘qSr-r-r_)Únewstater-r.rcoózprecommit..csg|]}ˆ|ƒr|‘qSr-r-r_)rr-r.rcpr‹s$can't commit subrepos without .hgsub)rBrorsÚmodifiedÚaddedÚremovedrwrnrdÚkeysrr#rr6Ú dirtyreasonÚ configboolÚappendÚaddÚ basestaterSÚparentsÚinsert)rrxÚstatusrÚforceÚsubsÚ commitsubsÚcÚoldstaterarÚbsr*rjr-)rrŠr.Ú precommit;s`   €   ÿ þ   €  ÿ€  ÿ ržcCsf|}g}t |d¡r%t |j¡}| t|ƒ¡| ¡rn |j}t |d¡s |  ¡t j |Ž}t   |¡S)zRreturn the source of this repo Either absolute or relative the outermost repoó _subparent) r Ú safehasattrrrJÚ _subsourcer’rQrKÚ _subparentÚreverserMrNrP)r,r[Úchunksr7rOr-r-r.Úrepo_rel_or_abs_source‚s   û  r¥cCs<|}t |d¡r|j}t |d¡s|jtt |j¡ƒd…S)z9return path to this (sub)repo as seen from outermost reporŸN)r r r¢ÚrootÚlenr Ú normasprefix)r,r[r-r-r.Ú reporelpath”s   ÿr©cCs|jS)z7return path to this subrepo as seen from outermost repo)Ú_relpath)r6r-r-r.Ú subrelpathsr«TcCsDt |d¡rDt |j¡}| ¡rt|ƒSt |j ¡|_ t |j |dd}|rCt t  |¡¡}t  |j p3d|j ¡|_ t |j ¡|_ t|ƒSnSd}t |d¡rP|j}n+|ra|j dd¡ra|j dd¡}n|j dd ¡rp|j dd ¡}n | ¡r{tj  |j¡S|r—t |¡r•t|ƒd ks|d d …d vr•t |¡}|S|r t td ƒ¡‚dS)zreturn pull/push path of repo - either based on parent repo .hgsub info or on the top repo config. Abort or return None if no source found.rŸFr?rNs _subtoppathspathss default-pushsdefaultr‰és\/s(default path for subrepository not found)r r rrJr¡rKrQrMrPrOrLr¢rTrNÚ _subtoppathrrÚsharedÚosÚdirnameÚ sharedpathÚhasdriveletterr§Úabspathrr#r)r,Úpushr@r7r[rOr-r-r.rL£s:  ü   ÿrLc Csìt |¡}t|ddƒ}|s|S| dd¡}|dvr"t tdƒ|¡‚|dkr(|Stj}d}t|ƒD]}|  |¡}|  ||d¡} || krI| }|}q1||krt|dkrdt td ƒtj |tj ||f¡‚|  td ƒtj ||f¡|S|S) Nrosphasess checksubrepos)óignoresfollowóaborts.invalid phases.checksubrepos configuration: %srµrr¶s=can't commit in %s phase conflicting %s from subrepository %ssAwarning: changes are committed in %s phase from subrepository %s ) r Únewcommitphaserrrr#rÚpublicrdr6ÚphaseÚ phasenamesr ) rr)Ú commitphaseroÚcheckÚmaxphaseÚmaxsubrar6Úsubphaser-r-r.r·ÔsR    ÿ  €ÿýüÿ ÿ üÿr·)N)F)FT)0Ú __future__rrr¯rMr5Úi18nrr rÚrrrr r r Úutilsr rr^Ú TYPE_CHECKINGÚtypingrrrrrrrrrÚmatchmodrrrÚuimodrQÚSubstaterYrgr‡ržr¥r©r«rLr·r-r-r-r.Ús0   $    m  G  1