|
|
@ -55,7 +55,7 @@ class EmergeNeedRootError(EmergeError):
|
|
|
|
pass
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CommandExecutor(object):
|
|
|
|
class CommandExecutor():
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
Запуск программы для объекта Emerge
|
|
|
|
Запуск программы для объекта Emerge
|
|
|
|
"""
|
|
|
|
"""
|
|
|
@ -133,7 +133,7 @@ class EmergeCommand(CommandExecutor):
|
|
|
|
env.update(env_update)
|
|
|
|
env.update(env_update)
|
|
|
|
|
|
|
|
|
|
|
|
params = self.default_params + extra_params + packages
|
|
|
|
params = self.default_params + extra_params + packages
|
|
|
|
super(EmergeCommand, self).__init__(self.emerge_cmd, params=params,
|
|
|
|
super().__init__(self.emerge_cmd, params=params,
|
|
|
|
env=env, cwd=cwd, logfile=logfile)
|
|
|
|
env=env, cwd=cwd, logfile=logfile)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -172,7 +172,7 @@ def Linux32(obj):
|
|
|
|
return obj
|
|
|
|
return obj
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class InfoBlockInterface(object):
|
|
|
|
class InfoBlockInterface():
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
Интерфейс для информационного блока
|
|
|
|
Интерфейс для информационного блока
|
|
|
|
"""
|
|
|
|
"""
|
|
|
@ -192,8 +192,8 @@ class InfoBlockInterface(object):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EmergeInformationBlock(InfoBlockInterface):
|
|
|
|
class EmergeInformationBlock(InfoBlockInterface):
|
|
|
|
_color_block = r"(?:\033\[[^m]+?m)?"
|
|
|
|
_color_block = "(?:\033\[[^m]+?m)?"
|
|
|
|
_new_line = r"(?:\r*\n)"
|
|
|
|
_new_line = "(?:\r*\n)"
|
|
|
|
end_token = ["\n"]
|
|
|
|
end_token = ["\n"]
|
|
|
|
re_block = None
|
|
|
|
re_block = None
|
|
|
|
re_match_type = type(re.match("", ""))
|
|
|
|
re_match_type = type(re.match("", ""))
|
|
|
@ -281,7 +281,7 @@ class InstallPackagesBlock(EmergeInformationBlock):
|
|
|
|
re_blocks = re.compile(r"\[{c}blocks{c} {c}b".format(c=_color_block))
|
|
|
|
re_blocks = re.compile(r"\[{c}blocks{c} {c}b".format(c=_color_block))
|
|
|
|
|
|
|
|
|
|
|
|
def get_data(self, match):
|
|
|
|
def get_data(self, match):
|
|
|
|
super(InstallPackagesBlock, self).get_data(match)
|
|
|
|
super().get_data(match)
|
|
|
|
list_block = XmlConverter().transform(self.result).split('\n')
|
|
|
|
list_block = XmlConverter().transform(self.result).split('\n')
|
|
|
|
self.list = PackageList(map(EmergeUpdateInfo, list_block))
|
|
|
|
self.list = PackageList(map(EmergeUpdateInfo, list_block))
|
|
|
|
self.remove_list = PackageList(map(EmergeRemoveInfo, list_block))
|
|
|
|
self.remove_list = PackageList(map(EmergeRemoveInfo, list_block))
|
|
|
@ -433,7 +433,7 @@ class QuestionGroup(GroupEmergeInformationBlock):
|
|
|
|
end_token = ["]", "\n"]
|
|
|
|
end_token = ["]", "\n"]
|
|
|
|
_color_block = EmergeInformationBlock._color_block
|
|
|
|
_color_block = EmergeInformationBlock._color_block
|
|
|
|
re_block = re.compile(
|
|
|
|
re_block = re.compile(
|
|
|
|
r"(Would you.*)\[{c}Yes{c}/{c}No{c}".format(c=_color_block))
|
|
|
|
"(Would you.*)\[{c}Yes{c}/{c}No{c}".format(c=_color_block))
|
|
|
|
|
|
|
|
|
|
|
|
def get_block(self, child):
|
|
|
|
def get_block(self, child):
|
|
|
|
try:
|
|
|
|
try:
|
|
|
@ -511,7 +511,7 @@ class NotifierInformationBlock(EmergeInformationBlock):
|
|
|
|
Информационный блок поддерживающий observing
|
|
|
|
Информационный блок поддерживающий observing
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
def __init__(self, parent):
|
|
|
|
def __init__(self, parent):
|
|
|
|
super(NotifierInformationBlock, self).__init__(parent)
|
|
|
|
super().__init__(parent)
|
|
|
|
self.observers = []
|
|
|
|
self.observers = []
|
|
|
|
|
|
|
|
|
|
|
|
def get_data(self, match):
|
|
|
|
def get_data(self, match):
|
|
|
@ -546,8 +546,8 @@ class EmergingPackage(NotifierInformationBlock):
|
|
|
|
_color_block = EmergeInformationBlock._color_block
|
|
|
|
_color_block = EmergeInformationBlock._color_block
|
|
|
|
token = ">>> Emerging "
|
|
|
|
token = ">>> Emerging "
|
|
|
|
re_block = re.compile(
|
|
|
|
re_block = re.compile(
|
|
|
|
r"Emerging (binary )?\({c}(\d+){c} "
|
|
|
|
"Emerging (binary )?\({c}(\d+){c} "
|
|
|
|
r"of {c}(\d+){c}\) {c}([^\s\033]+){c}".format(c=_color_block))
|
|
|
|
"of {c}(\d+){c}\) {c}([^\s\033]+){c}".format(c=_color_block))
|
|
|
|
|
|
|
|
|
|
|
|
def notify(self, observer, groups):
|
|
|
|
def notify(self, observer, groups):
|
|
|
|
observer(EmergePackage(groups[3]), num=groups[1], max_num=groups[2],
|
|
|
|
observer(EmergePackage(groups[3]), num=groups[1], max_num=groups[2],
|
|
|
@ -575,7 +575,7 @@ class FetchingTarball(NotifierInformationBlock):
|
|
|
|
Происходит скачивание архивов
|
|
|
|
Происходит скачивание архивов
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
token = "Saving to:"
|
|
|
|
token = "Saving to:"
|
|
|
|
re_block = re.compile(r"Saving to:\s*[‘'](\S+)?['’]")
|
|
|
|
re_block = re.compile("Saving to:\s*[‘'](\S+)?['’]")
|
|
|
|
|
|
|
|
|
|
|
|
def notify(self, observer, groups):
|
|
|
|
def notify(self, observer, groups):
|
|
|
|
observer(groups[0])
|
|
|
|
observer(groups[0])
|
|
|
@ -591,9 +591,10 @@ class InstallingPackage(NotifierInformationBlock):
|
|
|
|
binary = None
|
|
|
|
binary = None
|
|
|
|
|
|
|
|
|
|
|
|
token = ">>> Installing "
|
|
|
|
token = ">>> Installing "
|
|
|
|
|
|
|
|
#TODO \033 - unicode symbol? probably gonna have to fix this
|
|
|
|
re_block = re.compile(
|
|
|
|
re_block = re.compile(
|
|
|
|
r"Installing \({c}(\d+){c} "
|
|
|
|
"Installing \({c}(\d+){c} "
|
|
|
|
r"of {c}(\d+){c}\) {c}([^\s\033]+){c}".format(c=_color_block))
|
|
|
|
"of {c}(\d+){c}\) {c}([^\s\033]+){c}".format(c=_color_block))
|
|
|
|
|
|
|
|
|
|
|
|
def notify(self, observer, groups):
|
|
|
|
def notify(self, observer, groups):
|
|
|
|
strpkg = str(EmergePackage(groups[2]))
|
|
|
|
strpkg = str(EmergePackage(groups[2]))
|
|
|
@ -612,8 +613,8 @@ class EmergeingErrorBlock(EmergeInformationBlock):
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
token = ["* ERROR: ", " * \033[39;49;00mERROR: "]
|
|
|
|
token = ["* ERROR: ", " * \033[39;49;00mERROR: "]
|
|
|
|
end_token = "Working directory:"
|
|
|
|
end_token = "Working directory:"
|
|
|
|
re_block = re.compile(r"ERROR: (\S*) failed \([^)]+\).*?"
|
|
|
|
re_block = re.compile("ERROR: (\S*) failed \([^)]+\).*?"
|
|
|
|
r"The complete build log is located at '([^']+)",
|
|
|
|
"The complete build log is located at '([^']+)",
|
|
|
|
re.DOTALL)
|
|
|
|
re.DOTALL)
|
|
|
|
package = ""
|
|
|
|
package = ""
|
|
|
|
|
|
|
|
|
|
|
@ -637,7 +638,7 @@ class RevdepPercentBlock(NotifierInformationBlock):
|
|
|
|
end_token = [re.compile("Assigning files to packages|"
|
|
|
|
end_token = [re.compile("Assigning files to packages|"
|
|
|
|
"All prepared. Starting rebuild")]
|
|
|
|
"All prepared. Starting rebuild")]
|
|
|
|
# re_block = re.compile("\[\s(\d+)%\s\]")
|
|
|
|
# re_block = re.compile("\[\s(\d+)%\s\]")
|
|
|
|
re_block = re.compile(r"\[\s(\d+)%\s\]")
|
|
|
|
re_block = re.compile("\[\s(\d+)%\s\]")
|
|
|
|
action = None
|
|
|
|
action = None
|
|
|
|
|
|
|
|
|
|
|
|
def notify(self, observer, groups):
|
|
|
|
def notify(self, observer, groups):
|
|
|
@ -733,7 +734,7 @@ class EmergeParser(InfoBlockInterface):
|
|
|
|
self.close()
|
|
|
|
self.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MtimeCheckvalue(object):
|
|
|
|
class MtimeCheckvalue():
|
|
|
|
def __init__(self, *fname):
|
|
|
|
def __init__(self, *fname):
|
|
|
|
self.fname = fname
|
|
|
|
self.fname = fname
|
|
|
|
|
|
|
|
|
|
|
@ -758,7 +759,7 @@ class Md5Checkvalue(MtimeCheckvalue):
|
|
|
|
return hashlib.md5(readFile(fn)).hexdigest()
|
|
|
|
return hashlib.md5(readFile(fn)).hexdigest()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GitCheckvalue(object):
|
|
|
|
class GitCheckvalue():
|
|
|
|
def __init__(self, git, rpath):
|
|
|
|
def __init__(self, git, rpath):
|
|
|
|
self.rpath = rpath
|
|
|
|
self.rpath = rpath
|
|
|
|
self.git = git
|
|
|
|
self.git = git
|
|
|
@ -769,7 +770,7 @@ class GitCheckvalue(object):
|
|
|
|
yield self.rpath, self.git.getCurrentCommit(self.rpath)
|
|
|
|
yield self.rpath, self.git.getCurrentCommit(self.rpath)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EmergeCache(object):
|
|
|
|
class EmergeCache():
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
Кэш пакетов
|
|
|
|
Кэш пакетов
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|