[Yum-devel] [PATCH] Work when we can't open history (non-root), provide a .readable for callers
James Antill
james at and.org
Mon Mar 22 18:21:18 UTC 2010
---
yum/history.py | 34 ++++++++++++++++++++++++++++++++--
1 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/yum/history.py b/yum/history.py
index 2707cac..3ef5f74 100644
--- a/yum/history.py
+++ b/yum/history.py
@@ -178,6 +178,7 @@ class YumHistory:
self.conf = yum.misc.GenericHolder()
self.conf.db_path = os.path.normpath(root + '/' + db_path)
self.conf.writable = False
+ self.conf.readable = True
if not os.path.exists(self.conf.db_path):
try:
@@ -214,7 +215,15 @@ class YumHistory:
def _get_cursor(self):
if self._conn is None:
- self._conn = sqlite.connect(self._db_file)
+ if not self.conf.readable:
+ return None
+
+ try:
+ self._conn = sqlite.connect(self._db_file)
+ except sqlite.OperationalError:
+ self.conf.readable = False
+ return None
+
return self._conn.cursor()
def _commit(self):
return self._conn.commit()
@@ -291,6 +300,8 @@ class YumHistory:
def trans_with_pid(self, pid):
cur = self._get_cursor()
+ if cur is None:
+ return None
res = executeSQL(cur,
"""INSERT INTO trans_with_pkgs
(tid, pkgtupid)
@@ -302,6 +313,8 @@ class YumHistory:
if not hasattr(self, '_tid') or state is None:
return # Not configured to run
cur = self._get_cursor()
+ if cur is None:
+ return # Should never happen, due to above
res = executeSQL(cur,
"""INSERT INTO trans_data_pkgs
(tid, pkgtupid, state)
@@ -313,6 +326,8 @@ class YumHistory:
return # Not configured to run
cur = self._get_cursor()
+ if cur is None:
+ return # Should never happen, due to above
res = executeSQL(cur,
"""UPDATE trans_data_pkgs SET done = ?
WHERE tid = ? AND pkgtupid = ? AND state = ?
@@ -322,6 +337,8 @@ class YumHistory:
def beg(self, rpmdb_version, using_pkgs, txmbrs):
cur = self._get_cursor()
+ if cur is None:
+ return
res = executeSQL(cur,
"""INSERT INTO trans_beg
(timestamp, rpmdb_version, loginuid)
@@ -343,6 +360,8 @@ class YumHistory:
def _log_errors(self, errors):
cur = self._get_cursor()
+ if cur is None:
+ return
for error in errors:
error = to_unicode(error)
executeSQL(cur,
@@ -356,6 +375,8 @@ class YumHistory:
return # Not configured to run
cur = self._get_cursor()
+ if cur is None:
+ return # Should never happen, due to above
for error in msg.split('\n'):
error = to_unicode(error)
executeSQL(cur,
@@ -387,7 +408,11 @@ class YumHistory:
def end(self, rpmdb_version, return_code, errors=None):
assert return_code or not errors
+ if not hasattr(self, '_tid'):
+ return # Failed at beg() time
cur = self._get_cursor()
+ if cur is None:
+ return # Should never happen, due to above
res = executeSQL(cur,
"""INSERT INTO trans_end
(tid, timestamp, rpmdb_version, return_code)
@@ -444,6 +469,8 @@ class YumHistory:
""" Return a list of the last transactions, note that this includes
partial transactions (ones without an end transaction). """
cur = self._get_cursor()
+ if cur is None:
+ return []
sql = """SELECT tid,
trans_beg.timestamp AS beg_ts,
trans_beg.rpmdb_version AS beg_rv,
@@ -551,6 +578,10 @@ class YumHistory:
packages al. la. "yum list". Returns transaction ids. """
# Search packages ... kind of sucks that it's search not list, pkglist?
+ cur = self._get_cursor()
+ if cur is None:
+ return set()
+
data = _setupHistorySearchSQL(patterns, ignore_case)
(need_full, patterns, fields, names) = data
@@ -559,7 +590,6 @@ class YumHistory:
for row in self._yieldSQLDataList(patterns, fields, ignore_case):
pkgtupids.add(row[0])
- cur = self._get_cursor()
sql = """SELECT tid FROM trans_data_pkgs WHERE pkgtupid IN """
sql += "(%s)" % ",".join(['?'] * len(pkgtupids))
params = list(pkgtupids)
--
1.6.6.1
More information about the Yum-devel
mailing list