uawdijnntqw1x1x1
IP : 18.119.162.247
Hostname : ns1.eurodns.top
Kernel : Linux ns1.eurodns.top 4.18.0-553.5.1.lve.1.el7h.x86_64 #1 SMP Fri Jun 14 14:24:52 UTC 2024 x86_64
Disable Function : mail,sendmail,exec,passthru,shell_exec,system,popen,curl_multi_exec,show_source,eval,open_base
OS : Linux
PATH:
/
home
/
..
/
var
/
..
/
.
/
lib64
/
python2.7
/
Demo
/
pdist
/
cvslock.pyc
/
/
� V �Qc@s�dZddlZddlZddlZddlZdZdZdZdZdZ ddd ��YZ d e fd��YZddd ��YZd�Z defd��YZdefd��YZed�Zd�Zedkr�e�ndS(s�CVS locking algorithm. CVS locking strategy ==================== As reverse engineered from the CVS 1.3 sources (file lock.c): - Locking is done on a per repository basis (but a process can hold write locks for multiple directories); all lock files are placed in the repository and have names beginning with "#cvs.". - Before even attempting to lock, a file "#cvs.tfl.<pid>" is created (and removed again), to test that we can write the repository. [The algorithm can still be fooled (1) if the repository's mode is changed while attempting to lock; (2) if this file exists and is writable but the directory is not.] - While creating the actual read/write lock files (which may exist for a long time), a "meta-lock" is held. The meta-lock is a directory named "#cvs.lock" in the repository. The meta-lock is also held while a write lock is held. - To set a read lock: - acquire the meta-lock - create the file "#cvs.rfl.<pid>" - release the meta-lock - To set a write lock: - acquire the meta-lock - check that there are no files called "#cvs.rfl.*" - if there are, release the meta-lock, sleep, try again - create the file "#cvs.wfl.<pid>" - To release a write lock: - remove the file "#cvs.wfl.<pid>" - rmdir the meta-lock - To release a read lock: - remove the file "#cvs.rfl.<pid>" Additional notes ---------------- - A process should read-lock at most one repository at a time. - A process may write-lock as many repositories as it wishes (to avoid deadlocks, I presume it should always lock them top-down in the directory hierarchy). - A process should make sure it removes all its lock files and directories when it crashes. - Limitation: one user id should not be committing files into the same repository at the same time. Turn this into Python code -------------------------- rl = ReadLock(repository, waittime) wl = WriteLock(repository, waittime) list = MultipleWriteLock([repository1, repository2, ...], waittime) i����Ni is#cvs.lcks #cvs.rfl.s #cvs.wfl.tErrorcBs#eZd�Zd�Zd�ZRS(cCs ||_dS(N(tmsg(tselfR((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt__init__`scCs t|j�S(N(treprR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt__repr__cscCs t|j�S(N(tstrR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt__str__fs(t__name__t __module__RRR(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR^s tLockedcBseZRS((RR (((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR jstLockcBsVeZded�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z RS( t.cCsx||_||_d|_d|_ttj��}|jt �|_ |jt|�|_|jt |�|_dS(N(t repositorytdelaytNonetlockdirtlockfileRtostgetpidtjointCVSLCKtcvslcktCVSRFLtcvsrfltCVSWFLtcvswfl(RR Rtpid((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyRps cCsdGH|j�dS(Nt__del__(tunlock(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyRzscCs�x�y'|j|_tj|jd�dSWqtjk r�}d|_|dtkr�ytj|j�}Wntjk r�qnX|j|�qnt d|j |f��qXqdS(Ni�isfailed to lock %s: %s(RRRtmkdirterrorRtEEXISTtstattsleepRR (RRtst((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt setlockdir~s cCs|j�|j�dS(N(t unlockfilet unlockdir(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s cCsP|jrLdG|jGHytj|j�Wntjk r?nXd|_ndS(Ntunlink(RRR'RR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR%�s cCsP|jrLdG|jGHytj|j�Wntjk r?nXd|_ndS(Ntrmdir(RRR(RR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR&�s cCst||j|j�dS(N(R"R R(RR#((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR"�scCstjj|j|�S(N(RtpathRR (Rtname((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s(RR tDELAYRRR$RR%R&R"R(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyRns cCs�|dkrt|��n|tj}ytj|�}|d}Wntk rbd|}nXdtjtj��dd!Gd|G|GHtj|�dS(Nisuid %ds[%s]iisWaiting for %s's lock in( R R!tST_UIDtpwdtgetpwuidtKeyErrorttimetctimeR"(R#R Rtuidtpwenttuser((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR"�s tReadLockcBseZed�ZRS(cCsztj|||�d}z<|j�|j|_t|jd�}|j�d}Wd|sk|j�n|j�XdS(Nitwi( RRR$RRtopentcloseR%R&(RR Rtoktfp((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s (RR R+R(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR5�st WriteLockcBseZed�Zd�ZRS(cCs|tj|||�|j�x0|j�}|s6Pn|j�|j|�q |j|_t|jd�}|j �dS(NR6( RRR$t readers_existR&R"RRR7R8(RR RR2R:((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s cCswtt�}xdtj|j�D]P}|| tkrytj|j|��}Wntjk rjqnX|SqWdS(N( tlenRRtlistdirR R!RRR(RtnR*R#((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR<�s(RR R+RR<(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR;�s cCsixbg}xC|D]:}y|jt|d��Wqtk rI}~PqXqWPt|j||�qtS(Ni(tappendR;R R"Rtlist(trepositoriesRtlockstrtinstance((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pytMultipleWriteLock�s cCs�ddl}|jdr)|jd}nd}d}d}zDdGHt|�}dGH|j�dGHt|�}dGH|j�WddgGHd|_dgGH|r�|j�ndgGH|r�|j�nd gGHd}d gGHd}dgGHXdS(Ni����iRsattempting write lock ...sgot it.sattempting read lock ...iiiii(tsystargvRR;RR5t exc_traceback(RGR trltwl((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyttest�s8 t__main__(((t__doc__RR0R!R-R+R RRRRR RR"R5R;RFRLR(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt<module>Gs&? !
/home/../var/.././lib64/python2.7/Demo/pdist/cvslock.pyc