[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