^cEddlZddlZddlZddlmZddlmZddlmZm Z m Z m Z m Z mZm Z ddlmZmZdZejr3ddlmZmZmZmZmZmZdd lmZmZmZmZmZm Z!ee"ee"e"e"ffZ#d Z$d Z%dd Z&ddZ'dZ(dZ)dZ*ddZ+dZ,dS)N)_)getattr)configerror filemergepathutilphasespycompatutil) stringutilurlutil)rsempty)AnyDictListOptionalSetTuple)context localrepomatchscmutilsubrepouic tjdfd dvr ddD]1\}}d||d|2i}dvr t dD]\}}|}|s | dd\}}nJ#t$r=tj tdd|dzfzwxYw|||<n#t$rYnwxYwfd }i} d D]~\}}d } |d r\d |vr!tj td| d d\} }| dd} |}t%j|st+d} | rt%j| } t-j| jpd || _t-j| j| _t5| } || } | | kr ||}n| }||}|||d | f| t;j|<| S)zreturn a state dict, mapping subrepo paths configured in .hgsub to tuple: (source from .hgsub, revision from .hgsubstate, kind (key in types dict)) Ncz|vr |}nI#t$r<td|zYdSwxYw||||dSt jtd|z)Ns*warning: subrepo spec file '%s' not found s subrepo spec file '%s' not found)dataFileNotFoundErrorwarnrpathtoparserAbort) fsectionsremaprctxpreadrepors 7/usr/lib/python3/dist-packages/mercurial/subrepoutil.pyr)zstate..read=s 88 1v{{}}$   FGGkk!nn%   GGAtXud 3 3 3 3 3+7884;;q>>I s"AA('A(.hgsubsubpaths .hgsubstate rs8invalid subrepository revision specifier in '%s' line %dc dD]\}}tj|}tjdd|} tj|||d}H#tj$rQ}t jtdd|tj |fzd}~wwxYw|S)Nr-s \\\\([0-9]+)s\\\1rs#bad subrepository pattern in %s: %s) itemsr escapestrresubrr#rsource forcebytestr)srcpatternrepler(s r+r&zstate..remapisWW[11  MGT'--D6*Hd;;D fWdC338   k<==g66"/22  sAB?.A B::B?rshg[]s!missing ] in subrepository sourceFabort)NN)rr* configitemsset configsource enumerater splitlineslstripsplit ValueErrorrr#rr!rr1 startswithrurlisabs _abssource posixpathjoinpathnormpathbytesstripgetr pconvert)r'rrMr7revilrevisionr&statekindparentjoinedremappedr(r)r*s`` @@@r+rWrW4sn  A 88::D"C Y^^K00JJ c k4book4&H&HIIII C !#n"5":":"<"<"G"G"I"IJJ % %1HHJJ %&WWT1%5%5NHdd!+; ;;~66Q@ A%D  %!    D , EWWS\\MM c >>$   3k!$H"I"IJJJ $**ID#8D**,,C{3%%'' #E222F # V,,'nV[-?CEE '0== v!5==v%%%**CC"CeCjj&)iikk37743E3Et%LdmD!!"" Ls,AE*DEAE  E E"!E"cfdtD}|dd|ddS)z=rewrite .hgsubstate in (outer) repo with these subrepo statescpg|]2}|dtdkd|d|fz3S)rs%s %s ) nullstate).0srWs r+ zwritestate..sL    8A;)A, & & eAhqk1%% & & &rr.rN)sortedwwriterL)r*rWliness ` r+ writestateresY       E  KK55555rcb ||kr|}|j}|j}|j}i} jd|||fzdfd } t j|} t |D]\} } || t}| }| |  r| d| ddzf}||kr|}| }| |d<| |vr\|| }||ks||kr| | | <||kr<| | d|| | |||| | <|d|dkr~| d|d <|d|d <j td |zdr;| | d || | |||| | <o|d|dkr=| | d || | |||| | <| | d| | }|| d|d<||d|d<j td|zd}|dkr<| | || | | <| | d||dkr| | | <| | d| | | |||| | <| | d|||kr5| | d| | |tkr| | d| | | <8j td|zdr3| | d| | t |D]\} }| |vr | |vr;| | d|| | ||| | <I||| kr| }| |d<j td|zddkr:| | d|| | ||| | <t%| | S)z{delegated from merge.applyupdates: merging of .hgsubstate file in working context, merging context and ancestor contextssubrepo merge %s %s %s rcV|rd|z}jd|||fzdS)Ns%s:%s:%ss subrepo %s: %s %s )rdebug)r`msgrr*s r+rhzsubmerge..debugs:  aA  .!S!<=====rrr+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 recreate)r)p1substaterrhr partextrasrbr1rQr^r4dirtycopy promptchoicershortidmergeremovere)r*wctxmctxactx overwritelabelss1s2sasmrh promptssrcr`rUaldpromptsrjsrepooptions` r+submergers  t||wwyy B B B BGMM-tT0BBCCC>>>>>> %f--Jrxxzz""W%W%1 FF1i   88A;;     %A$!t $B 4<<A//## 771AQww!q&&1qa.222 9---1A!A$!"1!"17''0   E!3Q777HHQKKOOAy111BqEA!A$a3Q777 9---1a./// !&qt!4!4!&qt!4!4--:  Q;;HHQKK%%a(((BqEE!]A....q[[BqEE!;Q????HHQKKOOAy111BqEE!;Q???? 1WW E!. / / / HHQKK   )^^ E!) * * *BqE w##.     %a)*** ""$$$rxxzz""1 77  b[[ E!)1 - - - HHQKKOOA   BqEE "Q%ZZ oo''GGDM$$2      a+Q/// """1tR IrFcg}t}|jd|vrj|j|j|jfD]}d|vr|d|j}t D]N} | s6| |vr || | <|s$tj td| z| | d} | rd|dds#tj | td|| || | | } | d | | d f| <|| d d | kr|| P|D]&} fd | jD} |fd| Dz }'|rrdsLd||zvr!tj td|jd dnAd|jvr8d|vr4d|j|jz|jzvr|jd 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,r.s#commit with new subrepo %s excludedTsuiscommitsubreposs#use --subrepos for recursive commit)hintr)NNNrcg|]}|v| Sr)r_r`newstates r+razprecommit..js#<<.ks&...1UU1XX.Q...rs$can't commit subrepos without .hgsub)r@rnrqmodifiedaddedremovedrurmrbkeysrr#rr4 dirtyreason configboolappendadd basestaterQparentsinsert)rrvstatusrforcesubs commitsubscoldstater`rbsr(rjrs ` @r+ precommitr6s DJ}!!##HD&,> ) )A""(((7799% (( # #A588 =="*1+HQK+@AAAE((1++11$77K #}}U,=>>+#EFF Aq!!!!XXa[[**,,'{1~r8A;q>B <<#566q9R??KKNNN / /A<<<>  "  6= 1 1# NN >6 "D  d # ##rc|}tj|dr|j}tj|d|jt t j|jdS)z9return path to this (sub)repo as seen from outermost reporN)r rrrootlenr normasprefix)r*rYs r+ reporelpathrseF  6= 1 1#"  6= 1 1# 9S.v{;;<<>> ??rc|jS)z7return path to this subrepo as seen from outermost repo)_relpath)r4s r+ subrelpathrs  <rTcvtj|drtj|j}|rt |Stj|j |_ t|j |d}|rytjtj |}tj |j pd|j |_ tj|j |_ t |Snd}tj|dr|j}n|r7|jddr|jdd}no|jdd r|jdd }n8|r$t$j |jS|rItj|r3t-|d ks |d d d vrtj|}|S|r!t1jt5d 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.rFr=rNs _subtoppathspathss default-pushsdefaultrs\/s(default path for subrepository not found)r rrrHrrIrOrKrNrMrJrrRrL _subtoppathrrsharedosdirname sharedpathhasdriveletterrabspathrr#r)r*pushr>r5rYrMs r+rJrJs m,,'T_-- <<>> !== (55 DOT???  ![v!6!677F#.);V[IIFK#,V[99FK==  !   D. 1 1 4#DD  4dgnnX?? 47>>(O<
>(J77DD [[]] 47??4?33 3  %d++ .t99>>T!A#Yf%<%<<--DK Jk!GHHIIIJJrctj|}t|dd}|s|S|dd}|dvr$t jt d|z|dkr|Stj}d}t|D]B}| |}| ||d} || kr| }|}C||kr|dkrGt jt d tj |tj ||fz| t d tj ||fz|S|S) Nrnsphasess checksubrepos)ignoresfollowaborts.invalid phases.checksubrepos configuration: %srrrs=can't commit in %s phase conflicting %s from subrepository %ssAwarning: changes are committed in %s phase from subrepository %s ) r newcommitphaserrrr#rpublicrbr4phase phasenamesr ) rr' commitphaserncheckmaxphasemaxsubr`r4subphases r+rrs'++KsJ--H  IIi!1 2 2E 444k ? @ @5 H    }H F H  ggajj99Xa[^,, h  HFX H  += %k2%h/      5   *F3  4    r)N)F)FT)-rrKr3i18nrr rrrrr r r utilsr rr^ TYPE_CHECKINGtypingrrrrrrrrrmatchmodrrruimodrOSubstaterWrerrrrrrJrrrr+rsP   !  7E5u!4556HgggT666JJJJZD&D&D&D&N$$$$@@@ .J.J.J.Jb*****r