Hi Tim!
Some more skip broken code:
Fix the endless loop (sorry, test case is still broken). Code is not that
beautiful - feel free to adjust your personal taste ;)=
Tim Lauridsen wrote:
Added some patch to fix issues with skip-broken and updates.
If we remove an update, we have to remove the cleanup txmbr of the
package being updated.
There is also a patch to fix the testcases.
Add support for obsoletes.
Have fun
Florian
>From e2f09a4030ef5c4d067fa01667bd9fc91d8b0771 Mon Sep 17 00:00:00 2001
From: Florian Festi <[EMAIL PROTECTED]>
Date: Tue, 27 Nov 2007 12:29:35 +0100
Subject: [PATCH] Fix endless loop in skipbroken
New fixbroken test case
---
test/skipbroken-tests.py | 21 +++++++++++++++++++--
yum/__init__.py | 11 +++++++----
2 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/test/skipbroken-tests.py b/test/skipbroken-tests.py
index c9e2512..a6a55b5 100644
--- a/test/skipbroken-tests.py
+++ b/test/skipbroken-tests.py
@@ -55,8 +55,7 @@ class SkipBrokenTests(DepsolveTests):
self.tsInfo.addUpdate(po2, oldpo=po1)
self.rpmdb.addPackage(ipo)
- # XXX endless loop
- # self.assertEquals('ok', *self.resolveCode(skip=True))
+ self.assertEquals('ok', *self.resolveCode(skip=True))
self.assertResult([ipo, po2])
def testUpdateRequireOld(self):
@@ -74,6 +73,24 @@ class SkipBrokenTests(DepsolveTests):
self.assertEquals('empty', *self.resolveCode(skip=True))
self.assertResult([ipo, po1])
+ def testUpdateRequireBoth(self):
+ po1 = FakePackage('foo', '1', '0', '0', 'noarch')
+ po1.addRequires('foo-tools', 'EQ', ('0', '1', '0'))
+ po2 = FakePackage('foo', '2', '0', '0', 'noarch')
+ po2.addRequires('foo-tools', 'EQ', ('0', '2', '0'))
+
+ ipo = FakePackage('foo-tools', '1', '0', '0', 'noarch')
+ por = FakePackage('foo-gui', '1', '0', '0', 'noarch')
+ por.addRequires('foo', 'EQ', ('0', '2', '0'))
+
+ self.rpmdb.addPackage(po1)
+ self.tsInfo.addUpdate(po2, oldpo=po1)
+ self.rpmdb.addPackage(ipo)
+ self.tsInfo.addInstall(por)
+
+ self.assertEquals('empty', *self.resolveCode(skip=True))
+ self.assertResult([ipo, po1])
+
def testLoop(self):
ipo = FakePackage('foo', '1', '0', '0', 'noarch')
ipo2 = FakePackage('foo-tools', '1', '0', '0', 'noarch')
diff --git a/yum/__init__.py b/yum/__init__.py
index 71d51ba..2c7de74 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -585,24 +585,27 @@ class YumBase(depsolve.Depsolve):
# The remove the broken packages from the transactions and
# Try another depsolve
if self.conf.skip_broken and rescode==1:
- rescode, restring = self._skipPackagesWithProblems()
+ rescode, restring = self._skipPackagesWithProblems(rescode, restring)
return rescode, restring
- def _skipPackagesWithProblems(self):
+ def _skipPackagesWithProblems(self, rescode, restring):
''' Remove the packages with depsolve errors and depsolve again '''
- rescode = 1
# Keep removing packages & Depsolve until all errors is gone
# or the transaction is empty
while len(self.po_with_problems) > 0 and rescode == 1:
+ length = len(self.tsInfo)
for po in self.po_with_problems:
self.verbose_logger.debug("skipping %s because of depsolving problems" % po)
self._skipDeps(po)
self.tsInfo.remove(po.pkgtup)
+ # self.pkgSack.delPackage(po)
+ if len(self.tsInfo) == length:
+ break
rescode, restring = self.resolveDeps()
return rescode, restring
- def _skipDeps(self,pkg):
+ def _skipDeps(self, pkg):
'''
Remove the deps for a package with dep problem
from the Transaction
--
1.5.3.3
>From 50d3f6bb765eb029d10bca7dc3a186b54ec6dec4 Mon Sep 17 00:00:00 2001
From: Florian Festi <[EMAIL PROTECTED]>
Date: Tue, 27 Nov 2007 12:30:56 +0100
Subject: [PATCH] Add support for obsoletes in skip broken
---
yum/__init__.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/yum/__init__.py b/yum/__init__.py
index 2c7de74..0076dc2 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -617,7 +617,7 @@ class YumBase(depsolve.Depsolve):
self.tsInfo.remove(dep.pkgtup)
# Move pkg being updated from transaction.
if txmbr.ts_state == 'u':
- for upd in txmbr.updates:
+ for upd in (txmbr.updates + txmbr.obsoletes):
self.verbose_logger.debug("skipping update %s because of depsolving problems in %s" % (upd,pkg))
self.tsInfo.remove(upd.pkgtup)
--
1.5.3.3
_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel