* grow Notfounderror

* fix: use itembyrepodb in sourcedb
* fix: make pkgtosrc db repo-aware
This commit is contained in:
Eray Özkural
2006-03-23 11:29:39 +00:00
parent 826197e906
commit 806cf46690
3 changed files with 31 additions and 36 deletions
+1 -1
View File
@@ -1001,7 +1001,7 @@ Gives a brief list of sources published in the repositories.
list = ctx.sourcedb.list() list = ctx.sourcedb.list()
list.sort() list.sort()
for p in list: for p in list:
sf, repo = ctx.sourcedb.get_spec(p) sf, repo = ctx.sourcedb.get_spec_repo(p)
if self.options.long: if self.options.long:
ctx.ui.info('[Repository: ' + repo + ']') ctx.ui.info('[Repository: ' + repo + ']')
ctx.ui.info(unicode(sf.source)) ctx.ui.info(unicode(sf.source))
+5
View File
@@ -37,6 +37,11 @@ import pisi.itembyrepodb as itembyrepodb
class Error(pisi.Error): class Error(pisi.Error):
pass pass
class NotfoundError(pisi.Error):
def __init__(self, pkg):
pisi.Error.__init__("Package %s not found" % pkg)
self.pkg = pkg
class PackageDB(object): class PackageDB(object):
"""PackageDB class provides an interface to the package database """PackageDB class provides an interface to the package database
using shelf objects""" using shelf objects"""
+25 -35
View File
@@ -32,66 +32,56 @@ import pisi.util as util
import pisi.context as ctx import pisi.context as ctx
import pisi.lockeddbshelve as shelve import pisi.lockeddbshelve as shelve
import pisi.repodb import pisi.repodb
from pisi.itembyrepodb import ItemByRepoDB
class NotfoundError(pisi.Error):
def __init__(self, spec):
pisi.Error.__init__("Package %s not found" % spec)
self.spec = spec
class SourceDB(object): class SourceDB(object):
def __init__(self): def __init__(self):
self.d = shelve.LockedDBShelf('source') self.d = ItemByRepoDB('source')
self.dpkgtosrc = shelve.LockedDBShelf('pkgtosrc') self.dpkgtosrc = ItemByRepoDB('pkgtosrc')
def close(self): def close(self):
self.d.close() self.d.close()
self.dpkgtosrc.close() self.dpkgtosrc.close()
def list(self): def list(self):
list = [] return self.d.list()
for (pkg, x) in self.d.items():
list.append(pkg) # for some reason we couldn't return self.d.items()!! --exa
return list
def has_spec(self, name): def has_spec(self, name, repo=None, txn=None):
name = str(name) return self.d.has_key(name, repo, txn)
return self.d.has_key(name)
def get_spec(self, name): def get_spec(self, name, repo=None, txn = None):
name = str(name) try:
s = self.d[name] return self.d.get_item(name, repo, txn)
order = ctx.repodb.list() except pisi.itembyrepodb.NotfoundError, e:
for repo in order: raise NotfoundError(name)
if s.has_key(repo):
return (s[repo], repo)
return None
def pkgtosrc(self, name): def pkgtosrc(self, name):
name = str(name)
return self.dpkgtosrc[name] return self.dpkgtosrc[name]
def add_spec(self, spec, repo, txn = None): def add_spec(self, spec, repo, txn = None):
assert not spec.errors() assert not spec.errors()
name = str(spec.source.name) name = str(spec.source.name)
repo = str(repo)
def proc(txn): def proc(txn):
if not self.d.has_key(name): self.d.add_item(name, spec, repo, txn)
s = dict()
else:
s = self.d.get(name, txn)
s[repo] = spec
self.d.put(name, s, txn)
for pkg in spec.packages: for pkg in spec.packages:
self.dpkgtosrc.put(pkg.name, name, txn) self.dpkgtosrc.add_item(pkg.name, name, repo, txn)
self.d.txn_proc(proc, txn) self.d.txn_proc(proc, txn)
def remove_specfile(self, name, repo): def remove_specfile(self, name, repo, txn = None):
name = str(name) name = str(name)
repo = str(repo)
def proc(txn): def proc(txn):
#assert self.has_source(name) assert self.has_spec(name, txn=txn)
s = self.d[name] spec = self.d.get_item_repo(name, repo, txn)
s.remove(repo) self.d.remove_item(name, repo, txn=txn)
if (len(s)==0): for pkg in spec.packages:
del self.d[name] self.dpkgtosrc.remove_item(pkg.name, name, repo, txn)
else:
self.d[name] = s
self.d.txn_proc(proc, txn) self.d.txn_proc(proc, txn)
sourcedb = None sourcedb = None