* grow Notfounderror
* fix: use itembyrepodb in sourcedb * fix: make pkgtosrc db repo-aware
This commit is contained in:
@@ -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))
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user