From 78286bd90e9c4ec9866edb1b69e00263aca2bfa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Mon, 27 Jun 2005 21:14:28 +0000 Subject: [PATCH] * installdb'yi class yap * file locking implement et yamuk yumuk bicimde, oldugu kadar artik --- pisi/dependency.py | 2 +- pisi/install.py | 2 +- pisi/installdb.py | 118 ++++++++++++++++++++++------------------ tests/installdbtests.py | 2 +- 4 files changed, 69 insertions(+), 55 deletions(-) diff --git a/pisi/dependency.py b/pisi/dependency.py index f455bcc0..7d1f6410 100644 --- a/pisi/dependency.py +++ b/pisi/dependency.py @@ -1,7 +1,7 @@ # dependency analyzer # Author: Eray Ozkural -import installdb +from installdb import installdb import packagedb from ui import ui from version import Version diff --git a/pisi/install.py b/pisi/install.py index d9336979..c1adefa3 100644 --- a/pisi/install.py +++ b/pisi/install.py @@ -8,7 +8,7 @@ from package import Package import util from config import config from ui import ui -import installdb +from installdb import installdb import packagedb import dependency from metadata import MetaData diff --git a/pisi/installdb.py b/pisi/installdb.py index 4d270c35..8681f0a5 100644 --- a/pisi/installdb.py +++ b/pisi/installdb.py @@ -3,70 +3,84 @@ # Author: Eray Ozkural -import os +import os, fcntl import bsddb.dbshelve as shelve from config import config import util -util.check_dir(config.db_dir()) -d = shelve.open(config.db_dir() + '/install.bdb') -files_dir = config.db_dir() + "/files" - class InstallDBError(Exception): pass -def files_name(pkg, version, release): - return str(files_dir + '/' + pkg + '-' + version + '-' + release + '.xml') +class InstallDB: -def files(pkg): - pkg = str(pkg) - (status, version, release) = d[pkg] - return file(files_name(pkg,version,release)) + def __init__(self): + util.check_dir(config.db_dir()) + self.db_filename = os.path.join(config.db_dir(), 'install.bdb') + self.d = shelve.open(self.db_filename) + self.files_dir = os.path.join(config.db_dir(), 'files') + self.fdummy = open(self.db_filename) + fcntl.flock(self.fdummy, fcntl.LOCK_EX) -def is_recorded(pkg): - pkg = str(pkg) - return d.has_key(pkg) + def __del__(self): + #fcntl.flock(self.fdummy, fcntl.LOCK_UN) + self.fdummy.close() + + def files_name(self, pkg, version, release): + fn = pkg + '-' + version + '-' + release + '.xml' + return os.path.join(self.files_dir, fn) -def is_installed(pkg): - pkg = str(pkg) - if is_recorded(pkg): - (status, version, release) = d[pkg] - return status=='i' - else: - return False + def files(self, pkg): + pkg = str(pkg) + (status, version, release) = self.d[pkg] + return file(self.files_name(pkg,version,release)) -def get_version(pkg): - pkg = str(pkg) - (status, version, release) = d[pkg] - return (version, release) + def is_recorded(self, pkg): + pkg = str(pkg) + return self.d.has_key(pkg) -def is_removed(pkg): - pkg = str(pkg) - if is_recorded(pkg): - (status, version, release) = d[pkg] - return status=='r' - else: - return False + def is_installed(self, pkg): + pkg = str(pkg) + if self.is_recorded(pkg): + (status, version, release) = self.d[pkg] + return status=='i' + else: + return False -def install(pkg, version, release, files_xml): - """install package with specific version and release""" - pkg = str(pkg) - if is_installed(pkg): - raise InstallDBError("already installed") - d[pkg] = ('i', version, release) - util.copy_file(files_xml, files_name(pkg, version, release)) - -def remove(pkg): - pkg = str(pkg) - (status, version, release) = d[pkg] - d[pkg] = ('r', version, release) + def get_version(self, pkg): + pkg = str(pkg) + (status, version, release) = self.d[pkg] + return (version, release) + + def is_removed(self, pkg): + pkg = str(pkg) + if self.is_recorded(pkg): + (status, version, release) = self.d[pkg] + return status=='r' + else: + return False + + def install(self, pkg, version, release, files_xml): + """install package with specific version and release""" + pkg = str(pkg) + if self.is_installed(pkg): + raise InstallDBError("already installed") + self.d[pkg] = ('i', version, release) + util.copy_file(files_xml, self.files_name(pkg, version, release)) + + def remove(self, pkg): + pkg = str(pkg) + (status, version, release) = self.d[pkg] + self.d[pkg] = ('r', version, release) + + def purge(self, pkg): + pkg = str(pkg) + if self.d.has_key(pkg): + (status, version, release) = self.d[pkg] + f = self.files_name(pkg, version, release) + if util.check_file(f): + os.unlink(f) + del self.d[pkg] + +installdb = InstallDB() -def purge(pkg): - pkg = str(pkg) - if d.has_key(pkg): - (status, version, release) = d[pkg] - f = files_name(pkg, version, release) - if util.check_file(f): - os.unlink(f) - del d[pkg] diff --git a/tests/installdbtests.py b/tests/installdbtests.py index e2d6c6b0..7d244265 100644 --- a/tests/installdbtests.py +++ b/tests/installdbtests.py @@ -2,7 +2,7 @@ import unittest import os -from pisi import installdb +from pisi.installdb import installdb from pisi import util from pisi.config import config