From 1f31a3d6df48678b4afa1e0f4d3785b8766a291c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Mon, 13 Jun 2005 13:47:18 +0000 Subject: [PATCH] * specfile: parse history, too * first implementation of packagedb and sourcedb - we are now using the more modern bsddb.dbshelve implementation which uses cPickle and berkeley db * util: TODO: file ops --- src/pisi/installdb.py | 8 +++----- src/pisi/packagedb.py | 13 ++++++++++++- src/pisi/sourcedb.py | 18 ++++++++++++++++++ src/pisi/specfile.py | 11 ++++++++++- src/pisi/util.py | 13 ++++++++++++- 5 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 src/pisi/sourcedb.py diff --git a/src/pisi/installdb.py b/src/pisi/installdb.py index 464e7ce9..ae223f99 100644 --- a/src/pisi/installdb.py +++ b/src/pisi/installdb.py @@ -3,13 +3,11 @@ # maintainer: eray and caglar import config -import shelve import util +import bsddb.dbshelve as shelve util.check_dir( config.db_dir() ) - -d = shelve.open( config.db_dir() + '/install.dbm') - +d = shelve.open( config.db_dir() + '/install.bdb') files_dir = config.archives_dir() + "/files" class InstallDBError(Exception): @@ -38,7 +36,7 @@ def remove( name, version, release): d[key] = 'r' def purge( name, version, release): - d.delete(key) util.remove_file( files_name( name, version, release) ) + del d[key] diff --git a/src/pisi/packagedb.py b/src/pisi/packagedb.py index bb4f5d56..896e1852 100644 --- a/src/pisi/packagedb.py +++ b/src/pisi/packagedb.py @@ -3,6 +3,17 @@ # interface for update/query to local package repository # maintainer: eray and caglar -import shelve +# we basically store everything in PackageInfo class +# yes, we are cheap +import bsddb.dbshelve as shelve + +util.check_dir( config.db_dir() ) +d = shelve.open( config.db_dir() + '/package.bdb') + +def add_package( name, package_info ): + d[name] = package_info + +def remove_package(name): + del d[name] diff --git a/src/pisi/sourcedb.py b/src/pisi/sourcedb.py new file mode 100644 index 00000000..7760a520 --- /dev/null +++ b/src/pisi/sourcedb.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# package source database +# interface for update/query to local package repository +# maintainer: eray and caglar + +# we basically store everything in sourceinfo class (?) +# yes, we are cheap + +import bsddb.dbshelve as shelve + +util.check_dir( config.db_dir() ) +d = shelve.open( config.db_dir() + '/source.bdb') + +def add_source( name, source_info ): + d[name] = package_info + +def remove_source(name): + del d[name] diff --git a/src/pisi/specfile.py b/src/pisi/specfile.py index 03f0fa56..fdff9c83 100644 --- a/src/pisi/specfile.py +++ b/src/pisi/specfile.py @@ -19,6 +19,12 @@ class DepInfo: self.package = getNodeText(node).strip() self.versionFrom = getNodeAttribute(node, "versionFrom") +class HistoryInfo: + def __init__(self, node): + self.date = getNodeText(getNode(node, "Date")) + self.version = getNodeText(getNode(node, "Version")) + self.release = getNodeText(getNode(node, "Release")) + class PathInfo: def __init__(self, node): self.pathname = getNodeText(node) @@ -59,10 +65,13 @@ class SpecFile(XmlFile): buildDepElts = self.getChildElts("Source/BuildDependencies") self.buildDeps = [DepInfo(d) for d in buildDepElts] + historyElts = self.getAllNodes("History/Update") + self.history = [HistoryInfo(x) for x in historyElts] + # find all binary packages packageElts = self.getAllNodes("Package") self.packages = [PackageInfo(p) for p in packageElts] - + def verify(self): """Verify PSPEC structures, are they what we want of them?""" return True diff --git a/src/pisi/util.py b/src/pisi/util.py index 91d06f39..0eab5480 100644 --- a/src/pisi/util.py +++ b/src/pisi/util.py @@ -8,7 +8,7 @@ import md5 # check if directory exists, and create if it doesn't # works recursively -# FIXME: could hav a better name +# FIXME: could have a better name def check_dir(dir): dir = dir.rstrip() dir = dir.rstrip("/") @@ -19,6 +19,17 @@ def check_dir(dir): check_dir(parent_dir) os.mkdir(dir) +# TODO: +def copy_file(): + pass + +def remove_file(): + # unlink file + pass + +def copy_dir(): + pass + def md5_file(filename): m = md5.new() f = file(filename, 'rb')