From 5fcbef311503b6733a0767a41550be22bf9e1825 Mon Sep 17 00:00:00 2001 From: lxnay Date: Thu, 15 Jan 2009 17:31:06 +0000 Subject: [PATCH] Entropy/EquoInterface: - generate_dependency_tree: added support for PDEPENDs, which will be sorted correctly now, after the package itself Entropy/EntropyDatabaseInterface: - new method retrievePostDependencies, useful to retrieve PDEPENDs git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@2904 cd1c1023-2f26-0410-ae45-c471fc1f0318 --- libraries/entropy.py | 16 +++++++++++++--- libraries/entropyConstants.py | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/libraries/entropy.py b/libraries/entropy.py index 550b12a6d..4ceda15f2 100644 --- a/libraries/entropy.py +++ b/libraries/entropy.py @@ -2463,8 +2463,14 @@ class EquoInterface(TextInterface): myundeps = filter(my_dep_filter,matchdb.retrieveDependenciesList(m_idpackage)) if not empty_deps: myundeps = filter(my_dep_filter,get_unsatisfied_deps(myundeps, deep_deps, depcache = filter_unsat_cache)) - for x in myundeps: mybuffer.push((treedepth,x)) + # PDEPENDs support + if myundeps: + post_deps = [x for x in matchdb.retrievePostDependencies(m_idpackage) if x in myundeps] + myundeps = [x for x in myundeps if x not in post_deps] + for x in post_deps: mybuffer.push((-1,x)) # always after the package itself + + for x in myundeps: mybuffer.push((treedepth,x)) mydep = mybuffer.pop() if deps_not_found: @@ -4230,7 +4236,7 @@ class EquoInterface(TextInterface): for x in portage_metadata['PDEPEND'].split(): if x.startswith("!") or (x in ("(","||",")","")): continue - data['dependencies'][x] = 1 + data['dependencies'][x] = etpConst['spm']['pdepend_id'] data['conflicts'] = [x[1:] for x in portage_metadata['RDEPEND'].split()+portage_metadata['PDEPEND'].split() if x.startswith("!") and not x in ("(","||",")","")] if (kernelstuff) and (not kernelstuff_kernel): @@ -32655,7 +32661,11 @@ class EntropyDatabaseInterface: return self.fetchall2set(self.cursor.fetchall()) def retrieveDependenciesList(self, idpackage): - self.cursor.execute('SELECT dependenciesreference.dependency FROM dependencies,dependenciesreference WHERE dependencies.idpackage = (?) and dependencies.iddependency = dependenciesreference.iddependency UNION SELECT "!" || conflict FROM conflicts WHERE idpackage = (?)', (idpackage,idpackage,)) + self.cursor.execute('SELECT dependenciesreference.dependency FROM dependencies,dependenciesreference WHERE dependencies.idpackage = (?) AND dependencies.iddependency = dependenciesreference.iddependency UNION SELECT "!" || conflict FROM conflicts WHERE idpackage = (?)', (idpackage,idpackage,)) + return self.fetchall2set(self.cursor.fetchall()) + + def retrievePostDependencies(self, idpackage): + self.cursor.execute('SELECT dependenciesreference.dependency FROM dependencies,dependenciesreference WHERE dependencies.idpackage = (?) AND dependencies.iddependency = dependenciesreference.iddependency AND dependencies.type = (?)', (idpackage,etpConst['spm']['pdepend_id'],)) return self.fetchall2set(self.cursor.fetchall()) def retrieveDependencies(self, idpackage, extended = False, deptype = None): diff --git a/libraries/entropyConstants.py b/libraries/entropyConstants.py index c91e6f53e..f8f47fefe 100644 --- a/libraries/entropyConstants.py +++ b/libraries/entropyConstants.py @@ -621,7 +621,7 @@ def const_defaultSettings(rootdir): 'edbcounter': edbCOUNTER, 'filesystemdirs': ['/bin','/emul','/etc','/lib','/lib32','/lib64','/opt','/sbin','/usr','/var'], # directory of the filesystem 'filesystemdirsmask': [ - '/var/cache','/var/db','/var/empty','/var/log','/var/mail','/var/tmp','/var/www', '/usr/portage', '/usr/src', '/etc/skel', '/etc/ssh', '/etc/ssl', '/var/run', '/var/spool/cron', '/var/lib/init.d', '/lib/modules', '/etc/env.d', '/etc/gconf', '/etc/runlevels', '/lib/splash/cache', '/usr/share/mime', '/etc/portage', '/var/spool', '/var/lib', '/usr/lib/locale','/lib64/splash/cache' + '/var/cache','/var/db','/var/empty','/var/log','/var/mail','/var/tmp','/var/www', '/usr/portage', '/usr/src', '/etc/skel', '/etc/ssh', '/etc/ssl', '/var/run', '/var/spool/cron', '/var/lib/init.d', '/lib/modules', '/etc/env.d', '/etc/gconf', '/etc/runlevels', '/lib/splash/cache', '/usr/share/mime', '/etc/portage', '/var/spool', '/var/lib', '/usr/lib/locale','/lib64/splash/cache' ], 'libtest_blacklist': [], 'libtest_files_blacklist': [], @@ -655,6 +655,7 @@ def const_defaultSettings(rootdir): 'server_treeupdatescalled': set(), 'client_treeupdatescalled': set(), 'spm': { + 'pdepend_id': 1, 'ebuild_file_extension': "ebuild", 'ebuild_pkg_tag_var': "ENTROPY_PROJECT_TAG", 'global_make_conf': rootdir+"/etc/make.conf",