From fd63f7a36d383f7ad3bccf9e50d34cd60b1040e4 Mon Sep 17 00:00:00 2001 From: guinux Date: Sat, 26 Jan 2013 16:59:29 +0100 Subject: [PATCH] begin multiples provides handling --- pamac/transaction.py | 75 ++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/pamac/transaction.py b/pamac/transaction.py index e16f2af..cadc6b6 100755 --- a/pamac/transaction.py +++ b/pamac/transaction.py @@ -95,6 +95,7 @@ def check_conflicts(): installed_pkg_name = [] syncdbs_pkg_name = [] depends = [] + provides = {} warning = '' for pkgname in to_add: for repo in handle.get_syncdbs(): @@ -105,31 +106,28 @@ def check_conflicts(): for installed_pkg in handle.get_localdb().pkgcache: installed_pkg_name.append(installed_pkg.name) for target in to_check: - if target.depends: - for name in target.depends: - depends.append(name) - if target.replaces: - for name in target.replaces: - if name in installed_pkg_name: - if not name in to_remove: - to_remove.append(name) - if warning: - warning = warning+'\n' - warning = warning+name+' will be replaced by '+target.name - if target.conflicts: - for name in target.conflicts: - if name in to_add: - to_add.remove(name) - to_add.remove(target.name) + for name in target.depends: + depends.append(name) + for name in target.replaces: + if name in installed_pkg_name: + if not name in to_remove: + to_remove.append(name) if warning: warning = warning+'\n' - warning = warning+name+' conflicts with '+target.name+'\nNone of them will be installed' - if name in installed_pkg_name: - if not name in to_remove: - to_remove.append(name) - if warning: - warning = warning+'\n' - warning = warning+name+' conflicts with '+target.name + warning = warning+name+' will be replaced by '+target.name + for name in target.conflicts: + if name in to_add: + to_add.remove(name) + to_add.remove(target.name) + if warning: + warning = warning+'\n' + warning = warning+name+' conflicts with '+target.name+'\nNone of them will be installed' + if name in installed_pkg_name: + if not name in to_remove: + to_remove.append(name) + if warning: + warning = warning+'\n' + warning = warning+name+' conflicts with '+target.name for installed_pkg in handle.get_localdb().pkgcache: if installed_pkg.conflicts: for name in installed_pkg.conflicts: @@ -143,19 +141,28 @@ def check_conflicts(): depends.remove(installed_pkg.name) for repo in handle.get_syncdbs(): for pkg in repo.pkgcache: - if pkg.replaces: - for name in pkg.replaces: - if name == installed_pkg_name: - if not name in to_remove: - to_remove.append(name) - if warning: - warning = warning+'\n' - warning = warning+name+' will be replaced by '+pkg.name - if not pkg.name in to_add: - to_add.append(pkg.name) + for name in pkg.replaces: + if name in installed_pkg_name: + if not name in to_remove: + to_remove.append(name) + if warning: + warning = warning+'\n' + warning = warning+name+' will be replaced by '+pkg.name + if not pkg.name in to_add: + to_add.append(pkg.name) if pkg.name in depends: depends.remove(pkg.name) - print(depends) + if depends: + for repo in handle.get_syncdbs(): + for pkg in repo.pkgcache: + for depend in depends: + for name in pkg.provides: + if name == depend: + if not provides.__contains__(depend): + provides[depend] = [] + provides.get(depend).append(pkg.name) + if provides: + print(provides) if warning: WarningDialog.format_secondary_text(warning) response = WarningDialog.run()