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