From 9eb714ea374b04cc8beed223106f1c9615accc60 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Wed, 9 Jul 2008 21:20:04 +0200 Subject: Added set selection in preferences --- portato/gui/windows/preference.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'portato/gui/windows') diff --git a/portato/gui/windows/preference.py b/portato/gui/windows/preference.py index d35666d..ae95cc5 100644 --- a/portato/gui/windows/preference.py +++ b/portato/gui/windows/preference.py @@ -14,6 +14,8 @@ from __future__ import absolute_import import gtk +from ...backend import system + from .basic import AbstractDialog from ..dialogs import io_ex_dialog from ...helper import debug @@ -106,6 +108,12 @@ class PreferenceWindow (AbstractDialog): self.tree.get_widget(edit).\ set_text(self.cfg.get(val)) + # the set list + self.setList = self.tree.get_widget("setList") + if system.has_set_support(): + self.fill_setlist() + self.tree.get_widget("setFrame").show() + # the console font button self.consoleFontBtn = self.tree.get_widget("consoleFontBtn") self.consoleFontBtn.set_font_name(self.cfg.get("consolefont", section = "GUI")) @@ -144,6 +152,8 @@ class PreferenceWindow (AbstractDialog): else: self.cfg.set(val,self.tree.get_widget(edit).get_text()) + self.cfg.set("updatesets", ", ".join(sorted(name for enabled, markup, descr, name in self.setList.get_model() if enabled))) + font = self.consoleFontBtn.get_font_name() self.cfg.set("consolefont", font, section = "GUI") self.console_fn(font) @@ -162,6 +172,29 @@ class PreferenceWindow (AbstractDialog): self.catmodel_fn() + def fill_setlist (self): + store = gtk.ListStore(bool, str, str, str) + + enabled = [x.strip() for x in self.cfg.get("updatesets").split(",")] + + for set, descr in system.get_sets(): + store.append([set in enabled, "%s" % set, descr, set]) + + tCell = gtk.CellRendererToggle() + tCell.set_property("activatable", True) + tCell.connect("toggled", self.cb_check_toggled) # emulate the normal toggle behavior ... + + sCell = gtk.CellRendererText() + + col = gtk.TreeViewColumn(_("Package Set"), tCell, active = 0) + col.pack_start(sCell) + col.add_attribute(sCell, "markup", 1) + self.setList.append_column(col) + + self.setList.append_column(gtk.TreeViewColumn(_("Description"), sCell, text = 2)) + + self.setList.set_model(store) + def cb_ok_clicked(self, button): """Saves, writes to config-file and closes the window.""" self._save() @@ -175,3 +208,9 @@ class PreferenceWindow (AbstractDialog): def cb_cancel_clicked (self, button): """Just closes - w/o saving.""" self.window.destroy() + + def cb_check_toggled (self, cell, path): + # for whatever reason we have to define normal toggle behavior explicitly + store = self.setList.get_model() + store[path][0] = not store[path][0] + return True -- cgit v1.2.3-54-g00ecf From 09f790063e70515fbcb828676f639740b1c67885 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Wed, 9 Jul 2008 21:49:33 +0200 Subject: Make update_world set compatible --- portato/backend/portage/system.py | 14 +++++++++----- portato/backend/portage/system_22.py | 7 +++++-- portato/gui/windows/main.py | 8 +++++++- portato/gui/windows/preference.py | 2 +- 4 files changed, 22 insertions(+), 9 deletions(-) (limited to 'portato/gui/windows') diff --git a/portato/backend/portage/system.py b/portato/backend/portage/system.py index 229bcc9..246f20c 100644 --- a/portato/backend/portage/system.py +++ b/portato/backend/portage/system.py @@ -20,6 +20,7 @@ except ImportError: import portage_dep from collections import defaultdict +import itertools as itt from . import VERSION from .package import PortagePackage @@ -45,8 +46,11 @@ class PortageSystem (SystemInterface): def has_set_support (self): return False - def get_sets (self): - return (("world", "The world set."), ("system", "The system set.")) + def get_sets (self, description = False): + if description: + return (("world", "The world set."), ("system", "The system set.")) + else: + return ("world", "system") def get_version (self): return "Portage %s" % portage.VERSION @@ -342,9 +346,9 @@ class PortageSystem (SystemInterface): packages = [x for x in packages if x is not None and not x.is_installed()] return packages - def update_world (self, newuse = False, deep = False): - packages = self.find_packages(pkgSet="world", with_version = False) - packages.extend(self.find_packages(pkgSet = "system", with_version = False)) + def update_world (self, sets = ("world", "system"), newuse = False, deep = False): + packages = set() + map(packages.add, itt.chain(*(self.find_packages(pkgSet = s, with_version = False) for s in sets))) states = [(["RDEPEND", "PDEPEND"], True)] if self.with_bdeps(): diff --git a/portato/backend/portage/system_22.py b/portato/backend/portage/system_22.py index 88d968b..289849c 100644 --- a/portato/backend/portage/system_22.py +++ b/portato/backend/portage/system_22.py @@ -33,8 +33,11 @@ class PortageSystem_22 (PortageSystem): def has_set_support (self): return True - def get_sets (self): - return ((name, set.description) for name, set in self.settings.setsconfig.getSets().iteritems()) + def get_sets (self, description = False): + if description: + return ((name, set.description) for name, set in self.settings.setsconfig.getSets().iteritems()) + else: + return tuple(self.settings.setsconfig.getSets()) def new_package (self, cpv): return PortagePackage_22(cpv) diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index 364810d..8f456d9 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -1422,7 +1422,13 @@ class MainWindow (Window): watch = gtk.gdk.Cursor(gtk.gdk.WATCH) self.window.window.set_cursor(watch) try: - updating = system.update_world(newuse = self.cfg.get_boolean("newuse"), deep = self.cfg.get_boolean("deep")) + sets = ("world", "system") # default + if system.has_set_support(): + confsets = [x.strip() for x in self.cfg.get("updatesets").split(",")] + syssets = system.get_sets() + sets = [s for s in confsets if s in syssets] + + updating = system.update_world(sets = sets, newuse = self.cfg.get_boolean("newuse"), deep = self.cfg.get_boolean("deep")) debug("updating list: %s --> length: %s", [(x.get_cpv(), y.get_cpv()) for x,y in updating], len(updating)) gobject.idle_add(cb_idle_append, updating) finally: diff --git a/portato/gui/windows/preference.py b/portato/gui/windows/preference.py index ae95cc5..8aabbba 100644 --- a/portato/gui/windows/preference.py +++ b/portato/gui/windows/preference.py @@ -177,7 +177,7 @@ class PreferenceWindow (AbstractDialog): enabled = [x.strip() for x in self.cfg.get("updatesets").split(",")] - for set, descr in system.get_sets(): + for set, descr in system.get_sets(description = True): store.append([set in enabled, "%s" % set, descr, set]) tCell = gtk.CellRendererToggle() -- cgit v1.2.3-54-g00ecf From 01fa05da0d80aab1aa1526a5302b3a798d0f0179 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Wed, 9 Jul 2008 22:00:49 +0200 Subject: Renamed generic package sets --- portato/backend/portage/package.py | 2 +- portato/backend/portage/system.py | 30 +++++++++++++++--------------- portato/backend/system_interface.py | 7 ++++++- portato/gui/queue.py | 4 ++-- portato/gui/utils.py | 2 +- portato/gui/windows/main.py | 2 +- 6 files changed, 26 insertions(+), 21 deletions(-) (limited to 'portato/gui/windows') diff --git a/portato/backend/portage/package.py b/portato/backend/portage/package.py index 78125ee..351b7e0 100644 --- a/portato/backend/portage/package.py +++ b/portato/backend/portage/package.py @@ -226,7 +226,7 @@ class PortagePackage (Package): for dep in deps: if dep[0] == '!': # blocking sth - blocked = system.find_packages(dep, "installed") + blocked = system.find_packages(dep, system.SET_INSTALLED) if len(blocked) == 1: # only exact one match allowed to be harmless if blocked[0].get_slot_cp() == self.get_slot_cp(): # blocks in the same slot are harmless continue diff --git a/portato/backend/portage/system.py b/portato/backend/portage/system.py index 246f20c..edbb4f0 100644 --- a/portato/backend/portage/system.py +++ b/portato/backend/portage/system.py @@ -174,16 +174,16 @@ class PortageSystem (SystemInterface): t = [] if not only_installed: - pkgSet = "tree" + pkgSet = self.SET_TREE else: - pkgSet = "installed" + pkgSet = self.SET_INSTALLED t = self.find_packages(search_key, pkgSet = pkgSet, masked = masked, with_version = True, only_cpv = True) if VERSION >= (2,1,5): - t += [pkg.get_cpv() for pkg in self.find_packages(search_key, "installed") if not (pkg.is_testing(True) or pkg.is_masked())] + t += [pkg.get_cpv() for pkg in self.find_packages(search_key, self.SET_INSTALLED) if not (pkg.is_testing(True) or pkg.is_masked())] else: - t = self.find_packages(search_key, "installed", only_cpv=True) + t = self.find_packages(search_key, self.SET_INSTALLED, only_cpv=True) if t: t = unique_array(t) @@ -191,7 +191,7 @@ class PortageSystem (SystemInterface): return None - def find_packages (self, key = "", pkgSet = "all", masked = False, with_version = True, only_cpv = False): + def find_packages (self, key = "", pkgSet = SystemInterface.SET_ALL, masked = False, with_version = True, only_cpv = False): if key is None: key = "" is_regexp = key == "" or ("*" in key and key[0] not in ("*","=","<",">","~","!")) @@ -261,12 +261,12 @@ class PortageSystem (SystemInterface): yield self.find_best_match(cp, only_cpv = True) funcmap = { - "all" : all, - "installed" : installed, - "uninstalled" : uninstalled, + self.SET_ALL : all, + self.SET_INSTALLED : installed, + self.SET_UNINSTALLED : uninstalled, + self.SET_TREE : tree, "world" : world, - "system" : system, - "tree" : tree + "system" : system } pkgSet = pkgSet.lower() @@ -316,7 +316,7 @@ class PortageSystem (SystemInterface): new_packages = [] for p in packages: - inst = self.find_packages(p, "installed") + inst = self.find_packages(p, self.SET_INSTALLED) best_p = self.find_best_match(p) if best_p is None: @@ -342,7 +342,7 @@ class PortageSystem (SystemInterface): return new_packages def get_updated_packages (self): - packages = self.get_new_packages(self.find_packages(pkgSet = "installed", with_version = False)) + packages = self.get_new_packages(self.find_packages(pkgSet = self.SET_INSTALLED, with_version = False)) packages = [x for x in packages if x is not None and not x.is_installed()] return packages @@ -374,11 +374,11 @@ class PortageSystem (SystemInterface): tempDeep = False if not p.is_installed(): - oldList = self.find_packages(p.get_slot_cp(), "installed") + oldList = self.find_packages(p.get_slot_cp(), self.SET_INSTALLED) if oldList: old = oldList[0] # we should only have one package here - else it is a bug else: - oldList = self.sort_package_list(self.find_packages(p.get_cp(), "installed")) + oldList = self.sort_package_list(self.find_packages(p.get_cp(), self.SET_INSTALLED)) if not oldList: info(_("Found a not installed dependency: %s.") % p.get_cpv()) oldList = [p] @@ -428,7 +428,7 @@ class PortageSystem (SystemInterface): if not pkg: continue if not pkg.is_installed() and (pkg.is_masked() or pkg.is_testing(True)): # check to not update unnecessairily cont = False - for inst in self.find_packages(pkg.get_cp(), "installed", only_cpv = True): + for inst in self.find_packages(pkg.get_cp(), self.SET_INSTALLED, only_cpv = True): if self.cpv_matches(inst, i): debug("The installed %s matches %s. Discarding upgrade to masked version.", inst, i) cont = True diff --git a/portato/backend/system_interface.py b/portato/backend/system_interface.py index c118f6d..1cb0ed1 100644 --- a/portato/backend/system_interface.py +++ b/portato/backend/system_interface.py @@ -11,6 +11,11 @@ # Written by René 'Necoro' Neumann class SystemInterface (object): + + SET_ALL = "__portato_all__" + SET_TREE = "__portato_tree__" + SET_INSTALLED = "__portato_installed__" + SET_UNINSTALLED = "__portato_uninstalled__" def has_set_support (self): """Signals, whether this backend supports sets. @@ -90,7 +95,7 @@ class SystemInterface (object): raise NotImplementedError - def find_packages (self, key, pkgSet = "all", masked = False, with_version = True, only_cpv = False): + def find_packages (self, key, pkgSet = SET_ALL, masked = False, with_version = True, only_cpv = False): """This returns a list of packages matching the key. As key, it is allowed to use basic regexps (".*") and the normal package specs. But not a combination of them. diff --git a/portato/gui/queue.py b/portato/gui/queue.py index ce7e620..cb5b334 100644 --- a/portato/gui/queue.py +++ b/portato/gui/queue.py @@ -143,7 +143,7 @@ class EmergeQueue: try: pkg = self._get_pkg_from_cpv(cpv, unmask) if not pkg.is_installed(): - old = system.find_packages(pkg.get_slot_cp(), "installed") + old = system.find_packages(pkg.get_slot_cp(), system.SET_INSTALLED) if old: old = old[0] # assume we have only one there cmp = pkg.compare_version(old) @@ -272,7 +272,7 @@ class EmergeQueue: # get the blocks that block an installed package inst = [] for block in self.blocks[type]: - pkgs = system.find_packages(block, "installed") + pkgs = system.find_packages(block, system.SET_INSTALLED) if pkgs: inst.append((pkgs, block)) diff --git a/portato/gui/utils.py b/portato/gui/utils.py index 035d1c6..a4e1e6e 100644 --- a/portato/gui/utils.py +++ b/portato/gui/utils.py @@ -185,7 +185,7 @@ class Database (object): # get the lists packages = system.find_packages(category, with_version = False) - installed = system.find_packages(category, "installed", with_version = False) + installed = system.find_packages(category, system.SET_INSTALLED, with_version = False) # cycle through packages for p in packages: diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index 8f456d9..188a5e1 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -1315,7 +1315,7 @@ class MainWindow (Window): if pkg.is_installed(): installed = set(pkg.get_iuse_flags()).intersection(pkg.get_installed_use_flags()) else: - inst = system.find_packages(pkg.get_slot_cp(), "installed") + inst = system.find_packages(pkg.get_slot_cp(), system.SET_INSTALLED) if inst: installed = set(inst[0].get_iuse_flags()).intersection(inst[0].get_installed_use_flags()) else: -- cgit v1.2.3-54-g00ecf