c ddlZddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z m Z mZmZmZmZmZmZmZmZddlmZmZddlmZmZejd Zej d Z!e!duZ"ej#Z#ej$Z$e j%Z&e j'Z'Gd d e$Z(Gd de$Z)dZ*dZ+ej,ej-Gdd ZdS)N)_)delattr)tracing) dirstatemapencodingerrormatchnodepathutilpolicypycompatscmutilutil)docket timestamp)dirstaterparsersrceZdZdZdZdS) repocachezfilecache for files in .hg/c6|j|SN)_openerjoinselfobjfnames 4/usr/lib/python3/dist-packages/mercurial/dirstate.pyrzrepocache.join:s{&&&N__name__ __module__ __qualname____doc__rr rrr7s)%%'''''r rceZdZdZdZdS) rootcachez*filecache for files in the repository rootc,||Sr)_joinrs rrzrootcache.joinAsyyr Nr!r&r rr(r(>s)44     r r(cfd}|S)Nc|s d}|jz}tj||g|Ri|S)Nz.calling `%s` outside of a parentchange contextpendingparentchanger"r ProgrammingErrorrargskwargsmsgfuncs rwrapz%requires_parents_change..wrapFsY'')) .BC 4= C(-- -tD*4***6***r r&r4r5s` rrequires_parents_changer7E#+++++ Kr cfd}|S)Nc|r d}|jz}tj||g|Ri|S)Nz-calling `%s` inside of a parentchange contextr-r0s rr5z(requires_no_parents_change..wrapQsY  # # % % .AC 4= C(-- -tD*4***6***r r&r6s` rrequires_no_parents_changer;Pr8r c eZdZ dLdZdZejdZdZe dZ e dZ e dd Ze d Zd Zed d Ze dZe dZe dZe dZdZdZe dZdZdMdZdZdZdZdZeZ dZ!dZ"dZ#e dZ$d Z%dMd!Z&d"Z'd#Z(d$Z)d%Z*d&Z+e,dLd'Z-e,d(Z.e,d)Z/e,d*Z0e1d+Z2e1 dNd,Z3d-Z4d.Z5d/Z6dOd0Z7dOd1Z8dPd2Z9d3Z:dMd4Z;d5Zd8Z?d9Z@d:ZAd;ZBd<ZCd=ZDd>ZEdQd@ZFdAZGdBZHdCZIdDZJdEZKdFZLdGZMdHZNdIZOdJZPdKZQdS)RrFc f||_||_||_||_||_||_||_tj||_ d|_ d|_ ||_ i|_ d|_d|_d|_d|jz|_i|_d|_t(j|_|jdS)zCreate a new dirstate object. opener is an open()-like callable that can be used to open the dirstate file; root is the root of the directory tracked by the dirstate. Frsdirstatesdirstate-tracked-hints %s.pendingN)_use_dirstate_v2_use_tracked_hint_nodeconstantsr _validate_root_sparsematchfnr normasprefix_rootdir_dirty_dirty_tracked_set_ui _filecache_parentwriters _filename _filename_th_pendingfilename_plchangecallbacks_origplr_mapcls_cwd) ropeneruirootvalidate sparsematchfn nodeconstantsuse_dirstate_v2use_tracked_hints r__init__zdirstate.__init__]s"!0!1+ ! +!-d33  "'$4 - >"$ ".  r c|jdS)zRmake sure the parents are loaded Used to avoid a race condition. N_plrs rprefetch_parentszdirstate.prefetch_parentss r c#RK|xjdz c_dV|xjdzc_dS)zContext manager for handling dirstate parents. If an exception occurs in the scope of the context manager, the incoherent dirstate won't be written when wlock is released. rNrJr^s r parentchangezdirstate.parentchangesA q   q r c|jdkS)zsReturns true if the dirstate is in the middle of a set of changes that modify the dirstate parent. rrar^s rr.zdirstate.pendingparentchanges"Q&&r c~||j|j|j|j|j|_|jS)zAReturn the dirstate contents (see documentation for dirstatemap).)rPrHrrBr@r>_mapr^s rrez dirstate._maps>LL H L J    !    yr c<|jdS|S)a!The matcher for the sparse checkout. The working directory may not include every file from a manifest. The matcher obtained by this property will match a path if it is to be included in the working directory. When sparse if disabled, return None. N)rCr^s r_sparsematcherzdirstate._sparsematchers&   &4""$$$r branchc |jdpdS#t$rYdSwxYw)Nrhsdefault)rreadstripFileNotFoundErrorr^s r_branchzdirstate._branchsP <$$Y//5577E: E    :: s -0 >>c4|jSr)reparentsr^s rr]z dirstate._plsy  """r c6|j|Sr)re hastrackeddir)rds rhasdirzdirstate.hasdirsy&&q)))r .hgignorec|}|stjSd|D}tj|jdg||jjS)Ncg|]}d|zS)s include:%sr&.0fs r z$dirstate._ignore..s111a !111r r warn) _ignorefilesmatchmodneverr rBrHr|)rfilespatss r_ignorezdirstate._ignores]!!## $>## #115111~dj#r4dhmLLLLr cX|jddotjdkS)Nuisslash/)rH configboolrossepr^s r_slashzdirstate._slashs&x""5(33N$8NNr c4tj|jSr)r checklinkrBr^s r _checklinkzdirstate._checklinks~dj)))r cNttj|jSr)boolr checkexecrBr^s r _checkexeczdirstate._checkexecsDN4:..///r cRtj|d S)N.hg)rfscasesensitiver*r^s r _checkcasezdirstate._checkcases"' 6(:(:;;;;r c|j|zSr)rE)rrys rr*zdirstate._joins}q  r cgfd}|S)aSbuild a callable that returns flags associated with a filename The information is extracted from three possible layers: 1. the file system if it supports the information 2. the "fallback" information stored in the dirstate if any 3. a more expensive mechanism inferring the flags from the parents. ctd}d} tj|}n#t$rYdSwxYwjrt j|rdSn\|}|jr |j rdSn6s d|}d|vrdSj rt j |rdSn`||}|j r |jrdSn8|0s d|}d|vrdSdS)Nr lrx)oslstatr*OSErrorrr statislink get_entryhas_fallback_symlinkfallback_symlinkappendr statisexechas_fallback_exec fallback_exec)xentryfallback_valuest buildfallback fallback_funcrs r get_flagsz$dirstate.flagfunc..get_flagssE!N Xdjjmm,,   ss  $?2&& 4 q))-$-$#t$)>%,,]]__===%5]1%5a%8%8N~--#t $?2&& 4 = NN1--E* $*$#t$&-,B)00AAA)9q)9!)<)<~--#t3s '/ ==r&)rrrrs`` @rflagfunczdirstate.flagfuncs8 ' ' ' ' ' ' ' Rr cf|jdd}|r|StjS)Nrsforcecwd)rHconfigrgetcwd)rforcecwds rrQz dirstate._cwd)s48??5+66  O   r c|j}||jkrdS|j}tj|s|tjz }||r|t|dS|S)aReturn the path from which a canonical path is calculated. This path should be used to resolve file patterns or to convert canonical paths back to file paths for display. It shouldn't be used to get real file paths. Use vfs functions instead. r N)rQrBr endswithseprr startswithlen)rcwdrootseps rrzdirstate.getcwd1ssi $*  3*(( & x~ %G >>' " " s7||~~& &Jr Nc||}tj|j||}|jrtj|S|Sr)rrpathtorBrpconvert)rryrpaths rrzdirstate.pathtoEsH ;++--C{4:sA.. ; '=&& & r cZ|j|}|tS|S)z-return a DirstateItem for the associated path)reget DirstateItem)rrrs rrzdirstate.get_entryMs) d## =>> ! r c||jvSr)re)rkeys r __contains__zdirstate.__contains__Tsdir cDtt|jSr)itersortedrer^s r__iter__zdirstate.__iter__WsF49%%&&&r c4|jSr)reitemsr^s rrzdirstate.itemsZsy   r c*fdjDS)Nc:g|]}|Sr&)rA)rxprs rrzz$dirstate.parents..`s%444aq!!444r r\r^s`rrozdirstate.parents_s4444484444r cB||jdS)NrrAr]r^s rp1z dirstate.p1b~~dhqk***r cB||jdS)Nrrr^s rp2z dirstate.p2err c8|jd|jjkS)zTrue if a merge is in progressr)r]r@nullidr^s rin_mergezdirstate.in_mergehsx{d1888r c4tj|jSr)rtolocalrmr^s rbranchzdirstate.branchms ---r c | |jj}|jdkrtdd|_|jd}|j |j|_|jj}||ko||k}|j|||S)zSet dirstate parents to p1 and p2. When moving from two parents to one, "merged" entries a adjusted to normal and previous copy records discarded and returned by the call. See localrepo.setparents() NrsKcannot set dirstate parent outside of dirstate.parentchange context managerTr)fold_p2) r@rrJ ValueErrorrFr]rOre setparents)rrroldp2rrs rrzdirstate.setparentsps :$+B  ! # #9     < 8DL$+6/2bFly##BG#<<> F     v & & &&,DI d # # # I  ! !$ - - - - -r cB|jj|dSr)rerr)rfiles rcopiedzdirstate.copiedsy $$T4000r c|jjSr)rerr^s rcopieszdirstate.copiess y  r cd|_|j|}||js|||j|}|r |jj|d|rd|_|S)aUa "public" method for generic code to mark a file as tracked This function is to be called outside of "update/merge" case. For example by a command like `hg add X`. if reset_copy is set, any existing copy information will be dropped. return True the file was previously untracked, False otherwise. TN) rFrertracked_check_new_tracked_filename set_trackedrrrG)rfilename reset_copyr pre_trackeds rrzdirstate.set_trackeds  h'' = =  , ,X 6 6 6i++H55  2 I  ! !(D 1 1 1  +&*D #r cZ|j|}|rd|_d|_|S)a a "public" method for generic code to mark a file as untracked This function is to be called outside of "update/merge" case. For example by a command like `hg remove X`. return True the file was previously tracked, False otherwise. T)re set_untrackedrFrG)rrrets rrzdirstate.set_untrackeds5i%%h//  +DK&*D # r cd|_|j|js|||\}}}|j||||dS)zFrecord that the current state of the file on disk is known to be cleanTN)rFrerr set_clean)rrparentfiledatamodesizemtimes rrzdirstate.set_cleans_ y"* 7  , ,X 6 6 6,tU HdD%88888r cHd|_|j|dS)z|s<|j|!|j|d|_n|s |r | |jrdS|j|||ddS)a,Set a file as tracked in the parent (or not) This is to be called when adjust the dirstate to a new parent after an history rewriting operation. It should not be called during a merge (p2 != nullid) and only within a `with dirstate.parentchange():` context. s7update_file_reference should not be called when mergingNFT)has_meaningful_mtime) rr r/rerr reset_staterFadded)rr p1_trackedr3r wc_trackeds rupdate_file_p1zdirstate.update_file_p1s = .LC(-- - h'' =JJJ j y}}X&&2 %%h///"  *  U[     "'      r cd|_|j|}|d}n|j}||krd|_|j||||| |dS)aupdate the information about a file in the dirstate This is to be called when the direstates parent changes to keep track of what is the file situation in regards to the working copy and its parent. This function must be called within a `dirstate.parentchange` context. note: the API is at an early stage and we might need to adjust it depending of what information ends up being relevant and useful to other processing. TNF)p2_infor r)rFrerrrGr ) rrrrrpossibly_dirtyr old_entry prev_trackeds r update_filezdirstate.update_files4 IMM(++   LL$,L : % %&*D #    %3!3)      r cHtj||j|r:t d}|t j|z}tj|tj |D]}|j|rnr|j |}|U|j sNt d}|t j|t j|fz}tj|| |dS)Ns directory %r already in dirstates#file %r in dirstate clashes with %r)r checkfilenamererqrrbytestrr Abortr finddirsrremovedr)rrr3rrrs rrz$dirstate._check_new_tracked_filenameBsh''' 9 " "8 , , #788C 8#H-- -C+c"" ""8,, ' 'Ay&&q)) IMM!$$E  >??(++X-=h-G-GHHk#&&& 8$$$$$r c|j}|V|sD||s;td}td}tj||z|dSdSdS)z2Check that a filename is inside the sparse profileNs3cannot add '%s' - it is outside the sparse checkoutswinclude file with `hg debugsparse --include ` or use `hg add -s ` to include file directory while adding)hint)rgalwaysrr r)rr sparsematchr3rs rrzdirstate._check_sparseSs)  ";+=+=+?+? ";x(( =NOOQk#.t<<<< # " " " = =r c|Btjtj|j|}|sC|s>d|vr:|dd\}}||d|d}|dz|z}n|}n}d|vrZ|dd\}}||d|d}|jdz|z} |dztj|| z}ntj||j}|||<|S)NrrFT) rrlexistsrrBrsplit _normalizerfspath) rrnormed ignoremissingexistsstoremaprrryfoldedrs r _discoverpathzdirstate._discoverpath_s >W__RW\\$*d%C%CDDF &  TT\\{{4++1OOAumTBBTAv~~}}T1--1OOAumTBBJ%)TDK1$5$55VTZ88%HV  r ctj|}|jj|d}|(|r|}n#||||||jj}|Sr)rnormcasere filefoldmaprr-rrisknownr(r)r'r+s r_normalizefilezdirstate._normalizefileyskt$$&**6488 > ++&-9N r ctj|}|jj|d}| |jj|d}|(|r|}n#||||||jj}|Sr)rr/rer0r dirfoldmapr-r1s rr%zdirstate._normalizest$$&**6488 >Y)--fd;;F > ++&-9M r cB|jr||||S|S)aL normalize the case of a pathname when on a casefolding filesystem isknown specifies whether the filename came from walking the disk, to avoid extra filesystem access. If ignoremissing is True, missing path are returned unchanged. Otherwise, we try harder to normalize possibly existing path components. The normalized case is determined based on the following precedence: - version of name already stored in the dirstate - version of name stored on disk - version provided via command arguments )rr%)rrr2r(s r normalizezdirstate.normalizes*$ ? A??4-@@ @ r cF|jd|_dS)NT)reclearrFr^s rr9zdirstate.clears  r c |j W sC fd|D}|r fd|D}|# fd|D}||}||}g}|nrt |dkr9g}g}|D]1}||vr||||2n&t |}|t |z}||z }|j |j|_|j ||j j |D]<}|j r|||j |dd=|D]}|j |d|_dS)Nc*g|]}| |Sr&r&rxrymatchers rrzz$dirstate.rebuild..s&:::awwqzz::::r c*g|]}| |Sr&r&r<s rrzz$dirstate.rebuild..s&FFFa771::FFFFr c*h|]}| |Sr&r&r<s r z#dirstate.rebuild..s&(K(K(Kq (K(K(K(Kr T)rr)rgr unionr9rrrrOr]rerr@rrrr rF) rparentallfiles changedfilesdirstatefilestoremove to_lookupto_droprychangedfilessetr=s @rrebuildzdirstate.rebuilds%  w~~'7'7 ::::8:::H GFFFF<FFF ')L(K(K(KD(K(K(K%4::<HH   IG JJLLLL    # #IG! & &==$$Q''''NN1%%%%  & ",//O'#h--7I% 1G < 8DL VT%8%?@@@  A}   #### %%##&  % %A I ! !! $ $ $ $ r c|jjS)zReturn identity of dirstate itself to detect changing in storage If identity of previous dirstate is equal to this, writing changes based on the former dirstate out can keep consistency. )reidentityr^s rrLzdirstate.identitys y!!r cjsdSjoj}rLdjffddd|r$djffddddSfd}|j5}|dddn #1swxYwY|rA|j5}|ddddS#1swxYwYdSdS) Ndirstate-1-mainc0|Sr_writedirstateryrtrs rz dirstate.write..$--b!44r plainTlocation post_finalizesdirstate-2-key-postc0|Sr)_write_tracked_hintrRs rrTz dirstate.write..sd66r1==r c6|dddS)NrTr)r)ryrs rrTz dirstate.write..sa$4PPr )rFr?rGaddfilegeneratorrKrLrQr[)rrS write_keyrrys`` rrzdirstate.writes{  F*Ft/F     "!44444!"     ##*&(=====%"& $ FPPPP T$. ! ! 'Q   A & & & ' ' ' ' ' ' ' ' ' ' ' ' ' ' '  0d'(( 0A((Q/// 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s$=B  B$'B$=C!!C%(C%cR|j|jd|_dS)zOremove the tracked_hint file To be used by format downgrades operationFN)runlinkrLr?r^s rdelete_tracked_hintzdirstate.delete_tracked_hints+ D-...!&r c||j|<dS)a%add a callback to be called when the wd parents are changed Callback will be called with the following arguments: dirstate, (oldp1, oldp2), (newp1, newp2) Category is a unique identifier to allow overwriting an old callback with a newer callback. N)rN)rcategorycallbacks raddparentchangecallbackz dirstate.addparentchangecallbacks-5)))r c|jZ|j|jkrJt|jD]\}}|||j|jd|_|j||d|_d|_dS)NF) rOr]rrNrrerrFrG)rrSrcrds rrQzdirstate._writedirstate s < # (@(@%d&=&C&C&E&EFF 7 7 8t|TX6666DL B "'r ctjtjj}|d|zdS)Ns1 %s )r hexuuiduuid4bytesr)rrSryrs rr[zdirstate._write_tracked_hint*s7htz||)**  S !!!!!r c||rdStj|D]}||rdSdS)NTF)rr r)rryrs r _dirignorezdirstate._dirignore.sV <<?? 4"1%%  A||A tt ur c g}tj|dr(||d|jdD]j\}}|dks|drJ|tj|j tj |k|S)Nrtrsignoresignore.) rrr)r*rrH configitemsrrrEr expandpath)rrnamers rr}zdirstate._ignorefiles6s 7>>$**\22 3 3 3 LLL11 2 2 2(..u55 Q QJD$y  DOOJ$?$?  RW\\$-9N9NOOPPP r ctj|}t}|r|}t j||jjd}|D]y\}}}t j |d\} } | dkr| |vr| | >t j |j dg|g|jj} | |r|||fcSz| ||dS)NT) sourceinfosglobs subincluder r{)Nr ) collectionsdequer}rpopleftr~readpatternfilerHr| _patsplitrr rBadd) rryrvisitedipatternspatternlinenolinekindrms r_ignorefileandlinezdirstate._ignorefileandlineAs'!$"3"3"5"566%%  A/48=TH*2 - -%",Wg>>a=(('' QNJR'1Q44-vt,,,,- KKNNN! "r c d}|j}|j}tj}tj}tj}tj} tj} |j } g} | j } g}|j }| s|j r|j }nd}t|}|d\}}|t#|kr|t#|kr||dz}|||kr|dz }C|t#|krL|||r1||=|t#|kr|||1|dz }|t#|kr|t#|k|rd|vrdg}d}t&|}d|d<|D]}|r||dd }n|}||vr || |}||j}||kr||vrd||<| ||fn0|| ks|| kr|||<n||||||vrd||<#t,$r]}||vrd||<nI|j|r ||n#||t1j|jYd}~d}~wwxYw|r+t9|D]}|dks||vr ||s||=| r|j ri}|D][\}}|t=j|}| |}|tC}|||<|"|\|D]K\}}t#|dkr3|D]0} |#| |d d|jj$}!| |!krd|| <1L|| |fS) aGet stat data about the files explicitly specified by match. Return a triple (results, dirsfound, dirsnotfound). - results is a mapping from filename to stat result. It also contains listings mapping subrepos and .hg to None. - dirsfound is a list of files found to be directories. - dirsnotfound is a list of files that the dirstate thinks are directories and that were not found.ctd}tj|rtd}ntj|rtd}nktj|rtd}nGtj|rtd}n#tj|rtd}td|zS)Nsunknownscharacter devices block devicesfifossockets directorys"unsupported file type (type is %s))rstatS_ISCHRS_ISBLKS_ISFIFOS_ISSOCKS_ISDIR)rrs rbadtypez'dirstate._walkexplicit..badtypeasZ==D|D!! ',--d## '))t$$ 'zzt$$ '||d## ':;;dB Br N)rrrrr rFT)%badrerrrS_IFMTS_IFDIRS_IFREGS_IFLNKr*risexactrr%rrsortrrdictfromkeysst_moderrsr strtolocalstrerroranypatslistrrr/rrr{r-r5)"rr subreposrbadfndmaprgetkinddirkindregkindlnkkindr dirsfoundfoundadd dirsnotfound notfoundaddr7rr}jsubpathresultsffnfrrinstryr'ncpathsnormrr+s" r _walkexplicitzdirstate._walkexplicitWs C C C y+,,,z # ") }} 4? IIIu{{}}%% 1#e**nnS]]!2!2qkD(GQx'!!Qc%jj..U1X%8%8%A%A.!Hc%jj..U1X%8%8%A%A. FA#e**nnS]]!2!2 u EEI--)) F FB Yr5$//W}} FU4488__wrz**7??Tzz&* Hb"X&&&&W__"$GBKKE"ggdmm,,,Tzz&*  F F F::"&GBKKy''++F# Bb("5dm"D"DEEE F ==?? #']] # #;;!x--uQxx# ==?? 1t 1F   2:]1%% 2=EEE!&F2J ! %||~~ 1 1 eu::>> %11!%!3!3 $dDI4H"" 6>>,0GDM <//sA1I  J2AJ--J2Tc@ !"#$|rtjtjn)|rjjntjtjjVt j}t j j |g}t j |j j jtjt j}t$jt$j#t$jjdx} } rd} tjnrd} | sjrj!j"d} n j!d"|\$} } r&| D]}  | d| D] }  | | o| p| } fd| D}  !"#$fd}| D]\}} ! p|| k}|| g||D]}$|=$d=| s | s$sr dD}n$fd D}||rt=jj d }tC|D]a}"r"|dd$vrd$|<|"|r. ||$|<G#tF$rd$|<YXwxYwd$|<bnDtC|}tj$fd |DD]}|$tK|<$S) a3 Walk recursively through the directory tree, finding all files matched by match. If full is False, maybe skip some known-clean files. Return a dict mapping filename to stat-like object (either mercurial.osutil.stat instance or return value of os.stat()). NFTrc6g|]}|d|S)rr&)rxrr dirignores rrzz!dirstate.walk.. s*777ayy17777r c|j}|rtjdt||}|}|sQ|dks|dkrd}d}|dkrd} tjd|5|d|}dddn #1swxYwYn_#ttf$rK}  |tj |j Yd}~d}~wwxYw|D]\}} } |r||vr r|r|d z|zp|dd} n |r|d z|zp|} | vr| kr:| sr | || | vrs | rd| <w| ks| krD| vrs | r| | <s | r| s|s | d d} | | <| vrs | rd| <|dSdS) Nzdirstate.walk worksthissallr rz!dirstate.walk.traverse listdir %sT)rskiprF)rrcounterrrvisitchildrensetlogPermissionErrorrlrrrrr)work alreadynormedwaddnd visitentriesrentriesrryrrrrrignorerlistdirrr matchalwaysmatchfn matchtdirr7 normalizefilerrrs rtraversezdirstate.walk..traverse#s>;D; / 4c$ii@@@XXZZ$55b99 #7**lf.D.D#'L99!D %H"MMJJ")'$$r((D"I"I"IJJJJJJJJJJJJJJJ'):;II B).rs)))q)))r c2g|]}|v||Sr&r&)rxryrrs rrzz!dirstate.walk..ts0LLLqAW,<,<,<,<,<,.s!)A)A)Aa$$q'')A)A)Ar )&rrrrnr rCr~exactr unionmatcherrgintersectmatchersr traversedirrerrrrrrrr*rprefixrr%r3rrr pathauditorrBrcheckr statfilesnext)%rr runknownignoredfullemsmrr skipstep3rrrrrrrsvisit audit_pathrivrrrrrrrrrrrr7rrrs%`` @@@@@@@@@@@@@@rwalkz dirstate.walks4  $ZF II  $\FII[F I   * ..B&(;R'@AAB.ub99E-llnn % y,,,,z!! ==?? E II \\^^ I ! !I /MIII M'+&8&8&I&I#|     !A$!   ! >KKc |jVtj|}tj|j|g}tj||}|jdd}|#tj dd|z|j ddd}|sdtj d<t|jj||j||jt'|t'|t'|t'|j \ } } } } } }}}}}}}|xj|zc_|jr|D]}|||jjr|D]}t/|t0r4|\}}t3d||fz}|j|Kt3d }|j|t5j|j|j|d fz|D]-\}}||tj|.t=j| | | | ||| }| |fS) NsworkersnumcpussRAYON_NUM_THREADSs%dsenabledT1s!%s: ignoring invalid syntax '%s' s*skipping unreadable pattern file '%s': %s sNo such file or directory)modifiedrrdeletedrrclean)rCr~rrrrgrrH configintrenviron setdefaultrrustmodstatusrerEr}rrrrFr| isinstancetuplerr canonpathrrr)rr= list_clean list_ignored list_unknownrrnumcpusworkers_enabledlookuprrrrrrrwarningsr traverseddirtydiritem file_pathsyntaxr3fnmessagers r _rust_statuszdirstate._rust_statuss   * 00B&(;R'@AAB0"==G($$Y ;;     ' '(tSj*|%j(r|(|%j&kr ||$C||$P|&+tj,|%s ||$|r ||$t[j.| | | | |||})| |)|fS)a|Determine the status of the working copy relative to the dirstate and return a pair of (unsure, status), where status is of type scmutil.status and: unsure: files that might have been modified since the dirstate was written, but need to be read to be sure (size is the same but mtime differs) status.modified: files that have definitely been modified since the dirstate was written (different size or mode) status.clean: files that have definitely not been modified since the dirstate was written TNFcdSrr&)rys rnoopzdirstate.status..noop.s Dr )rr@)/repreloadr~ alwaysmatcherdifferencematcher exactmatcherincludematcherintersectionmatcher nevermatcherrrrrr get_fs_nowrrr FallbackErrorr __getitem__rrrnrrrrrrrrrrrrrrst_size _rangemaskrrS_ISLNKmtime_likely_equal_tomtime_ofrr)*rr rrrr listignored listclean listunknownrrrrrruse_rustallowed_matchersmtime_boundaryresr dcontainsdgetladdmaddaadduaddiaddradddaddcaddmexactrrrrrrrtrrrs* rrzdirstate.statuss /6ug Y 46BB4F1%'"$b"%y   "  &  !  #  (  !  !  ?HH _ HH  HHE#344 H "&1$,??NN " " "!NNN "   ''9k;n...(       % }|!,6w~~$!,6w~~$~~(2u||dO O O )# 9E-T9ii 8[+D   %''7 7 FB9R== 66"::99R=="!RDHHHRA6D6D( !)( R& R$ R" R  Q%;DHHHH"q':DHHHHAII++ Z8O0O0O!BJ.%71P.s222!T A r c3 K|]}|vV dSrr&)rxrrs r z#dirstate.matches..s'!=!="*!=!=!=!=!=!=r c*g|]}| |Sr&r&)rxryr s rrzz$dirstate.matches..s&,,,a5588,,,,r ) rerr keysrrrallr)rr rrs ` @rmatcheszdirstate.matchessy  9>D <<>> 99;;   ==?? 33222u222 2 <<>> c!=!=!=!=u!=!=!=== ;; ,,,,4,,,,r c"|r|jS|jSr)rMrK)rrSs r_actualfilenamezdirstate._actualfilenames  "( (> !r c|jsdS|dzS)Ns.v2-data)r>)r backupnames rdata_backup_filenamezdirstate.data_backup_filenames$ 4K''r c|jsdS|jjjdS|jj}|||fS)z/return a filename to backup a data-file or NoneN)r>rerrj data_filenamer.)rr-r0s r_new_backup_data_filenamez"dirstate._new_backup_data_filenamesT$ 4 9  (4 (6688 d77 CCCCr c|jsdStj|j||j}|||fSr) r> docketmodDirstateDocketparserrjr@r.r0)rr-rs rbackup_data_filezdirstate.backup_data_filesj$ 4)// L  j ) )    ((44f6J6J6L6LLLr c }||ksJjsj|s-|dddr;djffddd|dj|tj j |j |d  |}|g|\}}tj j |j |d |dd Sd Sd S) z&Save current dirstate into backup filerTrrNc0|SrrPrRs rrTz%dirstate.savebackup..rUr rVrW)rX)hardlinkN) r+rFrr)rQr]rK registertmp tryunlinkrcopyfilerr1)rrSr-r data_pairr0bck_data_filenames`` r savebackupzdirstate.savebackups''++X%%%% ; dl11(;;     Xt NN     8   "!44444!"     NN8hN 7 7 7 z*** L  h ' ' L  j ) )    22:>>  /8 ,M, M !!-00 !!"344     ~08DDDDD ! ~r c||j}||s||}d}|jr/|jjj|jj}||r| ||*||r| |dS||}| |}||rQtj | || |r| |n|||d||\}}||rRtj | || |r| |dS|||ddSdS)zRestore dirstate by backup fileNT)r)rrr)r+r>rerrjr0r`r6rsamefilerrename) rrSr-or data_filer= data_backuptargets r restorebackupzdirstate.restorebackups  Lxx ## ++B//HI$ =)9)>)J I,::<< xx!! #"""$))<)<$### F''++))*55 88H   <$- FF:  x 0 0# #  < HHZ HHZdH ; ; ;  "+ Kxx ?DM{##QVVF^^%% ?%%%%%f>>>>> ! r c|j}||rI||}|||||ddSdSdS)zClear backup fileNr)rr)r6r`)rrSr-rCrEs r clearbackupzdirstate.clearbackupsv L 88J   )// ;;K HHZ &Q(((((  ) )'&r c#Kd}d}d}d}|D]=\}}|j} | dvr ||vr||| fV| dvr ||vr||| fV| dvr||vr ||vr||| fV>|D]'}||j} | dvr||| fV(d S) zEcheck the dirstate content again the parent manifest and yield errorss%%s in state %s, but not in manifest1 s&%s in state %s, but also in manifest1 s+%s in state %s, but not in either manifest s(%s in manifest1, but listed as state %s snramsnrmN)rstater) rm1m2missing_from_p1unexpected_in_p1missing_from_psmissing_from_dsryrrMs rverifyzdirstate.verifysCEIF  2 2HAuKE~~!2++&51111}}b'E2222}}""&51111 2 2ANN1%%+EF""&51111 2 2r )Fr)FFN)FN)FF)T)Rr"r#r$rZr_ contextlibcontextmanagerrbr. propertycacherepropertyrgrrmr]rsr(rrrrrr*rrQrrrrrr iteritemsrorrrrrrrrrrr;rrrr r7rrrrr-r3r%r7r9rJrLrrarerQr[rnr}rrrrrr)r+r.r1r6r?rGrIrTr&r rrr[s,,,,\!!! '''   ] %%X% Yy ##X#***Y|MMMOO]O**]*00]0<<]<!!! 555n!!]!(   '''!!!I555++++++99X9...====4    . . .111!!!  *      99 9 // / % % % N ) ) ) ) V%%%" = = =4     ,4444l"""000B''' 5 5 5((("""   ,E0E0E0N}}}}~P P P dR0R0R0h---*""" ((( DDDMMM3E3E3Ej!?!?!?F)))22222r ).rvrUrrrji18nrrrhgdemandimportrrrr r r~r r r rr dirstateutilsrr3r interfacesr intdirstate interfaceutil importmodr importrustrHAS_FAST_DIRSTATE_V2rW filecache rangemaskr rrr(r7r; implementer idirstater&r rrhsT """"""                          & 9 % % & J ' 'd*"    " ' ''''' '''        ;011L2L2L2L2L2L2L221L2L2L2r