* installdb'yi class yap
* file locking implement et yamuk yumuk bicimde, oldugu kadar artik
This commit is contained in:
+1
-1
@@ -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
@@ -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
|
||||||
|
|||||||
+48
-34
@@ -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):
|
||||||
|
fn = pkg + '-' + version + '-' + release + '.xml'
|
||||||
|
return os.path.join(self.files_dir, fn)
|
||||||
|
|
||||||
|
def files(self, pkg):
|
||||||
pkg = str(pkg)
|
pkg = str(pkg)
|
||||||
if is_recorded(pkg):
|
(status, version, release) = self.d[pkg]
|
||||||
(status, version, release) = d[pkg]
|
return file(self.files_name(pkg,version,release))
|
||||||
|
|
||||||
|
def is_recorded(self, pkg):
|
||||||
|
pkg = str(pkg)
|
||||||
|
return self.d.has_key(pkg)
|
||||||
|
|
||||||
|
def is_installed(self, pkg):
|
||||||
|
pkg = str(pkg)
|
||||||
|
if self.is_recorded(pkg):
|
||||||
|
(status, version, release) = self.d[pkg]
|
||||||
return status=='i'
|
return status=='i'
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_version(pkg):
|
def get_version(self, pkg):
|
||||||
pkg = str(pkg)
|
pkg = str(pkg)
|
||||||
(status, version, release) = d[pkg]
|
(status, version, release) = self.d[pkg]
|
||||||
return (version, release)
|
return (version, release)
|
||||||
|
|
||||||
def is_removed(pkg):
|
def is_removed(self, pkg):
|
||||||
pkg = str(pkg)
|
pkg = str(pkg)
|
||||||
if is_recorded(pkg):
|
if self.is_recorded(pkg):
|
||||||
(status, version, release) = d[pkg]
|
(status, version, release) = self.d[pkg]
|
||||||
return status=='r'
|
return status=='r'
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def install(pkg, version, release, files_xml):
|
def install(self, pkg, version, release, files_xml):
|
||||||
"""install package with specific version and release"""
|
"""install package with specific version and release"""
|
||||||
pkg = str(pkg)
|
pkg = str(pkg)
|
||||||
if is_installed(pkg):
|
if self.is_installed(pkg):
|
||||||
raise InstallDBError("already installed")
|
raise InstallDBError("already installed")
|
||||||
d[pkg] = ('i', version, release)
|
self.d[pkg] = ('i', version, release)
|
||||||
util.copy_file(files_xml, files_name(pkg, version, release))
|
util.copy_file(files_xml, self.files_name(pkg, version, release))
|
||||||
|
|
||||||
def remove(pkg):
|
def remove(self, pkg):
|
||||||
pkg = str(pkg)
|
pkg = str(pkg)
|
||||||
(status, version, release) = d[pkg]
|
(status, version, release) = self.d[pkg]
|
||||||
d[pkg] = ('r', version, release)
|
self.d[pkg] = ('r', version, release)
|
||||||
|
|
||||||
def purge(pkg):
|
def purge(self, pkg):
|
||||||
pkg = str(pkg)
|
pkg = str(pkg)
|
||||||
if d.has_key(pkg):
|
if self.d.has_key(pkg):
|
||||||
(status, version, release) = d[pkg]
|
(status, version, release) = self.d[pkg]
|
||||||
f = files_name(pkg, version, release)
|
f = self.files_name(pkg, version, release)
|
||||||
if util.check_file(f):
|
if util.check_file(f):
|
||||||
os.unlink(f)
|
os.unlink(f)
|
||||||
del d[pkg]
|
del self.d[pkg]
|
||||||
|
|
||||||
|
installdb = InstallDB()
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user