* 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()
This commit is contained in:
Eray Özkural
2006-04-19 23:35:47 +00:00
parent efb8c66ce5
commit ebd5d2e480
5 changed files with 45 additions and 21 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ def handle_exception(exception, value, tb):
elif isinstance(value, db.DBRunRecoveryError): elif isinstance(value, db.DBRunRecoveryError):
ui.error(_("""A database operation has been aborted. You should run pisi 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. 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): elif isinstance(value, pisi.Exception):
show_traceback = True show_traceback = True
ui.error(_("""Unhandled internal exception. ui.error(_("""Unhandled internal exception.
+2 -2
View File
@@ -12,9 +12,9 @@
# PiSi version # 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 __filesdbversion__ = "1.0.5" # yes, this is the real bottleneck
__all__ = [ 'api', 'config', 'packagedb', 'installdb', 'search' ] __all__ = [ 'api', 'config', 'packagedb', 'installdb', 'search' ]
+7 -6
View File
@@ -416,12 +416,13 @@ def rebuild_db(files=False):
pisi.api.resurrect_package(package_fn, files, txn) pisi.api.resurrect_package(package_fn, files, txn)
def reload_indexes(txn): def reload_indexes(txn):
for repo in os.listdir( pisi.util.join_path( ctx.config.lib_dir(), index_dir = ctx.config.index_dir()
'index' ) ): if os.path.exists(index_dir): # it may have been erased, or we may be upgrading from a previous version -- exa
indexuri = pisi.util.join_path(ctx.config.lib_dir(), 'index', repo, 'uri') for repo in os.listdir(index_dir):
indexuri = open(indexuri, 'r').readline() indexuri = pisi.util.join_path(ctx.config.lib_dir(), 'index', repo, 'uri')
pisi.api.add_repo(repo, indexuri) indexuri = open(indexuri, 'r').readline()
pisi.api.rebuild_repo(repo) pisi.api.add_repo(repo, indexuri)
pisi.api.rebuild_repo(repo)
# check db schema versions # check db schema versions
try: try:
+2 -2
View File
@@ -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] name = self.args[0]
indexuri = self.args[1] indexuri = self.args[1]
else: else:
name = 'pardus-1' name = 'pardus-1-test'
indexuri = 'http://paketler.pardus.org.tr/pardus-1/pisi-index.xml' indexuri = 'http://paketler.pardus.org.tr/pardus-1-test/pisi-index.xml.bz2'
pisi.api.add_repo(name, indexuri) pisi.api.add_repo(name, indexuri)
if ctx.ui.confirm(_('Update PISI database for repository %s?') % name): if ctx.ui.confirm(_('Update PISI database for repository %s?') % name):
pisi.api.update_repo(name) pisi.api.update_repo(name)
+32 -9
View File
@@ -16,7 +16,7 @@
# Authors: Eray Ozkural <eray@pardus.org.tr> # Authors: Eray Ozkural <eray@pardus.org.tr>
# Baris Metin <baris@pardus.org.tr> # Baris Metin <baris@pardus.org.tr>
# we basically store everything in PackageInfo class # we basically store everything in MetaData
# yes, we are cheap # yes, we are cheap
import os import os
@@ -33,6 +33,7 @@ import pisi.context as ctx
import pisi.lockeddbshelve as shelve import pisi.lockeddbshelve as shelve
from pisi.itembyrepodb import ItemByRepoDB from pisi.itembyrepodb import ItemByRepoDB
import pisi.itembyrepodb as itembyrepodb import pisi.itembyrepodb as itembyrepodb
from pisi.metadata import MetaData
class Error(pisi.Error): class Error(pisi.Error):
pass pass
@@ -58,18 +59,28 @@ class PackageDB(object):
self.d.destroy() self.d.destroy()
self.dr.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): def has_package(self, name, repo=None, txn = None):
return self.d.has_key(name, repo, txn=txn) 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: try:
return self.d.get_item(name, repo, txn=txn) return self.d.get_item(name, repo, txn=txn)
except pisi.itembyrepodb.NotfoundError, e: except pisi.itembyrepodb.NotfoundError, e:
raise Error(_('Package %s not found') % name) 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) 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): def which_repo(self, name, txn = None):
return self.d.which_repo(name, txn=txn) return self.d.which_repo(name, txn=txn)
@@ -79,14 +90,18 @@ class PackageDB(object):
else: else:
return [] 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) 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) name = str(package_info.name)
def proc(txn): 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(): for dep in package_info.runtimeDependencies():
dep_name = str(dep.package) dep_name = str(dep.package)
if self.dr.has_key(dep_name, None, txn): if self.dr.has_key(dep_name, None, txn):
@@ -105,17 +120,22 @@ class PackageDB(object):
for (lang, doc) in package_info.description.iteritems(): for (lang, doc) in package_info.description.iteritems():
if lang in ['en', 'tr']: if lang in ['en', 'tr']:
pisi.search.add_doc('description', lang, package_info.name, doc, txn) pisi.search.add_doc('description', lang, package_info.name, doc, txn)
ctx.txn_proc(proc, 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): def clear(self, txn = None):
self.d.clear() self.d.clear()
self.dr.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) name = str(name)
def proc(txn): 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) self.d.remove_item(name, repo, txn=txn)
if self.dr.has_key(name, repo, txn=txn): if self.dr.has_key(name, repo, txn=txn):
self.dr.remove_item(name, repo, txn=txn) self.dr.remove_item(name, repo, txn=txn)
@@ -124,6 +144,9 @@ class PackageDB(object):
ctx.componentdb.remove_package(package_info.partOf, package_info.name, txn) ctx.componentdb.remove_package(package_info.partOf, package_info.name, txn)
self.d.txn_proc(proc, 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 remove_repo(self, repo, txn = None):
def proc(txn): def proc(txn):
self.d.remove_repo(repo, txn=txn) self.d.remove_repo(repo, txn=txn)