summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyanaconda/sortedtransaction.py87
-rw-r--r--pyanaconda/yuminstall.py101
2 files changed, 31 insertions, 157 deletions
diff --git a/pyanaconda/sortedtransaction.py b/pyanaconda/sortedtransaction.py
deleted file mode 100644
index d7384bbc6..000000000
--- a/pyanaconda/sortedtransaction.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# sortedtransaction.py
-#
-# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-
-from yum.transactioninfo import TransactionData, TransactionMember, SortableTransactionData
-from yum.constants import *
-from yum.Errors import YumBaseError
-
-import urlparse
-urlparse.uses_fragment.append('media')
-
-import logging
-log = logging.getLogger("anaconda")
-
-
-class SplitMediaTransactionData(SortableTransactionData):
- def __init__(self):
- SortableTransactionData.__init__(self)
- self.reqmedia = {}
- self.curmedia = 0
-
- def __getMedia(self, po):
- try:
- uri = po.returnSimple('basepath')
- (scheme, netloc, path, query, fragid) = urlparse.urlsplit(uri)
- if scheme != "media" or not fragid:
- return -99
- else:
- return int(fragid)
- except (KeyError, AttributeError):
- return -99
-
- def getMembers(self, pkgtup=None):
- if not self.curmedia:
- return TransactionData.getMembers(self, pkgtup)
- if pkgtup is None:
- returnlist = []
- for ele in self.reqmedia[self.curmedia]:
- returnlist.extend(self.pkgdict[ele])
-
- return returnlist
-
- if pkgtup in self.reqmedia[self.curmedia]:
- return self.pkgdict[pkgtup]
- else:
- return []
-
- def add(self, txmember):
- if txmember.output_state in TS_INSTALL_STATES:
- id = self.__getMedia(txmember.po)
- if id:
- if id not in self.reqmedia.keys():
- self.reqmedia[id] = [ txmember.pkgtup ]
- elif txmember.pkgtup not in self.reqmedia[id]:
- self.reqmedia[id].append(txmember.pkgtup)
- SortableTransactionData.add(self, txmember)
-
- def remove(self, pkgtup):
- if not self.pkgdict.has_key(pkgtup):
- return
- txmembers = self.pkgdict[pkgtup]
- if len(txmembers) > 0:
- for txmbr in txmembers:
- if txmbr.output_state not in TS_INSTALL_STATES:
- continue
- id = self.__getMedia(txmbr.po)
- if id:
- self.reqmedia[id].remove(pkgtup)
- if len(self.reqmedia[id]) == 0:
- self.reqmedia.pop(id)
- del txmbr
- SortableTransactionData.remove(self, pkgtup)
diff --git a/pyanaconda/yuminstall.py b/pyanaconda/yuminstall.py
index f5573c7c1..437fd1625 100644
--- a/pyanaconda/yuminstall.py
+++ b/pyanaconda/yuminstall.py
@@ -49,7 +49,6 @@ from yum.misc import to_unicode
from yum.yumRepo import YumRepository
from backend import AnacondaBackend
from product import isBeta, productName, productVersion, productStamp
-from sortedtransaction import SplitMediaTransactionData
from constants import *
from image import *
from compssort import *
@@ -304,13 +303,9 @@ class AnacondaYumRepo(YumRepository):
anacondaBaseURLs = property(_getAnacondaBaseURLs, _setAnacondaBaseURLs,
doc="Extends AnacondaYum.baseurl to store non-yum urls:")
-class YumSorter(yum.YumBase):
- def _transactionDataFactory(self):
- return SplitMediaTransactionData()
-
-class AnacondaYum(YumSorter):
+class AnacondaYum(yum.YumBase):
def __init__(self, anaconda):
- YumSorter.__init__(self)
+ yum.YumBase.__init__(self)
self.anaconda = anaconda
self._timestamp = None
@@ -765,9 +760,9 @@ class AnacondaYum(YumSorter):
self.preconf.root = root
self.preconf.releasever = self._getReleasever()
self.preconf.enabled_plugins = ["whiteout", "blacklist"]
- YumSorter._getConfig(self)
+ yum.YumBase._getConfig(self)
else:
- YumSorter._getConfig(self, fn=fn, root=root,
+ yum.YumBase._getConfig(self, fn=fn, root=root,
enabled_plugins=["whiteout", "blacklist"])
self.configBaseRepo(root=root)
@@ -874,7 +869,7 @@ class AnacondaYum(YumSorter):
while True:
# retrying version of download header
try:
- YumSorter.downloadHeader(self, po)
+ yum.YumBase.downloadHeader(self, po)
break
except yum.Errors.NoMoreMirrorsRepoError:
self._handleFailure(po)
@@ -962,68 +957,42 @@ class AnacondaYum(YumSorter):
self.ts.ts.setColor(3)
def run(self, instLog, cb, intf):
- def mediasort(a, b):
- # sort so that first CD comes first, etc. -99 is a magic number
- # to tell us that the cd should be last
- if a == -99:
- return 1
- elif b == -99:
- return -1
- if a < b:
- return -1
- elif a > b:
- return 1
- return 0
-
self.initActionTs()
if self.anaconda.upgrade:
self.ts.ts.setProbFilter(~rpm.RPMPROB_FILTER_DISKSPACE)
self.setColor()
- # If we don't have any required media assume single disc
- if self.tsInfo.reqmedia == {}:
- self.tsInfo.reqmedia[0] = None
- mkeys = self.tsInfo.reqmedia.keys()
- mkeys.sort(mediasort)
-
- for i in mkeys:
- self.tsInfo.curmedia = i
- if i > 0:
- pkgtup = self.tsInfo.reqmedia[i][0]
-
- try:
- self.dsCallback = DownloadHeaderProgress(intf, self)
- self.populateTs(keepold=0)
- self.dsCallback.pop()
- self.dsCallback = None
- except RepoError, e:
- msg = _("There was an error running your transaction for "
- "the following reason: %s\n") % str(e)
+ try:
+ self.dsCallback = DownloadHeaderProgress(intf, self)
+ self.populateTs(keepold=0)
+ self.dsCallback.pop()
+ self.dsCallback = None
+ except RepoError, e:
+ msg = _("There was an error running your transaction for "
+ "the following reason: %s\n") % str(e)
- if self.anaconda.upgrade:
- rc = intf.messageWindow(_("Error"), msg, type="custom",
- custom_icon="error",
- custom_buttons=[_("_Exit installer")])
- sys.exit(1)
- else:
- rc = intf.messageWindow(_("Error"), msg,
- type="custom", custom_icon="error",
- custom_buttons=[_("_Back"), _("_Exit installer")])
+ if self.anaconda.upgrade:
+ rc = intf.messageWindow(_("Error"), msg, type="custom",
+ custom_icon="error",
+ custom_buttons=[_("_Exit installer")])
+ sys.exit(1)
+ else:
+ rc = intf.messageWindow(_("Error"), msg,
+ type="custom", custom_icon="error",
+ custom_buttons=[_("_Back"), _("_Exit installer")])
- if rc == 1:
- sys.exit(1)
- else:
- self.tsInfo.curmedia = None
- return DISPATCH_BACK
+ if rc == 1:
+ sys.exit(1)
+ else:
+ return DISPATCH_BACK
- self.ts.check()
- self.ts.order()
+ self.ts.check()
+ self.ts.order()
- if self._run(instLog, cb, intf) == DISPATCH_BACK:
- self.tsInfo.curmedia = None
- return DISPATCH_BACK
+ if self._run(instLog, cb, intf) == DISPATCH_BACK:
+ return DISPATCH_BACK
- self.ts.close()
+ self.ts.close()
def _run(self, instLog, cb, intf):
# set log fd. FIXME: this is ugly. see changelog entry from 2005-09-13
@@ -1961,17 +1930,9 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
allPkgNames = map(lambda pkg: pkg.name, self.ayum.pkgSack.returnPackages())
allPkgNames.sort()
- # On CD/DVD installs, we have one transaction per CD and will end up
- # checking allPkgNames against a very short list of packages. So we
- # have to reset to media #0, which is an all packages transaction.
- old = self.ayum.tsInfo.curmedia
- self.ayum.tsInfo.curmedia = 0
-
self.ayum.tsInfo.makelists()
txmbrNames = map (lambda x: x.name, self.ayum.tsInfo.getMembers())
- self.ayum.tsInfo.curmedia = old
-
if len(self.ayum.tsInfo.instgroups) == 0 and len(txmbrNames) == 0:
return