Ë þîpÙß¡fãóJ—ddlZddlZddlZddlZddlZddlmZddlmZddl m Z m Z m Z ddl mZmZmZm Z mZdefd„ZGd „d «ZGd „d e«ZeZGd „de«ZGd„dee«ZeZGd„de«ZGd„d«ZGd„de«ZGd„d«ZGd„de«Zy)éN)ÚOptionalé)Ú_)ÚdelattrÚgetattrÚsetattr)ÚencodingÚerrorÚpathutilÚpycompatÚutilÚpathc󄇇—ˆˆfd„}|«s1tjtj‰«‰«|«yy)z Avoid file stat ambiguity forcibly This function causes copying ``path`` file, if it is owned by another (see issue5418 and issue5584 for detail). cóŽ•—tjj‰«}|j‰« xs|j ‰‰«S©N)r ÚfilestatÚfrompathÚisambigÚ avoidambig)ÚnewstatÚoldstatrs €€ú1usr/lib/python3.12/site-packages/mercurial/vfs.pyÚ checkandavoidz"_avoidambig..checkandavoid(s;ø€Ü—-‘-×(Ñ(¨Ó.ˆà—?‘? 7Ó+Ð+ÒP¨w×/AÑ/AÀ$ÈÓ/PÐPóN)r ÚrenameÚ mktempcopy)rrrs`` rÚ _avoidambigr!s3ù€õQñ Œ?ô � ‰ ”D—O‘O DÓ)¨4Ô0Ù�ð rc óØ—eZdZdZdZd„ZdAdedefd„Zdedefd„Zde eded efd „Z ded efd „Z dAdedefd „Z e jd „«Zded efd„ZdAdedefd„Z dBdeded efd„Z dCdededed dfd„Zdeded efd„Zded efd„Zdeded dfd„Zded efd„ZdDde ed efd„Zd„ZdDde ed efd„ZdDde ed efd„ZdDde ed efd„ZdDde ed efd„Zded efd„Z ded efd „Z!defd!„Z"dDde ed efd"„Z#dDde efd#„Z$dDde efd$„Z%dEde efd%„Z& dFde ede efd&„Z'defd'„Z(dDde efd(„Z) dGd)ed*ed+e efd,„Z*dHde efd-„Z+ded efd.„Z,dBd/ed0efd1„Z-ded efd2„Z.dDde efd3„Z/dDde efd4„Z0 dIde efd5„Z1ded6ed7efd8„Z2dDde efd9„Z3dDde efd:„Z4dDde efd;„Z5 dJde efd<„Z6dFde efd=„Z7dFde efd>„Z8e9jtdKd?„«Z;d@„Z‘> $¨T�>Ó2Ð 2øÜ ò Ø Øˆ ð ús ‚• "¡"có—|jS)zéOpen ``path`` file, which is relative to vfs root. Newly created directories are marked as "not to be indexed by the content indexing service", if ``notindexed`` is specified for "write" mode access. )r.©r's rÚopenzabstractvfs.open]s€ð�}‰}Ðrcó`—||d«5}|j«cddd«S#1swYyxYw)Nórb)r9)r'rÚfps rr9zabstractvfs.readgs#€Ù �$˜Ô  "Ø—7‘7“9÷× Ò úsŠ$¤-cób—|||¬«5}|j«cddd«S#1swYyxYw)Nr>)r?)r'rr+rFs rr?zabstractvfs.readlinesks#€Ù �$˜TÕ " bØ—<‘<“>÷#× "Ò "ús‹%¥.Údatac óh—||dfd|i|¤Ž5}|j|«cddd«S#1swYyxYw)NówbÚbackgroundclose©Úwrite)r'rrHrKr)rFs rrMzabstractvfs.writeos2€ñ�$˜Ñ I¨Ð IÀ&Ò IÈRØ—8‘8˜D“>÷J× IÒ Iús�(¨1Ncóf—||||¬«5}|j|«cddd«S#1swYyxYw)N)r+Ú notindexed)Ú writelines)r'rrHr+rOrFs rrPzabstractvfs.writelinesus*€ñ�$˜T¨jÕ 9¸RØ—=‘= Ó&÷:× 9Ò 9úsŒ'§0cób—||d«5}|j|«cddd«S#1swYyxYw)NsabrL)r'rrHrFs rÚappendzabstractvfs.append{s%€Ù �$˜Ô  "Ø—8‘8˜D“>÷× Ò úsŠ%¥.có@—tjj|«S)z‚return base element of a path (as os.path.basename would do) This exists to allow handling of strange encoding if needed.)ÚosrÚbasenamer;s rrUzabstractvfs.basenames€ô�w‰w×Ñ Ó%Ð%rcóL—tj|j|«|«Sr)rTÚchmodr7r1s rrWzabstractvfs.chmod…s€Ü�x‰x˜Ÿ ™  $›¨Ó.Ð.rcó@—tjj|«S)z„return dirname element of a path (as os.path.dirname would do) This exists to allow handling of strange encoding if needed.)rTrÚdirnamer;s rrYzabstractvfs.dirnameˆs€ô�w‰w�‰˜tÓ$Ð$rcó^—tjj|j|««Sr)rTrÚexistsr7r;s rr[zabstractvfs.existsŽó€Ü�w‰w�~‰~˜dŸi™i¨›oÓ.Ð.rcó,—tj|«Sr)r Úfstat)r'rFs rr^zabstractvfs.fstat‘s€Ü�z‰z˜"‹~Ðrcó^—tjj|j|««Sr)rTrÚisdirr7r;s rr`zabstractvfs.isdir”s€Ü�w‰w�}‰}˜TŸY™Y t›_Ó-Ð-rcó^—tjj|j|««Sr)rTrÚisfiler7r;s rrbzabstractvfs.isfile—r\rcó^—tjj|j|««Sr)rTrÚislinkr7r;s rrdzabstractvfs.islinkšr\rcó´— |j|«}|j}tj|«xstj |«S#t$rYywxYw)zhreturn whether path is a regular file or a symlink Unlike isfile, this doesn't follow symlinks.F)ÚlstatÚOSErrorÚst_modeÚstatÚS_ISREGÚS_ISLNK)r'rÚstr+s rÚ isfileorlinkzabstractvfs.isfileorlink�sQ€ð Ø—‘˜DÓ!ˆBð�z‰zˆÜ�|‰|˜DÓ!Ò7¤T§\¡\°$Ó%7Ð7øôò Ùð ús‚A Á AÁAÚpathscó—d}t|«D]B\}}tjj|«s|j |j «sŒA|}ŒD|dk7r||d}|D�cgc]}|sŒ|‘Œ }}|j j |«Scc}w©Nr)Ú enumeraterTrÚisabsÚ startswithÚ_dir_sepr7)r'rnÚroot_idxÚidxÚps rÚ_joinzabstractvfs._join¨sƒ€ØˆÜ Ö&‰FˆC�Ü�w‰w�}‰}˜QÔ 1§<¡<°· ± Õ#>Ø‘ð'ð �qŠ=ؘ(˜)Ð$ˆEÙ!Ó'™E�q¢Q’˜EˆÐ'Ø�}‰}×!Ñ! %Ó(Ð(ùò(s Á!B Á)B có —|j|ŽS)zÊjoin various elements of a path together (as os.path.join would do) The vfs base is not injected so that path stay relative. This exists to allow handling of strange encoding if needed.)rx)r'rns rÚreljoinzabstractvfs.reljoin²s€ð ˆt�z‰z˜5Ð!Ð!rcó@—tjj|«S)z‚split top-most element of a path (as os.path.split would do) This exists to allow handling of strange encoding if needed.)rTrÚsplitr;s rr|zabstractvfs.split¹s€ô�w‰w�}‰}˜TÓ"Ð"rcó^—tjj|j|««Sr)rTrÚlexistsr7r;s rr~zabstractvfs.lexists¿s€Ü�w‰w�‰˜tŸy™y¨›Ó/Ð/rcóJ—tj|j|««Sr)rTrfr7r;s rrfzabstractvfs.lstatÂó€Ü�x‰x˜Ÿ ™  $›Ó(Ð(rcóJ—tj|j|««Sr)rTÚlistdirr7r;s rr‚zabstractvfs.listdirÅs€Ü�z‰z˜$Ÿ)™) D›/Ó*Ð*rcóL—tj|j|«|«Sr)r Úmakedirr7)r'rrOs rr„zabstractvfs.makedirÈs€Ü�|‰|˜DŸI™I d›O¨ZÓ8Ð8rcóL—tj|j|«|«Sr)r Úmakedirsr7r1s rr†zabstractvfs.makedirsËs€ô�}‰}˜TŸY™Y t›_¨dÓ3Ð3rcóL—tj||j|««Sr)r Úmakelockr7)r'Úinfors rrˆzabstractvfs.makelockÐs€Ü�}‰}˜T 4§9¡9¨T£?Ó3Ð3rcóJ—tj|j|««Sr)rTÚmkdirr7r;s rr‹zabstractvfs.mkdirÓr€rÚsuffixÚprefixÚdircóÖ—tj|||j|«¬«\}}tj|«\}}|r"|t j j||«fS||fS)N)rŒr�rŽ)r Úmkstempr7r r|rTr)r'rŒr�rŽÚfdÚnameÚdnameÚfnames rr�zabstractvfs.mkstempÖsb€ô ×#Ñ#Ø &¨d¯i©i¸«nô ‰ˆˆDô—z‘z $Ó'‰ ˆˆuÙ Ø”r—w‘w—|‘| C¨Ó/Ð/Ð /à�u�9Ð rcóN—tj|j|«||«Sr)r r‚r7)r'rriÚskips rÚreaddirzabstractvfs.readdirås€Ü�|‰|˜DŸI™I d›O¨T°4Ó8Ð8rcóJ—tj|j|««Sr)r Úreadlockr7r;s rr™zabstractvfs.readlockèó€Ü�}‰}˜TŸY™Y t›_Ó-Ð-rÚsrcÚdstcó@—|j|d«|j|«}|j|«}|xrtjj |«}|r0|j r$tj ||«}t||«|Stj ||«S)a¼Rename from src to dst checkambig argument is used with util.filestat, and is useful only if destination file is guarded by any lock (e.g. repo.lock or repo.wlock). To avoid file stat ambiguity forcibly, checkambig=True involves copying ``src`` file, if it is owned by another. Therefore, use checkambig=True only in limited cases (see also issue5418 and issue5584 for detail). ów)r2r7r rrrirr)r'r›rœÚ checkambigÚsrcpathÚdstpathrÚrets rrzabstractvfs.renameës~€ð �‰˜˜TÔ"Ø—)‘)˜C“.ˆØ—)‘)˜C“.ˆØÒ@¤§¡×!7Ñ!7¸Ó!@ˆÙ �w—|’|Ü—+‘+˜g wÓ/ˆCÜ ˜ Ô )؈JÜ�{‰{˜7 GÓ,Ð,rcóJ—tj|j|««Sr)r Úreadlinkr7r;s rr¤zabstractvfs.readlinkršrcóJ—tj|j|««S)z7Remove a leaf directory and all empty intermediate ones)r Ú removedirsr7r;s rr¦zabstractvfs.removedirss€ä�‰˜tŸy™y¨›Ó/Ð/rcóJ—tj|j|««S)zRemove an empty directory.)rTÚrmdirr7r;s rr¨zabstractvfs.rmdirs€ä�x‰x˜Ÿ ™  $›Ó(Ð(rcó`—|rd„}nd}tj|j|«||¬«S)zqRemove a directory tree recursively If ``forcibly``, this tries to remove READ-ONLY files, too. cóH—|tjur‚tj|«}|jtjzdk7r‚tj |tj |j«tjz«tj|«yrp)rTÚremoverirhÚS_IWRITErWÚS_IMODE)ÚfunctionrÚexcinfoÚss rÚonerrorz#abstractvfs.rmtree..onerrorse€Ø¤2§9¡9Ñ,Øä—G‘G˜D“M�Ø—I‘I¤§ ¡ Ñ-°!Ò3ØÜ—‘˜œtŸ|™|¨A¯I©IÓ6¼¿¹ÑFÔGÜ— ‘ ˜$•rN)Ú ignore_errorsr±)ÚshutilÚrmtreer7)r'rr²Úforciblyr±s rr´zabstractvfs.rmtree s3€ñ ó ðˆGÜ�}‰}Ø �I‰I�d‹O¨=À'ô ð rÚlÚxcóN—tj|j|«||«Sr)r Úsetflagsr7)r'rr¶r·s rr¹zabstractvfs.setflags%s€Ü�}‰}˜TŸY™Y t›_¨a°Ó3Ð3rcóJ—tj|j|««Sr)rTrir7r;s rrizabstractvfs.stat(s€Ü�w‰w�t—y‘y “Ó'Ð'rcóJ—tj|j|««Sr)r Úunlinkr7r;s rr¼zabstractvfs.unlink+s€Ü�{‰{˜4Ÿ9™9 T›?Ó+Ð+rcóL—tj|j|««y)z7Attempt to remove a file, ignoring missing file errors.N)r Ú tryunlinkr7r;s rr¾zabstractvfs.tryunlink.s€ä �‰�t—y‘y “Õ'rcóP—tj|j|«||¬«S)N)Ú ignoremissingr¨)r Ú unlinkpathr7)r'rrÀr¨s rrÁzabstractvfs.unlinkpath2s$€ô�‰Ø �I‰I�d‹O¨=Àô ð rcóL—tj|j|«|«Sr)rTÚutimer7)r'rÚts rrÃzabstractvfs.utime9s€Ü�x‰x˜Ÿ ™  $›¨Ó+Ð+rc#óK—tjj|jd««}t t j |««}tj|j|«|¬«D]\}}}||d||f–—Œy­w)a/Yield (dirpath, dirs, files) tuple for each directories under path ``dirpath`` is relative one from the root of this vfs. This uses ``os.sep`` as path separator, even you specify POSIX style ``path``. "The root of this vfs" is represented as empty ``dirpath``. N)r±)rTrÚnormpathr7Úlenr Ú normasprefixÚwalk)r'rr±ÚrootÚ prefixlenÚdirpathÚdirsÚfiless rrÉzabstractvfs.walk<stèø€ô�w‰w×Ñ § ¡ ¨$£Ó0ˆôœ×-Ñ-¨dÓ3Ó4ˆ Ü$&§G¡G¨D¯I©I°d«OÀW×$MÑ ˆG�T˜5ؘ9˜:Ð&¨¨eÐ4Ó 4ñ%Nùs‚BB c#óbK—ttj«tj«sd–—yt |d|«}t |dd«rt j td««‚t||¬«5} ||_ |–—d|_ ddd«y#d|_ wxYw#1swYyxYw­w)zþAllow files to be closed asynchronously. When this context manager is active, ``backgroundclose`` can be passed to ``__call__``/``open`` to result in the file possibly being closed asynchronously, on a background thread. NÚvfsÚ_backgroundfileclosers-can only have 1 active background file closer)Ú expectedcount) Ú isinstanceÚ threadingÚcurrent_threadÚ _MainThreadrr ÚAbortrÚbackgroundfilecloserrÑ)r'ÚuirÒrÐÚbfcs rÚbackgroundclosingzabstractvfs.backgroundclosingLsµèø€ôÜ × $Ñ $Ó &Ü × !Ñ !ô ó Ø Ü�d˜E 4Ó(ˆÜ �3Ð/°Ô 6Ü—+‘+ÜÐBÓCóð ô" "°MÕ BÀcð àðÔ)ð’ ððÕ)÷CÐ BøððÕ)ú÷CÐ Büs6‚A7B/Á9B#Á; BÂB# B/ B  B#Â#B,Â(B/có—y)z1generic hook point to lets fncache steer its stewN©r;s rÚ register_filezabstractvfs.register_filens�r©rE)F)rJFr©NT)NN)rstmpN)NNN)NFF)NFT©éÿÿÿÿ)=Ú__name__Ú __module__Ú __qualname__Ú__doc__rtr*Úbytesr.r2rr7r<r@r Ú propertycacherCr9r?ÚintrMrPrRrUrWrYÚboolr[r^r`rbrdrmrxrzr|r~rfr‚r„r†rˆr‹r�r—r™rr¤r¦r¨r´r¹rir¼r¾rÁrÃrÉÚ contextlibÚcontextmanagerrÛrÞrÝrrrr4sé„Ù5ð€HòPñ "˜Uð"¨%ó"ð"˜uð"¨Eó"ð"˜ %™ð"°Eð"¸eó"ð˜Eð eóñ ð¨eóð ×Ññóðð˜ð 5óñ"˜eð"¨5ó"ð 9>ñ"Øð"Ø!&ð"à ó"ðINñ'Øð'Ø!&ð'Ø.3ð'à ó'ð "˜5ð"¨ð"°#ó"ð&˜Uð& uó&ð /˜%ð/ sð/¨tó/ð%˜Eð% eó%ñ /˜8 E™?ð/°dó/òñ.˜( 5™/ð.°Tó.ñ/˜8 E™?ð/°dó/ñ/˜8 E™?ð/°dó/ñ 8 ¨%¡ð 8¸Dó 8ð)˜Eð) eó)ð"˜eð"¨ó"ð#˜%ó#ñ 0˜H U™Oð0°tó0ñ)˜( 5™/ó)ñ+˜H U™Oó+ñ9˜H U™Oó9ðCGñ4ؘU‘Oð4Ø2:¸3±-ó4ð 4 5ó4ñ)˜( 5™/ó)ð ØØ#ñ àð ðð ð�e‰_ó ñ9˜H U™Oó9ð.˜Uð. uó.ñ-˜%ð- eó-ð,.˜Uð. uó.ñ0˜x¨™ó0ñ)˜( 5™/ó)ð KPñ ؘU‘Oó ð24˜Uð4 tð4°ó4ñ(˜ %™ó(ñ,˜8 E™?ó,ñ(˜h u™oó(ð HLñ ؘU‘Oó ñ,˜( 5™/ó,ñ5˜ %™ó5ð ×ÑòóðóB@rrcóê—eZdZdZ ddefd„Zejdefd„«Z ejd„«Z d„Z dd „Z dd e edefd „Z dd ed efd „Zdededdfd„Zd e ededefd„Zy)rÐakOperate files relative to a base directory This class is used to hide the details of COW semantics and remote file access from higher level code. 'cacheaudited' should be enabled only if (a) vfs object is short-lived, or (b) the base directory is managed by hg and considered sort-of append-only. See pathutil.pathauditor() for details. Úbasecó—|rtj|«}|rtjj |«}||_||_|r'tj|j |¬«|_ n dd„|_ d|_ d|_ i|_ y)N)Úcachedcó—yràrÝ)rr+s rÚzvfs.__init__..Žs€°rr) r Ú expandpathrTrÚrealpathrîÚ_auditr Ú pathauditorÚauditÚ createmodeÚ _trustnlinkÚoptions)r'rîr÷Ú cacheauditedrórôs rr*z vfs.__init__}sr€ñ Ü—?‘? 4Ó(ˆDÙ Ü—7‘7×#Ñ# DÓ)ˆD؈Œ ؈Œ Ù Ü!×-Ñ-¨d¯i©iÀ ÔMˆD�Jâ5ˆDŒJ؈ŒØˆÔ؈� rr4có@—tj|j«Sr)r Ú checklinkrîrBs rÚ _cansymlinkzvfs._cansymlink“ó€ä�~‰~˜dŸi™iÓ(Ð(rcó@—tj|j«Sr)r Ú checkexecrîrBs rÚ_chmodz vfs._chmod—rÿrcó|—|j� |jsytj||jdz«y)Ni¶)rørrTrW)r'r’s rÚ _fixfilemodezvfs._fixfilemode›s,€Ø �?‰?Ð "¨$¯+ª+Ø Ü �‰��t—‘¨Ñ.Õ/rNcón—|jr©tjj|«rE|j |j «r*tjj ||j «}tj|«}|rtjd||fz«‚|j||¬«yy)Ns%s: %rr>) rõrTrrrrsrîÚrelpathr Úcheckosfilenamer r×r÷)r'rr+Úrs rr2zvfs._auditpath s€€Ø �;Š;Ü�w‰w�}‰}˜TÔ" t§¡°t·y±yÔ'AÜ—w‘w—‘ t¨T¯Y©YÓ7�Ü×$Ñ$ TÓ*ˆAÙÜ—k‘k )¨q°$¨iÑ"7Ó8Ð8Ø �J‰J�t $ˆJÕ 'ð rrcó<— tjtj|««D]@}||vr||}n0tjj |j ||«}|||<|rŒ@y |j|«S#ttjf$rYywxYw)a8return True if the path is a regular file or a symlink and the directories along the path are "normal", that is not symlinks or nested hg repositories. Ignores the `_audit` setting, and checks the directories regardless. `dircache` is used to cache the directory checks. F) r Úfinddirs_rev_norootr Ú localpathröÚ_checkfs_existsrîrgr r×rm)r'Údircacherr�Úress rÚisfileorlink_checkdirzvfs.isfileorlink_checkdir©s›€ð Ü"×6Ñ6´t·~±~ÀdÓ7KÖL�ؘXÑ%Ø" 6Ñ*‘Cä"×.Ñ.×>Ñ>ØŸ ™  6¨4ó�Cð(+�H˜VÑ$ÚÙ ñMð× Ñ  Ó&Ð&øôœŸ™Ð%ò Ùð ús‚A'A?Á*A?Á,A?Á?BÂBr+c óØ—|r|j||«|j|«} d|vr|dz }d} |dv�r&tj| «\} } | �r |rF|r!tj| |j |«tj | ||j |¬«S d|vrtj| «d} n:tj| «5tj| «} | dkrd} d d d «| dkDrg|j€!| dkDxstj| «|_ | dkDs |js)tjtj| «| «tj| |«} | dk(r|j| «|r0|dvr!t!j"t%d «|z«‚t'| «} |rlt)t+j,«t*j.«r@|j0st!j"t%d ««‚t3| |j0«} | S#1swY�ŒDxYw#t$r)d} |r!tj| |j |«Y�ŒxwxYw) a«Open ``path`` file, which is relative to vfs root. By default, parent directories are created as needed. Newly created directories are marked as "not to be indexed by the content indexing service", if ``notindexed`` is specified for "write" mode access. Set ``makeparentdirs=False`` to not create directories implicitly. If ``backgroundclose`` is passed, the file may be closed asynchronously. It can only be used if the ``self.backgroundclosing()`` context manager is active. This should only be specified if the following criteria hold: 1. There is a potential for writing thousands of files. Unless you are writing thousands of files, the performance benefits of asynchronously closing files is not realized. 2. Files are opened exactly once for the ``backgroundclosing`` active duration and are therefore free of race conditions between closing a file on a background thread and reopening it. (If the file were opened multiple times, there could be unflushed data because the original file handle hasn't been flushed/closed yet.) ``checkambig`` argument is passed to atomictempfile (valid only for writing), and is useful only if target file is guarded by any lock (e.g. repo.lock or repo.wlock). To avoid file stat ambiguity forcibly, checkambig=True involves copying ``path`` file opened in "append" mode (e.g. for truncation), if it is owned by another. Therefore, use combination of append mode and checkambig=True only in limited cases (see also issue5418 and issue5584 for detail). óbrâ©órrE)rŸržrréNs>implementation error: mode %s is not valid for checkambig=TruesSbackgroundclose can only be used when a backgroundclosing context manager is active)r2r7r r|r†røÚatomictempfiler¼Ú posixfileÚnlinksr:rùÚ checknlinkrrrr r×rÚcheckambigatclosingrÓrÔrÕrÖrÑÚdelayclosedfile)r'rr+Ú atomictemprOrKrŸÚ auditpathÚmakeparentdirsÚfÚnlinkrYrUrFs rr.z vfs.__call__Âs5€ñR Ø �O‰O˜D $Ô 'Ø �I‰I�d‹Oˆà �tÑ Ø �D‰LˆDàˆØ �}Ò $Ü $§ ¡ ¨1£ Ñ ˆG�XòÙÙ%ÜŸ ™  g¨t¯©À ÔKÜ×.Ñ.ؘ4 §¡¸ZôððLؘt‘|ÜŸ ™  AœØ !™ô"Ÿ^™^¨AÕ.Ü$(§K¡K°£N˜EØ$ qšyØ() ÷/ð˜1’9Ø×'Ñ'Ð/Ø+0°1©9Ò+J¼¿¹ÈÓ8J˜Ô(ؘq’y¨×(8Ò(8ÜŸ ™ ¤D§O¡O°AÓ$6¸Ô:Ü �^‰^˜A˜tÓ $ˆØ �AŠ:Ø × Ñ ˜aÔ á Ø�}Ñ$Ü—k‘kÜð6óðñ óðô% RÓ(ˆBá œzÜ × $Ñ $Ó &Ü × !Ñ !ô ð ×.Ò.ä—k‘kÜðGóóðô!ØØ×*Ñ*óˆBð ˆ ÷_/Ñ.ûô)òLØ�EÙ%ÜŸ ™  g¨t¯©À ÔKúðLús*Â1H7à H*Ã(H7È*H4È/H7È7.I)É(I)r›rœc óþ—|j|«|j|«}tj|«tjt j j|«|j«|jr t j||«y|j#||«y#t$rG}t|jtd«|tj|j «fz|«‚d}~wwxYw)Nscould not symlink to %r: %s)r÷r7r r¾r†rTrrYrørþÚsymlinkrgÚerrnorr Ú strtolocalÚstrerrorrM)r'r›rœÚlinknameÚerrs rr!z vfs.symlink6s¿€Ø � ‰ �3ŒØ—9‘9˜S“>ˆÜ �‰�xÔ ä � ‰ ”b—g‘g—o‘o hÓ/°·±ÔAà × Ò ð Ü— ‘ ˜3 Õ)ð �J‰J�s˜CÕ øôò ÜØ—I‘IÜÐ4Ó5ØœH×/Ñ/°· ± Ó=Ð>ñ?àó ðûð úsÂB,Â, C<Â5AC7Ã7C<r3cóz—|r.|j|g}|j|«|j|ŽS|jSr)rîÚextendrx)r'rr3Úpartss rr7zvfs.joinJs:€Ù Ø—Y‘Y Ð%ˆEØ �L‰L˜Ô !Ø�4—:‘:˜uÐ%Ð %à—9‘9Ð r)TFFF)r4Nr)rEFFFFTT)rãrärårærçr*r rèrêrþrrr2rrr.r!r7rÝrrrÐrÐrsï„ñðØØØñ àóð, ×Ñð)˜Tò)óð)ð ×Ññ)óð)ò0ó (ð15ñ'Ø& u™oð'à ó'ð8ØØØØØØñràðrðórðh!˜5ð! uð!°ó!ð(˜ %™ð°Eð¸eôrrÐcó^—eZdZdd„Zed„«Zd„Zed„«Zejd„«Zy)Úproxyvfscó—||_yr)rЩr'rÐs rr*zproxyvfs.__init__Ws €Øˆ�rcó.—|jjSr)rÐrørBs rrøzproxyvfs.createmodeZs€à�x‰x×"Ñ"Ð"rcó:—|jj||«Sr)rÐr2r1s rr2zproxyvfs._auditpath^s€Ø�x‰x×"Ñ" 4¨Ó.Ð.rcó.—|jjSr©rÐrúrBs rrúzproxyvfs.optionsas€à�x‰x×ÑÐrcó&—||j_yrr1)r'Úvalues rrúzproxyvfs.optionses€à ˆ�‰ÕrN©rÐrÐ) rãrärår*Úpropertyrør2rúÚsetterrÝrrr+r+VsL„óðñ#óð#ò/ðñ óð ð ‡^�^ñ!óñ!rr+có>—eZdZdZd d„Zdefd„Zdeededefd„Zy) Ú filtervfsz4Wrapper vfs for filtering filenames with a function.có>—tj||«||_yr)r+r*Ú_filter)r'rÐÚfilters rr*zfiltervfs.__init__ms€Ü×ј$ Ô$؈� rrcóL—|j|j|«g|¢­i|¤ŽSr)rÐr:)r'rr(r)s rr.zfiltervfs.__call__qs&€Øˆt�x‰x˜Ÿ ™  TÓ*Ð<¨TÒ<°VÑ<Шd¯h©h×.>Ñ.>¸tÐ.NÀgÒ.NÓ!OÓPÐ Pà—8‘8—=‘= Ó&Ð &rNr4© rãrärårær*rçr.rr7rÝrrr8r8js4„Ù>óð=˜Uó=ð'˜ %™ð'°Eð'¸eô'rr8cóD—eZdZdZd d„Zd dedefd„Zdeededefd„Zy ) Ú readonlyvfsz#Wrapper vfs preventing any writing.có0—tj||«yr)r+r*r-s rr*zreadonlyvfs.__init__�s€Ü×ј$ Õ$rrr+cót—|dvrtjtd««‚|j||g|¢­i|¤ŽS)Nrsthis vfs is read only)r r×rrÐ)r'rr+r(Úkws rr.zreadonlyvfs.__call__„s<€Ø �}Ñ $Ü—+‘+œaÐ 8Ó9Ó:Ð :؈t�x‰x˜˜dÐ0 TÒ0¨RÑ0Ð0rr3r4có<—|jj|g|¢­ŽSr)rÐr7r6s rr7zreadonlyvfs.join‰s€Øˆt�x‰x�}‰}˜TÐ, GÒ,Ð,rNr4rßr>rÝrrr@r@~s;„Ù-ó%ñ1˜Uð1¨%ó1ð -˜ %™ð-°Eð-¸eô-rr@có:—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z y ) Ú closewrapbasezaBase class of wrapper, which hooks closing Do not instantiate outside of the vfs layer. có2—tj|d|«y)NÚ_origfh)ÚobjectÚ __setattr__)r'Úfhs rr*zclosewrapbase.__init__“s€Ü×ј4 ¨BÕ/rcó.—t|j|«Sr)rrH©r'Úattrs rÚ __getattr__zclosewrapbase.__getattr__–ó€Ü�t—|‘| TÓ*Ð*rcó0—t|j||«Sr)rrH)r'rNr3s rrJzclosewrapbase.__setattr__™s€Ü�t—|‘| T¨5Ó1Ð1rcó.—t|j|«Sr)rrHrMs rÚ __delattr__zclosewrapbase.__delattr__œrPrcó:—|jj«|Sr)rHÚ __enter__rBs rrUzclosewrapbase.__enter__Ÿs€Ø � ‰ ×ÑÔ Øˆ rcóB—tdtt|««z«‚©Nr"r#©r'Úexc_typeÚ exc_valueÚexc_tbs rÚ__exit__zclosewrapbase.__exit__£ó€Ü!Ð"<¼sÄ4ÈÃ:»Ñ"NÓOÐOrcóB—tdtt|««z«‚rWr#rBs rÚclosezclosewrapbase.close¦r]rN) rãrärårær*rOrJrSrUr\r_rÝrrrFrF�s,„ñò 0ò+ò2ò+òòPóPrrFcó.‡—eZdZdZˆfd„Zd„Zd„ZˆxZS)rzfProxy for a file object whose close is delayed. Do not instantiate outside of the vfs layer. cóZ•—tt|� |«tj |d|«y)NÚ_closer)Úsuperrr*rIrJ)r'rKÚcloserÚ __class__s €rr*zdelayclosedfile.__init__°s$ø€Ü Œo˜tÑ-¨bÔ1Ü×ј4 ¨FÕ3rcóN—|jj|j«yr©rbr_rHrXs rr\zdelayclosedfile.__exit__´ó€Ø � ‰ ×ј4Ÿ<™<Õ(rcóN—|jj|j«yrrgrBs rr_zdelayclosedfile.close·rhr)rãrärårær*r\r_Ú __classcell__©res@rrrªsø„ñô 4ò)ö)rrcó0—eZdZdZdd„Zd„Zd„Zd„Zd„Zy) rØzCCoordinates background closing of file handles on multiple threads.cóB—d|_d|_g|_d|_tj }|j dd|«}|sy|jdd«}|dkDr||kry|jdd«}|jdd«}|jd|z«tjj|¬ «|_ d |_t|«D]N}tj|jd ¬ «} |jj!| «| j#«ŒPy) NFsworkersbackgroundclosesbackgroundcloseminfilecountrsbackgroundclosemaxqueuesbackgroundclosethreadcounts0starting %d threads for background file closing )ÚmaxsizeTÚbackgroundcloser)Útargetr’)Ú_runningÚ_enteredÚ_threadsÚ_threadexceptionr Ú iswindowsÚ configboolÚ configintÚdebugÚqueueÚQueueÚ_queueÚrangerÔÚThreadÚ_workerrRÚstart) r'rÙrÒÚdefaultenabledÚenabledÚ minfilecountÚmaxqueueÚ threadcountÚirÄs rr*zbackgroundfilecloser.__init__¾s€ØˆŒ ؈Œ ؈Œ Ø $ˆÔô"×+Ñ+ˆØ—-‘-  Ð+=¸~ÓNˆáØ ð —|‘| IÐ/MÓNˆ ð ˜1Ò  °Ò!=Ø à—<‘<  Ð+EÓFˆØ—l‘l 9Ð.KÓLˆ à �‰Ø @À;Ñ Nô ô—n‘n×*Ñ*°8Ð*Ó<ˆŒ ؈Œ ä�{Ö#ˆAÜ× Ñ ¨¯ © Ð;MÔNˆAØ �M‰M× Ñ  Ô #Ø �G‰G�Iñ$rcó—d|_|Srà)rrrBs rrUzbackgroundfilecloser.__enter__äs€ØˆŒ ؈ rcóT—d|_|jD]}|j«Œy)NF)rqrsr7)r'rYrZr[rÄs rr\zbackgroundfilecloser.__exit__ès"€ØˆŒ 𗔈AØ �F‰F�Hñrcó— |jjdd¬«} |j«Œ0#t$r}||_Yd}~Œd}~wwxYw#t j j$r|jsYyYŒKwxYw)zMain routine for worker thread.Tgš™™™™™¹?©ÚblockÚtimeoutN) r{Úgetr_Ú Exceptionrtr ryÚEmptyrq©r'rKÚes rr~zbackgroundfilecloser._workerðsy€àð Ø—[‘[—_‘_¨4¸�_Ó?�ð.Ø—H‘H”Jð øô!ò.à,-�D×)Ñ)ûð.ûô—>‘>×'Ñ'ò Ø—}’}Ùñ%ð ús1ƒA¡2² A »AÁAÁA Á AÁ)A=Á<A=có—|jstjtd««‚|jr|j}d|_|‚|j s|j «y|jj|dd¬«y)zSchedule a file for closing.s1can only call close() when context manager activeNTr‰) rrr r×rrtrqr_r{Úputr�s rr_zbackgroundfilecloser.closesq€à�}Š}Ü—+‘+ÜÐFÓGóð ð × Ò Ø×%Ñ%ˆAØ$(ˆDÔ !؈Gð�}Š}Ø �H‰HŒJØ à � ‰ �‰˜ $°ˆÕ5rNrá) rãrärårær*rUr\r~r_rÝrrrØrØ»s„ÙMó$òLòòó 6rrØcó4‡—eZdZdZˆfd„Zd„Zd„Zd„ZˆxZS)ra"Proxy for a file object, to avoid ambiguity of file stat See also util.filestat for detail about "ambiguity of file stat". This proxy is useful only if the target file is guarded by any lock (e.g. repo.lock or repo.wlock) Do not instantiate outside of the vfs layer. c󨕗tt|� |«tj |dt j j|j««y)NÚ_oldstat) rcrr*rIrJr rrr’)r'rKres €rr*zcheckambigatclosing.__init__"s8ø€Ü Ô! 4Ñ1°"Ô5Ü×ј4 ¬T¯]©]×-CÑ-CÀBÇGÁGÓ-LÕMrcóv—|j}|jr!t|jj|«yyr)r•rirrHr’)r'rs rÚ _checkambigzcheckambigatclosing._checkambig&s+€Ø—-‘-ˆØ �<Š<Ü ˜Ÿ ™ ×)Ñ)¨7Õ 3ð rcó^—|jj|||«|j«yr)rHr\r—rXs rr\zcheckambigatclosing.__exit__+s$€Ø � ‰ ×јh¨ °6Ô:Ø ×ÑÕrcóX—|jj«|j«yr)rHr_r—rBs rr_zcheckambigatclosing.close/s€Ø � ‰ ×ÑÔØ ×ÑÕr) rãrärårær*r—r\r_rjrks@rrrsø„ñôNò4ò örr)rërTr³rirÔÚtypingrÚi18nrr rrrÚr r r r rçrrrÐÚopenerr+r8Ú filteropenerr@rFrrØrrÝrrÚrŸsÃðóÛ Û Û Ûõõ÷ñ÷ õð�eó÷&{@ñ{@ô| ^ˆ+ô^ðB €ô!ˆ{ô!ô('�˜+ô'ð"€ ô -�(ô -÷PñPô:)�mô)÷"Y6ñY6ôx˜-õr