diff --git a/pisi/api.py b/pisi/api.py index 0e32ea36..bbadadf3 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -23,39 +23,33 @@ _ = __trans.ugettext import pisi import pisi.db import pisi.context as ctx -from pisi.uri import URI -import pisi.util as util +import pisi.uri +import pisi.util import pisi.dependency as dependency import pisi.pgraph as pgraph -import pisi.operations as operations -import pisi.db.packagedb as packagedb +import pisi.db.packagedb import pisi.db.repodb import pisi.db.installdb import pisi.db.filesdb import pisi.db.componentdb import pisi.db.sourcedb -import pisi.db.lockeddbshelve as lockeddbshelve -import pisi.component as component -from pisi.index import Index -import pisi.cli -from pisi.config import Options -from pisi.operations import install, remove, upgrade, emerge -from pisi.operations import plan_install_pkg_names as plan_install -from pisi.operations import plan_remove, plan_upgrade, upgrade_base, calculate_conflicts, reorder_base_packages -from pisi.build import build_until -from pisi.atomicoperations import resurrect_package, build -from pisi.metadata import MetaData -from pisi.files import Files -from pisi.file import File -import pisi.db.lockeddbshelve as shelve -from pisi.version import Version -import delta +import pisi.db.lockeddbshelve +import pisi.index +import pisi.config +import pisi.metadata +import pisi.file +import pisi.version +import pisi.operations +import pisi.build +import pisi.atomicoperations +import pisi.delta +import pisi.comariface class Error(pisi.Error): pass def init(database = True, write = True, - options = Options(), ui = None, comar = True, + options = pisi.config.Options(), ui = None, comar = True, stdout = None, stderr = None, comar_sockname = None, signal_handling = True): @@ -69,11 +63,12 @@ def init(database = True, write = True, # UI comes first if ui is None: - from pisi.cli import CLI + # FIXME: api importing and using pisi.cli ???? + import pisi.cli if options: - ctx.ui = CLI(options.debug, options.verbose) + ctx.ui = pisi.cli.CLI(options.debug, options.verbose) else: - ctx.ui = CLI() + ctx.ui = pisi.cli.CLI() else: ctx.ui = ui @@ -96,7 +91,6 @@ def init(database = True, write = True, if stderr: ctx.stderr = stderr - import pisi.config ctx.config = pisi.config.Config(options) if signal_handling: @@ -110,7 +104,7 @@ def init(database = True, write = True, # initialize repository databases ctx.database = database if database: - shelve.init_dbenv(write=write) + pisi.db.lockeddbshelve.init_dbenv(write=write) ctx.repodb = pisi.db.repodb.RepoDB() ctx.installdb = pisi.db.installdb.InstallDB() ctx.filesdb = pisi.db.filesdb.FilesDB() @@ -278,18 +272,17 @@ def configure_pending(): A = ctx.installdb.list_pending() order = generate_pending_order(A) try: - import pisi.comariface as comariface for x in order: if ctx.installdb.is_installed(x): pkginfo = A[x] - pkgname = util.package_name(x, pkginfo.version, + pkgname = pisi.util.package_name(x, pkginfo.version, pkginfo.release, False, False) - pkg_path = util.join_path(ctx.config.lib_dir(), + pkg_path = pisi.util.join_path(ctx.config.lib_dir(), 'package', pkgname) - m = MetaData() - metadata_path = util.join_path(pkg_path, ctx.const.metadata_xml) + m = pisi.metadata.MetaData() + metadata_path = pisi.util.join_path(pkg_path, ctx.const.metadata_xml) m.read(metadata_path) # FIXME: we need a full package info here! pkginfo.name = x @@ -297,9 +290,9 @@ def configure_pending(): pisi.comariface.post_install( pkginfo.name, m.package.providesComar, - util.join_path(pkg_path, ctx.const.comar_dir), - util.join_path(pkg_path, ctx.const.metadata_xml), - util.join_path(pkg_path, ctx.const.files_xml), + pisi.util.join_path(pkg_path, ctx.const.comar_dir), + pisi.util.join_path(pkg_path, ctx.const.metadata_xml), + pisi.util.join_path(pkg_path, ctx.const.files_xml), ) ctx.ui.notify(pisi.ui.configured, package = pkginfo, files = None) ctx.installdb.clear_pending(x) @@ -313,12 +306,11 @@ def info(package, installed = False): return info_name(package, installed) def info_file(package_fn): - from package import Package if not os.path.exists(package_fn): raise Error (_('File %s not found') % package_fn) - package = Package(package_fn) + package = pisi.package.Package(package_fn) package.read() return package.metadata, package.files @@ -330,8 +322,7 @@ def info_name(package_name, installed=False): else: package, repo = ctx.packagedb.get_package_repo(package_name, pisi.db.itembyrepodb.repos) - from pisi.metadata import MetaData - metadata = MetaData() + metadata = pisi.metadata.MetaData() metadata.package = package #FIXME: get it from sourcedb if available metadata.source = None @@ -374,7 +365,7 @@ def check(package): and not os.path.islink('/' + file.path): ctx.ui.info(_("Checking /%s ") % file.path, noln=True, verbose=True) try: - if file.hash != util.sha1_file('/' + file.path): + if file.hash != pisi.util.sha1_file('/' + file.path): corrupt.append(file) ctx.ui.error(_("\nCorrupt file: %s") % file) else: @@ -385,7 +376,7 @@ def check(package): def index(dirs=None, output='pisi-index.xml', skip_sources=False, skip_signing=False): """Accumulate PiSi XML files in a directory, and write an index.""" - index = Index() + index = pisi.index.Index() index.distribution = None if not dirs: dirs = ['.'] @@ -395,9 +386,9 @@ def index(dirs=None, output='pisi-index.xml', skip_sources=False, skip_signing=F index.index(repo_dir, skip_sources) if skip_signing: - index.write(output, sha1sum=True, compress=File.bz2, sign=None) + index.write(output, sha1sum=True, compress=pisi.file.File.bz2, sign=None) else: - index.write(output, sha1sum=True, compress=File.bz2, sign=File.detached) + index.write(output, sha1sum=True, compress=pisi.file.File.bz2, sign=pisi.file.File.detached) ctx.ui.info(_('* Index file written')) def list_repos(): @@ -406,7 +397,7 @@ def list_repos(): def update_repo(repo, force=False): ctx.ui.info(_('* Updating repository: %s') % repo) ctx.ui.notify(pisi.ui.updatingrepo, name = repo) - index = Index() + index = pisi.index.Index() if ctx.repodb.has_repo(repo): repouri = ctx.repodb.get_repo(repo).indexuri.get_uri() try: @@ -430,17 +421,17 @@ def update_repo(repo, force=False): raise Error(_('No repository named %s found.') % repo) def delete_cache(): - util.clean_dir(ctx.config.packages_dir()) - util.clean_dir(ctx.config.archives_dir()) - util.clean_dir(ctx.config.tmp_dir()) + pisi.util.clean_dir(ctx.config.packages_dir()) + pisi.util.clean_dir(ctx.config.archives_dir()) + pisi.util.clean_dir(ctx.config.tmp_dir()) def rebuild_repo(repo): ctx.ui.info(_('* Rebuilding \'%s\' named repo... ') % repo) if ctx.repodb.has_repo(repo): - repouri = URI(ctx.repodb.get_repo(repo).indexuri.get_uri()) + repouri = pisi.uri.URI(ctx.repodb.get_repo(repo).indexuri.get_uri()) indexname = repouri.filename() - index = Index() + index = pisi.index.Index() indexpath = pisi.util.join_path(ctx.config.index_dir(), repo, indexname) tmpdir = os.path.join(ctx.config.tmp_dir(), 'index') pisi.util.clean_dir(tmpdir) @@ -465,9 +456,9 @@ def rebuild_db(files=False): i_version = {} # installed versions replica = [] for pkg in os.listdir(pisi.util.join_path(pisi.api.ctx.config.lib_dir(), 'package')): - (name, ver) = util.parse_package_name(pkg) + (name, ver) = pisi.util.parse_package_name(pkg) if i_version.has_key(name): - if Version(ver) > Version(i_version[name]): + if pisi.version.Version(ver) > pisi.version.Version(i_version[name]): # found a greater version, older one is a replica replica.append(name + '-' + i_version[name]) i_version[name] = ver @@ -523,7 +514,7 @@ def rebuild_db(files=False): raise except Exception, e: #FIXME: what exception could we catch here, replace with that. files = True # exception means the files db version was wrong - lockeddbshelve.init_dbenv(write=True, writeversion=True) + pisi.lockeddbshelve.init_dbenv(write=True, writeversion=True) destroy(files) # bye bye # save parameters and shutdown pisi @@ -540,6 +531,7 @@ def rebuild_db(files=False): reload_indices(txn) txn.commit() + ############################ Under Construction ############################## ### Package Database Operations ### @@ -569,7 +561,7 @@ def add_repository(name, uri): if ctx.repodb.has_repo(name): raise Error(_('Repo %s already present.') % name) else: - repo = pisi.db.repodb.Repo(URI(uri)) + repo = pisi.db.repodb.Repo(pisi.uri.URI(uri)) ctx.repodb.add_repo(name, repo) ctx.ui.info(_('Repo %s added to system.') % name) @@ -596,4 +588,56 @@ def remove_repository(name): # @param old_package Path of the older package # @param new_package Path of the newer package def create_delta_package(old_package, new_package): - delta.create_delta_package(old_package, new_package) + pisi.delta.create_delta_package(old_package, new_package) + +############# FIXME: this was a quick fix. ############################## + +# api was importing other module's functions and providing them as api functions. This is wrong. +# these are quick fixes for this problem. The api functions should be in this module. + +# from pisi.operations import install, remove, upgrade, emerge +# from pisi.operations import plan_install_pkg_names as plan_install +# from pisi.operations import plan_remove, plan_upgrade, upgrade_base, calculate_conflicts, reorder_base_packages +# from pisi.build import build_until +# from pisi.atomicoperations import resurrect_package, build + +def install(*args, **kw): + pisi.operations.install(*args, **kw) + +def remove(*args, **kw): + pisi.operations.remove(*args, **kw) + +def upgrade(*args, **kw): + pisi.operations.upgrade(*args, **kw) + +def emerge(*args, **kw): + pisi.operations.emerge(*args, **kw) + +def plan_install(*args, **kw): + pisi.operations.plan_install_pkg_names(*args, **kw) + +def plan_remove(*args, **kw): + pisi.operations.plan_remove(*args, **kw) + +def plan_upgrade(*args, **kw): + pisi.operations.plan_upgrade(*args, **kw) + +def upgrade_base(*args, **kw): + pisi.operations.upgrade_base(*args, **kw) + +def calculate_conflicts(*args, **kw): + pisi.operations.calculate_conflicts(*args, **kw) + +def reorder_base_packages(*args, **kw): + pisi.operations.reorder_base_packages(*args, **kw) + +def build_until(*args, **kw): + pisi.build.build_until(*args, **kw) + +def build(*args, **kw): + pisi.atomicoperations.build(*args, **kw) + +def resurrect_package(*args, **kw): + pisi.atomicoperations.resurrect_package(*args, **kw) + +########################################################################