summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2005-05-23 20:27:35 +0000
committerJeremy Katz <katzj@redhat.com>2005-05-23 20:27:35 +0000
commit6541b52699b6f95da920183f1edf01247c3b2640 (patch)
treef262956de6d3351e166f17c03965e9ba1b4026f1
parent5f9a07f3e28bad1d770958e97cac45f8568a070a (diff)
downloadanaconda-6541b52699b6f95da920183f1edf01247c3b2640.tar.gz
anaconda-6541b52699b6f95da920183f1edf01247c3b2640.tar.xz
anaconda-6541b52699b6f95da920183f1edf01247c3b2640.zip
2005-05-23 Jeremy Katz <katzj@redhat.com>
* hdrlist.py (DependencyChecker.callback): Make the comments a little clearer * upgrade.py (upgradeFindPackages): Ensure we don't leave deps stranded that we could have solved (#157754)
-rw-r--r--ChangeLog6
-rw-r--r--hdrlist.py7
-rw-r--r--upgrade.py21
3 files changed, 29 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 3c7906dae..f507c3bd5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2005-05-23 Jeremy Katz <katzj@redhat.com>
+ * hdrlist.py (DependencyChecker.callback): Make the comments a
+ little clearer
+
+ * upgrade.py (upgradeFindPackages): Ensure we don't leave deps
+ stranded that we could have solved (#157754)
+
* iw/progress_gui.py (InstallProgressWindow_NEW.setPackage): Limit
the length of the package installing string to try to avoid
jumping (#157583)
diff --git a/hdrlist.py b/hdrlist.py
index b8a5486c4..5a7f0a44a 100644
--- a/hdrlist.py
+++ b/hdrlist.py
@@ -207,9 +207,10 @@ class DependencyChecker:
self.how = how
# FIXME: this is the simple stupid version. it doesn't actually handle
- # paying attention to EVR.
- def callback(self, ts, tag, name, evr, flags):
- if tag == rpm.RPMTAG_REQUIRENAME:
+ # paying attention to EVR or conflicts
+ def callback(self, ts, sense, name, evr, flags):
+ # XXX just so we don't break if I'm wrong about what this passes
+ if sense in (rpm.RPMDEP_SENSE_REQUIRES, rpm.RPMTAG_REQUIRES):
pkgnevra = depMatch(name, self.grpset.hdrlist)
if pkgnevra and self.grpset.hdrlist.has_key(pkgnevra):
hdr = self.grpset.hdrlist[pkgnevra]
diff --git a/upgrade.py b/upgrade.py
index f9f0a0299..511e98c17 100644
--- a/upgrade.py
+++ b/upgrade.py
@@ -761,8 +761,25 @@ def upgradeFindPackages(intf, method, id, instPath, dir):
for p in id.grpset.hdrlist.pkgs.values():
if p.isSelected():
ts.addInstall(p.hdr, p.hdr, "u")
- deps = ts.check(depcheck.callback)
- for pkgnevra in deps:
+
+ # now we need to do a depcheck. but adding a package could require
+ # rerunning the dep check due to things getting replaced (cf, #157754)
+ # we want to make sure we don't loop forever, though, so let's just
+ # put an arbitrary limit
+ runs = 5
+ while runs > 0:
+ rerun = 0
+ deps = ts.check(depcheck.callback)
+ for ((name, version, release),
+ (reqname, reqversion),
+ flg, suggest, sense) in deps:
+ if depcheck.callback(ts, sense, reqname, reqversion, flg) == -1:
+ rerun = 1
+ runs -= 1
+ if rerun == 0:
+ break
+
+ for pkgnevra in depcheck.added:
text = ("Upgrade Dependency: Needs %s, "
"automatically added." % (pkgnevra,))
# log(text)