[yum-commits] Branch 'yum-3_2_X' - 7 commits - yum/history.py yum/__init__.py yum/misc.py yum/rpmsack.py yum/sqlitesack.py

skvidal at osuosl.org skvidal at osuosl.org
Wed Dec 9 21:21:48 UTC 2009


 yum/__init__.py   |   37 ++++++++++++++++++++++++++-----------
 yum/history.py    |    6 ++++++
 yum/misc.py       |   30 ++++++++++++++++++++++++++++++
 yum/rpmsack.py    |   12 ++++++++++++
 yum/sqlitesack.py |    1 +
 5 files changed, 75 insertions(+), 11 deletions(-)

New commits:
commit 98167d749d029b17f48eba516f2daea5fb138d24
Merge: 25d5648... e3759db...
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Wed Dec 9 16:21:42 2009 -0500

    Merge branch 'yum-3_2_X' of ssh://yum.baseurl.org/srv/projects/yum/git/yum into yum-3_2_X
    
    * 'yum-3_2_X' of ssh://yum.baseurl.org/srv/projects/yum/git/yum:
      Don't die if sha2+ is not available, and we aren't using metalink
      Fix md5 == abort() code path, only generate/trust sha2+ for metalink=>repomd
      Output txmbr evr as e:v-r instead of e-v-r

commit 25d5648fa097e4a0652e0df7634e5af5448d3860
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Wed Dec 9 15:12:08 2009 -0500

    make sure we behave correctly if we cannot get the cachedir setup
    
    if someone sets the perms on the tmpdir/cachedir VERY wrong make sure
    we emit an error and do something sensible about it.
    
    rh bug: https://bugzilla.redhat.com/show_bug.cgi?id=543768

diff --git a/yum/__init__.py b/yum/__init__.py
index 9613378..220be09 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -4168,8 +4168,12 @@ class YumBase(depsolve.Depsolve):
 
         if not force and os.geteuid() == 0:
             return True # We are root, not forced, so happy with the global dir.
-
-        cachedir = misc.getCacheDir(tmpdir, reuse)
+        try:
+            cachedir = misc.getCacheDir(tmpdir, reuse)
+        except (IOError, OSError), e:
+            self.logger.critical(_('Could not set cachedir: %s') % str(e))
+            cachedir = None
+            
         if cachedir is None:
             return False # Tried, but failed, to get a "user" cachedir
 
commit eed728681679e23ad439cf0f6b162fb0e5c953cc
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Wed Dec 9 13:16:35 2009 -0500

    move return_running_packages to rpmsack from yumbase b/c it belongs there :)

diff --git a/yum/__init__.py b/yum/__init__.py
index bd16d78..9613378 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -4195,13 +4195,3 @@ class YumBase(depsolve.Depsolve):
             
         return True    
 
-    def return_running_packages(self):
-        """returns a list of yum installed package objects which own a file
-           that are currently running or in use."""
-        pkgs = {}
-        for pid in misc.return_running_pids():
-            for fn in misc.get_open_files(pid):
-                for pkg in self.rpmdb.searchFiles(fn):
-                    pkgs[pkg] = 1
-
-        return sorted(pkgs.keys())
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 151e33e..d6b524a 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -716,6 +716,18 @@ class RPMDBPackageSack(PackageSackBase):
         # XXX deprecate?
         return [po.pkgtup for po in self.getRequires(name, flags, version)]
 
+    def return_running_packages(self):
+        """returns a list of yum installed package objects which own a file
+           that are currently running or in use."""
+        pkgs = {}
+        for pid in misc.return_running_pids():
+            for fn in misc.get_open_files(pid):
+                for pkg in self.searchFiles(fn):
+                    pkgs[pkg] = 1
+
+        return sorted(pkgs.keys())
+
+
 def _sanitize(path):
     return path.replace('/', '').replace('~', '')
 
commit adf5ce0d5d8f0066515ca85494f8b217500d7ad2
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Wed Dec 9 13:15:08 2009 -0500

    make sure history dbs are readable only by root - suggested by Josh Bressers

diff --git a/yum/history.py b/yum/history.py
index 095c76b..5a1c5e0 100644
--- a/yum/history.py
+++ b/yum/history.py
@@ -620,6 +620,12 @@ class YumHistory:
         if self._db_file == _db_file:
             os.rename(_db_file, _db_file + '.old')
         self._db_file = _db_file
+        
+        if self.conf.writable and not os.path.exists(self._db_file):
+            # make them default to 0600 - sysadmin can change it later
+            # if they want
+            fo = os.open(self._db_file, os.O_CREAT, 0600)
+            os.close(fo)
                 
         cur = self._get_cursor()
         ops = ['''\
commit acafb6096bcdccd1d51b2d55438b503086516b23
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Tue Dec 8 16:23:04 2009 -0500

    - add docstrings to properties
    - return_running_packages method to YumBase to return list of pkgs
      which currently have a file opened by a running process

diff --git a/yum/__init__.py b/yum/__init__.py
index 2aaa66a..bd16d78 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -719,29 +719,39 @@ class YumBase(depsolve.Depsolve):
     # properties so they auto-create themselves with defaults
     repos = property(fget=lambda self: self._getRepos(),
                      fset=lambda self, value: setattr(self, "_repos", value),
-                     fdel=lambda self: self._delRepos())
+                     fdel=lambda self: self._delRepos(),
+                     doc="Repo Storage object - object of yum repositories")
     pkgSack = property(fget=lambda self: self._getSacks(),
                        fset=lambda self, value: setattr(self, "_pkgSack", value),
-                       fdel=lambda self: self._delSacks())
+                       fdel=lambda self: self._delSacks(),
+                       doc="Package sack object - object of yum package objects")
     conf = property(fget=lambda self: self._getConfig(),
                     fset=lambda self, value: setattr(self, "_conf", value),
-                    fdel=lambda self: setattr(self, "_conf", None))
+                    fdel=lambda self: setattr(self, "_conf", None),
+                    doc="Yum Config Object")
     rpmdb = property(fget=lambda self: self._getRpmDB(),
                      fset=lambda self, value: setattr(self, "_rpmdb", value),
-                     fdel=lambda self: setattr(self, "_rpmdb", None))
+                     fdel=lambda self: setattr(self, "_rpmdb", None),
+                     doc="RpmSack object")
     tsInfo = property(fget=lambda self: self._getTsInfo(), 
                       fset=lambda self,value: self._setTsInfo(value), 
-                      fdel=lambda self: self._delTsInfo())
-    ts = property(fget=lambda self: self._getActionTs(), fdel=lambda self: self._deleteTs())
+                      fdel=lambda self: self._delTsInfo(),
+                      doc="Transaction Set information object")
+    ts = property(fget=lambda self: self._getActionTs(), 
+                  fdel=lambda self: self._deleteTs(),
+                  doc="TransactionSet object")
     up = property(fget=lambda self: self._getUpdates(),
                   fset=lambda self, value: setattr(self, "_up", value),
-                  fdel=lambda self: setattr(self, "_up", None))
+                  fdel=lambda self: setattr(self, "_up", None),
+                  doc="Updates Object")
     comps = property(fget=lambda self: self._getGroups(),
                      fset=lambda self, value: self._setGroups(value),
-                     fdel=lambda self: setattr(self, "_comps", None))
+                     fdel=lambda self: setattr(self, "_comps", None),
+                     doc="Yum Component/groups object")
     history = property(fget=lambda self: self._getHistory(),
                        fset=lambda self, value: setattr(self, "_history",value),
-                       fdel=lambda self: setattr(self, "_history", None))
+                       fdel=lambda self: setattr(self, "_history", None),
+                       doc="Yum History Object")
     
     
     def doSackFilelistPopulate(self):
@@ -4184,3 +4194,14 @@ class YumBase(depsolve.Depsolve):
             return False
             
         return True    
+
+    def return_running_packages(self):
+        """returns a list of yum installed package objects which own a file
+           that are currently running or in use."""
+        pkgs = {}
+        for pid in misc.return_running_pids():
+            for fn in misc.get_open_files(pid):
+                for pkg in self.rpmdb.searchFiles(fn):
+                    pkgs[pkg] = 1
+
+        return sorted(pkgs.keys())
commit cbc7279fe6b0041bc48d2c6855a71d1007157933
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Tue Dec 8 16:22:43 2009 -0500

    add two functions to get list of processes and return the files
    the processes have open

diff --git a/yum/misc.py b/yum/misc.py
index 642f9a2..bfebc38 100644
--- a/yum/misc.py
+++ b/yum/misc.py
@@ -873,3 +873,33 @@ def get_my_lang_code():
     
     return mylang
     
+def return_running_pids():
+    """return list of running processids, excluding this one"""
+    mypid = os.getpid()
+    pids = []
+    for fn in glob.glob('/proc/[0123456789]*'):
+        if mypid == os.path.basename(fn):
+            continue
+        pids.append(os.path.basename(fn))
+    return pids
+
+def get_open_files(pid):
+    """returns files open from this pid"""
+    files = []
+    smaps = '/proc/%s/smaps' % pid
+    try:
+        maps = open(smaps, 'r')
+    except (IOError, OSError), e:
+        return files
+
+    for line in maps.readlines():
+        if line.find('fd:') == -1:
+            continue
+        line = line.replace('\n', '')
+        slash = line.find('/')
+        filename = line[slash:]
+        filename = filename.replace('(deleted)', '') #only mildly retarded
+        filename = filename.strip()
+        if filename not in files:
+            files.append(filename)
+    return files
commit 634df8d2c68e8e7b7ecdcf819d3895dd27cfc64a
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Tue Dec 8 16:22:14 2009 -0500

    add missing warnings import

diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index 7b8d202..e50edb1 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -37,6 +37,7 @@ from yum.misc import seq_max_split
 from yum.i18n import to_utf8, to_unicode
 import sys
 import re
+import warnings
 
 def catchSqliteException(func):
     """This decorator converts sqlite exceptions into RepoError"""


More information about the Yum-commits mailing list