From 2a1ebc299e2e109e2a1ba66e5d6b54d78c270f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Thu, 8 Dec 2005 19:49:03 +0000 Subject: [PATCH] * txn protect virtual install too --- pisi/atomicoperations.py | 21 ++++++++++++--------- pisi/cli/commands.py | 2 +- pisi/context.py | 3 ++- pisi/file.py | 2 +- tests/archivetests.py | 1 - 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/pisi/atomicoperations.py b/pisi/atomicoperations.py index b3e6cee1..e8afa1e3 100644 --- a/pisi/atomicoperations.py +++ b/pisi/atomicoperations.py @@ -409,18 +409,18 @@ def __is_virtual_upgrade(metadata): return upgrade -def virtual_install(metadata, files): +def virtual_install(metadata, files, txn): """Recreate the package info for rebuilddb command""" pkg = metadata.package # normally this can't be true. Just for backward compatibility # TODO: for speed only ctx.installdb.install exception can be # handled but this is much cleaner - if ctx.installdb.is_installed(pkg.name): + if ctx.installdb.is_installed(pkg.name, txn): if __is_virtual_upgrade(metadata): - ctx.installdb.remove(pkg.name) - packagedb.remove_package(pkg.name) - ctx.filesdb.remove_files(ctx.installdb.files(pkg.name)) + ctx.installdb.remove(pkg.name, txn) + packagedb.remove_package(pkg.name, txn) + ctx.filesdb.remove_files(ctx.installdb.files(pkg.name), txn) else: return @@ -431,13 +431,14 @@ def virtual_install(metadata, files): metadata.package.version, metadata.package.release, metadata.package.build, - metadata.package.distribution) + metadata.package.distribution, + txn) # filesdb - ctx.filesdb.add_files(metadata.package.name, files) + ctx.filesdb.add_files(metadata.package.name, files, txn) # installed packages - packagedb.inst_packagedb.add_package(pkginfo) + packagedb.inst_packagedb.add_package(pkginfo, txn) def resurrect_package(package_fn): """Resurrect the package in the PiSi databases""" @@ -479,6 +480,8 @@ def resurrect_package(package_fn): raise Error, _("Invalid %s") % ctx.const.files_xml import pisi.atomicoperations - pisi.atomicoperations.virtual_install(metadata, files) + def f(txn): + pisi.atomicoperations.virtual_install(metadata, files, txn) + ctx.txn_proc(f) if not passed: ctx.ui.info(_('OK.')) diff --git a/pisi/cli/commands.py b/pisi/cli/commands.py index 83a5ae50..ba82885d 100644 --- a/pisi/cli/commands.py +++ b/pisi/cli/commands.py @@ -666,7 +666,7 @@ If package specs are given, they should be the names of package dirs under /var/ os.unlink(pisi.util.join_path(ctx.config.db_dir(), db)) self.init(database=True) self.rebuild_db() - verfn = join_path(pisi.context.config.db_dir(), 'dbversion') + verfn = util.join_path(pisi.context.config.db_dir(), 'dbversion') verfile = file(verfn, 'w') verfile.write(pisi.__dbversion__) verfile.close() diff --git a/pisi/context.py b/pisi/context.py index 12a2218b..dc8da1b8 100644 --- a/pisi/context.py +++ b/pisi/context.py @@ -42,8 +42,9 @@ initialized = False # """ Register a UI implementation""" # ui = _impl +import bsddb3.db as db -def txn_proc(proc, txn): +def txn_proc(proc, txn = None): # can be used to txn protect a method automatically assert dbenv if not txn: diff --git a/pisi/file.py b/pisi/file.py index eb621e2a..996c354f 100644 --- a/pisi/file.py +++ b/pisi/file.py @@ -59,7 +59,7 @@ class File: def __init__(self, uri, mode, transfer_dir = "/tmp"): "it is pointless to open a file without a URI and a mode" - uri = make_uri(uri) + uri = File.make_uri(uri) if mode==File.read or mode==File.write: self.mode = mode else: diff --git a/tests/archivetests.py b/tests/archivetests.py index d49a8091..53e2e2e5 100644 --- a/tests/archivetests.py +++ b/tests/archivetests.py @@ -19,7 +19,6 @@ from pisi import archive from pisi import sourcearchive from pisi import fetcher from pisi import util -#from pisi.build import BuildContext from pisi.specfile import SpecFile from pisi import uri