From ebd5d2e480d7e7fa25ef0fa6ef900bc5c1041b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Wed, 19 Apr 2006 23:35:47 +0000 Subject: [PATCH] * we now store metadatas instead of package objects, no info loss, this is working towards fixing a bug * fix: pardus-1 doesn't work this version of pisi so back to pardus-1-test * fix: index dir might not be there, and use index_dir() --- pisi-cli | 2 +- pisi/__init__.py | 4 ++-- pisi/api.py | 13 +++++++------ pisi/cli/commands.py | 4 ++-- pisi/packagedb.py | 43 +++++++++++++++++++++++++++++++++---------- 5 files changed, 45 insertions(+), 21 deletions(-) diff --git a/pisi-cli b/pisi-cli index 6d9ef4e7..432dc1bd 100755 --- a/pisi-cli +++ b/pisi-cli @@ -41,7 +41,7 @@ def handle_exception(exception, value, tb): elif isinstance(value, db.DBRunRecoveryError): ui.error(_("""A database operation has been aborted. You should run pisi again for normal DB recovery procedure. Make sure you have free disk space. -You have to run rebuild-db only when there is file corruption.""")) +You have to run rebuild-db only when there is file corruption and database upgrades.""")) elif isinstance(value, pisi.Exception): show_traceback = True ui.error(_("""Unhandled internal exception. diff --git a/pisi/__init__.py b/pisi/__init__.py index 2e1f514d..6a9c7d9b 100644 --- a/pisi/__init__.py +++ b/pisi/__init__.py @@ -12,9 +12,9 @@ # PiSi version -__version__ = "1.0.7" +__version__ = "1.0.8" -__dbversion__ = "1.0.7" +__dbversion__ = "1.0.8" __filesdbversion__ = "1.0.5" # yes, this is the real bottleneck __all__ = [ 'api', 'config', 'packagedb', 'installdb', 'search' ] diff --git a/pisi/api.py b/pisi/api.py index 9dfaabef..29140ae2 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -416,12 +416,13 @@ def rebuild_db(files=False): pisi.api.resurrect_package(package_fn, files, txn) def reload_indexes(txn): - for repo in os.listdir( pisi.util.join_path( ctx.config.lib_dir(), - 'index' ) ): - indexuri = pisi.util.join_path(ctx.config.lib_dir(), 'index', repo, 'uri') - indexuri = open(indexuri, 'r').readline() - pisi.api.add_repo(repo, indexuri) - pisi.api.rebuild_repo(repo) + index_dir = ctx.config.index_dir() + if os.path.exists(index_dir): # it may have been erased, or we may be upgrading from a previous version -- exa + for repo in os.listdir(index_dir): + indexuri = pisi.util.join_path(ctx.config.lib_dir(), 'index', repo, 'uri') + indexuri = open(indexuri, 'r').readline() + pisi.api.add_repo(repo, indexuri) + pisi.api.rebuild_repo(repo) # check db schema versions try: diff --git a/pisi/cli/commands.py b/pisi/cli/commands.py index 2e38141a..174e9ae1 100644 --- a/pisi/cli/commands.py +++ b/pisi/cli/commands.py @@ -890,8 +890,8 @@ NB: We support only local files (e.g., /a/b/c) and http:// URIs at the moment name = self.args[0] indexuri = self.args[1] else: - name = 'pardus-1' - indexuri = 'http://paketler.pardus.org.tr/pardus-1/pisi-index.xml' + name = 'pardus-1-test' + indexuri = 'http://paketler.pardus.org.tr/pardus-1-test/pisi-index.xml.bz2' pisi.api.add_repo(name, indexuri) if ctx.ui.confirm(_('Update PISI database for repository %s?') % name): pisi.api.update_repo(name) diff --git a/pisi/packagedb.py b/pisi/packagedb.py index f09416b7..138e319f 100644 --- a/pisi/packagedb.py +++ b/pisi/packagedb.py @@ -16,7 +16,7 @@ # Authors: Eray Ozkural # Baris Metin -# we basically store everything in PackageInfo class +# we basically store everything in MetaData # yes, we are cheap import os @@ -33,6 +33,7 @@ import pisi.context as ctx import pisi.lockeddbshelve as shelve from pisi.itembyrepodb import ItemByRepoDB import pisi.itembyrepodb as itembyrepodb +from pisi.metadata import MetaData class Error(pisi.Error): pass @@ -58,18 +59,28 @@ class PackageDB(object): self.d.destroy() self.dr.destroy() + def has_metadata(self, name, repo=None, txn = None): + return self.d.has_key(name, repo, txn=txn) + def has_package(self, name, repo=None, txn = None): return self.d.has_key(name, repo, txn=txn) - def get_package(self, name, repo=None, txn = None): + def get_metadata(self, name, repo=None, txn = None): try: return self.d.get_item(name, repo, txn=txn) except pisi.itembyrepodb.NotfoundError, e: raise Error(_('Package %s not found') % name) - def get_package_repo(self, name, repo=None, txn = None): + def get_package(self, name, repo=None, txn = None): + return self.get_metadata(name, repo, txn).package + + def get_metadata_repo(self, name, repo=None, txn = None): return self.d.get_item_repo(name, repo, txn=txn) + def get_package_repo(self, name, repo=None, txn = None): + metadata, repo = self.get_metadata_repo(name, repo, txn=txn) + return metadata.package, repo + def which_repo(self, name, txn = None): return self.d.which_repo(name, txn=txn) @@ -79,14 +90,18 @@ class PackageDB(object): else: return [] - def list_packages(self, repo=None, show_tracking=False): + def list_metadatas(self, repo=None, show_tracking=False): return self.d.list(repo, show_tracking=show_tracking) - def add_package(self, package_info, repo, txn = None): + def list_packages(self, repo=None, show_tracking=False): + return self.list_metadatas(repo, show_tracking) + + def add_metadata(self, metadata, repo, txn = None): + package_info = metadata.package name = str(package_info.name) def proc(txn): - self.d.add_item(name, package_info, repo, txn) + self.d.add_item(name, metadata, repo, txn) for dep in package_info.runtimeDependencies(): dep_name = str(dep.package) if self.dr.has_key(dep_name, None, txn): @@ -105,17 +120,22 @@ class PackageDB(object): for (lang, doc) in package_info.description.iteritems(): if lang in ['en', 'tr']: pisi.search.add_doc('description', lang, package_info.name, doc, txn) - ctx.txn_proc(proc, txn) + def add_package(self, package_info, repo, txn = None): + metadata = MetaData() + metadata.package = package_info + self.add_metadata(metadata, repo, txn) + def clear(self, txn = None): self.d.clear() self.dr.clear() - def remove_package(self, name, repo = None, txn = None): + def remove_metadata(self, name, repo = None, txn = None): name = str(name) def proc(txn): - package_info = self.d.get_item(name, repo, txn=txn) + metadata = self.d.get_item(name, repo, txn=txn) + package_info = metadata.package self.d.remove_item(name, repo, txn=txn) if self.dr.has_key(name, repo, txn=txn): self.dr.remove_item(name, repo, txn=txn) @@ -123,7 +143,10 @@ class PackageDB(object): if type(repo)==types.StringType: ctx.componentdb.remove_package(package_info.partOf, package_info.name, txn) self.d.txn_proc(proc, txn) - + + def remove_package(self, name, repo = None, txn = None): + return self.remove_metadata(name, repo. txn) + def remove_repo(self, repo, txn = None): def proc(txn): self.d.remove_repo(repo, txn=txn)