* 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.sort()
for p in list:
sf, repo = ctx.sourcedb.get_spec(p)
sf, repo = ctx.sourcedb.get_spec_repo(p)
if self.options.long:
ctx.ui.info('[Repository: ' + repo + ']')
ctx.ui.info(unicode(sf.source))
+5
View File
@@ -37,6 +37,11 @@ import pisi.itembyrepodb as itembyrepodb
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"""
+25 -35
View File
@@ -32,66 +32,56 @@ import pisi.util as util
import pisi.context as ctx
import pisi.lockeddbshelve as shelve
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):
def __init__(self):
self.d = shelve.LockedDBShelf('source')
self.dpkgtosrc = shelve.LockedDBShelf('pkgtosrc')
self.d = ItemByRepoDB('source')
self.dpkgtosrc = ItemByRepoDB('pkgtosrc')
def close(self):
self.d.close()
self.dpkgtosrc.close()
def list(self):
list = []
for (pkg, x) in self.d.items():
list.append(pkg) # for some reason we couldn't return self.d.items()!! --exa
return list
return self.d.list()
def has_spec(self, name):
name = str(name)
return self.d.has_key(name)
def has_spec(self, name, repo=None, txn=None):
return self.d.has_key(name, repo, txn)
def get_spec(self, name):
name = str(name)
s = self.d[name]
order = ctx.repodb.list()
for repo in order:
if s.has_key(repo):
return (s[repo], repo)
return None
def get_spec(self, name, repo=None, txn = None):
try:
return self.d.get_item(name, repo, txn)
except pisi.itembyrepodb.NotfoundError, e:
raise NotfoundError(name)
def pkgtosrc(self, name):
name = str(name)
return self.dpkgtosrc[name]
def add_spec(self, spec, repo, txn = None):
assert not spec.errors()
name = str(spec.source.name)
repo = str(repo)
def proc(txn):
if not self.d.has_key(name):
s = dict()
else:
s = self.d.get(name, txn)
s[repo] = spec
self.d.put(name, s, txn)
self.d.add_item(name, spec, repo, txn)
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)
def remove_specfile(self, name, repo):
def remove_specfile(self, name, repo, txn = None):
name = str(name)
repo = str(repo)
def proc(txn):
#assert self.has_source(name)
s = self.d[name]
s.remove(repo)
if (len(s)==0):
del self.d[name]
else:
self.d[name] = s
assert self.has_spec(name, txn=txn)
spec = self.d.get_item_repo(name, repo, txn)
self.d.remove_item(name, repo, txn=txn)
for pkg in spec.packages:
self.dpkgtosrc.remove_item(pkg.name, name, repo, txn)
self.d.txn_proc(proc, txn)
sourcedb = None