* installdb'yi class yap

* file locking implement et yamuk yumuk bicimde, oldugu kadar artik
This commit is contained in:
Eray Özkural
2005-06-27 21:14:28 +00:00
parent 3b067fe0c1
commit 78286bd90e
4 changed files with 69 additions and 55 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
# dependency analyzer # dependency analyzer
# Author: Eray Ozkural <eray@uludag.org.tr> # Author: Eray Ozkural <eray@uludag.org.tr>
import installdb from installdb import installdb
import packagedb import packagedb
from ui import ui from ui import ui
from version import Version from version import Version
+1 -1
View File
@@ -8,7 +8,7 @@ from package import Package
import util import util
from config import config from config import config
from ui import ui from ui import ui
import installdb from installdb import installdb
import packagedb import packagedb
import dependency import dependency
from metadata import MetaData from metadata import MetaData
+65 -51
View File
@@ -3,70 +3,84 @@
# Author: Eray Ozkural <eray@uludag.org.tr> # Author: Eray Ozkural <eray@uludag.org.tr>
import os import os, fcntl
import bsddb.dbshelve as shelve import bsddb.dbshelve as shelve
from config import config from config import config
import util 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): class InstallDBError(Exception):
pass pass
def files_name(pkg, version, release): class InstallDB:
return str(files_dir + '/' + pkg + '-' + version + '-' + release + '.xml')
def files(pkg): def __init__(self):
pkg = str(pkg) util.check_dir(config.db_dir())
(status, version, release) = d[pkg] self.db_filename = os.path.join(config.db_dir(), 'install.bdb')
return file(files_name(pkg,version,release)) 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): def __del__(self):
pkg = str(pkg) #fcntl.flock(self.fdummy, fcntl.LOCK_UN)
return d.has_key(pkg) self.fdummy.close()
def is_installed(pkg): def files_name(self, pkg, version, release):
pkg = str(pkg) fn = pkg + '-' + version + '-' + release + '.xml'
if is_recorded(pkg): return os.path.join(self.files_dir, fn)
(status, version, release) = d[pkg]
return status=='i'
else:
return False
def get_version(pkg): def files(self, pkg):
pkg = str(pkg) pkg = str(pkg)
(status, version, release) = d[pkg] (status, version, release) = self.d[pkg]
return (version, release) return file(self.files_name(pkg,version,release))
def is_removed(pkg): def is_recorded(self, pkg):
pkg = str(pkg) pkg = str(pkg)
if is_recorded(pkg): return self.d.has_key(pkg)
(status, version, release) = d[pkg]
return status=='r'
else:
return False
def install(pkg, version, release, files_xml): def is_installed(self, pkg):
"""install package with specific version and release""" pkg = str(pkg)
pkg = str(pkg) if self.is_recorded(pkg):
if is_installed(pkg): (status, version, release) = self.d[pkg]
raise InstallDBError("already installed") return status=='i'
d[pkg] = ('i', version, release) else:
util.copy_file(files_xml, files_name(pkg, version, release)) return False
def remove(pkg): def get_version(self, pkg):
pkg = str(pkg) pkg = str(pkg)
(status, version, release) = d[pkg] (status, version, release) = self.d[pkg]
d[pkg] = ('r', version, release) 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]
+1 -1
View File
@@ -2,7 +2,7 @@
import unittest import unittest
import os import os
from pisi import installdb from pisi.installdb import installdb
from pisi import util from pisi import util
from pisi.config import config from pisi.config import config