* fix: remove_item, delete item from dict only when it is present
* fix: remove log files, too. due to a bug in bsddb3 we can't use dbremove
This commit is contained in:
+8
-2
@@ -336,16 +336,22 @@ def rebuild_db(files=False):
|
|||||||
|
|
||||||
def destroy(files):
|
def destroy(files):
|
||||||
#from pisi.lockeddbshelve import LockedDBShelf
|
#from pisi.lockeddbshelve import LockedDBShelf
|
||||||
|
#TODO: either don't delete version files here, or remove force flag...
|
||||||
|
import bsddb3.db
|
||||||
|
pisi.lockeddbshelve.init_dbenv(write=True)
|
||||||
for db in os.listdir(ctx.config.db_dir()):
|
for db in os.listdir(ctx.config.db_dir()):
|
||||||
if db.endswith('.bdb'): # delete only db files
|
if db.endswith('.bdb') or db.startswith('log'): # delete only db files
|
||||||
if db.startswith('files') or db.startswith('filesdbversion'):
|
if db.startswith('files') or db.startswith('filesdbversion'):
|
||||||
clean = files
|
clean = files
|
||||||
else:
|
else:
|
||||||
clean = True
|
clean = True
|
||||||
if clean:
|
if clean:
|
||||||
fn = pisi.util.join_path(ctx.config.db_dir(), db)
|
fn = pisi.util.join_path(ctx.config.db_dir(), db)
|
||||||
#ctx.dbenv.dbremove(fn)
|
#FIXME: there is a bug with bsddb3
|
||||||
|
#ctx.dbenv.dbremove(fn, "", None, bsddb3.db.DB_AUTO_COMMIT)
|
||||||
|
# ctx.dbenv.dbremove(file=fn, flags=bsddb3.db.DB_AUTO_COMMIT)
|
||||||
os.unlink(fn)
|
os.unlink(fn)
|
||||||
|
#ctx.dbenv.close()
|
||||||
|
|
||||||
def reload(files, txn):
|
def reload(files, txn):
|
||||||
for package_fn in os.listdir( pisi.util.join_path( ctx.config.lib_dir(),
|
for package_fn in os.listdir( pisi.util.join_path( ctx.config.lib_dir(),
|
||||||
|
|||||||
@@ -145,7 +145,9 @@ class ItemByRepoDB(object):
|
|||||||
repo = str(repo)
|
repo = str(repo)
|
||||||
def proc(txn):
|
def proc(txn):
|
||||||
s = self.d.get(name, txn)
|
s = self.d.get(name, txn)
|
||||||
del s[self.repo_str(repo)]
|
repostr = self.repo_str(repo)
|
||||||
|
if s.has_key(repostr):
|
||||||
|
del s[repostr]
|
||||||
if (len(s)==0):
|
if (len(s)==0):
|
||||||
self.d.delete(name, txn)
|
self.d.delete(name, txn)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -61,11 +61,11 @@ def check_dbversion(versionfile, ver, write=False, force=False):
|
|||||||
else:
|
else:
|
||||||
raise Error(_('Cannot attain write access to database environment'))
|
raise Error(_('Cannot attain write access to database environment'))
|
||||||
|
|
||||||
def init_dbenv(write=False):
|
def init_dbenv(write=False, writeversion=False):
|
||||||
if os.access(pisi.context.config.db_dir(), os.R_OK):
|
if os.access(pisi.context.config.db_dir(), os.R_OK):
|
||||||
# try to read version
|
# try to read version
|
||||||
check_dbversion('dbversion', pisi.__dbversion__, write=write)
|
check_dbversion('dbversion', pisi.__dbversion__, write=writeversion)
|
||||||
check_dbversion('filesdbversion', pisi.__filesdbversion__, write=write)
|
check_dbversion('filesdbversion', pisi.__filesdbversion__, write=writeversion)
|
||||||
else:
|
else:
|
||||||
raise Error(_('Cannot attain read access to database environment'))
|
raise Error(_('Cannot attain read access to database environment'))
|
||||||
if os.access(pisi.context.config.db_dir(), os.W_OK):
|
if os.access(pisi.context.config.db_dir(), os.W_OK):
|
||||||
|
|||||||
Reference in New Issue
Block a user