@ -24,7 +24,7 @@ import pexpect
from package_tools import Git , Layman , \
EmergeLogNamedTask , EmergeLog , GitError , \
PackageInformation
PackageInformation , PackageList
Colors = TextState . Colors
from calculate . lib . utils . files import ( getProgPath , STDOUT , removeDir ,
@ -225,6 +225,20 @@ class Update:
raise UpdateError ( _ ( " Failed to update eix cache " ) , addon = p . read ( ) )
return True
def is_binary_pkg ( self , pkg , binary = None ) :
"""
Является ли пакет бинарным
"""
if binary :
return True
if ' PN ' in pkg and pkg [ ' PN ' ] . endswith ( ' -bin ' ) :
return True
if binary is not None :
return binary
if " binary " in pkg and pkg [ ' binary ' ] :
return True
return False
def _printEmergePackage ( self , pkg , binary = False , num = 1 , max_num = 1 ) :
self . endTask ( )
_print = self . color_print
@ -234,7 +248,7 @@ class Update:
part = " ( %s of %s ) " % ( one , two )
else :
part = " "
if binary :
if self . is_binary_pkg ( pkg , binary ) :
_print = _print . foreground ( Colors . PURPLE )
else :
_print = _print . foreground ( Colors . GREEN )
@ -244,7 +258,7 @@ class Update:
def _printInstallPackage ( self , pkg , binary = False ) :
self . endTask ( )
_print = self . color_print
if binary :
if self . is_binary_pkg ( pkg , binary ) :
_print = _print . foreground ( Colors . PURPLE )
else :
_print = _print . foreground ( Colors . GREEN )
@ -276,7 +290,11 @@ class Update:
try :
emerge . run ( )
except EmergeError :
self . printPre ( self . _emerge_translate ( emerge . emerging_error . log ) )
if emerge . emerging_error :
self . printPre (
self . _emerge_translate ( emerge . emerging_error . log ) )
else :
self . printPre ( self . _emerge_translate ( emerge . prepare_error ) )
raise
return True
@ -294,7 +312,7 @@ class Update:
if remove_list :
pkgcolor = _print . foreground ( remove_color )
else :
if pkg [ ' binary ' ] :
if self . is_binary_pkg ( pkg ) :
pkgcolor = _print . foreground ( binary_color )
else :
pkgcolor = _print . foreground ( ebuild_color )
@ -304,25 +322,30 @@ class Update:
size = " ( %s ) " % pkg [ " SIZE " ]
else :
size = " "
self . printDefault ( " - {fullname} {shortname} {size} " . format (
fullname = fullname , shortname = shortname , size = size ) )
mult = _print . bold ( " * " )
self . printDefault ( " {mult} {fullname} {shortname} {size} " . format (
mult = mult , fullname = fullname , shortname = shortname , size = size ) )
def _display_install_package ( self , emerge ) :
"""
Отобразить список устанавливаемых пакетов
"""
# подробный список пакетов
_print = self . color_print
if self . clVars . Get ( ' cl_verbose_set ' ) == ' on ' :
self . printPre ( str ( emerge . install_packages ) )
else :
_print = self . color_print
pkglist = emerge . install_packages . list
self . printSUCCESS ( _print . bold (
self . printSUCCESS ( _print (
_ ( " List packages for installation " ) ) )
self . _display_pretty_package_list ( pkglist )
# TODO: список удаляемых пакетов во время установки
if emerge . install_packages . remove_list :
self . printSUCCESS ( _print (
_ ( " List removal packages " ) ) )
self . _display_pretty_package_list (
emerge . install_packages . remove_list , remove_list = True )
if str ( emerge . download_size ) != " 0 kB " :
self . printSUCCESS ( _print . bold (
self . printSUCCESS ( _print (
_ ( " {size} will be downloaded " ) . format (
size = emerge . download_size ) ) )
@ -360,33 +383,14 @@ class Update:
from calculate . update . utils . cl_update import ClUpdateAction
elog = EmergeLog (
EmergeLogNamedTask ( ClUpdateAction . log_names [ ' premerge ' ] ) )
elog . mark_end_task ( )
elog . mark_end_task ( ) ,
def premerge ( self , param , * packages ) :
"""
Вывести информацию о б обновлении
"""
class MockEmergeCommand ( EmergeCommand ) :
"""
Заглушка , для выполнения команд
"""
def __init__ ( self , packages , * args , * * kwargs ) :
EmergeCommand . __init__ ( self , packages , * args , * * kwargs )
def execute ( self ) :
if self . child is None :
filename = ' /tmp/mylog.log '
self . child = pexpect . spawn ( " /bin/cat " ,
[ filename ] , maxread = 20000 , searchwindowsize = 10000 )
if not path . exists ( filename ) :
raise EmergeError ( _ ( " File %s not found " % filename ) )
return self . child
param , packages = self . getCacheOnWorld ( param , packages , check = True )
param = [ param , " -pv " ]
#print "PREMERGE",packages,param
if not packages :
self . printSUCCESS ( _ ( " The system is up to date " ) )
@ -408,43 +412,39 @@ class Update:
self . emerge_cache . drop_cache ( )
self . printPre ( self . _emerge_translate ( emerge . prepare_error ) )
raise
return self . askConfirm (
if self . clVars . Get ( ' cl_update_pretend_set ' ) == ' on ' :
return True
answer = self . askConfirm (
_ ( " Would you like to merge these packages? " ) , " yes " )
if answer == " no " :
raise KeyboardInterrupt
return " yes "
return True
def _emerge_translate ( self , s ) :
return RegexpLocalization ( ' cl_emerge ' ) . translate ( str ( s ) )
def setUpToDateCache ( self ) :
"""
Установить кэш - " нет пакетов для обновления "
"""
self . updateCache ( PackageList ( [ ] ) )
return True
def emerge ( self , param , * packages ) :
"""
Выполнить сборку пакета
"""
#TODO: проверить ошибку при depclean
class MockEmergeCommand ( EmergeCommand ) :
"""
Заглушка , для выполнения команд
"""
def __init__ ( self , packages , * args , * * kwargs ) :
EmergeCommand . __init__ ( self , packages , * args , * * kwargs )
def execute ( self ) :
filename = ' /tmp/ppp.log '
if self . child is None :
self . child = pexpect . spawn ( " /bin/cat " ,
#['/tmp/emerge.noupdate'])
[ filename ] )
if not path . exists ( filename ) :
raise EmergeError ( _ ( " File %s not found " % filename ) )
return self . child
param , packages = self . getCacheOnWorld ( param , packages )
#print "EMERGE",packages,param
ask_emerge = self . clVars . Get ( ' cl_update_precheck_set ' ) == ' off '
if not packages :
return True
packages = [ param ]
extra_params = None
else :
param , packages = self . getCacheOnWorld ( param , packages )
if not packages :
return True
extra_params = [ param ]
with EmergeParser ( EmergeCommand ( list ( packages ) ,
extra_params = [ param ] ) ) as emerge :
extra_params = extra_params ) ) as emerge :
try :
emerge . question . action = lambda x : False
emerge . run ( )
@ -454,6 +454,7 @@ class Update:
#if ask_emerge:
# self.printPre(str(emerge.install_packages))
except EmergeError :
self . emerge_cache . drop_cache ( )
self . printPre ( self . _emerge_translate ( emerge . prepare_error ) )
raise
#if (ask_emerge and self.askConfirm(
@ -467,7 +468,12 @@ class Update:
try :
emerge . run ( )
except EmergeError as e :
self . printPre ( self . _emerge_translate ( emerge . emerging_error . log ) )
self . emerge_cache . drop_cache ( )
if emerge . emerging_error :
self . printPre (
self . _emerge_translate ( emerge . emerging_error . log ) )
else :
self . printPre ( self . _emerge_translate ( emerge . prepare_error ) )
raise
return True