Hi!

I wrote this patch to fix the behavior of TransactioInfo.add*. It adds a "return_" parameter which can be 'one', 'all' or 'new' for all methods in question - including .add() itself.

While I don't like this whole thing there simply didn't came a better solution to my mind. Any suggestions for enhancement are welcome.

Florian

PS: Should the txmbrs of the conditionals returned, too?
>From f9271af5858ce8702b172aff1525cd556cc59207 Mon Sep 17 00:00:00 2001
From: Florian Festi <[EMAIL PROTECTED]>
Date: Mon, 18 Feb 2008 13:33:47 +0100
Subject: [PATCH] make TransactionInfo.add* return the right packages

---
 yum/transactioninfo.py |   56 +++++++++++++++++++++++++++--------------------
 1 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
index 3bded50..7140e32 100644
--- a/yum/transactioninfo.py
+++ b/yum/transactioninfo.py
@@ -170,11 +170,18 @@ class TransactionData:
         
         return False
         
-    def add(self, txmember):
+    def add(self, txmember, return_='one'):
         """add a package to the transaction"""
+        result = {
+            'one' : txmember,
+            'new' : [],
+            'all' : [],
+            }
         
         for oldpo in txmember.updates:
-            self.addUpdated(oldpo, txmember.po)
+            res = self.addUpdated(oldpo, txmember.po, return_)
+            if return_!='one':
+                result[return_].extend(res)
 
         if not self.pkgdict.has_key(txmember.pkgtup):
             self.pkgdict[txmember.pkgtup] = []
@@ -183,7 +190,13 @@ class TransactionData:
             for member in self.pkgdict[txmember.pkgtup]:
                 if member.ts_state == txmember.ts_state:
                     self.debugprint("Package in same mode, skipping.")
-                    return
+                    result['one'] = member
+                    result['all'].append(member)
+                    return result[return_]
+
+        result['new'].append(txmember)
+        result['all'].append(txmember)
+
         self.pkgdict[txmember.pkgtup].append(txmember)
         self._namedict.setdefault(txmember.name, []).append(txmember)
         self.changed = True
@@ -192,11 +205,13 @@ class TransactionData:
         elif isinstance(txmember.po, YumAvailablePackageSqlite):
             self.pkgSackPackages += 1
 
+        # XXX add those to the return value?
         if self.conditionals.has_key(txmember.name):
             for po in self.conditionals[txmember.name]:
                 condtxmbr = self.addInstall(po)
                 condtxmbr.setAsDep(po=txmember.po)
         self._unresolvedMembers.add(txmember)
+        return result[return_]
 
     def remove(self, pkgtup):
         """remove a package from the transaction"""
@@ -295,7 +310,7 @@ class TransactionData:
         self.removedgroups.sort()
 
     
-    def addInstall(self, po):
+    def addInstall(self, po, return_='one'):
         """adds a package as an install but in mode 'u' to the ts
            takes a packages object and returns a TransactionMember Object"""
 
@@ -308,10 +323,9 @@ class TransactionData:
         txmbr.po.state = TS_INSTALL        
         txmbr.ts_state = 'u'
         txmbr.reason = 'user'
-        self.add(txmbr)
-        return txmbr
+        return self.add(txmbr, return_=return_)
 
-    def addTrueInstall(self, po):
+    def addTrueInstall(self, po, return_='one'):
         """adds a package as an install
            takes a packages object and returns a TransactionMember Object"""
     
@@ -321,11 +335,10 @@ class TransactionData:
         txmbr.po.state = TS_INSTALL        
         txmbr.ts_state = 'i'
         txmbr.reason = 'user'
-        self.add(txmbr)
-        return txmbr
+        self.add(txmbr, return_=return_)
     
 
-    def addErase(self, po):
+    def addErase(self, po, return_='one'):
         """adds a package as an erasure
            takes a packages object and returns a TransactionMember Object"""
     
@@ -334,10 +347,9 @@ class TransactionData:
         txmbr.output_state = TS_ERASE
         txmbr.po.state = TS_INSTALL
         txmbr.ts_state = 'e'
-        self.add(txmbr)
-        return txmbr
+        return self.add(txmbr, return_=return_)
 
-    def addUpdate(self, po, oldpo=None):
+    def addUpdate(self, po, oldpo=None, return_='one'):
         """adds a package as an update
            takes a packages object and returns a TransactionMember Object"""
         
@@ -353,10 +365,9 @@ class TransactionData:
             txmbr.relatedto.append((oldpo, 'updates'))
             txmbr.updates.append(oldpo)
             
-        self.add(txmbr)
-        return txmbr
+        return self.add(txmbr, return_=return_)
 
-    def addUpdated(self, po, updating_po):
+    def addUpdated(self, po, updating_po, return_='one'):
         """adds a package as being updated by another pkg
            takes a packages object and returns a TransactionMember Object"""
     
@@ -367,10 +378,9 @@ class TransactionData:
         txmbr.ts_state = None
         txmbr.relatedto.append((updating_po, 'updatedby'))
         txmbr.updated_by.append(updating_po)
-        self.add(txmbr)
-        return txmbr
+        return self.add(txmbr, return_=return_)
 
-    def addObsoleting(self, po, oldpo):
+    def addObsoleting(self, po, oldpo, return_='one'):
         """adds a package as an obsolete over another pkg
            takes a packages object and returns a TransactionMember Object"""
     
@@ -381,10 +391,9 @@ class TransactionData:
         txmbr.ts_state = 'u'
         txmbr.relatedto.append((oldpo, 'obsoletes'))
         txmbr.obsoletes.append(oldpo)
-        self.add(txmbr)
-        return txmbr
+        return self.add(txmbr, return_=return_)
 
-    def addObsoleted(self, po, obsoleting_po):
+    def addObsoleted(self, po, obsoleting_po, return_='one'):
         """adds a package as being obsoleted by another pkg
            takes a packages object and returns a TransactionMember Object"""
     
@@ -395,8 +404,7 @@ class TransactionData:
         txmbr.ts_state = None
         txmbr.relatedto.append((obsoleting_po, 'obsoletedby'))
         txmbr.obsoleted_by.append(obsoleting_po)
-        self.add(txmbr)
-        return txmbr
+        return self.add(txmbr, return_=return_)
 
 
     def setDatabases(self, rpmdb, pkgSack):
-- 
1.5.3.8

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

Reply via email to