a &c0@sXddlmZddlmZddlmZmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZedZedZedZedZed Zed Zed Zed Zed ZedZedZedZedZdaGdddejZgdZddgZ dgZ!gdee e!Z"Gdddej#j$Z%ddZ&ddZ'dd Z(d!d"Z)d#d$Z*dS)%)absolute_import)unicode_literals)_loggerNz-Unable to read version lock configuration: %szLocklist not setzAdding versionlock on:zAdding exclude on:z*Package already locked in equivalent form:zPackage {} is already lockedzPackage {} is already excludedzDeleting versionlock for:zNo package found for:z1Excludes from versionlock plugin were not appliedzCVersionlock plugin: number of lock rules from file "{}" applied: {}zFVersionlock plugin: number of exclude rules from file "{}" applied: {}z,Versionlock plugin: could not parse pattern:cs8eZdZdZfddZddZddZdd ZZS) VersionLock versionlockcs8tt|||||_||_|jdur4|jtdS)N)superr__init__basecliZregister_commandVersionLockCommand)selfr r  __class__;/usr/lib/python3.9/site-packages/dnf-plugins/versionlock.pyr 6s  zVersionLock.__init__cCs4||jj}|do.|ddo.|ddadS)Nmainlocklist)Z read_configr ZconfZ has_sectionZ has_optionget locklist_fn)r Zcprrrconfig=s zVersionLock.configcCs0|jdurd}n|jjj}|dur,|jjj}|SNT)r demandsZplugin_filtering_enabledZ resolving)r Zenabledrrrlocking_enabledCs    zVersionLock.locking_enabledc Cs|sttdS|jjjdd}|jjjdd}t}ddg}t D]}d}|rz|ddkrz|dd}d}t j |j tjtjtjtjtjgd}|r||d7<ntdt|qR|D]@}||jj} |r|| }n||j|| }| rqRqqR|dr0ttt|d|drPttt|d|r|jjjt|d} | |} || }|jjj |d } || |}|j tj!d |r|jj"|dS) NT)emptyr!)Zforms%s %s)Z name__glob)Z obsoletes)Z reponame__neq)#rrdebugNO_VERSIONLOCKr sackqueryfilterset_read_locklistdnfsubjectSubjectZget_nevra_possibilitieshawkeyZ FORM_NEVRAZ FORM_NEVRZFORM_NEVZFORM_NAZ FORM_NAMEerror NEVRA_ERRORZto_queryunionaddname APPLY_EXCLUDEformatr APPLY_LOCKlist differenceZfiltermZSYSTEM_REPO_NAMEZ add_excludes) r Zexcludes_queryZ locked_queryZ locked_namescountpatZexclZpossible_nevrasZnevraZ pat_queryZ all_versionsZother_versionsZobsoletes_queryrrrr LsT            zVersionLock.sack) __name__ __module__ __qualname__r-r rrr __classcell__rrrrr2s   r)excludezadd-!zadd!deletedelZ blacklist)r,clearr1c@s8eZdZdZedZdZeddZddZ dd Z d S) r )rzcontrol package version locksz5[add|exclude|list|delete|clear] []cCs:|jdddtdd|jdddd |jd d d d dS) Nz--rawF store_truez@Use package specifications as they are, do not try to parse them)defaultactionhelp subcommand?z[add|exclude|list|delete|clear])nargsmetavarpackage*z[]) add_argumentr)parserrrr set_argparsers z VersionLockCommand.set_argparsercCsd|jj_d|jj_dSr)r rZsack_activationZavailable_repos)r rrr configures zVersionLockCommand.configurec Csd}|jjr|jjtvr2d}|jjd|jjnd|jjtvrDd}nR|jjtvr|td|jj}t j |t j j ddd}n|jjtvrd}n|jj}|dkrt|jj}|D]b\}}|d krt|j|g|jjd d ttd q||krt j t|qtd t|qn|dkrt|jj}|D]f\}}|d krjt|j|g|jjd dttdn,||krt j t|ntd t|q2nX|dkrtD]}t|qn4|dkr tst j t t!td}Wdn1s0Yn|dkrts(t j t t"j#$t}t%j&|dd\} } t} d} t"'| dd\} | D]F} t(| |jjrtd t)| f| d7} qd| *| | *dqdWdn1s0Y| st"+| nt",| dt"-| tdS)Nr1r,rr9z@Subcommand '{}' is deprecated. Use 'exclude' subcommand instead.) stacklevelr:Tz # Added lock on %s rFz # Added exclude on %s rr<wz.tmp)dirsuffixr i).ZoptsrAALL_CMDSrEinsertEXC_CMDS DEP_EXC_CMDSrr/warningswarnr% exceptionsDeprecationWarningDEL_CMDS_search_locklist_write_locklistr rawtimectime ADDING_SPECErrorALREADY_EXCLUDEDrinfo EXISTING_SPECEXCLUDING_SPECALREADY_LOCKEDr$printr NO_LOCKLISTopenospathdirnametempfileZmkstempfdopen_match DELETING_SPECwriteunlinkchmodrename)r cmdmsgresultsentryZ entry_cmdr4frmoutZ tmpfilename locked_specsr3entrrrruns                    "    .  zVersionLockCommand.runN) r5r6r7aliasesrZsummaryusage staticmethodrIrJr~rrrrr s r c Csg}zptstjtttD}|D]*}|ds(|dkrDq(| |q(Wdn1sh0YWn4t y}ztjt |WYd}~n d}~00|S)N#rM) rr%rYrbrirj readlines startswithstripappendIOError NOT_READABLE)rZllfilelineerrrr$s   2&r$cCs|g}d}}t}|D]`}d}|D]@}d}}t||gr"|}|drLdnd}|||fd}q"|s|||fq|S)NrMFrr9r,T)r$rprr)rErxfoundr?r|pkgmatchr}rrrr\s r\c CsLt}|D]}|r||q tj|} d} |rL| jtj|dddd} | sd| j|jdddd} | sxtdt |f| D]} |t | j q|q |rHzvt stj ttt dF} | ||D]&} td|| f| d|| fqWdn1s0YWn6tyF}ztj t|WYd}~n d}~00dS)NTF)Z with_nevraZ with_providesZwith_filenamesraz%s%s )r#r,r%r&r'Zget_best_queryr Z _rpmdb_sackrh NOTFOUND_SPEC pkgtup2specZpkgtuprrYrbrirjrrrr)r argsr^Z try_installedZcommentrdprefixZspecsr4ZsubjZpkgsrrzspecrrrrr]s<      8r]cCs |d}|D]}||krdSqzt|}WntjyFYdS0d|jd|j|jfd|j|jfd|j|j|jfd|j|j|jfd |j|j|j|jfd |j|j|j|jfd |j|j|j|j|jfd |j|j|j|j|jff D]&}|D]}t ||rdSqqdS) NrTFz%sz%s.%sz%s-%sz%s-%s-%sz%s-%s:%sz %s-%s-%s.%sz %s-%s:%s-%sz%s:%s-%s-%s.%sz%s-%s:%s-%s.%s) lstripr(Z split_nevraZValueExceptionr-archversionreleaseepochfnmatch)r}patternsr4nr-rrrrp#s,  rpcCsd||p d||fS)Nz %s-%s:%s-%s.*0r)r-rrrrrrrr=sr)+Z __future__rrZdnfpluginscorerrr%Zdnf.cliZdnf.exceptionsrr(rkrnr_rWrrirarfrergrcrqrrr0r.r*rZPluginrrUr[rVrSr ZCommandr r$r\r]rprrrrrsH  O[