3 ©ft`fã@sPdZddlmZddlmZddlmZddlmZddlmZddl m Z ddl m Z dd l mZdd l mZdd lZdd lZdd l Zdd lZdd l Zdd lZdd lZdd lZdd lZdd lZdd lZdd lZdd lZdd lZejd ƒZd d„Zdd„Z eee fdd„Z!dd„Z"dd„Z#dd„Z$d dd„Z%e&dk�rLe%ej'dd …dd�d S)!z4 Entrance point for the yum command line interface. é)Úprint_function)Úabsolute_import)Úunicode_literals)ÚConf)ÚCli)Ú OptionParser)Úucd)Úshow_lock_owner)Ú_NÚdnfcCs&tjtjjddd�tjt|ƒƒdS)NÚT)Úexc_infoé)ÚloggerÚlogr ÚloggingÚSUBDEBUGÚcriticalr)Úe©rú/usr/lib/python3.6/main.pyÚ ex_IOError2srcCs6tjtjjddd�|jdk r2tjtdƒt|ƒƒdS)Nr T)r z Error: %sr) rrr rrÚvaluerr r)rrrrÚex_Error8s rcCsÂy6tjjƒtjjj|ƒƒ�}t||||ƒSQRXW�n†tjjk rr}ztj |j ƒt |j ƒdSd}~X�nLtjj k r¢}ztj |j ƒdSd}~X�ntjjk rÆ}zdSd}~X�nøtjjk �rî}zt|ƒSd}~XnÐtjk �r$}ztj tdƒt|ƒƒdSd}~Xnštjjk �r\}ztj tdƒt|ƒƒdSd}~Xnbtk �r€}zt|ƒSd}~Xn>tk �r¼}z tj djt|ƒjtdƒƒƒdSd}~XnXdS)NéÈrz Error: %sz{}: {}z Terminated.)r Zi18nZ setup_stdoutÚcliZBaseCliÚ_mainÚ exceptionsZProcessLockErrorrrrr ÚpidÚ LockErrorÚ DepsolveErrorÚErrorrÚhawkeyÚ Exceptionr rÚlibdnfÚerrorÚIOErrorrÚKeyboardInterruptÚformatÚtypeÚ__name__)ÚargsZ conf_classÚ cli_classZoption_parser_classÚbaserrrrÚmain?s4    r.cCsb|jjƒ||ƒ}y|jttt|ƒƒ|ƒƒWn(ttfk rV}zt|ƒSd}~XnXt ||ƒS)z2Run the dnf program from a command line interface.N) Z_loggingZ _presetupZ configureÚlistÚmaprr&ÚOSErrorrÚcli_run)r-r+r,Z option_parserrrrrrr\s rc,Csèy tdƒ}WnFtk rR}z*|jtjkrBtjtdƒƒtjdƒWYdd}~Xn X|j ƒy |j ƒWn@t j j k r‚‚Yn(ttfk r¨}zt|ƒSd}~XnX|jj�rÖyt||ƒ}W�nt j jk �rÊ}zät|ƒd}|jj �r|jjdd��r|tdƒjdƒ7}|jjj�rN|�s<|td ƒjd ƒ7}n|td ƒjd ƒ7}|jjj�r¢|jjjd ƒ}|t jjk�r¢|�s�|td ƒjdƒ7}n|tdƒjdƒ7}|�r¸tjdj|ƒƒ‚WYdd}~XnX|�rÖ|S|jj ƒ|jj!S)NÚ.z8No read/execute access in current directory, moving to /ú/r T)Z availablez?try to add '{}' to command line to replace conflicting packagesz--allowerasingz.try to add '{}' to skip uninstallable packagesz --skip-brokenz' or '{}' to skip uninstallable packagesÚbestz7try to add '{}' to use not only best candidate packagesz--nobestz0 or '{}' to use not only best candidate packagesz({}))"Úopenr&ÚerrnoZEACCESrrr ÚosÚchdirÚcloseZrunr rrr1rÚdemandsÚ resolvingr rÚ allow_erasingZ_goalZproblem_conflictsr(r-ZconfÚstrictr5Z _get_priorityZPRIO_MAINCONFIGÚinfoÚcommandZrun_transactionZsuccess_exit_status)rr-ÚfrÚretÚmsgZpriorrrr2msT             r2cCs |jdkr&|j|jjƒtjtdƒƒ|jjƒg}|jj dk rN|j |jj ƒy|j |d�Wn˜t j jk r�}ztjt|ƒƒdSd}~Xnvt jjk rÒ}z$x|jj|ƒD]}tj|ƒq²WdSd}~Xn4tk �rö}zt|ƒSd}~XnXtjtdƒƒdS)z9Perform the depsolve, download and RPM transaction stage.NzDependencies resolved.)Zdisplayrz Complete!r)Z transactionZresolver;r=rr?r r@Z run_resolvedZtransaction_displayÚappendZdo_transactionr rZCliErrorr%rrZTransactionCheckErrorZget_error_outputrr&r)rr-ZdisplaysÚexcÚerrrCrrrrr<¢s(   r<FcCst|ƒ}|rtj|ƒ|S)apCall one of the multiple main() functions based on environment variables. :param args: command line arguments passed into yum :param exit_code: if *exit_code* is True, this function will exit python with its exit code when it has finished executing. Otherwise, it will return its exit code. :return: the exit code from dnf.yum execution )r.ÚsysÚexit)r+Ú exit_codeZerrcoderrrÚ user_main¿s  rJÚ__main__rT)rI)F)(Ú__doc__Z __future__rrrZdnf.confrZ dnf.cli.clirZdnf.cli.option_parserrZdnf.i18nrZ dnf.cli.utilsr r Zdnf.clir Zdnf.exceptionsZ dnf.loggingZdnf.utilr7r"Z libdnf.errorr$rr8Zos.pathrGZ getLoggerrrrr.rr2r<rJr*ÚargvrrrrÚsB          5