c.FddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z mZmZddlmZddlmZddlmZmZmZmZmZmZmZmZmZmZm Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'ddl(m)Z)m*Z*m+Z+ej,rdd lm-Z.ndd lm/Z.ej0d Z1ej2d Z3e.j4Z4ej5d dGddZ6dZ7dkdZ8dZ9dZ:dZ;dZdldZ?dmdZ@dZAdZBdZCd ZDd!ZEd"ZFdnd#ZGd$ZHd%ZId&ZJdod(ZKd)ZLd*ZMdkd+ZNdpd.ZOd/ZPd0ZQdqd1ZRd2ZSd3ZTd4ZU drd7ZV drd8Zd9ZWdkd:ZXd;ZYd<ZZd=Z[Gd>d?Z\ dsd@Z]dkdAZ^dtdCZ_dDZ`dEZadFZbdkdGZcdkdHZddqdIZedkdJZfdKZgdLZhdkdMZidNZjGdOdPZkGdQdRZlGdSdTZmdUZnGdVdWZodXZpdYZqGdZd[Zrgd\Zsd]d^gZtd_Zue&jvZwd ZxdudaZydbZzdvddZ{deZ|dfZ}dgZ~dhZdiZdjZdS)wN_)binhexnullrevshortwdirrev)getattr)attr)copiesencodingerrormatchobsoleteobsutilpathutilphasespolicypycompat requirements revsetlangsimilarsmartseturlutilvfs)hashutilprocutil stringutil) scmwindows)scmposixparsersrevlogTF)slotsreprceZdZdZejejeZejejeZ ejejeZ ejejeZ ejejeZ ejejeZ ejejeZdZdZdS)statuszStruct with a list of files per status. The 'deleted', 'unknown' and 'ignored' properties are only relevant to the working copy. )defaultc#K|jV|jV|jV|jV|jV|jV|jVdSN)modifiedaddedremoveddeletedunknownignoredcleanselfs 3/usr/lib/python3/dist-packages/mercurial/scmutil.py__iter__zstatus.__iter__Qsnmjlllljc:dtd|DzS)NzXc3bK|]*}tjtj|V+dSr+)rsysstrr pprint).0vs r5 z"status.__repr__..^s7FFA(/*"3A"6"677FFFFFFr7)tupler3s r5__repr__zstatus.__repr__Zs- 1 FFFFF F FG Gr7N)__name__ __module__ __qualname____doc__r ibFactorylistr,r-r.r/r0r1r2r6r@r7r5r(r(As# tw|t|D11222H DGLDL.. / / /Edgldl400111Gdgldl400111Gdgldl400111Gdgldl400111G DGLDL.. / / /EGGGGGr7r(c#Kt|j|}|t|j|t }|jD]#}||jvr||=||$t |D]\}}|||fV|D]}|| ||fVdS)zfind subrepos in ctx1 or ctx2N) dictfromkeyssubstateupdatesetaddsorteditemssubnullsub)ctx1ctx2subpathsmissingsubpathctxs r5 itersubreposrZas }}T]D11H OODMM$-66777eeG=!! $- ' '! KK x~~//00(( swww''''''' 33t||GT222222233r7cng}|rX|D]U}||}|tjkr)|s||V|r4|t dt|zdS|t ddS)zjReport no changes for push/pull, excluded is None or a list of nodes excluded from the push/pull. s0no changes found (ignored %d secret changesets) sno changes found N)phasersecretextinctappendr(rlen)uirepoexcluded secretlistnrYs r5nochangesfoundrf{sJ% % %Aq'Cyy{{fm++CKKMM+!!!$$$, B C C*oo      !)**+++++r7c d}d} |S#|xYw#tj$r}d}|jtjkr*t dt j|jz}nt d|jz}|t d|j ptj |j |fz|js"|t dYd}~n]d}~wtj $ri}d}|t d|j ptj |j tj|jfzYd}~nd}~wtj$r}}t%|tjrd }|t d |z|jr*|t d |jzYd}~n]d}~wtj$r!}|t d |jd z|jd}t%|t/drt j|}||dnt%|t2s|d|fzna|s#|t dn<|dt jtj|zYd}~n.d}~wtj$r0}|t d|zYd}~nd}~wtj$r&|t dYntj$rN}|j|j}|j|j}|| Yd}~ncd}~wtj!$r}|j"cYd}~Sd}~wtF$r}|t d tj |ztj |$d}|d$vr#|t dn8|d$vr"|t dYd}~n^d}~wtJj&j'$rD}d}|t d tj |zYd}~nd}~wtJj&j($r}d} |j)jd}n#tTtVf$r |j)}YnwxYwt%|tXrtj-|}|t dtj |zYd}~nWd}~wt\t^f$r}tKj0|dr#|jr|jd tj1krnte|ddrte|ddV|t dtj|jtj |j fzn>|t d tj|jznYd}~nPd}~wtf$r%|t d Ynth$r}d!}|j5}Yd}~nd}~wwxYw|6d"d#r|S|S)$zcall func() with global exception handling return func() if no exception happens. otherwise do some error handling and return an exit code accordingly. does not handle all exceptions. s%timed out waiting for lock held by %rslock held by %rsabort: %s: %s s(lock might be very busy) Nsabort: could not lock %s: %s s abort: %s s(%s) s abort: %srr s %r s empty string s %r sabort: file censored %s s6abort: working directory revision cannot be specified s mpatch bdiffs((did you forget to compile extensions?) szlibs"(is your Python install correct?) dsabort: error: %s sargsstrerrorfilenamesabort: %s: '%s' sabort: out of memory uisdetailed-exit-code)7 tracebackrLockHelderrno ETIMEDOUTrrbytestrlockerdescr forcebytestrroLockUnavailabler strtolocalrn RepoError isinstanceRepoLookupErrorhint ResponseErrorargstypesysbytesbytesellipsisCensoredNodeErrorWdirUnsupportedErrordetailed_exit_codecoarse_exit_codeformat WorkerError status_code ImportErrorsplitrurlerr httperrorurlerrorreasonAttributeError IndexErrorstr unitolocalIOErrorOSError safehasattrEPIPEr MemoryError SystemExitcode configbool)rafuncrrinstrmsgms r5 callcatchrs n% 466M  LLNNN  > 8 8 8 : ( (?@@ --FF)**T[8F   ! !yBJ3DMBBFK L   { 8 HHQ566 7 7 7       / 0 0 CZ4T]CC#DM22          ?/// dE1 2 2 $!#  >""T)*** 9 / HHQy\\DI- . . .   M M M <49Q</000il c499 % % )#C((C ; HHUOOOOC'' M HHX& ' ' ' ' M HHQ)** + + + + HHY!1*2Ec2J2J!K!KK L L L  "999 /004788888888  PPP MNNOOOOO ;    " .!%!8   ,#4        @@@ >""Z%> ? ? ? ; DDD  >""Z%>>**X-@-O-OOPPPP  /// ,--..... %%%!9 %  }}U122 !!s (+] CD] AE<<] A2H] DL55] %M224] )] 7AP] P]  ] +CT] 9U] 2X 5VX V# X "V##A#X  ]  C.\/]  ]  ]] c|dvr$tjtd|zdD]<}||vr6tjtdtj|z= t |d|vrt tjtd#t $rYnwxYw||kr$tjtd|zdS)N)tip.nullsthe name '%s' is reserved):rl s%r cannot be used in a name_scannot use an integer as a names)leading or trailing whitespace in name %r)r InputErrorrrrvint ValueErrorstrip)rblblkindcs r5 checknewlabelr s %%%q!=>>DEEE ( 88"011H4DQ4G4GG     C 3;; q!CDDEEE       yy{{c : ; ;c A   s);B$$ B10B1cd|vsd|vr6tjtdtj|zdS)zFCheck that the filename f is an acceptable filename for a tracked filerrls)'\n' and '\r' disallowed in filenames: %rN)rrrrrvfs r5 checkfilenamer'sN zzUaZZ < = =q!! "    Zr7c,t|t|\}}|s|rntj|}|rVd|t j|fz}|rt j||td|zdSdSdS)zECheck if filename f is portable and warn or abort depending on configs%s: %s warning: %s N) rcheckportabilityalertrcheckwinfilenamer shellquoterrwarnr)rarabortrrs r5 checkportabler0s!'++KE4 //#A&&  /sH$7$:$:;;C ,&s+++ GGA&''#- . . . . .  / ///r7c|dd}|}tj|}tjp|dk}|p|dk}|.|s,|s*|dks$t jtd|z||fS)z_check if the user's config requests nothing, a warning, or abort for non-portable filenamesrqsportablefilenamessabortwarnNsignores,ui.portablefilenames value is invalid ('%s')) configlowerr parseboolr iswindowsr ConfigErrorr)ravallvalbvalrrs r5rr=s ))E/ 0 0C 99;;D   $ $D   2$("2E  "47?D |T|U|di.?.? = > > D    $;r7ceZdZdZdZdS)casecollisionauditorc||_||_d|}tt j|d|_||_t|_ dS)Nr) _ui_abortjoinrNrrr _loweredfiles _dirstate _newfiles)r4rardirstateallfiless r5__init__zcasecollisionauditor.__init__Msa ::h'' !9!9!?!?!F!FGG!r7c~||jvrdStj|}||jvr`||jvrWt d|z}|jrtj||j t d|z|j ||j |dS)Ns&possible case-folding collision for %sr) rrrrrrrr StateErrorrrrO)r4rflrs r5__call__zcasecollisionauditor.__call__Xs    F ^A   # # #(?(?=>>BC{ ,&s+++ HMM!,--3 4 4 4 r""" 1r7N)rArBrCrrrHr7r5rrLs2        r7rc|j}|rEtj|d}|js|sdSt |jt |f}n|jsdS}t }|j|}|sstfd|j|zD}|rNtj }|D]} | d| z| }||j|<|S)abuild hash of filtered revisions in the current repoview. Multiple caches perform up-to-date validation by checking that the tiprev and tipnode stored in the cache file match the current repository. However, this is not sufficient for validating repoviews because the set of revisions in the view may change without the repository tiprev and tipnode changing. This function hashes all the revs filtered from the view (and, optionally, all obsolete revs) up to maxrev and returns that SHA-1 digest. sobsoleteNc3(K|] }|k|V dSr+rH)r<rmaxrevs r5r>zfilteredhash..s'JJAa6kkakkkkJJr7s%d;) changelogrgetrevs filteredrevshash frozenset_filteredrevs_hashcachegetrPrsha1rMdigest) rbr needobsoleteclobsrevskeyresultrevssrevs ` r5 filteredhashres B "455 w 4tBO,,d7mm< 4++  ' + +C 0 0F 5JJJJ7!:JJJJJ  5 A ' '#&&&&XXZZF.4B &s + Mr7c#Kfd}ttjdd|rfd}nd}||rg}||tjd|D].\}}}|d|vr|Vtj|dd } tjtj| dr| V|r|dg|dd<|rg} |D]{} tj|| } ||| rMtj| rt| d|D]} | Vf| | || |dd<0dS) zyield every hg repository under path, always recursively. The recurse flag will only control recursion into repo working dirsc"|jkr|dSr+)ro)errpaths r5 errhandlerzwalkrepos..errhandlers <4  I r7samestatNctj|tfd|D}|s|| S)Nc30K|]}|VdSr+rH)r< lstdirstatdirstatrs r5r>z,walkrepos..adddir..s/OO**55OOOOOOr7)osstatanyr_)dirlstdirnamerrrs @r5adddirzwalkrepos..adddirsZgg&&GOOOOOOOOOOE ' g&&&9 r7FT)topdownonerrors.hgspatches) r rrwalksortrisdirremoveislink walkreposr_)r followsym seen_dirsrecurserrrootdirsfilesqrootnewdirsdfnamehgnamers` @r5rrsrw D11H X)       y y$WT4LLLdE T>>JJJGLLvz::Ew}}RW\\%8899    F####QQQ  G * * T1--6)U++*w~~e,,*&/tY&G&G))F"(LLLL) q)))DG-r7cn|}||jjS|S)z)Return binary node id for a given basectx)noderb nodeconstantswdirid)rYrs r5binnoders- 88::D |xxzz'.. Kr7c@|}|tS|S)z]Return integer for a given basectx that can be used in comparison or arithmetic operation)rr )rYrs r5intrevrs  ''))C { Jr7c|}t|jt|t |S)zzFormat changectx as '{rev}:{node|formatnode}', which is the default template provided by logcmdutil.changesettemplater)rb formatrevnoderarr)rYrbs r5formatchangeidrs1 88::D &++ws|| < <..s33D4yy++F33-t,,,w<<1$$"1: & & & & & & & & & &% & & & & & & & & & & & & & & & %& |Nt Ks7,AA E B E$ E 4 E E E E E c t|}|dkr|dddks|t|krdSdS#t$rYdSwxYw)z@Checks if the given prefix may be mistaken for a revision number0rrFT)rr`r)rbr-is r5 mayberevnumr5si  KK dNNvac{d22qCII~~5t uus6< A  A ct|d}fd}j}jdd}|rd}||d}||gd}|||d<||vrt}d} ||d } | stj td ry|j } tj | d r| } t| t|} |D]} | | || |d <| 8t| |} |d| } || St%|t|dzD]p} g}|d| } |D]?}|}| |d| kr||@t|dkr || cSq |||S#t(j$rt)jwxYw) zFind the shortest unambiguous prefix that matches hexnode. If "cache" is not None, it must be a dictionary that can be used for caching between calls to this method. rc&jddrt|rd|zS|St}t t |t |dzD] }|d|}t|s|cS!dS)zDisambiguate against revnums.r#srevisions.prefixhexnoder"rN)rarr5rranger`)r-hexnodelengthrrbs r5 disambiguatez-shortesthexnodeidprefix..disambiguates 7  o/I J J 4(( f}$ d))CKKW)9::  FWfW%FtV,,     r7r#r$NsdisambiguationrevsetTr%sdisambiguationnodetreenodetree get_cindex)maxr(rrarrr,rrrrr#indexr=r<r`insertshortestr8r_r LookupErrorr~)rbr minlengthcacher;rr.rr9r<r?rr:r-r0r otherhexnodes`` r5shortesthexnodeidprefixrF sIq!!I          $B W^^O-L M MF &0  99455D <<<t<44D 15-. 66$<<4  $iiGH  99%>?? D#GZ88 DHE'|<<3 % 0 0 2 2&//s4yyAAH!++ ****(;C78#X..t44i@@ &)#|F+++ 3w<$?$?&$HIII  Dz   ! % +++ T6*** +sr G? A#B00&CG?C#G?=0D..%EG?EG?