* packagedb api changes
This commit is contained in:
@@ -55,7 +55,6 @@ api layer from the needed places.
|
|||||||
* sourcedb.list
|
* sourcedb.list
|
||||||
* installdb.list_pending
|
* installdb.list_pending
|
||||||
* filesdb.match_files
|
* filesdb.match_files
|
||||||
*
|
|
||||||
|
|
||||||
Package Manager
|
Package Manager
|
||||||
===============
|
===============
|
||||||
|
|||||||
+32
-4
@@ -196,7 +196,7 @@ def package_graph(A, repo = pisi.db.itembyrepodb.installed, ignore_installed = F
|
|||||||
while len(B) > 0:
|
while len(B) > 0:
|
||||||
Bp = set()
|
Bp = set()
|
||||||
for x in B:
|
for x in B:
|
||||||
pkg = ctx.packagedb.get_package(x, repo)
|
pkg = get_repo_package(x, repo)
|
||||||
#print pkg
|
#print pkg
|
||||||
for dep in pkg.runtimeDependencies():
|
for dep in pkg.runtimeDependencies():
|
||||||
if ignore_installed:
|
if ignore_installed:
|
||||||
@@ -252,7 +252,7 @@ def generate_pending_order(A):
|
|||||||
while len(B) > 0:
|
while len(B) > 0:
|
||||||
Bp = set()
|
Bp = set()
|
||||||
for x in B.keys():
|
for x in B.keys():
|
||||||
pkg = ctx.packagedb.get_package(x, pisi.db.itembyrepodb.installed)
|
pkg = get_installed_package(x)
|
||||||
for dep in pkg.runtimeDependencies():
|
for dep in pkg.runtimeDependencies():
|
||||||
if dep.package in G_f.vertices():
|
if dep.package in G_f.vertices():
|
||||||
G_f.add_dep(x, dep)
|
G_f.add_dep(x, dep)
|
||||||
@@ -321,7 +321,7 @@ def info_file(package_fn):
|
|||||||
def info_name(package_name, installed=False):
|
def info_name(package_name, installed=False):
|
||||||
"""Fetch package information for the given package."""
|
"""Fetch package information for the given package."""
|
||||||
if installed:
|
if installed:
|
||||||
package = ctx.packagedb.get_package(package_name, pisi.db.itembyrepodb.installed)
|
package = get_installed_package(package_name)
|
||||||
else:
|
else:
|
||||||
package, repo = ctx.packagedb.get_package_repo(package_name, pisi.db.itembyrepodb.repos)
|
package, repo = ctx.packagedb.get_package_repo(package_name, pisi.db.itembyrepodb.repos)
|
||||||
repostr = repo
|
repostr = repo
|
||||||
@@ -356,7 +356,7 @@ def search_in_packages(terms, packages, repo = pisi.db.itembyrepodb.all):
|
|||||||
|
|
||||||
found = []
|
found = []
|
||||||
for name in packages:
|
for name in packages:
|
||||||
pkg = ctx.packagedb.get_package(name, repo)
|
pkg = get_repo_package(name, repo)
|
||||||
if terms == filter(lambda x:search(pkg, x), terms):
|
if terms == filter(lambda x:search(pkg, x), terms):
|
||||||
found.append(name)
|
found.append(name)
|
||||||
|
|
||||||
@@ -552,3 +552,31 @@ def rebuild_db(files=False):
|
|||||||
reload_packages(files, txn)
|
reload_packages(files, txn)
|
||||||
reload_indices(txn)
|
reload_indices(txn)
|
||||||
txn.commit()
|
txn.commit()
|
||||||
|
|
||||||
|
############################ Under Construction ##############################
|
||||||
|
|
||||||
|
### Package Database Operations ###
|
||||||
|
|
||||||
|
## Returns the package informations of the given repository
|
||||||
|
# @param name Name of the package
|
||||||
|
# @param repo Name of the repository
|
||||||
|
def get_repo_package(name, repo=pisi.db.itembyrepodb.repos):
|
||||||
|
# FIXME: * currently we return the first package in repo order
|
||||||
|
# * we should get rid of itembyrepodb enums
|
||||||
|
# * transparent transaction support
|
||||||
|
return ctx.packagedb.get_package(name, repo, txn=None)
|
||||||
|
|
||||||
|
## Returns the installed package information
|
||||||
|
# @param name Name of the package
|
||||||
|
def get_installed_package(name):
|
||||||
|
# FIXME: * we should get rid of itembyrepodb enums
|
||||||
|
# * transparent transaction support
|
||||||
|
return ctx.packagedb.get_package(name, pisi.db.itembyrepodb.installed, txn=None)
|
||||||
|
|
||||||
|
### Repo Database Operations ###
|
||||||
|
|
||||||
|
### Source Database Operations ###
|
||||||
|
|
||||||
|
### Component Database Operations ###
|
||||||
|
|
||||||
|
### Files Database Operations ###
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class Install(AtomicOperation):
|
|||||||
if repo:
|
if repo:
|
||||||
ctx.ui.info(_("Package %s found in repository %s") % (name, repo))
|
ctx.ui.info(_("Package %s found in repository %s") % (name, repo))
|
||||||
repo = ctx.repodb.get_repo(repo)
|
repo = ctx.repodb.get_repo(repo)
|
||||||
pkg = ctx.packagedb.get_package(name)
|
pkg = pisi.api.get_repo_package(name)
|
||||||
delta = None
|
delta = None
|
||||||
|
|
||||||
# Package is installed. This is an upgrade. Check delta.
|
# Package is installed. This is an upgrade. Check delta.
|
||||||
@@ -188,7 +188,6 @@ class Install(AtomicOperation):
|
|||||||
if ctx.installdb.is_installed(pkg.name): # is this a reinstallation?
|
if ctx.installdb.is_installed(pkg.name): # is this a reinstallation?
|
||||||
|
|
||||||
#FIXME: consider REPOSITORY instead of DISTRIBUTION -- exa
|
#FIXME: consider REPOSITORY instead of DISTRIBUTION -- exa
|
||||||
#ipackage = ctx.packagedb.get_package(pkg.name, pisi.db.itembyrepodb.installed)
|
|
||||||
ipkg = ctx.installdb.get_info(pkg.name)
|
ipkg = ctx.installdb.get_info(pkg.name)
|
||||||
repomismatch = ipkg.distribution != pkg.distribution
|
repomismatch = ipkg.distribution != pkg.distribution
|
||||||
|
|
||||||
@@ -427,7 +426,7 @@ class Remove(AtomicOperation):
|
|||||||
def __init__(self, package_name):
|
def __init__(self, package_name):
|
||||||
super(Remove, self).__init__()
|
super(Remove, self).__init__()
|
||||||
self.package_name = package_name
|
self.package_name = package_name
|
||||||
self.package = ctx.packagedb.get_package(self.package_name, pisi.db.itembyrepodb.installed)
|
self.package = pisi.api.get_installed_package(self.package_name)
|
||||||
try:
|
try:
|
||||||
self.files = ctx.installdb.files(self.package_name)
|
self.files = ctx.installdb.files(self.package_name)
|
||||||
except pisi.Error, e:
|
except pisi.Error, e:
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import pisi.cli
|
|||||||
import pisi.context as ctx
|
import pisi.context as ctx
|
||||||
from pisi.uri import URI
|
from pisi.uri import URI
|
||||||
import pisi.util as util
|
import pisi.util as util
|
||||||
import pisi.api as api
|
|
||||||
from colors import colorize
|
from colors import colorize
|
||||||
|
|
||||||
class Error(pisi.Error):
|
class Error(pisi.Error):
|
||||||
@@ -1124,7 +1123,7 @@ Usage: list-installed
|
|||||||
ctx.ui.info(_('Package Name |St| Version| Rel.| Build| Distro| Date'))
|
ctx.ui.info(_('Package Name |St| Version| Rel.| Build| Distro| Date'))
|
||||||
print '========================================================================'
|
print '========================================================================'
|
||||||
for pkg in installed:
|
for pkg in installed:
|
||||||
package = ctx.packagedb.get_package(pkg, pisi.db.itembyrepodb.installed)
|
package = pisi.api.get_installed_package(pkg)
|
||||||
inst_info = ctx.installdb.get_info(pkg)
|
inst_info = ctx.installdb.get_info(pkg)
|
||||||
if self.options.long:
|
if self.options.long:
|
||||||
ctx.ui.info(unicode(package))
|
ctx.ui.info(unicode(package))
|
||||||
@@ -1367,7 +1366,7 @@ all repositories.
|
|||||||
installed_list = ctx.installdb.list_installed()
|
installed_list = ctx.installdb.list_installed()
|
||||||
list.sort()
|
list.sort()
|
||||||
for p in list:
|
for p in list:
|
||||||
package = ctx.packagedb.get_package(p)
|
package = pisi.api.get_repo_package(p)
|
||||||
if self.options.long:
|
if self.options.long:
|
||||||
ctx.ui.info(unicode(package))
|
ctx.ui.info(unicode(package))
|
||||||
else:
|
else:
|
||||||
@@ -1502,7 +1501,7 @@ Lists the packages that will be upgraded.
|
|||||||
ctx.ui.info(_('Package Name |St| Version| Rel.| Build| Distro| Date'))
|
ctx.ui.info(_('Package Name |St| Version| Rel.| Build| Distro| Date'))
|
||||||
print '========================================================================'
|
print '========================================================================'
|
||||||
for pkg in upgradable_pkgs:
|
for pkg in upgradable_pkgs:
|
||||||
package = ctx.packagedb.get_package(pkg, pisi.db.itembyrepodb.installed)
|
package = pisi.api.get_installed_package(pkg)
|
||||||
inst_info = ctx.installdb.get_info(pkg)
|
inst_info = ctx.installdb.get_info(pkg)
|
||||||
if self.options.long:
|
if self.options.long:
|
||||||
ctx.ui.info(package)
|
ctx.ui.info(package)
|
||||||
|
|||||||
+1
-1
@@ -75,7 +75,7 @@ given conflicting spec"""
|
|||||||
if not ctx.installdb.is_installed(pkg_name):
|
if not ctx.installdb.is_installed(pkg_name):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
pkg = ctx.packagedb.get_package(pkg_name, pisi.db.itembyrepodb.installed)
|
pkg = api.get_installed_package(pkg_name)
|
||||||
(version, release) = (pkg.version, pkg.release)
|
(version, release) = (pkg.version, pkg.release)
|
||||||
return confinfo.conflicts(pkg_name, version, release)
|
return confinfo.conflicts(pkg_name, version, release)
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -16,6 +16,7 @@ import gettext
|
|||||||
__trans = gettext.translation('pisi', fallback=True)
|
__trans = gettext.translation('pisi', fallback=True)
|
||||||
_ = __trans.ugettext
|
_ = __trans.ugettext
|
||||||
|
|
||||||
|
import pisi
|
||||||
import pisi.context as ctx
|
import pisi.context as ctx
|
||||||
import pisi.db.packagedb as packagedb
|
import pisi.db.packagedb as packagedb
|
||||||
from pisi.version import Version
|
from pisi.version import Version
|
||||||
@@ -86,7 +87,7 @@ dependency spec"""
|
|||||||
if not ctx.installdb.is_installed(pkg_name):
|
if not ctx.installdb.is_installed(pkg_name):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
pkg = ctx.packagedb.get_package(pkg_name, pisi.db.itembyrepodb.installed)
|
pkg = pisi.api.get_installed_package(pkg_name)
|
||||||
(version, release) = (pkg.version, pkg.release)
|
(version, release) = (pkg.version, pkg.release)
|
||||||
return depinfo.satisfies(pkg_name, version, release)
|
return depinfo.satisfies(pkg_name, version, release)
|
||||||
|
|
||||||
@@ -97,7 +98,7 @@ dependency spec"""
|
|||||||
if not ctx.packagedb.has_package(pkg_name):
|
if not ctx.packagedb.has_package(pkg_name):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
pkg = ctx.packagedb.get_package(pkg_name)
|
pkg = pisi.api.get_repo_package(pkg_name)
|
||||||
(version, release) = (pkg.version, pkg.release)
|
(version, release) = (pkg.version, pkg.release)
|
||||||
return depinfo.satisfies(pkg_name, version, release)
|
return depinfo.satisfies(pkg_name, version, release)
|
||||||
|
|
||||||
@@ -110,7 +111,7 @@ def satisfies_dependencies(pkg, deps, sat = installed_satisfies_dep):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def satisfies_runtime_deps(pkg):
|
def satisfies_runtime_deps(pkg):
|
||||||
deps = ctx.packagedb.get_package(pkg).runtimeDependencies()
|
deps = pisi.api.get_repo_package(pkg).runtimeDependencies()
|
||||||
return satisfies_dependencies(pkg, deps)
|
return satisfies_dependencies(pkg, deps)
|
||||||
|
|
||||||
def installable(pkg):
|
def installable(pkg):
|
||||||
|
|||||||
+10
-10
@@ -185,7 +185,7 @@ in the respective order to satisfy extra dependencies:
|
|||||||
while len(B) > 0:
|
while len(B) > 0:
|
||||||
Bp = set()
|
Bp = set()
|
||||||
for x in B:
|
for x in B:
|
||||||
pkg = packagedb.get_package(x)
|
pkg = pisi.api.get_repo_package(x)
|
||||||
for dep in pkg.runtimeDependencies():
|
for dep in pkg.runtimeDependencies():
|
||||||
if dependency.dict_satisfies_dep(d_t, dep):
|
if dependency.dict_satisfies_dep(d_t, dep):
|
||||||
if not dep.package in G_f.vertices():
|
if not dep.package in G_f.vertices():
|
||||||
@@ -230,7 +230,7 @@ def calculate_conflicts(order, packagedb):
|
|||||||
pkg_conflicts = {}
|
pkg_conflicts = {}
|
||||||
|
|
||||||
for x in order:
|
for x in order:
|
||||||
pkg = packagedb.get_package(x)
|
pkg = pisi.api.get_repo_package(x)
|
||||||
|
|
||||||
# check if any package has conflicts with the installed packages
|
# check if any package has conflicts with the installed packages
|
||||||
conflicts = check_conflict(pkg, order)
|
conflicts = check_conflict(pkg, order)
|
||||||
@@ -241,7 +241,7 @@ def calculate_conflicts(order, packagedb):
|
|||||||
# now check if any package has conflicts with each other
|
# now check if any package has conflicts with each other
|
||||||
B_i = B_0.intersection(set(map(lambda c:c.package, pkg.conflicts)))
|
B_i = B_0.intersection(set(map(lambda c:c.package, pkg.conflicts)))
|
||||||
D_i = set()
|
D_i = set()
|
||||||
for p in map(lambda x:packagedb.get_package(x), B_i):
|
for p in map(lambda x:pisi.api.get_repo_package(x), B_i):
|
||||||
conflicted = pisi.conflict.package_conflicts(p, pkg.conflicts)
|
conflicted = pisi.conflict.package_conflicts(p, pkg.conflicts)
|
||||||
if conflicted:
|
if conflicted:
|
||||||
D_i.add(str(conflicted))
|
D_i.add(str(conflicted))
|
||||||
@@ -285,7 +285,7 @@ def is_upgradable(name, ignore_build = False):
|
|||||||
return False
|
return False
|
||||||
(version, release, build) = ctx.installdb.get_version(name)
|
(version, release, build) = ctx.installdb.get_version(name)
|
||||||
try:
|
try:
|
||||||
pkg = ctx.packagedb.get_package(name)
|
pkg = pisi.api.get_repo_package(name)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
raise
|
raise
|
||||||
except Exception, e: #FIXME: what exception could we catch here, replace with that.
|
except Exception, e: #FIXME: what exception could we catch here, replace with that.
|
||||||
@@ -391,7 +391,7 @@ def plan_install_pkg_names(A, ignore_package_conflicts = False):
|
|||||||
while len(B) > 0:
|
while len(B) > 0:
|
||||||
Bp = set()
|
Bp = set()
|
||||||
for x in B:
|
for x in B:
|
||||||
pkg = ctx.packagedb.get_package(x)
|
pkg = pisi.api.get_repo_package(x)
|
||||||
for dep in pkg.runtimeDependencies():
|
for dep in pkg.runtimeDependencies():
|
||||||
ctx.ui.debug('checking %s' % str(dep))
|
ctx.ui.debug('checking %s' % str(dep))
|
||||||
# we don't deal with already *satisfied* dependencies
|
# we don't deal with already *satisfied* dependencies
|
||||||
@@ -436,7 +436,7 @@ def upgrade_pkg_names(A = []):
|
|||||||
continue
|
continue
|
||||||
(version, release, build) = ctx.installdb.get_version(x)
|
(version, release, build) = ctx.installdb.get_version(x)
|
||||||
if ctx.packagedb.has_package(x):
|
if ctx.packagedb.has_package(x):
|
||||||
pkg = ctx.packagedb.get_package(x)
|
pkg = pisi.api.get_repo_package(x)
|
||||||
else:
|
else:
|
||||||
ctx.ui.info(_('Package %s is not available in repositories.') % x, True)
|
ctx.ui.info(_('Package %s is not available in repositories.') % x, True)
|
||||||
continue
|
continue
|
||||||
@@ -539,7 +539,7 @@ def plan_upgrade(A, ignore_build = False):
|
|||||||
while len(B) > 0:
|
while len(B) > 0:
|
||||||
Bp = set()
|
Bp = set()
|
||||||
for x in B:
|
for x in B:
|
||||||
pkg = packagedb.get_package(x)
|
pkg = pisi.api.get_repo_package(x)
|
||||||
for dep in pkg.runtimeDependencies():
|
for dep in pkg.runtimeDependencies():
|
||||||
# add packages that can be upgraded
|
# add packages that can be upgraded
|
||||||
if dependency.repo_satisfies_dep(dep):
|
if dependency.repo_satisfies_dep(dep):
|
||||||
@@ -559,7 +559,7 @@ def plan_upgrade(A, ignore_build = False):
|
|||||||
while len(B) > 0:
|
while len(B) > 0:
|
||||||
Bp = set()
|
Bp = set()
|
||||||
for x in B:
|
for x in B:
|
||||||
pkg = packagedb.get_package(x)
|
pkg = pisi.api.get_repo_package(x)
|
||||||
rev_deps = packagedb.get_rev_deps(x)
|
rev_deps = packagedb.get_rev_deps(x)
|
||||||
for (rev_dep, depinfo) in rev_deps:
|
for (rev_dep, depinfo) in rev_deps:
|
||||||
# add only installed but unsatisfied reverse dependencies
|
# add only installed but unsatisfied reverse dependencies
|
||||||
@@ -648,7 +648,7 @@ def plan_remove(A):
|
|||||||
while len(B) > 0:
|
while len(B) > 0:
|
||||||
Bp = set()
|
Bp = set()
|
||||||
for x in B:
|
for x in B:
|
||||||
pkg = ctx.packagedb.get_package(x, pisi.db.itembyrepodb.installed)
|
pkg = pisi.api.get_installed_package(x)
|
||||||
rev_deps = ctx.packagedb.get_rev_deps(x, pisi.db.itembyrepodb.installed)
|
rev_deps = ctx.packagedb.get_rev_deps(x, pisi.db.itembyrepodb.installed)
|
||||||
for (rev_dep, depinfo) in rev_deps:
|
for (rev_dep, depinfo) in rev_deps:
|
||||||
# we don't deal with uninstalled rev deps
|
# we don't deal with uninstalled rev deps
|
||||||
@@ -798,7 +798,7 @@ def plan_emerge(A, rebuild_all):
|
|||||||
def calculate_download_sizes(order):
|
def calculate_download_sizes(order):
|
||||||
total_size = cached_size = 0
|
total_size = cached_size = 0
|
||||||
|
|
||||||
for pkg in [ctx.packagedb.get_package(name) for name in order]:
|
for pkg in [pisi.api.get_repo_package(name) for name in order]:
|
||||||
|
|
||||||
delta = None
|
delta = None
|
||||||
if ctx.installdb.is_installed(pkg.name):
|
if ctx.installdb.is_installed(pkg.name):
|
||||||
|
|||||||
Reference in New Issue
Block a user