This is not bright, we don't tag files in here. Use repos!
This commit is contained in:
@@ -1,173 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Copyright (C) 2005, TUBITAK/UEKAE
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free
|
|
||||||
# Software Foundation; either version 2 of the License, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# Please read the COPYING file.
|
|
||||||
#
|
|
||||||
|
|
||||||
# package database
|
|
||||||
# interface for update/query to local package repository
|
|
||||||
|
|
||||||
# Authors: Eray Ozkural <eray@pardus.org.tr>
|
|
||||||
# Baris Metin <baris@pardus.org.tr>
|
|
||||||
|
|
||||||
# we basically store everything in MetaData
|
|
||||||
# yes, we are cheap
|
|
||||||
|
|
||||||
import os
|
|
||||||
import fcntl
|
|
||||||
import types
|
|
||||||
|
|
||||||
import gettext
|
|
||||||
__trans = gettext.translation('pisi', fallback=True)
|
|
||||||
_ = __trans.ugettext
|
|
||||||
|
|
||||||
import pisi
|
|
||||||
import pisi.util as util
|
|
||||||
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
|
|
||||||
|
|
||||||
class NotfoundError(pisi.Error):
|
|
||||||
def __init__(self, pkg):
|
|
||||||
pisi.Error.__init__("Package %s not found" % pkg)
|
|
||||||
self.pkg = pkg
|
|
||||||
|
|
||||||
class PackageDB(object):
|
|
||||||
"""PackageDB class provides an interface to the package database
|
|
||||||
using shelf objects"""
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.d = ItemByRepoDB('package')
|
|
||||||
self.dr = ItemByRepoDB('revdep')
|
|
||||||
|
|
||||||
def close(self):
|
|
||||||
self.d.close()
|
|
||||||
self.dr.close()
|
|
||||||
|
|
||||||
def destroy(self):
|
|
||||||
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_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(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)
|
|
||||||
|
|
||||||
def get_rev_deps(self, name, repo = None, txn = None):
|
|
||||||
if self.dr.has_key(name, repo, txn=txn):
|
|
||||||
return self.dr.get_item(name, repo, txn=txn)
|
|
||||||
else:
|
|
||||||
return []
|
|
||||||
|
|
||||||
def list_metadatas(self, repo=None, show_tracking=False):
|
|
||||||
return self.d.list(repo, show_tracking=show_tracking)
|
|
||||||
|
|
||||||
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, metadata, repo, txn)
|
|
||||||
for dep in package_info.runtimeDependencies():
|
|
||||||
dep_name = str(dep.package)
|
|
||||||
if self.dr.has_key(dep_name, None, txn):
|
|
||||||
revdep = self.dr.get_item(dep_name, None, txn)
|
|
||||||
revdep = filter(lambda (n,d):n!=name, revdep)
|
|
||||||
revdep.append( (name, dep) )
|
|
||||||
self.dr.add_item(dep_name, revdep, repo, txn)
|
|
||||||
else:
|
|
||||||
self.dr.add_item(dep_name, [ (name, dep) ], repo, txn)
|
|
||||||
# add component
|
|
||||||
ctx.componentdb.add_package(package_info.partOf, package_info.name, txn)
|
|
||||||
# index summary and description
|
|
||||||
for (lang, doc) in package_info.summary.iteritems():
|
|
||||||
if lang in ['en', 'tr']:
|
|
||||||
pisi.search.add_doc('summary', lang, package_info.name, doc, txn)
|
|
||||||
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_metadata(self, name, repo = None, txn = None):
|
|
||||||
name = str(name)
|
|
||||||
def proc(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)
|
|
||||||
#WORKAROUND: do not remove component if it is not in repo
|
|
||||||
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)
|
|
||||||
self.dr.remove_repo(repo, txn=txn)
|
|
||||||
self.d.txn_proc(proc, txn)
|
|
||||||
|
|
||||||
pkgdb = None
|
|
||||||
|
|
||||||
def remove_tracking_package(name, txn = None):
|
|
||||||
# remove the guy from the tracking databases
|
|
||||||
if pkgdb.has_package(name, itembyrepodb.installed, txn=txn):
|
|
||||||
pkgdb.remove_package(name, itembyrepodb.installed, txn=txn)
|
|
||||||
if pkgdb.has_package(name, itembyrepodb.thirdparty, txn=txn):
|
|
||||||
pkgdb.remove_package(name, itembyrepodb.thirdparty, txn=txn)
|
|
||||||
|
|
||||||
def init_db():
|
|
||||||
global pkgdb
|
|
||||||
pkgdb = PackageDB()
|
|
||||||
return pkgdb
|
|
||||||
|
|
||||||
def finalize_db():
|
|
||||||
global pkgdb
|
|
||||||
if pkgdb:
|
|
||||||
pkgdb.close()
|
|
||||||
Reference in New Issue
Block a user