[yum-commits] Branch 'yum-3_2_X' - yum/rpmsack.py

skvidal at osuosl.org skvidal at osuosl.org
Tue Feb 17 20:54:01 UTC 2009


 yum/rpmsack.py |   26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

New commits:
commit adb07924792a968a18e60c4f7147aeedcf20803e
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Tue Feb 17 15:52:44 2009 -0500

    add auto_close option (defaulting to false) for access to the rpmdb/ts.

diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 31ae142..c9a6d81 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -96,6 +96,9 @@ class RPMDBPackageSack(PackageSackBase):
         self._get_pro_cache = {}
         self._get_req_cache  = {}
         self.ts = None
+        self.auto_close = False # this forces a self.ts.close() after
+                                     # most operations so it doesn't leave
+                                     # any lingering locks.
 
         self._cache = {
             'provides' : { },
@@ -135,6 +138,8 @@ class RPMDBPackageSack(PackageSackBase):
     def readOnlyTS(self):
         if not self.ts:
             self.ts =  initReadOnlyTransaction(root=self.root)
+        if not self.ts.open:
+            self.ts = initReadOnlyTransaction(root=self.root)
         return self.ts
 
     def buildIndexes(self):
@@ -168,6 +173,9 @@ class RPMDBPackageSack(PackageSackBase):
             if not result.has_key(pkg.pkgid):
                 result[pkg.pkgid] = pkg
         
+        if self.auto_close:
+            self.ts.close()
+
         return result.values()
 
     def searchFiles(self, name):
@@ -184,6 +192,10 @@ class RPMDBPackageSack(PackageSackBase):
         del mi
 
         result = result.values()
+
+        if self.auto_close:
+            self.ts.close()
+
         return result
         
     def searchPrco(self, name, prcotype):
@@ -209,6 +221,10 @@ class RPMDBPackageSack(PackageSackBase):
         
         result = result.values()
         self._cache[prcotype][name] = result
+
+        if self.auto_close:
+            self.ts.close()
+
         return result
 
     def searchProvides(self, name):
@@ -363,6 +379,9 @@ class RPMDBPackageSack(PackageSackBase):
             if hdr['name'] != 'gpg-pubkey':
                 yield (hdr, mi.instance())
         del mi
+        if self.auto_close:
+            self.ts.close()
+
 
     def _header_from_index(self, idx):
         """returns a package header having been given an index"""
@@ -382,6 +401,9 @@ class RPMDBPackageSack(PackageSackBase):
             del hdr
 
         del mi
+        if self.auto_close:
+            self.ts.close()
+
 
     def _search(self, name=None, epoch=None, ver=None, rel=None, arch=None):
         '''Generator that yields matching packages
@@ -422,6 +444,10 @@ class RPMDBPackageSack(PackageSackBase):
                     break
             else:
                 ret.append(po)
+
+        if self.auto_close:
+            self.ts.close()
+
         return ret
 
     def _makePackageObject(self, hdr, index):


More information about the Yum-commits mailing list