Hi all:

The attached patch adds skip-broken output to the yum cli's summary bit,
like so:

=============================================================================
 Package                 Arch       Version          Repository        Size 
=============================================================================
Updating:
 openbox-libs            x86_64     3.4.5-1.fc8      updates            45 k
Skipped:
 frobnitz                x86_64     0.0.1            badrepo           165 k
 frobnitz-libs           x86_64     0.0.1            badrepo           100 k
 libdc1394               x86_64     2.0.1-3.fc8      updates           111 k

Transaction Summary
=============================================================================
Install      0 Package(s)         
Update       1 Package(s)         
Remove       0 Package(s)         

So, I didn't add a count of skipped packages at the end, but that might be nice
to show when some packages are actually skipped, or if skip-broken is enabled
(rather than all the time).

The code itself puts the skipped packages into the transaction info in a new
'skipped' array. While not used by rpm proper, this feels like a good place for
it to be.

What does everyone think?

-James
From 397ccf184a810150d5412c2954419c6c01cb41f3 Mon Sep 17 00:00:00 2001
From: James Bowes <[EMAIL PROTECTED]>
Date: Mon, 11 Feb 2008 19:20:25 -0500
Subject: [PATCH] Display packages skipped by skip-broken in the cli transaction 
summary

---
 output.py                |    3 ++-
 test/skipbroken-tests.py |    8 +++++++-
 yum/__init__.py          |    1 +
 yum/transactioninfo.py   |    6 ++++++
 4 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/output.py b/output.py
index 187a16c..b8bf111 100644
--- a/output.py
+++ b/output.py
@@ -488,7 +488,8 @@ class YumOutput:
                             (_('Removing'), self.tsInfo.removed),
                             (_('Installing for dependencies'), 
self.tsInfo.depinstalled),
                             (_('Updating for dependencies'), 
self.tsInfo.depupdated),
-                            (_('Removing for dependencies'), 
self.tsInfo.depremoved)]:
+                            (_('Removing for dependencies'), 
self.tsInfo.depremoved),
+                            (_('Skipped'), self.tsInfo.skipped)]:
             if pkglist:
                 totalmsg = u"%s:\n" % action
             for txmbr in pkglist:
diff --git a/test/skipbroken-tests.py b/test/skipbroken-tests.py
index e15ae56..628f82c 100644
--- a/test/skipbroken-tests.py
+++ b/test/skipbroken-tests.py
@@ -359,7 +359,13 @@ class SkipBrokenTests(DepsolveTests):
         self.assertEquals('empty', *self.resolveCode(skip=True))
         self.assertResult([ipo1,ipo2])
         
-
+    def testSkippedAddedToTransactionInfo(self):
+        ipo1 = self.instPackage('foo', '1',arch='i386')
+        po1 = self.repoPackage('foo', '2',arch='i386')
+        po1.addRequires('notfound', 'EQ', ('0', '1', '0'))
+        self.tsInfo.addUpdate(po1, oldpo=ipo1)
+        self.assertEquals('empty', *self.resolveCode(skip=True))
+        self.assertEquals(po1, self.tsInfo.skipped[0])
 
     def resolveCode(self,skip = False):
         solver = YumBase()
diff --git a/yum/__init__.py b/yum/__init__.py
index 2b88c9c..be5bba2 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -678,6 +678,7 @@ class YumBase(depsolve.Depsolve):
             for po in skipped_list:
                 msg = _("    %s from %s") % (str(po),po.repo.id)
                 self.verbose_logger.info(msg)
+                self.tsInfo.addSkipped(po)
         else:
             # If we cant solve the problems the show the original error 
messages.
             self.verbose_logger.info("Skip-broken could not solve problems")
diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
index c899abc..01d23d9 100644
--- a/yum/transactioninfo.py
+++ b/yum/transactioninfo.py
@@ -63,6 +63,7 @@ class TransactionData:
         self.depremoved = []
         self.depinstalled = []
         self.depupdated = []
+        self.skipped = []
         
     def __len__(self):
         return len(self.pkgdict)
@@ -293,6 +294,7 @@ class TransactionData:
         self.depupdated.sort()
         self.depinstalled.sort()
         self.depremoved.sort()
+        self.skipped.sort()
         self.instgroups.sort()
         self.removedgroups.sort()
 
@@ -400,6 +402,10 @@ class TransactionData:
         self.add(txmbr)
         return txmbr
 
+    def addSkipped(self, po):
+        """ Add a package that has been skipped due to dependency problems """
+        txmbr = TransactionMember(po)
+        self.skipped.append(txmbr)
 
     def setDatabases(self, rpmdb, pkgSack):
         self.rpmdb = rpmdb
-- 
1.5.4.1.1228.g547b

Attachment: pgppAJZpbhK5E.pgp
Description: PGP signature

_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to