From 7dbfacabd3c2a1fd450b44232478b9c202c95115 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Metin?= Date: Fri, 29 Jul 2005 02:17:51 +0000 Subject: [PATCH] =?UTF-8?q?=C3=87a=C4=9Flar'=C4=B1n=20istedi=C4=9Fi=20par?= =?UTF-8?q?=C3=A7al=C4=B1=20paket=20olu=C5=9Fturma.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit İki yeni komut eklendi... build-unpack: gerekiyorsa tüm dosyaları ve source archive'i fetch eder, yamaları da uygulayarak kaynağı açar. build-runactions: fetch + unpack + actions.py içerisindeki fonksiyonların çalıştırılması. build: eskiden olduğu gibi tümü ile paketi oluşturur. Çağlar, işlevleri daha fazla bölmemi istersen söyle. Hatırladığım kadarı ile bu kadarını istiyordun diye böyle yaptım... --- pisi/build.py | 66 ++++++++++++++++++++++++++------------------ pisi/cli/commands.py | 47 ++++++++++++++++++++++++++++++- pisi/cli/common.py | 2 ++ pisi/toplevel.py | 24 +++++++++++++++- 4 files changed, 110 insertions(+), 29 deletions(-) diff --git a/pisi/build.py b/pisi/build.py index 9ab22541..cbcb6fac 100644 --- a/pisi/build.py +++ b/pisi/build.py @@ -74,45 +74,27 @@ class PisiBuild: self.actionGlobals = None self.srcDir = None - def build(self): - """Build the package in one shot.""" if not self.spec.verify(): ui.error("PSPEC file is not valid") raise PisiBuildError, "invalid PSPEC file %s" % self.ctx.pspecfile + def build(self): + """Build the package in one shot.""" + ui.info("Building PISI source package: %s\n" % self.spec.source.name) - ui.info("Fetching source from: %s\n" % self.spec.source.archiveUri) - self.sourceArchive.fetch() - ui.info("Source archive is stored: %s/%s\n" - %(self.ctx.archives_dir(), self.spec.source.archiveName)) - - self.solveBuildDependencies() + self.fetchSourceArchive() - ui.info("Unpacking archive...") - self.sourceArchive.unpack() - ui.info(" unpacked (%s)\n" % self.ctx.pkg_work_dir()) + self.unpackSourceArchive() self.compileActionScript() - self.srcDir = self.pkgSrcDir() + self.solveBuildDependencies() + + # apply the patches and prepare a source directory for build. self.applyPatches() - # we'll need our working directory after actionscript - # finished its work in the archive source directory. - curDir = os.getcwd() - os.chdir(self.srcDir) - - # Run configure, build and install phase - ui.action("Setting up source...\n") - self.runActionFunction(const.setup_func) - ui.action("Building source...\n") - self.runActionFunction(const.build_func) - ui.action("Intalling...\n") - # install function is mandatory! - self.runActionFunction(const.install_func, True) - - os.chdir(curDir) + self.runActions() # after all, we are ready to build/prepare the packages self.buildPackages() @@ -129,6 +111,35 @@ class PisiBuild: } os.environ.update(evn) + def fetchSourceArchive(self): + ui.info("Fetching source from: %s\n" % self.spec.source.archiveUri) + self.sourceArchive.fetch() + ui.info("Source archive is stored: %s/%s\n" + %(self.ctx.archives_dir(), self.spec.source.archiveName)) + + + def unpackSourceArchive(self): + ui.info("Unpacking archive...") + self.sourceArchive.unpack() + ui.info(" unpacked (%s)\n" % self.ctx.pkg_work_dir()) + + def runActions(self): + # we'll need our working directory after actionscript + # finished its work in the archive source directory. + curDir = os.getcwd() + os.chdir(self.srcDir) + + # Run configure, build and install phase + ui.action("Setting up source...\n") + self.runActionFunction(const.setup_func) + ui.action("Building source...\n") + self.runActionFunction(const.build_func) + ui.action("Intalling...\n") + # install function is mandatory! + self.runActionFunction(const.install_func, True) + + os.chdir(curDir) + def compileActionScript(self): """Compiles actions.py and sets the actionLocals and actionGlobals""" specdir = os.path.dirname(self.ctx.pspecfile) @@ -146,6 +157,7 @@ class PisiBuild: self.actionLocals = localSymbols self.actionGlobals = globalSymbols + self.srcDir = self.pkgSrcDir() def pkgSrcDir(self): """Returns the real path of WorkDir for an unpacked archive.""" diff --git a/pisi/cli/commands.py b/pisi/cli/commands.py index bda20463..579ec441 100644 --- a/pisi/cli/commands.py +++ b/pisi/cli/commands.py @@ -12,6 +12,8 @@ import pisi.toplevel def cmdObject(cmd, fail=False): commands = {"help": Help, "build": Build, + "build-unpack": BuildUnpack, + "build-runactions": BuildRunActions, "info": Info, "install": Install, "list-installed": ListInstalled, @@ -368,4 +370,47 @@ TODO: Some description... """ pass - + +# Partial build commands + +class BuildUnpack(Command): + """Unpack source using a pspec.xml file + + Usage: + build-unpack pspec.xml + +You can give an URI of the pspec.xml file. PISI will fetch all +necessary files and unpack the source and prepare a source directory +for you. +""" + def __init__(self): + super(BuildUnpack, self).__init__() + + def run(self): + if not self.args: + self.help() + return + + for arg in self.args: + pisi.toplevel.build_unpack(arg, self.authInfo) + +class BuildRunActions(Command): + """Unpack source using a pspec.xml file + + Usage: + build-runactions pspec.xml + +You can give an URI of the pspec.xml file. PISI will fetch all +necessary files and unpack the source, prepare a source directory and +run the functions in actions.py. +""" + def __init__(self): + super(BuildRunActions, self).__init__() + + def run(self): + if not self.args: + self.help() + return + + for arg in self.args: + pisi.toplevel.build_runactions(arg, self.authInfo) diff --git a/pisi/cli/common.py b/pisi/cli/common.py index 308b96f9..7752837a 100644 --- a/pisi/cli/common.py +++ b/pisi/cli/common.py @@ -4,6 +4,8 @@ where is one of: help build +build-unpack +build-runactions index info install diff --git a/pisi/toplevel.py b/pisi/toplevel.py index 305bfade..f9d55a02 100644 --- a/pisi/toplevel.py +++ b/pisi/toplevel.py @@ -131,7 +131,8 @@ def update_repo(repo): ui.info('* Package db updated.\n') -def build(pspecfile, authInfo=None): +# build functions... +def prepare_for_build(pspecfile, authInfo=None): from build import PisiBuild url = PUrl(pspecfile) @@ -141,5 +142,26 @@ def build(pspecfile, authInfo=None): url.uri = fs.fetch_all() pb = PisiBuild(url.uri) + return pb + +def build_unpack(pspecfile, authInfo=None): + pb = prepare_for_build(pspecfile, authInfo) + pb.fetchSourceArchive() + pb.unpackSourceArchive() + pb.compileActionScript() + pb.applyPatches() + +def build_runactions(pspecfile, authInfo=None): + pb = prepare_for_build(pspecfile, authInfo) + pb.fetchSourceArchive() + pb.unpackSourceArchive() + pb.compileActionScript() + pb.applyPatches() + pb.runActions() + +def build(pspecfile, authInfo=None): + pb = prepare_for_build(pspecfile, authInfo) pb.build() + +