* 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:
+2
-17
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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')
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user