Entropy/EquoInterface:

- log portage.doebuild() messages to equo.log
- improve etpDatabase.retrieveMessages() speed by adding a sql index


git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@1722 cd1c1023-2f26-0410-ae45-c471fc1f0318
This commit is contained in:
lxnay
2008-04-13 23:41:42 +00:00
parent b54fd3bc98
commit 17069f0c60
3 changed files with 51 additions and 106 deletions
-1
View File
@@ -2,7 +2,6 @@ TODO list
- server-side: write a ncurses interface to manage entropy database + spm interface + GLSA
- split RDEPEND and PDEPEND (*)
- add i18n support
- log messages from portage doebuild() calls
- Community repositories
- implement notice board
- implement configuration files snapshot tool
+6 -1
View File
@@ -3381,6 +3381,7 @@ class etpDatabase:
self.createLicensedataIndex()
self.createLicensesIndex()
self.createConfigProtectReferenceIndex()
self.createMessagesIndex()
def createNeededIndex(self):
if self.indexing:
@@ -3388,6 +3389,10 @@ class etpDatabase:
self.cursor.execute('CREATE INDEX IF NOT EXISTS neededindex_idneeded ON needed ( idneeded )')
self.commitChanges()
def createMessagesIndex(self):
if self.indexing:
self.cursor.execute('CREATE INDEX IF NOT EXISTS messagesindex ON messages ( idpackage )')
def createUseflagsIndex(self):
if self.indexing:
self.cursor.execute('CREATE INDEX IF NOT EXISTS useflagsindex ON useflagsreference ( flagname )')
@@ -3554,7 +3559,7 @@ class etpDatabase:
self.cursor.execute('UPDATE baseinfo SET trigger = 0')
def createMessagesTable(self):
self.cursor.execute("CREATE TABLE messages ( idpackage INTEGER, message VARCHAR);")
self.cursor.execute("CREATE TABLE messages ( idpackage INTEGER, message VARCHAR );")
def createEclassesTable(self):
self.cursor.execute('DROP TABLE IF EXISTS eclasses;')
+45 -104
View File
@@ -55,10 +55,6 @@ class EquoInterface(TextInterface):
self.repoDbCache = {}
self.securityCache = {}
self.spmCache = {}
#self.stdout = fakeoutfile(sys.stdout.fileno())
#self.stderr = fakeoutfile(sys.stderr.fileno())
#self.stdout.connect_progress(self.updateProgress)
#self.stderr.connect_progress(self.updateProgress)
self.clientLog = LogFile(level = etpConst['equologlevel'],filename = etpConst['equologfile'], header = "[client]")
import dumpTools
@@ -4478,6 +4474,11 @@ class PackageInterface:
# we don't care if cleanupPackage fails since it's not critical
return 0
def logmessages_step(self):
for msg in self.infoDict['messages']:
self.Entropy.clientLog.write(">>> "+msg)
return 0
def messages_step(self):
self.error_on_not_prepared()
# get messages
@@ -4628,6 +4629,9 @@ class PackageInterface:
elif step == "showmessages":
rc = self.messages_step()
elif step == "logmessages":
rc = self.logmessages_step()
elif step == "cleanup":
self.xterm_title += ' Cleaning: '+self.infoDict['atom']
self.Entropy.setTitle(self.xterm_title)
@@ -4868,6 +4872,8 @@ class PackageInterface:
self.infoDict['steps'].append("postinstall")
if not etpConst['gentoo-compat']: # otherwise gentoo triggers will show that
self.infoDict['steps'].append("showmessages")
else:
self.infoDict['steps'].append("logmessages")
self.infoDict['steps'].append("cleanup")
self.infoDict['triggers']['install'] = dbconn.getTriggerInfo(idpackage)
@@ -8333,105 +8339,6 @@ class PackageMaskingParser:
self.__removeRepoCache(repoid = repoid)
self.__saveFileMtime(maskfile,mtimefile)
class fakeoutfile:
"""
A general purpose fake output file object.
"""
def __init__(self, fn):
self.fn = fn
self.updateProgress = None
self.text_written = []
def close(self):
pass
def flush(self):
self.close()
def fileno(self):
return self.fn
def isatty(self):
return False
def read(self, a):
return ''
def readline(self):
return ''
def readlines(self):
return []
def connect_progress(self, f):
self.updateProgress = f
def write(self, s):
os.write(self.fn,s)
self.text_written.append(s)
# cut at 1024 entries
if len(self.text_written) > 1024:
self.text_written = self.text_written[-1024:]
if self.updateProgress:
self.updateProgress(s)
def write_line(self, s):
self.write(s)
def writelines(self, l):
for s in l:
self.write(s)
def seek(self, a):
raise IOError, (29, 'Illegal seek')
def tell(self):
raise IOError, (29, 'Illegal seek')
def truncate(self):
self.tell()
class fakeinfile:
"""
A general purpose fake input file object.
"""
def __init__(self, fn):
self.fn = fn
def close(self):
pass
flush = close
def fileno(self):
return self.fn
def isatty(self):
return False
def read(self, a):
return self.readline()
def readline(self):
return os.read(self.fn,2048)
def readlines(self): return []
def write(self, s):
return None
def writelines(self, l):
return None
def seek(self, a):
raise IOError, (29, 'Illegal seek')
def tell(self):
raise IOError, (29, 'Illegal seek')
truncate = tell
class Callable:
def __init__(self, anycallable):
self.__call__ = anycallable
@@ -10100,6 +10007,33 @@ class LogFile:
except:
pass
def flush(self):
self.logFile.flush()
def fileno(self):
return self.getFile()
def isatty(self):
return False
def read(self, a):
return ''
def readline(self):
return ''
def readlines(self):
return []
def seek(self, a):
return self.logFile.seek(a)
def tell(self):
return self.logFile.tell()
def truncate(self):
return self.logFile.truncate()
def open (self, file = None):
if type(file) == type("hello"):
try:
@@ -10112,7 +10046,7 @@ class LogFile:
self.logFile = sys.stderr
def getFile (self):
return self.logFile.fileno ()
return self.logFile.fileno()
def __call__(self, format, *args):
self.handler (format % args)
@@ -10128,6 +10062,13 @@ class LogFile:
if self.level >= level and not etpUi['nolog']:
self.handler(self.getTimeDateHeader()+messagetype+' '+self.header+' '+message)
def write(self, s):
self.handler(s)
def writelines(self, lst):
for s in lst:
self.write(s)
def getTimeDateHeader(self):
return time.strftime('[%X %x %Z] ')