a ߾g.@sddlZddlZddlZddlZddlmZddlmZddlmZddlm Z e Z dZ gdZ d"dd Zd#d d Zd$d d Zd%ddZd&ddZd'ddZddZd(ddZd)ddZggdddfddZddZd d!ZdS)*N) up2dateLog)config)rpmUtils)rhnPackageInfoz/var/lib/up2date/dbtimestamp)updateremove refresh_list fullUpdatecheckNeedUpdaterunTransactionverifycsj|rddifSt|ts"ddifStd|tddd}|jfd d |D}t||d|d S) z0We have been told that we should remove packagesrno-ops for caching $Invalid arguments passed to functionzCalled remove_packagesTFload_system_repoload_available_reposcsg|]}t|qS)_package_tup2obj).0tup installedr8/usr/lib/python3.9/site-packages/rhn/actions/packages.py :zremove..)r allow_erasing cache_only) isinstancelistlog log_debug _dnf_basesackqueryr_dnf_transaction) package_listrbase to_removerrrr-s     rcCst|tsddifStd|tddd}|j}|j}d}g}g}|D]}t |dkrt| d|\} } } } } | dkr| dkr| dkr| dkr|j | d rtd | qX| dkrd } |j | | d  }t ||}|sd t|}td|| |qX|D]R}||}|d krDtdt|qXn |d krtdt|qXq| |qX|s|rddd|dddf}n d dif}|j||St|||dS)z:We have been told that we should retrieve/install packagesrrz Called updateTrN)namezPackage %s is already installedr)r+archz,Package %s is not available for installationzE: zPackage %s already installedz6More recent version of package %s is already installed z-Failed: Packages failed to install properly:  1package_install_failure)versionr+z$Requested packages already installed)installr)rrr r!r"r#r$r availablelenappendfilterZlatestr_package_tup2strZlog_meZevr_cmpjoin_plugins_unloadcloser%)r&rr'rr3errZerrmsgs to_installpackager+r1releaseepochr,pkgsZ requested_pkgpkgZpkg_cmpretrrrr?sp                 rc Cs|rddifStddd}|j}|j}g}g}|dddD]N}|\}} t||} | dkr|| r||| qN| dkrN| sNt||} || qN|s|sdd ifSt|||d|d S) z Run a transaction on a group of packages. This was historicaly meant as generic call, but is only called for rollback. rr TrpackagesNeiz6Requested package actions have already been performed.)r2rrr)r"r#r$rr3rr5r%) Ztransaction_datarr'rr3r=r(Zpackage_objectr>actionrBnewrrrr s(         r cCstddd}t|d|dS)z$ Update all packages on the system. Tr) full_updater)r"r%)forcerr'rrrr s r c Cs|rddifSi}d}t}|dr.|d}d|}zt|d}Wndd|fYS0zttd}Wnd}Yn0||dkrdd |fS|dkrzttd }|Wndd |fYS0td d S)z Check if the locally installed package list changed, if needed the list is updated on the server In case of error avoid pushing data to stay safe rr z /var/lib/rpmdbpathz %s/Packageszunable to stat the rpm database zNrpm database not modified since last update (or package list recently updated)w+!unable to open the timestamp file)rhnsd)rZinitUp2dateConfigosstatLAST_UPDATE_FILEopenr;r) rQrdatarKZcfgZRPM_PACKAGE_FILEZdbtimelastfilerrrr s6     r cCsX|rddifStdd}z tWntdddifYS0tddifS) z3 push again the list of rpm packages to the server rr zCalled refresh_rpmlistNz8ERROR: refreshing remote package list for System ProfilezError refreshing package listzrpmlist refreshed)r r!rZupdatePackageProfileprinttouch_time_stamp)rQrrCrrrrs   rcCsjzttd}|WnddifYS0t}ztt||fWnddtifYS0dS)NrNrrOz6unable to set the time stamp on the time stamp file %s)rUrTr;timerRutime)Zfile_dtrrrr[s  r[cCsvtd|rddifSi}d|d<d|d<t|\}}||d<t|rld|d<d|d<||d <d d |fSdd |fS) NzCalled packages.verifyrr zpackages.verifyr+r1Z verify_infoz packages.verify.missing_packagesmissing_packages+z-packages requested to be verified are missingzpackages verified)r r!rZverifyPackagesr4)rDrrVrCr_rrrr s   r TcCs6t}|jjs||r$||jddd|S)NTr)dnfZBaser9ZpluginsZ init_pluginsZread_all_reposZ fill_sack)rrr'rrrr" sr"Fc Cszfz|r|n0|D]}|r||q|D]}|r0||q0||tdt|jsntj d|jj rtddd|jj D| |jj |jj rtddd|jj D|s|Wntj jy4}zFi}d|d <d |d <d d t||fWYd}~W|j|Sd}~0tj jy}zFi}d|d <d|d <ddt||fWYd}~W|j|Sd}~0tj jy}zFi}d|d <d|d <ddt||fWYd}~W|j|Sd}~0tj j yR}z>d} dt|} i}| | |fWYd}~W|j|Sd}~00W|j|n|j|0ddifS)zE command is an function excpecting dnf.Base() as an argument zDependencies Resolvedzempty transactionzDownloading and installing: cSsg|] }t|qSrstrrprrrr-rz$_dnf_transaction..z Removing: cSsg|] }t|qSrrbrdrrrr1rr/r1r0r+r-z/Failed: Packages failed to install properly: %sNrZrpmremoveerrorsz%sZ failed_depsz9Failed: packages requested raised dependency problems: %s)z)Error while executing packages action: %szUpdate Succeeded)Z upgrade_allZpackage_installZpackage_removeresolver r!r4Z transactionra exceptionsErrorZ install_setZdownload_packagesZ remove_setZdo_transactionZ MarkingErrorrcr9r:r;Z DepsolveError) r'r2rrIrrrBrErVstatusmessagerrrr%s                  r%c Cs|dd\}}}}t|dkr(|dnd}d|i}|durPt|dkrP||d<|durlt|dkrl||d<|durt|dkrt||d<|durt|dkr||d<|jfi|}|r|dSdS)Nr+rr1r?r@r,)r4intr6run) qrr+r1r?r@r,r$rArrrrUs rcCsD|dd\}}}}}|sd}d||||f}|r>|d|7}|fS)z6 Create a package name from an rhn package tuple. N0z %s-%s:%s-%sz.%sr)Z package_tupnvrrEaZpkginforrrr7gs r7)N)N)N)rN)NN)NN)N)TT)rRr\Zdnf.exceptionsraZdnf.cliZup2date_clientrrrrZinitLogr rTZ __rhnexport__rrr r r rr[r r"r%rr7rrrrs0      E  )    >