ó ¾[/\c@@s ddlmZddlmZddlmZmZmZddlmZddl m Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZejdƒZd„Zd „Zd „Zd „Zd efd „ƒYZdS(i(tabsolute_import(tunicode_literals(tProcessLockErrortThreadLockErrort LockError(t_(tmiscNudnfcC@sRtjjƒsNtj|jdƒƒjƒ}tjj t j ƒd|ƒ}n|S(Nuutf-8ulocks( tdnftutilt am_i_rootthashlibtmd5tencodet hexdigesttostpathtjoinRt getCacheDir(tdir_thexdir((s,/usr/lib/python2.7/site-packages/dnf/lock.pyt _fit_lock_dir%s!cC@s&ttjjt|ƒdƒd| ƒS(Nudownload_lock.piducachedir(t ProcessLockRRRR(tcachedirt exit_on_lock((s,/usr/lib/python2.7/site-packages/dnf/lock.pytbuild_download_lock.scC@s&ttjjt|ƒdƒd| ƒS(Numetadata_lock.pidumetadata(RRRRR(RR((s,/usr/lib/python2.7/site-packages/dnf/lock.pytbuild_metadata_lock2scC@s&ttjjt|ƒdƒd| ƒS(Nurpmdb_lock.piduRPMDB(RRRRR(t persistdirR((s,/usr/lib/python2.7/site-packages/dnf/lock.pytbuild_rpmdb_lock7sRcB@sSeZed„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z RS(cC@s7||_d|_||_||_tjƒ|_dS(Ni(tblockingtcountt descriptionttargett threadingtRLockt thread_lock(tselfRRR((s,/usr/lib/python2.7/site-packages/dnf/lock.pyt__init__=s     cC@sD|jjdtƒs1d|j}t|ƒ‚n|jd7_dS(NRu'%s already locked by a different threadi(R"tacquiretFalseRRR(R#tmsg((s,/usr/lib/python2.7/site-packages/dnf/lock.pyt _lock_threadDs cC@sœttjƒƒjdƒ}yNtj|jtjtjBtjBdƒ}tj ||ƒtj |ƒt SWn,t k r—}|j t jkr‘tS‚nXdS(Nuutf-8i¤(tstrRtgetpidR topenRtO_CREATtO_WRONLYtO_EXCLtwritetclosetTruetOSErrorterrnotEEXISTR&(R#tpidtfdte((s,/usr/lib/python2.7/site-packages/dnf/lock.pyt _try_lockJs) cC@sØy/t|jdƒ}t|jƒƒSWdQXWn¢tk rCdStk rÓtjdƒy/t|jdƒ}t|jƒƒSWdQXWqÔtk r dStk rÏtd|jƒ}t |ƒ‚qÔXnXdS(Nuriÿÿÿÿiu’Malformed lock file found: %s. Ensure no other dnf process is running and remove the lock file manually or run systemd-tmpfiles --remove dnf.conf.( R+RtinttreadlinetIOErrort ValueErrorttimetsleepRR(R#tfR'((s,/usr/lib/python2.7/site-packages/dnf/lock.pyt_try_read_lockVs       cC@s1ytj|jƒtSWntk r,tSXdS(N(RtunlinkRR1R2R&(R#((s,/usr/lib/python2.7/site-packages/dnf/lock.pyt _try_unlinkjs  cC@s |jd8_|jjƒdS(Ni(RR"trelease(R#((s,/usr/lib/python2.7/site-packages/dnf/lock.pyt_unlock_threadqscC@s,tjjtjj|jƒƒ|jƒt}d}xð|j ƒs'|j ƒ}|dkrbq8n|tj ƒkrxdStj d|tj ƒs¡|jƒq8n|jsÙ|jƒd|j|f}t||ƒ‚n|së||krtd|ƒ}tj|ƒt}|}ntjdƒq8WdS(Niiÿÿÿÿu /proc/%d/statu%s already locked by %du*Waiting for process with pid %d to finish.i(RRt ensure_dirRRtdirnameRR(R1R8R@R*taccesstF_OKRBRRDRRRtloggertinfoR&R=R>(R#tinformtprev_pidR5R'((s,/usr/lib/python2.7/site-packages/dnf/lock.pyt __enter__us.        cG@s0|jdkr"tj|jƒn|jƒdS(Ni(RRRARRD(R#texc_args((s,/usr/lib/python2.7/site-packages/dnf/lock.pyt__exit__‘s( t__name__t __module__R&R$R(R8R@RBRDRMRO(((s,/usr/lib/python2.7/site-packages/dnf/lock.pyR<s      (t __future__RRtdnf.exceptionsRRRtdnf.i18nRtdnf.yumRt dnf.loggingRtdnf.utilR3R tloggingRR R=t getLoggerRIRRRRtobjectR(((s,/usr/lib/python2.7/site-packages/dnf/lock.pyts$