Login
Log in using an SSO provider:
Fedora Account System
Red Hat Associate
Red Hat Customer
Login using a Red Hat Bugzilla account
Forgot Password
Create an Account
Red Hat Bugzilla – Attachment 1045877 Details for
Bug 1156540
[rfe] use dnf instead of yum
Home
New
Search
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh90 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
[?]
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
use dnf instead of yum
dnf.patch (text/plain), 28.96 KB, created by
Michael Mráka
on 2015-07-03 15:48:08 UTC
(
hide
)
Description:
use dnf instead of yum
Filename:
MIME Type:
Creator:
Michael Mráka
Created:
2015-07-03 15:48:08 UTC
Size:
28.96 KB
patch
obsolete
>diff --git a/src/GroupSelector.py b/src/GroupSelector.py >old mode 100644 >new mode 100755 >index c7b8003..b2206be >--- a/src/GroupSelector.py >+++ b/src/GroupSelector.py >@@ -1,4 +1,4 @@ >-# Copyright 2005-2007 Red Hat, Inc. >+# Copyright 2005-2015 Red Hat, Inc. > # > # Jeremy Katz <katzj@redhat.com> > # >@@ -24,13 +24,10 @@ import gtk.glade > import gtk.gdk as gdk > import gobject > >-import yum >-import yum.Errors >-try: >- import repomd.mdErrors as mdErrors >-except ImportError: # yum 2.9.x >- mdErrors = yum.Errors >-from yum.constants import * >+import dnf >+import dnf.exceptions >+import hawkey >+import libcomps > from compssort import * > > I18N_DOMAIN="system-config-kickstart" >@@ -71,7 +68,7 @@ def sanitizeString(s, translate = True): > > # given a package object, spit out a string reasonable for the list widgets > def listEntryString(po): >- desc = po.returnSimple('summary') or '' >+ desc = po.summary or '' > pkgStr = "%s-%s-%s.%s" % (po.name, po.version, po.release, po.arch) > desc = "<b>%s</b> - %s" %(pkgStr, sanitizeString(desc)) > return desc >@@ -90,47 +87,15 @@ t = gettext.translation(I18N_DOMAIN, "/usr/share/locale", fallback = True) > _ = t.lgettext > > >-def _deselectPackage(ayum, group, pkg): >- grpid = group.groupid >- try: >- pkgs = ayum.pkgSack.returnNewestByName(pkg) >- except mdErrors.PackageSackError: >- log = logging.getLogger("yum.verbose") >- log.debug("no such package %s from group %s" % (pkg, grpid)) >- if pkgs: >- pkgs = ayum.bestPackagesFromList(pkgs) >- for po in pkgs: >- txmbrs = ayum.tsInfo.getMembers(pkgtup = po.pkgtup) >- for txmbr in txmbrs: >- try: >- txmbr.groups.remove(grpid) >- except ValueError: >- log = logging.getLogger("yum.verbose") >- log.debug("package %s was not marked in group %s" %(po, grpid)) >- if len(txmbr.groups) == 0: >- ayum.tsInfo.remove(po.pkgtup) >- >-def _selectPackage(ayum, group, pkg): >- grpid = group.groupid >- try: >- txmbrs = ayum.install(name = pkg) >- except yum.Errors.InstallError as e: >- log = logging.getLogger("yum.verbose") >- log.info("No package named %s available to be installed: %s" %(pkg, e)) >- else: >- map(lambda x: x.groups.append(grpid), txmbrs) >- >-def _catHasGroupWithPackages(cat, ayum): >- grps = map(lambda x: ayum.comps.return_group(x), >- filter(lambda x: ayum.comps.has_group(x), cat.groups)) >- for g in grps: >- if ayum._groupHasPackages(g): >+def _catHasGroupWithPackages(cat, provider): >+ for g in cat.groups: >+ if provider._groupHasPackages(g.id): > return True > return False > > class OptionalPackageSelector: >- def __init__(self, yumobj, group, parent = None, getgladefunc = None): >- self.ayum = yumobj >+ def __init__(self, provider, group, parent = None, getgladefunc = None): >+ self.provider = provider > self.group = group > > if getgladefunc: >@@ -145,7 +110,7 @@ class OptionalPackageSelector: > if parent: > self.window.set_transient_for(parent) > self.window.set_title(_("Packages in %s") % >- xmltrans(group.name, group.translated_name)) >+ group.ui_name) > self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT) > self.window.set_size_request(600, 400) > self._createStore() >@@ -190,49 +155,26 @@ class OptionalPackageSelector: > else: > i = self.pkgstore.get_iter(path) > sel = self.pkgstore.get_value(i, 0) >- pkg = self.pkgstore.get_value(i, 2).returnSimple('name') >- if sel and not self.ayum.simpleDBInstalled(name = pkg): >- _deselectPackage(self.ayum, self.group, pkg) >- elif sel: >- self.ayum.remove(name = pkg) >- elif self.ayum.simpleDBInstalled(name = pkg): >- txmbrs = self.ayum.tsInfo.matchNaevr(name = pkg) >- for tx in txmbrs: >- if tx.output_state == TS_ERASE: >- self.ayum.tsInfo.remove(tx.pkgtup) >+ pkg = self.pkgstore.get_value(i, 2).name >+ if sel: >+ self.provider.deselectPackage(pkg) > else: >- _selectPackage(self.ayum, self.group, pkg) >+ self.provider.selectPackage(pkg) > self.pkgstore.set_value(i, 0, not sel) >- >- >- def __getPackageObject(self, pkgname): >- try: >- pkgs = self.ayum.pkgSack.returnNewestByName(pkgname) >- except yum.Errors.YumBaseError: >- return None >- >- if not pkgs: >- return None >- >- pkgs = self.ayum.bestPackagesFromList(pkgs) >- if not pkgs: >- return None >- >- return pkgs[0] > > def _populate(self): >- pkgs = self.group.default_packages.keys() + \ >- self.group.optional_packages.keys() >+ pkgs = self.group.default_packages + \ >+ self.group.optional_packages > for pkg in pkgs: >- po = self.__getPackageObject(pkg) >+ po = dnf.util.first(self.provider.query().latest().filter(name=pkg.name)) > if not po: > continue > > # Don't display obsolete packages in the UI >- if self.ayum.up.checkForObsolete([po.pkgtup]).has_key(po.pkgtup): >+ if self.provider.query().filter(obsoletes=[po]).run(): > continue > >- self.pkgstore.append([self.ayum.isPackageInstalled(pkg), listEntryString(po), po]) >+ self.pkgstore.append([self.provider.isPackageInstalled(pkg.name), listEntryString(po), po]) > > def run(self): > self.window.show_all() >@@ -246,8 +188,8 @@ class OptionalPackageSelector: > # * isPackageInstalled(p): is there a package named p installed or selected > # * isGroupInstalled(grp): is there a group grp installed or selected > class GroupSelector: >- def __init__(self, yumobj, getgladefunc = None, framefunc = None): >- self.ayum = yumobj >+ def __init__(self, provider, getgladefunc = None, framefunc = None): >+ self.provider = provider > > self.getgladefunc = getgladefunc > self.framefunc = framefunc >@@ -355,21 +297,20 @@ class GroupSelector: > > # fall back to the category pixbuf > fbpix = None >- fn = "/usr/share/pixmaps/comps/%s.png" %(cat.categoryid,) >+ fn = "/usr/share/pixmaps/comps/%s.png" %(cat.id,) > if os.access(fn, os.R_OK): > fbpix = self._get_pix(fn) > self._populateGroups(cat.groups, fbpix) > > def _populateGroups(self, groups, defaultpix = None): >- grps = map(lambda x: self.ayum.comps.return_group(x), >- filter(lambda x: self.ayum.comps.has_group(x), groups)) >+ grps = [g for g in groups if g is not None] > grps.sort(ui_comps_sort) > for grp in grps: >- if not self.ayum._groupHasPackages(grp): >+ if not self.provider._groupHasPackages(grp.id): > continue >- s = "<span size=\"large\" weight=\"bold\">%s</span>" % xmltrans(grp.name, grp.translated_name) >+ s = "<span size=\"large\" weight=\"bold\">%s</span>" % grp.ui_name > >- fn = "/usr/share/pixmaps/comps/%s.png" % grp.groupid >+ fn = "/usr/share/pixmaps/comps/%s.png" % grp.id > if os.access(fn, os.R_OK): > pix = self._get_pix(fn) > elif defaultpix: >@@ -377,7 +318,8 @@ class GroupSelector: > else: > pix = None > self.groupstore.append(None, >- [self.ayum.isGroupInstalled(grp),s,grp,pix]) >+ [self.provider.isGroupInstalled(grp.id), s, >+ self.provider.groups[grp.id], pix]) > > tree = self.xml.get_widget("groupList") > gobject.idle_add(lambda x: x.flags() & gtk.REALIZED and x.scroll_to_point(0, 0), tree) >@@ -406,26 +348,26 @@ class GroupSelector: > if grp is None: > return > >- if grp.description: >- txt = xmltrans(grp.description, grp.translated_description) >+ if grp.ui_description: >+ txt = grp.ui_description > else: >- txt = xmltrans(grp.name, grp.translated_name) >+ txt = grp.ui_name > > inst = 0 > cnt = 0 >- pkgs = grp.default_packages.keys() + grp.optional_packages.keys() >+ pkgs = grp.default_packages + grp.optional_packages > for p in pkgs: >- if self.ayum.isPackageInstalled(p): >+ if self.provider.isPackageInstalled(p.name): > cnt += 1 > inst += 1 >- elif self.ayum.pkgSack.searchNevra(name=p): >+ elif self.provider.query().filter(name=p.name).run(): > cnt += 1 > else: > log = logging.getLogger("yum.verbose") >- log.debug("no such package %s for %s" %(p, grp.groupid)) >+ log.debug("no such package %s for %s" %(p, grp.id)) > > b.set_text(txt) >- if cnt == 0 or not self.ayum.isGroupInstalled(grp): >+ if cnt == 0 or not self.provider.isGroupInstalled(grp.id): > self.xml.get_widget("detailsButton").set_sensitive(False) > self.xml.get_widget("optionalLabel").set_text("") > else: >@@ -448,9 +390,9 @@ class GroupSelector: > self.vbox.window.set_cursor(gdk.Cursor(gdk.WATCH)) > > if sel: >- self.ayum.selectGroup(grp.groupid) >+ self.provider.selectGroup(grp.id) > else: >- self.ayum.deselectGroup(grp.groupid) >+ self.provider.deselectGroup(grp.id) > # FIXME: this doesn't mark installed packages for removal. > # we probably want that behavior with s-c-p, but not anaconda > >@@ -461,12 +403,12 @@ class GroupSelector: > > def populateCategories(self): > self.catstore.clear() >- cats = self.ayum.comps.categories >+ cats = self.provider.categories.values() > cats.sort(ui_comps_sort) > for cat in cats: >- if not _catHasGroupWithPackages(cat, self.ayum): >+ if not _catHasGroupWithPackages(cat, self.provider): > continue >- s = "<span size=\"large\" weight=\"bold\">%s</span>" % xmltrans(cat.name, cat.translated_name) >+ s = "<span size=\"large\" weight=\"bold\">%s</span>" % cat.ui_name > self.catstore.append(None, [s, cat]) > > # select the first category >@@ -480,29 +422,28 @@ class GroupSelector: > # a category yet are supposed to be user-visible somehow. > # conceivably should be handled by yum > grps = {} >- for g in self.ayum.comps.groups: >- if self.ayum._groupHasPackages(g): >- grps[g.groupid] = g >+ for g in self.provider.groups.values(): >+ if self.provider._groupHasPackages(g.id): >+ grps[g.id] = g > >- for cat in self.ayum.comps.categories: >+ for cat in self.provider.categories.values(): > for g in cat.groups: >- if grps.has_key(g): >- del grps[g] >+ if g and grps.has_key(g.id): >+ del grps[g.id] > > if len(grps.keys()) == 0: > return >- c = yum.comps.Category() >- c.name = _("Uncategorized") >- c._groups = grps >- c.categoryid = "uncategorized" > >- self.ayum.comps._categories[c.categoryid] = c >+ lc = libcomps.Category("uncategorized", _("Uncategorized"), "", 9999) >+ for gid in grps.keys(): >+ lc.group_ids.append(gid) >+ c = dnf.comps.Category(lc, dnf.comps._Langs(), self.provider.base.comps.group_by_id) >+ self.provider.categories[c.id] = c > > def doRefresh(self): >- if len(self.ayum.comps.categories) == 0: >+ if len(self.provider.categories) == 0: > self.xml.get_widget("categorySW").hide() >- self._populateGroups(map(lambda x: x.groupid, >- self.ayum.comps.groups)) >+ self._populateGroups(self.provider.groups.values()) > else: > self._setupCatchallCategory() > self.populateCategories() >@@ -524,7 +465,7 @@ class GroupSelector: > pwin = self.vbox.get_parent() # hack to find the parent window... > while not isinstance(pwin, gtk.Window): > pwin = pwin.get_parent() >- d = OptionalPackageSelector(self.ayum, group, pwin, self.getgladefunc) >+ d = OptionalPackageSelector(self.provider, group, pwin, self.getgladefunc) > if self.framefunc: > self.framefunc(d.window) > rc = d.run() >@@ -562,20 +503,11 @@ class GroupSelector: > grp = model.get_value(i, 2) > > # ensure the group is selected >- self.ayum.selectGroup(grp.groupid) >+ self.provider.selectGroup(grp.id) > model.set_value(i, 0, True) > >- for pkg in grp.default_packages.keys() + \ >- grp.optional_packages.keys(): >- if self.ayum.isPackageInstalled(pkg): >- continue >- elif self.ayum.simpleDBInstalled(name = pkg): >- txmbrs = self.ayum.tsInfo.matchNaevr(name = pkg) >- for tx in txmbrs: >- if tx.output_state == TS_ERASE: >- self.ayum.tsInfo.remove(tx.pkgtup) >- else: >- _selectPackage(self.ayum, grp, pkg) >+ for pkg in grp.default_packages + grp.optional_packages: >+ self.provider.selectPackage(pkg.name) > > if len(paths) == 1: > self.__setGroupDescription(grp) >@@ -591,14 +523,10 @@ class GroupSelector: > i = model.get_iter(p) > grp = model.get_value(i, 2) > >- for pkg in grp.default_packages.keys() + \ >- grp.optional_packages.keys(): >- if not self.ayum.isPackageInstalled(pkg): >- continue >- elif self.ayum.simpleDBInstalled(name=pkg): >- self.ayum.remove(name=pkg) >- else: >- _deselectPackage(self.ayum, grp, pkg) >+ for pkg in grp.default_packages + \ >+ grp.optional_packages: >+ if pkg.name in self.provider.packages: >+ self.provider.deselectPackage(pkg) > if len(paths) == 1: > self.__setGroupDescription(grp) > >diff --git a/src/compssort.py b/src/compssort.py >index c9be4e1..9b8456f 100644 >--- a/src/compssort.py >+++ b/src/compssort.py >@@ -60,10 +60,9 @@ def ui_comps_sort(one, two): > return 1 > elif one.display_order < two.display_order: > return -1 >- elif xmltrans(one.name, one.translated_name) > \ >- xmltrans(two.name, two.translated_name): >- return 1 >- elif xmltrans(one.name, one.translated_name) < \ >- xmltrans(two.name, two.translated_name): >- return -1 >+ else: >+ if one.ui_name > two.ui_name: >+ return 1 >+ elif one.ui_name < two.ui_name: >+ return -1 > return 0 >diff --git a/src/packages.py b/src/packages.py >index bb25a9c..6b04963 100644 >--- a/src/packages.py >+++ b/src/packages.py >@@ -3,7 +3,7 @@ > # Brent Fox <bfox@redhat.com> > # Tammy Fox <tfox@redhat.com> > # >-# Copyright (C) 2000-2008 Red Hat, Inc. >+# Copyright (C) 2000-2015 Red Hat, Inc. > # > # This copyrighted material is made available to anyone wishing to use, modify, > # copy, or redistribute it subject to the terms and conditions of the GNU >@@ -28,11 +28,8 @@ import os > import shutil > import string > import sys >-import yum >-import yum.Errors >-from yum.constants import * >-from yum.misc import getCacheDir > import GroupSelector >+import dnf > > from pykickstart.parser import Group > >@@ -43,152 +40,108 @@ import gettext > gtk.glade.bindtextdomain("system-config-kickstart") > _ = lambda x: gettext.ldgettext("system-config-kickstart", x) > >-class sckYumBase(yum.YumBase): >- def log(self, value, msg): >- pass >+class dnfProvider(): >+ def __init__(self, callback=None): >+ self.base = dnf.Base() >+ if callback: >+ callback.log = self.log >+ self.base.repos.callback = callback > >- def errorlog(self, value, msg): >- pass >+ self.base.read_all_repos() >+ # If we're on a release, we want to try the base repo first. Otherwise, >+ # try development. If neither of those works, we have a problem. >+ if "fedora" in [repo.id for repo in self.base.repos.iter_enabled()]: >+ repoorder = ["fedora", "rawhide", "development"] >+ else: >+ repoorder = ["rawhide", "development", "fedora"] > >- def filelog(self, value, msg): >- pass >+ self.base.repos.get_matching("*").disable() >+ if callback: callback.next_task() > >- def isPackageInstalled(self, name=None, epoch=None, version=None, >- release=None, arch=None, po=None): >- if po is not None: >- (name, epoch, version, release, arch) = po.returnNevraTuple() >+ self.packagesEnabled = False >+ for repo in repoorder: >+ try: >+ repoobj = self.base.repos.get(repo, None) >+ if repoobj: >+ repoobj.enable() >+ self.packagesEnabled = True >+ break >+ except dnf.exceptions.Error: >+ pass > >- installed = False >+ if not self.packagesEnabled: >+ return > >- lst = self.tsInfo.matchNaevr(name = name, epoch = epoch, >- ver = version, rel = release, >- arch = arch) >- for txmbr in lst: >- if txmbr.output_state in TS_INSTALL_STATES: >- return True >- if installed and len(lst) > 0: >- # if we get here, then it was installed, but it's in the tsInfo >- # for an erase or obsoleted --> not going to be installed at end >- return False >- return installed >+ if callback: callback.next_task() >+ self.base.fill_sack() >+ if callback: callback.next_task() >+ self.base.read_comps() >+ self.groups = dict([(g.id, g) for g in self.base.comps.groups]) >+ self.categories = dict([(c.id, c) for c in self.base.comps.categories]) > >- def isGroupInstalled(self, grp): >- return grp.selected >+ inst_query = dnf.sack.rpmdb_sack(self.base).query().installed() >+ self.installed = set(p.name for p in inst_query) >+ self.packages = set(p.name for p in inst_query) >+ for g in self.groups.values(): >+ self.packages.update(p.name for p in g.default_packages) >+ if callback: callback.next_task(next=5) > >- def simpleDBInstalled(self, name): >- # FIXME: doing this directly instead of using self.rpmdb.installed() >- # speeds things up by 400% >- mi = self.ts.ts.dbMatch('name', name) >- if mi.count() > 0: >- return True >- return False >+ if callback: >+ callback.next_task() >+ self.base.repos.callback = None > > def _pkgExists(self, pkg): > """Whether or not a given package exists in our universe.""" >- try: >- pkgs = self.pkgSack.returnNewestByName(pkg) >+ pkgs = self.base.sack.query().filter(name=pkg.name) >+ if pkgs: > return True >- except yum.Errors.PackageSackError: >- pass >- try: >- pkgs = self.rpmdb.returnNewestByName(pkg) >- return True >- except (IndexError, yum.Errors.PackageSackError): >- pass > return False > >- def _groupHasPackages(self, grp): >+ def _groupHasPackages(self, gid): > # this checks to see if the given group has any packages available > # (ie, already installed or in the sack of available packages) > # so that we don't show empty groups. also, if there are mandatory > # packages and we have none of them, don't show >- for pkg in grp.mandatory_packages.keys(): >+ grp = self.groups.get(gid, None) >+ if not grp: >+ return False >+ for pkg in grp.mandatory_packages: > if self._pkgExists(pkg): > return True > if len(grp.mandatory_packages) > 0: > return False >- for pkg in grp.default_packages.keys() + grp.optional_packages.keys(): >+ for pkg in grp.default_packages + grp.optional_packages: > if self._pkgExists(pkg): > return True > return False > >- def __init__ (self, callback=None): >- import tempfile >- >- yum.YumBase.__init__(self) >+ def cleanup(self): >+ pass > >- if callback: >- callback.log = self.log >- self.repos.callback = callback >- >- # Set up a temporary root for RPM so it thinks there's nothing >- # installed, but don't use it until after we set up the config info. >- # We need to find the fedora-release package in the real root so >- # we can set $releasever and other variables from /etc/yum.repos.d/* >- # (#190999). >- self.temproot = tempfile.mkdtemp(dir="/tmp") >- self.doConfigSetup(init_plugins=False) >- if os.geteuid() != 0: >- cachedir = getCacheDir() >- if cachedir is None: >- self.errorlog("0, Error: Could not make cachedir, exiting") >- sys.exit(1) >- self.repos.setCacheDir(cachedir) >+ def isGroupInstalled(self, gid): >+ return self.groups[gid].selected > >- if callback: callback.next_task() >- self.conf.installroot = self.temproot >- >- try: >- self.doTsSetup() >- except yum.Errors.RepoError, msg: >- text = _("Package selection is disabled due to an error in setup. Please fix your repository configuration and try again.\n\n%s") % msg >- dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, text) >- dlg.set_position(gtk.WIN_POS_CENTER_ON_PARENT) >- dlg.set_modal(True) >- rc = dlg.run() >- dlg.destroy() >- >- self.packagesEnabled = False >- return >+ def isPackageInstalled(self, name): >+ return name in self.packages > >- if callback: callback.next_task() >- >- # If we're on a release, we want to try the base repo first. Otherwise, >- # try development. If neither of those works, we have a problem. >- if "fedora" in map(lambda repo: repo.id, self.repos.listEnabled()): >- repoorder = ["fedora", "rawhide", "development"] >- else: >- repoorder = ["rawhide", "development", "fedora"] >+ def log(self, value, msg): >+ pass > >- self.repos.disableRepo("*") >- if callback: callback.next_task() >+ def query(self): >+ return self.base.sack.query() > >- self.packagesEnabled = False >- for repo in repoorder: >- try: >- self.repos.enableRepo(repo) >- self.packagesEnabled = True >- break >- except yum.Errors.RepoError: >- pass >+ def selectGroup(self, gid): >+ self.groups[gid].selected = True > >- if not self.packagesEnabled: >- return >+ def deselectGroup(self, gid): >+ self.groups[gid].selected = False > >- try: >- self.doRepoSetup() >- if callback: callback.next_task() >- self.doGroupSetup() >- if callback: callback.next_task(next=5) >- self.doSackSetup() >- if callback: >- callback.next_task() >- self.repos.callback = None >- except: >- self.packagesEnabled = False >+ def selectPackage(self, pkg): >+ self.packages.add(pkg) > >- def cleanup(self): >- shutil.rmtree(self.temproot) >+ def deselectPackage(self, pkg): >+ if pkg in self.packages: >+ self.packages.remove(pkg) > > > class Packages: >@@ -206,11 +159,11 @@ class Packages: > > progress_window.set_label(_("Retrieving package information")) > progress_window.show() >- self.y = sckYumBase(progress_window) >+ self.provider = dnfProvider(progress_window) > > # If we failed to initialize yum, we should still be able to run > # the program. Just disable the package screen. >- if not self.y.packagesEnabled: >+ if not self.provider.packagesEnabled: > disabledLabel = gtk.Label(_("Package selection is disabled due to problems downloading package information.")) > disabledLabel.set_line_wrap(True) > self.package_frame.add(disabledLabel) >@@ -219,7 +172,7 @@ class Packages: > > return > >- self.gs = GroupSelector.GroupSelector(self.y) >+ self.gs = GroupSelector.GroupSelector(self.provider) > self.gs.doRefresh() > > self.package_frame.add(self.gs.vbox) >@@ -229,11 +182,11 @@ class Packages: > self.ks = ksHandler > > def cleanup(self): >- if self.y.packagesEnabled: >- self.y.cleanup() >+ if self.provider.packagesEnabled: >+ self.provider.cleanup() > > def formToKickstart(self): >- if not self.y.packagesEnabled: >+ if not self.provider.packagesEnabled: > return > > # Don't clear the lists out until now. This means that if we failed >@@ -245,59 +198,46 @@ class Packages: > > # Faster to grab all the package names up front rather than call > # searchNevra in the loop below. >- allPkgNames = map(lambda pkg: pkg.name, self.y.pkgSack.returnPackages()) >- allPkgNames.sort() >- >- self.y.tsInfo.makelists() >- >- txmbrNames = map (lambda x: x.name, self.y.tsInfo.getMembers()) >+ allPkgNames = set(pkg.name for pkg in self.provider.query()) > >- for grp in filter(lambda x: x.selected, self.y.comps.groups): >- self.ks.packages.groupList.append(Group(name=grp.groupid)) >+ for grp in (x for x in self.provider.groups.values() if x.selected): >+ self.ks.packages.groupList.append(Group(name=grp.id)) > >- defaults = grp.default_packages.keys() >- optionals = grp.optional_packages.keys() >+ defaults = grp.default_packages >+ optionals = grp.optional_packages > >- for pkg in filter(lambda x: x in defaults and (not x in txmbrNames and x in allPkgNames), grp.packages): >+ for pkg in (x.name for x in defaults if x.name not in self.provider.packages): > self.ks.packages.excludedList.append(pkg) > >- for pkg in filter(lambda x: x in txmbrNames, optionals): >+ for pkg in (x.name for x in optionals if x.name in self.provider.packages): > self.ks.packages.packageList.append(pkg) > > def applyKickstart(self): >- if not self.y.packagesEnabled: >+ if not self.provider.packagesEnabled: > return > >- selectedGroups = map (lambda grp: grp.name, self.ks.packages.groupList) >+ selectedGroups = [grp.name for grp in self.ks.packages.groupList] > >- for grp in self.y.comps.groups: >- if grp.groupid in selectedGroups: >- self.y.selectGroup(grp.groupid) >+ for grp in self.provider.groups.values(): >+ if grp.id in selectedGroups: >+ grp.selected = True >+ for pkg in grp.default_packages: >+ self.provider.selectPackage(pkg) > else: >- self.y.deselectGroup(grp.groupid) >+ grp.selected = False >+ for pkg in grp.default_packages + grp.optional_packages: >+ self.provider.deselectPackage(pkg) > > # We don't really care about invalid names here. Perhaps we should > # at least throw them out of the packages lists so they don't keep > # coming back? > for pkg in self.ks.packages.packageList: >- try: >- self.y.install(name=pkg) >- except: >- pass >+ self.provider.selectPackage(pkg) > > # This is a whole lot like __deselectPackage in OptionalPackageSelector > # in pirut. If only we could get to that. > for pkg in self.ks.packages.excludedList: >- try: >- pkgs = self.y.pkgSack.returnNewestByName(pkg) >- except yum.Errors.PackageSackError: >- continue >- >- if pkgs: >- pkgs = self.y.bestPackagesFromList(pkgs) >- for po in pkgs: >- txmbrs = self.y.tsInfo.getMembers(pkgtup=po.pkgtup) >- self.y.tsInfo.remove(po.pkgtup) >+ self.provider.deselectPackage(pkg) > > # Refresh UI to get whatever selections the ks file specified. > self.gs.doRefresh() >diff --git a/system-config-kickstart.spec b/system-config-kickstart.spec >index 64d50ae..78a74ff 100644 >--- a/system-config-kickstart.spec >+++ b/system-config-kickstart.spec >@@ -18,7 +18,7 @@ BuildRequires: desktop-file-utils, intltool, gettext > BuildRequires: transifex-client > Requires: pygtk2 >= 1.99.11, pygtk2-libglade, python >= 2.3.3 > Requires: system-config-language, system-config-date >-Requires: pykickstart >= 1.78, yum, hicolor-icon-theme >+Requires: pykickstart >= 1.78, dnf, hicolor-icon-theme > Requires: system-config-keyboard >= 1.3.1 > Requires(post): gtk2 >= 2.6 > Requires(postun): gtk2 >= 2.6
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 1156540
: 1045877