diff --git a/pisi-cli b/pisi-cli index ff41a38c..9b6c228d 100755 --- a/pisi-cli +++ b/pisi-cli @@ -21,8 +21,11 @@ from pisi.cli.pisicli import PisiCLI def handle_exception(exception, value, tb): import traceback import exceptions + + import pisi.ui from pisi.xmlext import XmlError - from pisi.ui import ui + + ui = pisi.ui.CLI() if exception == exceptions.KeyboardInterrupt: ui.error(_("\nKeyboardInterrupt: Exiting...\n")) diff --git a/pisi/actionsapi/variables.py b/pisi/actionsapi/variables.py index f7c94075..7d3eb5ea 100644 --- a/pisi/actionsapi/variables.py +++ b/pisi/actionsapi/variables.py @@ -14,8 +14,7 @@ from os import getenv, environ # Pisi-Core Modules -import pisi.config -import pisi.constants +import pisi.context as ctx # Set individual information, that are generally needed for ActionsAPI @@ -24,7 +23,7 @@ def exportFlags(): # Build systems depend on these environment variables. That is why # we export them instead of using as (instance) variables. - values = pisi.config.config.values + values = ctx.config.values environ['HOST'] = values.build.host environ['CFLAGS'] = values.build.cflags environ['CXXFLAGS'] = values.build.cxxflags @@ -75,9 +74,9 @@ class Dirs: kde = '/usr/kde/3.4' qt = '/usr/qt/3' -class Variables(pisi.config.Config): - const = pisi.constants.const - env = Env() - dirs = Dirs() +def initVariables(): + ctx.env = Env() + ctx.dirs = Dirs() + return ctx -glb = Variables() +glb = initVariables() diff --git a/pisi/api.py b/pisi/api.py index ecf4d271..89daaf8b 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -26,8 +26,8 @@ import pisi.dependency as dependency import pisi.pgraph as pgraph import pisi.operations as operations import pisi.packagedb as packagedb -from pisi.repodb import repodb -from pisi.installdb import installdb +import pisi.repodb +import pisi.installdb from pisi.index import Index class Error(pisi.Error): @@ -50,14 +50,12 @@ def init(database = True, options = None, ui = None ): # initialize repository databases if database: - import pisi.repodb - pisi.repodb.init() - import pisi.installdb - pisi.installdb.init() - import pisi.packagedb - pisi.packagedb.init() - import pisi.sourcedb - pisi.sourcedb.init() + ctx.repodb = pisi.repodb.init() + ctx.installdb = pisi.installdb.init() + + packagedb.init() +# import pisi.sourcedb +# pisi.sourcedb.init() def install(packages): """install a list of packages (either files/urls, or names)""" @@ -68,7 +66,7 @@ def install(packages): try: # determine if this is a list of files/urls or names - if packages[0].endswith(const.package_prefix): # they all have to! + if packages[0].endswith(ctx.const.package_prefix): # they all have to! install_pkg_files(packages) else: install_pkg_names(packages) @@ -92,7 +90,7 @@ def install_pkg_files(package_URIs): ctx.ui.debug('A = %s\n' % str(package_URIs)) for x in package_URIs: - if not x.endswith(const.package_prefix): + if not x.endswith(ctx.const.package_prefix): ctx.ui.error('Mixing file names and package names not supported YET.\n') return False @@ -235,15 +233,15 @@ def upgrade_pkg_names(A): """Re-installs packages from the repository, trying to perform a maximum number of upgrades.""" - ignore_build = config.options and config.options.ignore_build_no + ignore_build = ctx.config.options and ctx.config.options.ignore_build_no # filter packages that are not installed Ap = [] for x in A: - if not installdb.is_installed(x): + if not ctx.installdb.is_installed(x): ctx.ui.info('Package %s is not installed.\n' % x) continue - (version, release, build) = installdb.get_version(x) + (version, release, build) = ctx.installdb.get_version(x) pkg = packagedb.get_package(x) if ignore_build or (not build): if release < pkg.release: @@ -283,8 +281,8 @@ def upgrade_pkg_names(A): print 'checking ', dep # add packages that can be upgraded if dependency.repo_satisfies_dep(dep): - if installdb.is_installed(dep.package): - (v,r,b) = installdb.get_version(dep.package) + if ctx.installdb.is_installed(dep.package): + (v,r,b) = ctx.installdb.get_version(dep.package) rep_pkg = packagedb.get_package(dep.package) (vp,rp,bp) = (rep_pkg.version, rep_pkg.release, rep_pkg.build) @@ -313,7 +311,7 @@ def remove(A): # filter packages that are not installed Ap = [] for x in A: - if installdb.is_installed(x): + if ctx.installdb.is_installed(x): Ap.append(x) else: ctx.ui.info('Package %s does not exist. Cannot remove.\n' % x) @@ -328,7 +326,7 @@ def remove(A): G_f = pgraph.PGraph(packagedb) # construct G_f - # find the "install closure" graph of G_f by package + # find the (install closure) graph of G_f by package # set A using packagedb print A for x in A: @@ -353,7 +351,7 @@ def remove(A): order = G_f.topological_sort() print order for x in order: - if installdb.is_installed(x): + if ctx.installdb.is_installed(x): operations.remove_single(x) else: ctx.ui.info('Package %s is not installed. Cannot remove.\n' % x) @@ -367,7 +365,7 @@ def configure_pending(): pass def info(package): - if package.endswith(const.package_prefix): + if package.endswith(ctx.const.package_prefix): return info_file(package) else: return info_name(package) @@ -375,10 +373,10 @@ def info(package): def info_file(package): from package import Package - if not os.path.exist(package): + if not os.path.exists(package): raise Error ('File %s not found' % package) - package = Package(package_name) + package = Package(package) package.read() return package.metadata, package.files @@ -392,8 +390,8 @@ def info_name(package_name): #FIXME: get it from sourcedb metadata.source = None #TODO: fetch the files from server if possible - if installdb.is_installed(package.name): - files = installdb.files(package.name) + if ctx.installdb.is_installed(package.name): + files = ctx.installdb.files(package.name) else: files = None return metadata, files @@ -414,11 +412,11 @@ class Repo: def add_repo(name, indexuri): repo = Repo(URI(indexuri)) - repodb.add_repo(name, repo) + ctx.repodb.add_repo(name, repo) def remove_repo(name): - if repodb.has_repo(name): - repodb.remove_repo(name) + if ctx.repodb.has_repo(name): + ctx.repodb.remove_repo(name) else: ctx.ui.error('* Repository %s does not exist. Cannot remove.\n' % name) @@ -427,7 +425,7 @@ def update_repo(repo): ctx.ui.info('* Updating repository: %s\n' % repo) index = Index() - index.read(repodb.get_repo(repo).indexuri.get_uri(), repo) + index.read(ctx.repodb.get_repo(repo).indexuri.get_uri(), repo) index.update_db(repo) ctx.ui.info('* Package database updated.\n') diff --git a/pisi/build.py b/pisi/build.py index 62615b7a..d51ebc04 100644 --- a/pisi/build.py +++ b/pisi/build.py @@ -24,7 +24,6 @@ _ = __trans.ugettext import pisi import pisi.util as util import pisi.context as ctx -from pisi.context import BuildContext from pisi.sourcearchive import SourceArchive from pisi.files import Files, FileInfo from pisi.metadata import MetaData @@ -105,23 +104,23 @@ class BuildContext(object): packageDir = self.spec.source.name + '-' + \ self.spec.source.version + '-' + self.spec.source.release - return config.destdir + config.values.dirs.tmp_dir \ + return ctx.config.destdir + ctx.config.values.dirs.tmp_dir \ + '/' + packageDir def pkg_work_dir(self): - return self.pkg_dir() + const.work_dir_suffix + return self.pkg_dir() + ctx.const.work_dir_suffix def pkg_install_dir(self): - return self.pkg_dir() + const.install_dir_suffix + return self.pkg_dir() + ctx.const.install_dir_suffix class PisiBuild: """PisiBuild class, provides the package build and creation routines""" def __init__(self, pspec): - self.ctx = BuildContext(pspec) - self.pspecDir = os.path.dirname(os.path.realpath(self.ctx.pspecfile)) - self.spec = self.ctx.spec - self.sourceArchive = SourceArchive(self.ctx) + self.bctx = BuildContext(pspec) + self.pspecDir = os.path.dirname(os.path.realpath(self.bctx.pspecfile)) + self.spec = self.bctx.spec + self.sourceArchive = SourceArchive(self.bctx) self.set_environment_vars() @@ -166,9 +165,9 @@ class PisiBuild: def set_environment_vars(self): """Sets the environment variables for actions API to use""" evn = { - "PKG_DIR": self.ctx.pkg_dir(), - "WORK_DIR": self.ctx.pkg_work_dir(), - "INSTALL_DIR": self.ctx.pkg_install_dir(), + "PKG_DIR": self.bctx.pkg_dir(), + "WORK_DIR": self.bctx.pkg_work_dir(), + "INSTALL_DIR": self.bctx.pkg_install_dir(), "SRC_NAME": self.spec.source.name, "SRC_VERSION": self.spec.source.version, "SRC_RELEASE": self.spec.source.release @@ -179,40 +178,40 @@ class PisiBuild: ctx.ui.info(_("Fetching source from: %s\n") % self.spec.source.archiveUri) self.sourceArchive.fetch() ctx.ui.info(_("Source archive is stored: %s/%s\n") - %(config.archives_dir(), self.spec.source.archiveName)) + %(ctx.config.archives_dir(), self.spec.source.archiveName)) def unpack_source_archive(self): ctx.ui.info(_("Unpacking archive...")) self.sourceArchive.unpack() - ctx.ui.info(_(" unpacked (%s)\n") % self.ctx.pkg_work_dir()) + ctx.ui.info(_(" unpacked (%s)\n") % self.bctx.pkg_work_dir()) self.set_state("unpacked") def run_setup_action(self): # Run configure, build and install phase ctx.ui.action(_("Setting up source...\n")) - self.run_action_function(const.setup_func) + self.run_action_function(ctx.const.setup_func) self.set_state("setupaction") def run_build_action(self): ctx.ui.action(_("Building source...\n")) - self.run_action_function(const.build_func) + self.run_action_function(ctx.const.build_func) self.set_state("buildaction") def run_install_action(self): ctx.ui.action(_("Installing...\n")) # Before install make sure install_dir is clean - if os.path.exists(self.ctx.pkg_install_dir()): - util.clean_dir(self.ctx.pkg_install_dir()) + if os.path.exists(self.bctx.pkg_install_dir()): + util.clean_dir(self.bctx.pkg_install_dir()) # install function is mandatory! - self.run_action_function(const.install_func, True) + self.run_action_function(ctx.const.install_func, True) self.set_state("installaction") def compile_action_script(self): """Compiles actions.py and sets the actionLocals and actionGlobals""" - specdir = os.path.dirname(self.ctx.pspecfile) - scriptfile = os.path.join(specdir, const.actions_file) + specdir = os.path.dirname(self.bctx.pspecfile) + scriptfile = os.path.join(specdir, ctx.const.actions_file) try: localSymbols = globalSymbols = {} buf = open(scriptfile).read() @@ -235,7 +234,7 @@ class PisiBuild: except KeyError: workdir = self.spec.source.name + "-" + self.spec.source.version - return os.path.join(self.ctx.pkg_work_dir(), workdir) + return os.path.join(self.bctx.pkg_work_dir(), workdir) def run_action_function(self, func, mandatory=False): """Calls the corresponding function in actions.py. @@ -263,14 +262,14 @@ class PisiBuild: def apply_patches(self): files_dir = os.path.abspath(os.path.join(self.pspecDir, - const.files_dir)) + ctx.const.files_dir)) for patch in self.spec.source.patches: patchFile = os.path.join(files_dir, patch.filename) if patch.compressionType: patchFile = util.uncompress(patchFile, compressType=patch.compressionType, - targetDir=config.tmp_dir()) + targetDir=ctx.config.tmp_dir()) ctx.ui.action(_("* Applying patch: %s\n") % patch.filename) util.do_patch(self.srcDir, patchFile, level=patch.level, target=patch.target) @@ -283,33 +282,33 @@ class PisiBuild: metadata = MetaData() metadata.from_spec(self.spec.source, package) - metadata.package.distribution = config.values.general.distribution - metadata.package.distributionRelease = config.values.general.distribution_release + metadata.package.distribution = ctx.config.values.general.distribution + metadata.package.distributionRelease = ctx.config.values.general.distribution_release metadata.package.architecture = "Any" # FIXME: Bu hatalı. installsize'ı almak için tüm # pkg_install_dir()'ın boyutunu hesaplayamayız. Bir source # birden fazla kaynak üretebilir. package.paths ile # karşılaştırarak file listesinden boyutları hesaplatmalıyız. - d = self.ctx.pkg_install_dir() + d = self.bctx.pkg_install_dir() size = util.dir_size(d) metadata.package.installedSize = str(size) # build no - if config.options.ignore_build_no: + if ctx.config.options.ignore_build_no: metadata.package.build = None # means, build no information n/a ctx.ui.warning('build number is not available.') else: metadata.package.build = self.calc_build_no(metadata.package.name) - metadata.write(os.path.join(self.ctx.pkg_dir(), const.metadata_xml)) + metadata.write(os.path.join(self.bctx.pkg_dir(), ctx.const.metadata_xml)) self.metadata = metadata def gen_files_xml(self, package): """Generetes files.xml using the path definitions in specfile and generated files by the build system.""" files = Files() - install_dir = self.ctx.pkg_install_dir() + install_dir = self.bctx.pkg_install_dir() collisions = check_path_collision(package, self.spec.packages) if collisions: @@ -327,24 +326,24 @@ class PisiBuild: d[frpath] = FileInfo(frpath, ftype, fsize, fhash) for (p, fileinfo) in d.iteritems(): files.append(fileinfo) - files.write(os.path.join(self.ctx.pkg_dir(), const.files_xml)) + files.write(os.path.join(self.bctx.pkg_dir(), ctx.const.files_xml)) self.files = files def calc_build_no(self, package_name): """Calculate build number""" - # find previous build in config.options.output_dir + # find previous build in ctx.config.options.output_dir found = [] - for root, dirs, files in os.walk(config.options.output_dir): + for root, dirs, files in os.walk(ctx.config.options.output_dir): for fn in files: fn = fn.decode('utf-8') if fn.startswith(package_name + '-') and \ - fn.endswith(const.package_prefix): + fn.endswith(ctx.const.package_prefix): old_package_fn = os.path.join(root, fn) ctx.ui.info('(found old version %s)' % old_package_fn) old_pkg = Package(old_package_fn, 'r') from os.path import join - old_pkg.read(join(config.tmp_dir(), 'oldpkg')) + old_pkg.read(join(ctx.config.tmp_dir(), 'oldpkg')) old_build = old_pkg.metadata.package.build found.append( (old_package_fn, old_build) ) if not found: @@ -362,7 +361,7 @@ class PisiBuild: # compare old files.xml with the new one.. old_pkg = Package(old_package_fn, 'r') from os.path import join - old_pkg.read(join(config.tmp_dir(), 'oldpkg')) + old_pkg.read(join(ctx.config.tmp_dir(), 'oldpkg')) # FIXME: TAKE INTO ACCOUNT MINOR CHANGES IN METADATA changed = False @@ -405,11 +404,11 @@ class PisiBuild: ctx.ui.action(_("** Building package %s\n") % package.name); - ctx.ui.action(_("Generating %s...") % const.files_xml) + ctx.ui.action(_("Generating %s...") % ctx.const.files_xml) self.gen_files_xml(package) ctx.ui.info(_(" done.\n")) - ctx.ui.action(_("Generating %s...") % const.metadata_xml) + ctx.ui.action(_("Generating %s...") % ctx.const.metadata_xml) self.gen_metadata_xml(package) ctx.ui.info(_(" done.\n")) @@ -424,29 +423,29 @@ class PisiBuild: # add comar files to package os.chdir(self.pspecDir) for pcomar in package.providesComar: - fname = os.path.join(const.comar_dir, + fname = os.path.join(ctx.const.comar_dir, pcomar.script) pkg.add_to_package(fname) # store additional files - install_dir = self.ctx.pkg_dir() + const.install_dir_suffix + install_dir = self.bctx.pkg_dir() + ctx.const.install_dir_suffix for afile in package.additionalFiles: - src = os.path.join(const.files_dir, afile.filename) + src = os.path.join(ctx.const.files_dir, afile.filename) dest = os.path.join(install_dir + os.path.dirname(afile.target), os.path.basename(afile.target)) util.copy_file(src, dest) if afile.permission: os.chmod(dest, int(afile.permission) | 0777) # add xmls and files - os.chdir(self.ctx.pkg_dir()) + os.chdir(self.bctx.pkg_dir()) - pkg.add_to_package(const.metadata_xml) - pkg.add_to_package(const.files_xml) + pkg.add_to_package(ctx.const.metadata_xml) + pkg.add_to_package(ctx.const.files_xml) # Now it is time to add files to the packages using newly # created files.xml files = Files() - files.read(const.files_xml) + files.read(ctx.const.files_xml) for finfo in files.list: pkg.add_to_package("install/" + finfo.path) diff --git a/pisi/cli/commands.py b/pisi/cli/commands.py index d121d8cc..8cb14db1 100644 --- a/pisi/cli/commands.py +++ b/pisi/cli/commands.py @@ -15,6 +15,7 @@ from optparse import OptionParser import pisi import pisi.cli +import pisi.context as ctx from pisi.uri import URI @@ -113,10 +114,8 @@ class Command(object): """initialize PiSi components""" # NB: command imports here or in the command class run fxns - import pisi import pisi.api pisi.api.init(database, self.options) - import pisi.context as ctx def finalize(self): """do cleanup work for PiSi components""" @@ -227,7 +226,7 @@ fetch all necessary files and build the package for you. return self.init() - ctx.ui.info('Output directory: %s\n' % config.options.output_dir) + ctx.ui.info('Output directory: %s\n' % ctx.config.options.output_dir) for arg in self.args: pisi.api.build(arg, self.authInfo) self.finalize() @@ -372,8 +371,7 @@ Upgrade the entire system. return self.init() - from pisi.installdb import installdb - pisi.api.upgrade(installdb.list_installed()) + pisi.api.upgrade(ctx.installdb.list_installed()) self.finalize() @@ -503,15 +501,14 @@ Usage: list-installed def run(self): self.init(True) - from pisi.installdb import installdb - list = installdb.list_installed() + list = ctx.installdb.list_installed() list.sort() if self.options.install_info: print 'Package Name |St| Version| Rel.| Build| Distro| Date' print '========================================================================' for pkg in list: package = pisi.packagedb.inst_packagedb.get_package(pkg) - inst_info = installdb.get_info(pkg) + inst_info = ctx.installdb.get_info(pkg) if self.options.long: print package print inst_info @@ -621,10 +618,9 @@ Lists currently tracked repositories. def run(self): self.init() - from pisi.repodb import repodb - for repo in repodb.list(): + for repo in ctx.repodb.list(): print repo - print ' ', repodb.get_repo(repo).indexuri.get_uri() + print ' ', ctx.repodb.get_repo(repo).indexuri.get_uri() self.finalize() @@ -643,7 +639,6 @@ Gives a brief list of PiSi components published in the repository. name = ("list-available", "la") def run(self): - from pisi.repodb import repodb self.init(True) @@ -652,7 +647,7 @@ Gives a brief list of PiSi components published in the repository. self.print_packages(arg) else: # print for all repos - for repo in repodb.list(): + for repo in ctx.repodb.list(): ctx.ui.info("Repository : %s\n" % repo) self.print_packages(repo) self.finalize() @@ -678,10 +673,9 @@ class ListPending(Command): name = ("list-pending", "lp") def run(self): - from pisi.installdb import installdb self.init(True) - list = installdb.list_pending() + list = ctx.installdb.list_pending() list.sort() for p in list: print p diff --git a/pisi/context.py b/pisi/context.py index d7803070..3ec733f4 100644 --- a/pisi/context.py +++ b/pisi/context.py @@ -26,6 +26,9 @@ config = None # default UI is CLI ui = None # not now +installdb = None +repodb = None + #def register(_impl): # """ Register a UI implementation""" # ui = _impl diff --git a/pisi/dependency.py b/pisi/dependency.py index 5ec6511e..a7850098 100644 --- a/pisi/dependency.py +++ b/pisi/dependency.py @@ -14,6 +14,7 @@ #import pisi.db as db import pisi.context as ctx +import pisi.packagedb as packagedb from pisi.version import Version from pisi.xmlext import * from pisi.xmlfile import XmlFile @@ -89,7 +90,7 @@ def installed_satisfies_dep(depinfo): """determine if a package in *repository* satisfies given dependency spec""" pkg_name = depinfo.package - if not installdb.is_installed(pkg_name): + if not ctx.installdb.is_installed(pkg_name): return False else: pkg = packagedb.inst_packagedb.get_package(pkg_name) diff --git a/pisi/fetcher.py b/pisi/fetcher.py index 87dfd143..25176b24 100644 --- a/pisi/fetcher.py +++ b/pisi/fetcher.py @@ -23,8 +23,8 @@ from base64 import encodestring # pisi modules import pisi import pisi.util as util -from pisi.uri import URI import pisi.context as ctx +from pisi.uri import URI class FetchError(pisi.Error): @@ -37,7 +37,7 @@ def fetch_url(url, dest, progress=None): fetch.progress = progress fetch.fetch() if progress: - ctx.ctx.ui.info('\n') + ctx.ui.info('\n') class Fetcher: diff --git a/pisi/index.py b/pisi/index.py index ae30d955..b6f961e5 100644 --- a/pisi/index.py +++ b/pisi/index.py @@ -16,12 +16,12 @@ import os -from pisi.package import Package -from pisi.xmlfile import XmlFile +import pisi.context as ctx import pisi.metadata as metadata import pisi.packagedb as packagedb -import pisi.context as ctx import pisi.util as util +from pisi.package import Package +from pisi.xmlfile import XmlFile from pisi.uri import URI class Index(XmlFile): diff --git a/pisi/install.py b/pisi/install.py index 5c977f95..d37d20e1 100644 --- a/pisi/install.py +++ b/pisi/install.py @@ -17,16 +17,15 @@ import os import pisi + +import pisi.context as ctx +import pisi.packagedb as packagedb +import pisi.dependency as dependency +import pisi.operations as operations from pisi.specfile import * from pisi.package import Package -from pisi.ui import ui -from pisi.installdb import installdb -import pisi.packagedb as packagedb -from pisi.packagedb import inst_packagedb -import pisi.dependency as dependency from pisi.metadata import MetaData from pisi.comariface import comard -import pisi.operations as operations #import conflicts class InstallError(pisi.Error): @@ -45,7 +44,7 @@ class Installer: def install(self, ask_reinstall = True): "entry point" - ui.info('Installing %s, version %s, release %s, build %s\n' % + ctx.ui.info('Installing %s, version %s, release %s, build %s\n' % (self.pkginfo.name, self.pkginfo.version, self.pkginfo.release, self.pkginfo.build)) self.ask_reinstall = ask_reinstall @@ -72,12 +71,12 @@ class Installer: # check conflicts for pkg in self.metadata.package.conflicts: - if installdb.is_installed(self.pkginfo): + if ctx.installdb.is_installed(self.pkginfo): raise InstallError("Package conflicts " + pkg) # check dependencies if not dependency.installable(self.pkginfo.name): - ui.error('Dependencies for ' + self.pkginfo.name + + ctx.ui.error('Dependencies for ' + self.pkginfo.name + ' not satisfied\n') raise InstallError("Package not installable") @@ -86,12 +85,12 @@ class Installer: pkg = self.pkginfo - if installdb.is_installed(pkg.name): # is this a reinstallation? - (iversion, irelease, ibuild) = installdb.get_version(pkg.name) + if ctx.installdb.is_installed(pkg.name): # is this a reinstallation? + (iversion, irelease, ibuild) = ctx.installdb.get_version(pkg.name) # determine if same version same_ver = False - ignore_build = config.options and config.options.ignore_build_no + ignore_build = ctx.config.options and ctx.config.options.ignore_build_no if (not ibuild) or (not pkg.build) or ignore_build: # we don't look at builds to compare two package versions if pkg.version == iversion and pkg.release == irelease: @@ -102,21 +101,21 @@ class Installer: if same_ver: if self.ask_reinstall: - if not ui.confirm('Re-install same version package?'): + if not ctx.ui.confirm('Re-install same version package?'): raise InstallError('Package re-install declined') else: upgrade = False # is this an upgrade? # determine and report the kind of upgrade: version, release, build if pkg.version > iversion: - ui.info('Upgrading to new upstream version\n') + ctx.ui.info('Upgrading to new upstream version\n') upgrade = True elif pkg.release > irelease: - ui.info('Upgrading to new distribution release\n') + ctx.ui.info('Upgrading to new distribution release\n') upgrade = True elif ((not ignore_build) and ibuild and pkg.build and pkg.build > ibuild): - ui.info('Upgrading to new distribution build\n') + ctx.ui.info('Upgrading to new distribution build\n') upgrade = True # is this a downgrade? confirm this action. @@ -127,7 +126,7 @@ class Installer: x = 'Downgrade to old distribution release?' else: x = 'Downgrade to old distribution build?' - if not ui.confirm(x): + if not ctx.ui.confirm(x): raise InstallError('Package downgrade declined') # remove old package then @@ -136,24 +135,24 @@ class Installer: def extract_install(self): "unzip package in place" - ui.info('Extracting files,\n') - self.package.extract_dir_flat('install', config.destdir) + ctx.ui.info('Extracting files,\n') + self.package.extract_dir_flat('install', ctx.config.destdir) def store_pisi_files(self): """put files.xml, metadata.xml, actions.py and COMAR scripts somewhere in the file system. We'll need these in future...""" - ui.info('Storing %s, ' % const.files_xml) - self.package.extract_file(const.files_xml, self.package.pkg_dir()) + ctx.ui.info('Storing %s, ' % ctx.const.files_xml) + self.package.extract_file(ctx.const.files_xml, self.package.pkg_dir()) - ui.info('%s.\n' % const.metadata_xml) - self.package.extract_file(const.metadata_xml, self.package.pkg_dir()) + ctx.ui.info('%s.\n' % ctx.const.metadata_xml) + self.package.extract_file(ctx.const.metadata_xml, self.package.pkg_dir()) for pcomar in self.metadata.package.providesComar: - fpath = os.path.join(const.comar_dir, pcomar.script) + fpath = os.path.join(ctx.const.comar_dir, pcomar.script) # comar prefix is added to the pkg_dir while extracting comar # script file. so we'll use pkg_dir as destination. - ui.info('Storing %s\n' % fpath) + ctx.ui.info('Storing %s\n' % fpath) self.package.extract_file(fpath, self.package.pkg_dir()) def register_comar_scripts(self): @@ -161,7 +160,7 @@ class Installer: for pcomar in self.metadata.package.providesComar: scriptPath = os.path.join(self.package.comar_dir(),pcomar.script) - ui.info("Registering COMAR script %s\n" % pcomar.script) + ctx.ui.info("Registering COMAR script %s\n" % pcomar.script) # FIXME: We must check the result of the command (possibly # with id?) if comard: @@ -174,11 +173,11 @@ class Installer: "update databases" # installdb - installdb.install(self.metadata.package.name, + ctx.installdb.install(self.metadata.package.name, self.metadata.package.version, self.metadata.package.release, self.metadata.package.build, self.metadata.package.distribution) # installed packages - inst_packagedb.add_package(self.pkginfo) + packagedb.inst_packagedb.add_package(self.pkginfo) diff --git a/pisi/installdb.py b/pisi/installdb.py index ee71ae0d..145e1bf8 100644 --- a/pisi/installdb.py +++ b/pisi/installdb.py @@ -76,8 +76,8 @@ class InstallDB: def files_name(self, pkg, version, release): from os.path import join - pkg_dir = join(config.lib_dir(), pkg + '-' + version + '-' + release) - return join(pkg_dir, const.files_xml) + pkg_dir = join(ctx.config.lib_dir(), pkg + '-' + version + '-' + release) + return join(pkg_dir, ctx.const.files_xml) def files(self, pkg): pkg = str(pkg) @@ -133,7 +133,7 @@ class InstallDB: pkg = str(pkg) if self.is_installed(pkg): raise InstallDBError("already installed") - if config.options and config.options.ignore_comar: + if ctx.config.options and ctx.config.options.ignore_comar: state = 'ip' self.dp[pkg] = True else: @@ -152,8 +152,14 @@ class InstallDB: if self.d.has_key(pkg): del self.d[pkg] -installdb = None + +db = None def init(): - installdb = InstallDB() + global db + if db: + return db + + db = InstallDB() + return db diff --git a/pisi/lockeddbshelve.py b/pisi/lockeddbshelve.py index e7931392..c4370416 100644 --- a/pisi/lockeddbshelve.py +++ b/pisi/lockeddbshelve.py @@ -20,6 +20,7 @@ import os import fcntl import pisi +import pisi.context class LockedDBShelf(shelve.DBShelf): @@ -41,7 +42,7 @@ class LockedDBShelf(shelve.DBShelf): else: raise error, "flags should be one of 'r', 'w', 'c' or 'n' or use the bsddb.db.DB_* flags" filename = os.path.join( pisi.context.config.db_dir(), dbname + '.bdb') - LockedDBShelf.open(self,filename, dbname, filetype, flags, mode) + self.open(filename, dbname, filetype, flags, mode) def open(self, filename, dbname, filetype, flags, mode): pisi.util.check_dir(pisi.context.config.db_dir()) diff --git a/pisi/metadata.py b/pisi/metadata.py index 21a20a5e..31c75daf 100644 --- a/pisi/metadata.py +++ b/pisi/metadata.py @@ -17,9 +17,8 @@ # Baris Metin -import util +import pisi.util as util class Version: def __init__(self, verstring): diff --git a/tests/archivetests.py b/tests/archivetests.py index d0b87697..b1ba964b 100644 --- a/tests/archivetests.py +++ b/tests/archivetests.py @@ -13,32 +13,34 @@ import os from os.path import exists as pathexists from os.path import basename, islink, join +import pisi.context as ctx +import pisi.api from pisi import archive from pisi import sourcearchive from pisi import fetcher from pisi import util -from pisi import context +from pisi.build import BuildContext from pisi.config import config from pisi import uri class ArchiveFileTestCase(unittest.TestCase): -# def setUp(self): -# pass + def setUp(self): + pisi.api.init() def testUnpackTar(self): - ctx = context.BuildContext("tests/popt/pspec.xml") + bctx = BuildContext("tests/popt/pspec.xml") - achv = sourcearchive.SourceArchive(ctx) + achv = sourcearchive.SourceArchive(bctx) - assert ctx.spec.source.archiveType == "targz" + assert bctx.spec.source.archiveType == "targz" # skip fetching and directly unpack the previously fetched (by # fetchertests) archive - if not achv.isCached(interactive=False): + if not achv.is_cached(interactive=False): achv.fetch(interactive=False) achv.unpack() - targetDir = ctx.pkg_work_dir() + targetDir = bctx.pkg_work_dir() # but testing is hard # "var/tmp/pisi/popt-1.7-3/work" (targetDir) assert pathexists(targetDir + "/popt-1.7") @@ -51,15 +53,15 @@ class ArchiveFileTestCase(unittest.TestCase): "5af9dd7d754f788cf511c57ce0af3d555fed009d") def testUnpackZip(self): - ctx = context.BuildContext("tests/sandbox/pspec.xml") + bctx = BuildContext("tests/sandbox/pspec.xml") - assert ctx.spec.source.archiveType == "zip" + assert bctx.spec.source.archiveType == "zip" - achv = sourcearchive.SourceArchive(ctx) + achv = sourcearchive.SourceArchive(bctx) achv.fetch(interactive=False) achv.unpack(cleanDir=True) - targetDir = ctx.pkg_work_dir() + targetDir = bctx.pkg_work_dir() assert pathexists(targetDir + "/sandbox") testfile = targetDir + "/sandbox/loremipsum.txt" @@ -75,9 +77,9 @@ class ArchiveFileTestCase(unittest.TestCase): def testMakeZip(self): # first unpack our dear sandbox.zip - ctx = context.BuildContext("tests/sandbox/pspec.xml") - targetDir = ctx.pkg_work_dir() - achv = sourcearchive.SourceArchive(ctx) + bctx = BuildContext("tests/sandbox/pspec.xml") + targetDir = bctx.pkg_work_dir() + achv = sourcearchive.SourceArchive(bctx) achv.fetch(interactive=False) achv.unpack(cleanDir=True) del achv @@ -92,18 +94,18 @@ class ArchiveFileTestCase(unittest.TestCase): def testUnpackZipCond(self): - ctx = context.BuildContext("tests/sandbox/pspec.xml") - url = uri.URI(ctx.spec.source.archiveUri) - targetDir = ctx.pkg_work_dir() + bctx = BuildContext("tests/sandbox/pspec.xml") + url = uri.URI(bctx.spec.source.archiveUri) + targetDir = bctx.pkg_work_dir() filePath = join(config.archives_dir(), url.filename()) # check cached - if util.sha1_file(filePath) != ctx.spec.source.archiveSHA1: - fetch = fetcher.Fetcher(ctx.spec.source.archiveUri, targetDir) + if util.sha1_file(filePath) != bctx.spec.source.archiveSHA1: + fetch = fetcher.Fetcher(bctx.spec.source.archiveUri, targetDir) fetch.fetch() - assert ctx.spec.source.archiveType == "zip" + assert bctx.spec.source.archiveType == "zip" - achv = archive.Archive(filePath, ctx.spec.source.archiveType) + achv = archive.Archive(filePath, bctx.spec.source.archiveType) achv.unpack_files(["sandbox/loremipsum.txt"], targetDir) assert pathexists(targetDir + "/sandbox") testfile = targetDir + "/sandbox/loremipsum.txt" diff --git a/tests/constantstests.py b/tests/constantstests.py index 9c50fbc7..eb678e21 100644 --- a/tests/constantstests.py +++ b/tests/constantstests.py @@ -10,11 +10,13 @@ import unittest -from pisi.constants import const +import pisi.context as ctx class ContextTestCase(unittest.TestCase): def testConstness(self): + const = ctx.const + # test if we can get a const attribute? try: test = const.package_prefix @@ -46,6 +48,8 @@ class ContextTestCase(unittest.TestCase): pass def testConstValues(self): + const = ctx.const + constDict = { "actions_file": "actions.py", "setup_func": "setup", @@ -59,4 +63,5 @@ class ContextTestCase(unittest.TestCase): else: self.fail("Constants does not have an attribute named %s" % k) + suite = unittest.makeSuite(ContextTestCase) diff --git a/tests/fetchertests.py b/tests/fetchertests.py index 561016d0..2cf232f1 100644 --- a/tests/fetchertests.py +++ b/tests/fetchertests.py @@ -11,17 +11,21 @@ import unittest import os +import pisi.context as ctx +import pisi.api +from pisi.specfile import SpecFile from pisi import fetcher from pisi import util -from pisi import context -from pisi import config from pisi import uri class FetcherTestCase(unittest.TestCase): def setUp(self): - self.ctx = context.BuildContext("tests/popt/pspec.xml") - self.url = uri.URI(self.ctx.spec.source.archiveUri) - self.destpath = config.config.archives_dir() + pisi.api.init() + + self.spec = SpecFile() + self.spec.read("tests/popt/pspec.xml") + self.url = uri.URI(self.spec.source.archiveUri) + self.destpath = ctx.config.archives_dir() self.fetch = fetcher.Fetcher(self.url, self.destpath) def testFetch(self): @@ -29,6 +33,6 @@ class FetcherTestCase(unittest.TestCase): fetchedFile = os.path.join(self.destpath, self.url.filename()) if os.access(fetchedFile, os.R_OK): self.assertEqual(util.sha1_file(fetchedFile), - self.ctx.spec.source.archiveSHA1) + self.spec.source.archiveSHA1) suite = unittest.makeSuite(FetcherTestCase) diff --git a/tests/graphtests.py b/tests/graphtests.py index 9a89bc28..60eb564d 100644 --- a/tests/graphtests.py +++ b/tests/graphtests.py @@ -16,10 +16,10 @@ from pisi.config import config class GraphTestCase(unittest.TestCase): def setUp(self): - self.g0 = graph.digraph() + self.g0 = graph.Digraph() self.g0.from_list([ (1,2), (1,3), (2,3), (3,4), (4, 5), (4,1)]) - self.g1 = graph.digraph() + self.g1 = graph.Digraph() self.g1.from_list([ (0,2), (0,3), (3,4), (2,4), (0,5), (5,4) ]) def testCycle(self): diff --git a/tests/installdbtests.py b/tests/installdbtests.py index 2d97f99b..9a0c4b6e 100644 --- a/tests/installdbtests.py +++ b/tests/installdbtests.py @@ -11,29 +11,31 @@ import unittest import os -from pisi.installdb import installdb +import pisi.context as ctx +import pisi.api +import pisi.installdb from pisi import util -from pisi.config import config class InstallDBTestCase(unittest.TestCase): def setUp(self): - pass + pisi.api.init() + self.installdb = ctx.installdb def testRemoveDummy(self): - installdb.remove('installtest') - self.assert_(not installdb.is_installed('installtest')) + self.installdb.remove('installtest') + self.assert_(not self.installdb.is_installed('installtest')) def testInstall(self): - installdb.purge('installtest') - installdb.install('installtest', '0.1', '2', '3') + self.installdb.purge('installtest') + self.installdb.install('installtest', '0.1', '2', '3') def testRemovePurge(self): - installdb.install('installtest', '0.1', '2', '3') - self.assert_(installdb.is_installed('installtest')) - installdb.remove('installtest') - self.assert_(installdb.is_removed('installtest')) - installdb.purge('installtest') - self.assert_(not installdb.is_recorded('installtest')) + self.installdb.install('installtest', '0.1', '2', '3') + self.assert_(self.installdb.is_installed('installtest')) + self.installdb.remove('installtest') + self.assert_(self.installdb.is_removed('installtest')) + self.installdb.purge('installtest') + self.assert_(not self.installdb.is_recorded('installtest')) suite = unittest.makeSuite(InstallDBTestCase) diff --git a/tests/metadatatests.py b/tests/metadatatests.py index f0f26e7e..32bd9a96 100644 --- a/tests/metadatatests.py +++ b/tests/metadatatests.py @@ -36,7 +36,7 @@ class MetaDataTestCase(unittest.TestCase): def testVerify(self): md = self.testRead() - if not md.verify(): + if md.has_errors(): self.fail("Couldn't verify!") diff --git a/tests/packagedbtests.py b/tests/packagedbtests.py index c271d517..50ba0375 100644 --- a/tests/packagedbtests.py +++ b/tests/packagedbtests.py @@ -11,19 +11,25 @@ import unittest import os +import pisi.context as ctx +import pisi.api from pisi.packagedb import PackageDB from pisi import util -from pisi import context +from pisi.specfile import SpecFile class PackageDBTestCase(unittest.TestCase): def setUp(self): # setUp will be called for each test individually - self.ctx = context.BuildContext('tests/popt/pspec.xml') + pisi.api.init() + + self.spec = SpecFile() + self.spec.read('tests/popt/pspec.xml') + self.pdb = PackageDB('testdb') def testAdd(self): - self.pdb.add_package(self.ctx.spec.packages[0]) + self.pdb.add_package(self.spec.packages[0]) self.assert_(self.pdb.has_package('popt-libs')) # close the database and remove lock del self.pdb diff --git a/tests/run.py b/tests/run.py index 229da31e..19c87d28 100755 --- a/tests/run.py +++ b/tests/run.py @@ -21,7 +21,7 @@ runTestSuite = lambda(x): unittest.TextTestRunner(verbosity=2).run(x) def run_all(): import utiltests - import xmlfile + import xmlfiletests import specfiletests import metadatatests import constantstests diff --git a/tests/sandbox/pspec.xml b/tests/sandbox/pspec.xml index 749c7053..98e279dd 100644 --- a/tests/sandbox/pspec.xml +++ b/tests/sandbox/pspec.xml @@ -8,6 +8,8 @@ sandbox http://cekirdek.uludag.org.tr/ + Test packati + Sandbox: Test paketi... A. Murat Eren meren@uludag.org.tr @@ -27,7 +29,6 @@ sandbox - Bla temprorary:zip diff --git a/tests/sourcedbtests.py b/tests/sourcedbtests.py index 8faa3012..02edee3e 100644 --- a/tests/sourcedbtests.py +++ b/tests/sourcedbtests.py @@ -11,22 +11,28 @@ import unittest import os -from pisi.sourcedb import sourcedb +import pisi.context as ctx +import pisi.api +import pisi.sourcedb from pisi import util -from pisi import context +from pisi.specfile import SpecFile class SourceDBTestCase(unittest.TestCase): def setUp(self): - self.ctx = context.BuildContext("tests/popt/pspec.xml") + pisi.api.init() + + self.sourcedb = pisi.sourcedb.init() + self.spec = SpecFile() + self.spec.read("tests/popt/pspec.xml") def testAdd(self): - sourcedb.add_source(self.ctx.spec.source) - self.assert_(sourcedb.has_source("popt")) + self.sourcedb.add_source(self.spec.source) + self.assert_(self.sourcedb.has_source("popt")) def testRemove(self): self.testAdd() - sourcedb.remove_source("popt") - self.assert_(not sourcedb.has_source("popt")) + self.sourcedb.remove_source("popt") + self.assert_(not self.sourcedb.has_source("popt")) suite = unittest.makeSuite(SourceDBTestCase)