[Yum-devel] [PATCH] Make transaction scriptFd setting less voodooish

Panu Matilainen pmatilai at laiskiainen.org
Wed Feb 9 14:25:58 UTC 2011


In older rpm versions ts.scriptFd is an invisible write-only
pseudo-attribute hack, so __getattr__() tricks in the transaction wrapper
wont work for it. Add a new wrapper method for setting it to make it
less gruesome, accept any file-like object as the fd argument.
---
 rpmUtils/transaction.py |    3 +++
 yum/rpmtrans.py         |    3 +--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/rpmUtils/transaction.py b/rpmUtils/transaction.py
index 704e8f9..b96a9d6 100644
--- a/rpmUtils/transaction.py
+++ b/rpmUtils/transaction.py
@@ -87,6 +87,9 @@ class TransactionWrapper:
     def isTsFlagSet(self, flag):
         val = self.getTsFlags()
         return bool(flag & val)
+
+    def setScriptFd(self, fd):
+        self.ts.scriptFd = fd.fileno()
         
 #    def addProblemFilter(self, filt):
 #        curfilter = self.ts.setProbFilter(0)
diff --git a/yum/rpmtrans.py b/yum/rpmtrans.py
index 0340153..d479829 100644
--- a/yum/rpmtrans.py
+++ b/yum/rpmtrans.py
@@ -209,8 +209,7 @@ class RPMTransaction:
         io_r = tempfile.NamedTemporaryFile()
         self._readpipe = io_r
         self._writepipe = open(io_r.name, 'w+b')
-        # This is dark magic, it really needs to be "base.ts.ts".
-        self.base.ts.ts.scriptFd = self._writepipe.fileno()
+        self.base.ts.setScriptFd(self._writepipe)
         rpmverbosity = {'critical' : 'crit',
                         'emergency' : 'emerg',
                         'error' : 'err',
-- 
1.7.4



More information about the Yum-devel mailing list