* 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):
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.
+2 -2
View File
@@ -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' ]
+3 -2
View File
@@ -416,8 +416,9 @@ 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' ) ):
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)
+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]
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)
+32 -9
View File
@@ -16,7 +16,7 @@
# Authors: Eray Ozkural <eray@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
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)
@@ -124,6 +144,9 @@ class PackageDB(object):
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)