From 5888f2463c8a14528bf09eb677c65548c612232f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Mon, 13 Jun 2005 12:34:51 +0000 Subject: [PATCH] * dizinleri dinamik yap, destdir destegi icin gerekli * install iskeletine biraz daha sekil ver * build fonksiyonunu olmasi gerektigi gibi build.py'e tasi * ufak kozmetik seyler --- src/pisi-build | 19 ++----------------- src/pisi/build.py | 22 ++++++++++++++++++++-- src/pisi/config.py | 26 ++++++++++++++++++++++---- src/pisi/fetcher.py | 2 +- src/pisi/install.py | 23 ++++++++++++++--------- src/pisi/installdb.py | 7 ++++--- 6 files changed, 63 insertions(+), 36 deletions(-) diff --git a/src/pisi-build b/src/pisi-build index 50d276ff..57986b4b 100755 --- a/src/pisi-build +++ b/src/pisi-build @@ -15,11 +15,6 @@ Usage: %s [options] package-name.pspec """ %(progname) -def doProgress(filename, percent, rate, symbol): - out = '\r%-30.30s %3d%% %12.2f %s' % \ - (pd['filename'], pd['percent'], pd['rate'], pd['symbol']) - pisi.ui.info(out) - def main(): import sys import getopt @@ -51,19 +46,9 @@ def main(): else: pspec = args[0] - # doing the real job. + # don't do the real job here. this is just a CLI! pb = PisiBuild(pspec) - pisi.ui.info("Building PISI source package: %s\n" % pb.spec.sourceName) - - pisi.ui.info("Fetching source from: %s (be patient)\n" % pb.spec.archiveUri) - pb.fetchArchive(doProgress) - pisi.ui.info("Source archive is stored: %s/%s\n" %(pisi.config.archives_dir, pb.archiveName)) - # pb.unpackArchive() - # pb.applyPatches() - # pb.buildSource() - # pb.installTarget() - - pb.buildPackages() + pb.install() if __name__ == "__main__": diff --git a/src/pisi/build.py b/src/pisi/build.py index b4adc0f6..617d9e0e 100644 --- a/src/pisi/build.py +++ b/src/pisi/build.py @@ -17,6 +17,12 @@ import ui class PisiBuildError(Exception): pass +# FIXME: this eventually has to go to ui module +def displayProgress(pd): + out = '\r%-30.30s %3d%% %12.2f %s' % \ + (pd['filename'], pd['percent'], pd['rate'], pd['symbol']) + ui.info(out) + class PisiBuild: """PisiBuild class, provides the package build and creation routines""" def __init__(self, pspecfile): @@ -29,8 +35,20 @@ class PisiBuild: self.archiveName = basename(spec.archiveUri) self.spec = spec + def install(self): + ui.info("Building PISI source package: %s\n" % self.spec.sourceName) + ui.info("Fetching source from: %s" % self.spec.archiveUri) + self.fetchArchive(displayProgress) + ui.info("\n") + ui.info("Source archive is stored: %s/%s\n" %(config.archives_dir(), self.archiveName)) + # unpackArchive() + # applyPatches() + # buildSource() + # installTarget() + self.buildPackages() + def fetchArchive(self, percentHook=None): - """fetch an archive and store to pisi.config.archives_dir + """fetch an archive and store to config.archives_dir() using fether.Fetcher""" fetch = Fetcher(self.spec.archiveUri) @@ -38,7 +56,7 @@ class PisiBuild: destpath = fetch.filedest + "/" + fetch.filename if os.access(destpath, os.R_OK): if util.md5_file(destpath)==self.spec.archiveMD5: - ui.info(fetch.filename + " cached\n") + ui.info(' [cached]') return if percentHook: diff --git a/src/pisi/config.py b/src/pisi/config.py index 5ec74a31..a1967692 100644 --- a/src/pisi/config.py +++ b/src/pisi/config.py @@ -1,7 +1,25 @@ # -*- coding: utf-8 -*- # PISI configuration (static and dynamic) -lib_dir = "/var/lib/pisi" -db_dir = "/var/db/pisi" -archives_dir = "/var/cache/pisi/archives" -tmp_dir = "/var/tmp/pisi" +lib_dir_suffix = "/var/lib/pisi" +db_dir_suffix = "/var/db/pisi" +archives_dir_suffix = "/var/cache/pisi/archives" +tmp_dir_suffix = "/var/tmp/pisi" + +destdir = '' # install default to root by default + +destdir = './test' # only for ALPHA + +# the idea is that destdir can be set with --destdir=... + +def lib_dir(): + return destdir + lib_dir_suffix + +def db_dir(): + return destdir + db_dir_suffix + +def archives_dir(): + return destdir + archives_dir_suffix + +def tmp_dir(): + return destdir + tmp_dir_suffix diff --git a/src/pisi/fetcher.py b/src/pisi/fetcher.py index 97e70b41..b315157f 100644 --- a/src/pisi/fetcher.py +++ b/src/pisi/fetcher.py @@ -21,7 +21,7 @@ class Fetcher: """Yet another Pisi tool for fetching files from various sources..""" def __init__(self, uri): self.uri = uri - self.filedest = config.archives_dir + self.filedest = config.archives_dir() util.check_dir(self.filedest) self.scheme = "file" self.netloc = "" diff --git a/src/pisi/install.py b/src/pisi/install.py index 155f7526..589a3390 100644 --- a/src/pisi/install.py +++ b/src/pisi/install.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- #import package -from specfile import SpecFile +from specfile import * from package import Package import util import ui @@ -10,23 +10,28 @@ import packagedb import dependency #import conflicts +class InstallError(Exception): + pass def install_package_file(package_fn): package = Package(package_fn, 'r') # extract control files - util.clean_directory(install_dir) - ui.info.('extracting files\n') - package.extract_files(install_dir) + util.clean_directory(install_dir()) + ui.info('extracting files\n') + package.extract_files(install_dir()) # verify package # check if we have all required files - spec = PackageSpecFile() - spec.read(install_dir + '/pspec.xml') - # check pspec semantics - spec.verify() + metadata = MetaData() + metadata.read(install_dir() + '/metadata.xml') + # check package semantics + metadata.verify() + # check file system requirements + # what to do if / is split into /usr, /var, etc.? + # check conflicts # check dependencies @@ -35,5 +40,5 @@ def install_package_file(package_fn): # update databases # installdb - installdb.install(spec.spec.install_dir + '/files.xml') + installdb.install(spec.spec.install_dir() + '/files.xml') diff --git a/src/pisi/installdb.py b/src/pisi/installdb.py index 76a098af..464e7ce9 100644 --- a/src/pisi/installdb.py +++ b/src/pisi/installdb.py @@ -2,14 +2,15 @@ # installation database # maintainer: eray and caglar -from config import * +import config import shelve import util +util.check_dir( config.db_dir() ) -d = shelve.open( db_dir + '/install.dbm') +d = shelve.open( config.db_dir() + '/install.dbm') -files_dir = archive_dir + "/files" +files_dir = config.archives_dir() + "/files" class InstallDBError(Exception): pass