* 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
This commit is contained in:
Eray Özkural
2005-06-13 12:34:51 +00:00
parent 6dfa8979b5
commit 5888f2463c
6 changed files with 63 additions and 36 deletions
+2 -17
View File
@@ -15,11 +15,6 @@ Usage:
%s [options] package-name.pspec %s [options] package-name.pspec
""" %(progname) """ %(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(): def main():
import sys import sys
import getopt import getopt
@@ -51,19 +46,9 @@ def main():
else: else:
pspec = args[0] pspec = args[0]
# doing the real job. # don't do the real job here. this is just a CLI!
pb = PisiBuild(pspec) pb = PisiBuild(pspec)
pisi.ui.info("Building PISI source package: %s\n" % pb.spec.sourceName) pb.install()
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()
if __name__ == "__main__": if __name__ == "__main__":
+20 -2
View File
@@ -17,6 +17,12 @@ import ui
class PisiBuildError(Exception): class PisiBuildError(Exception):
pass 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: class PisiBuild:
"""PisiBuild class, provides the package build and creation routines""" """PisiBuild class, provides the package build and creation routines"""
def __init__(self, pspecfile): def __init__(self, pspecfile):
@@ -29,8 +35,20 @@ class PisiBuild:
self.archiveName = basename(spec.archiveUri) self.archiveName = basename(spec.archiveUri)
self.spec = spec 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): 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""" using fether.Fetcher"""
fetch = Fetcher(self.spec.archiveUri) fetch = Fetcher(self.spec.archiveUri)
@@ -38,7 +56,7 @@ class PisiBuild:
destpath = fetch.filedest + "/" + fetch.filename destpath = fetch.filedest + "/" + fetch.filename
if os.access(destpath, os.R_OK): if os.access(destpath, os.R_OK):
if util.md5_file(destpath)==self.spec.archiveMD5: if util.md5_file(destpath)==self.spec.archiveMD5:
ui.info(fetch.filename + " cached\n") ui.info(' [cached]')
return return
if percentHook: if percentHook:
+22 -4
View File
@@ -1,7 +1,25 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# PISI configuration (static and dynamic) # PISI configuration (static and dynamic)
lib_dir = "/var/lib/pisi" lib_dir_suffix = "/var/lib/pisi"
db_dir = "/var/db/pisi" db_dir_suffix = "/var/db/pisi"
archives_dir = "/var/cache/pisi/archives" archives_dir_suffix = "/var/cache/pisi/archives"
tmp_dir = "/var/tmp/pisi" 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
+1 -1
View File
@@ -21,7 +21,7 @@ class Fetcher:
"""Yet another Pisi tool for fetching files from various sources..""" """Yet another Pisi tool for fetching files from various sources.."""
def __init__(self, uri): def __init__(self, uri):
self.uri = uri self.uri = uri
self.filedest = config.archives_dir self.filedest = config.archives_dir()
util.check_dir(self.filedest) util.check_dir(self.filedest)
self.scheme = "file" self.scheme = "file"
self.netloc = "" self.netloc = ""
+14 -9
View File
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#import package #import package
from specfile import SpecFile from specfile import *
from package import Package from package import Package
import util import util
import ui import ui
@@ -10,23 +10,28 @@ import packagedb
import dependency import dependency
#import conflicts #import conflicts
class InstallError(Exception):
pass
def install_package_file(package_fn): def install_package_file(package_fn):
package = Package(package_fn, 'r') package = Package(package_fn, 'r')
# extract control files # extract control files
util.clean_directory(install_dir) util.clean_directory(install_dir())
ui.info.('extracting files\n') ui.info('extracting files\n')
package.extract_files(install_dir) package.extract_files(install_dir())
# verify package # verify package
# check if we have all required files # check if we have all required files
spec = PackageSpecFile() metadata = MetaData()
spec.read(install_dir + '/pspec.xml') metadata.read(install_dir() + '/metadata.xml')
# check pspec semantics # check package semantics
spec.verify() metadata.verify()
# check file system requirements # check file system requirements
# what to do if / is split into /usr, /var, etc.?
# check conflicts # check conflicts
# check dependencies # check dependencies
@@ -35,5 +40,5 @@ def install_package_file(package_fn):
# update databases # update databases
# installdb # installdb
installdb.install(spec.spec.install_dir + '/files.xml') installdb.install(spec.spec.install_dir() + '/files.xml')
+4 -3
View File
@@ -2,14 +2,15 @@
# installation database # installation database
# maintainer: eray and caglar # maintainer: eray and caglar
from config import * import config
import shelve import shelve
import util 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): class InstallDBError(Exception):
pass pass