From a54a57d5418224183c1710b2b3d18edd25906313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Mon, 14 Nov 2005 13:52:27 +0000 Subject: [PATCH] * make use of component.xml's during build * fix: component.name is string * add a summary field to component * I creep across the land --- TODO | 3 ++- pisi/build.py | 33 +++++++++++++++++++++++---------- pisi/component.py | 17 ++++++++++++++--- pisi/metadata.py | 1 + pisi/sourcearchive.py | 3 ++- 5 files changed, 42 insertions(+), 15 deletions(-) diff --git a/TODO b/TODO index 5a615bda..4f9f6633 100644 --- a/TODO +++ b/TODO @@ -92,7 +92,8 @@ Legend: / revise writing, error checking, printing and tests / components and distribution (eray) + requirements - + xml format + + xml format, add to PSPEC + + index component.xml's and make use of them in build - query components: list of components/packages in a component - install/remove components - safety switch: preserve system:base, install system:devel for build, etc. diff --git a/pisi/build.py b/pisi/build.py index b4b50762..e5bc915f 100644 --- a/pisi/build.py +++ b/pisi/build.py @@ -32,6 +32,7 @@ from pisi.files import Files, File as FileInfo from pisi.files import Files from pisi.metadata import MetaData from pisi.package import Package +import pisi.component as component class Error(pisi.Error): @@ -84,7 +85,7 @@ from pisi.specfile import SpecFile class BuildContext(object): - """Build Context Singleton""" + """Build Context""" def __init__(self, pspecfile): super(BuildContext, self).__init__() @@ -94,9 +95,6 @@ class BuildContext(object): self.pspecfile = pspecfile spec = SpecFile() spec.read(pspecfile) - # FIXME: following checks the integrity but does nothing when it is wrong - # -gurer - #spec.verify() # check pspec integrity self.spec = spec # directory accessor functions @@ -121,7 +119,7 @@ class Builder: """Provides the package build and creation routines""" def __init__(self, pspec): self.bctx = BuildContext(pspec) - self.pspecDir = os.path.dirname(os.path.realpath(self.bctx.pspecfile)) + self.pspecdir = os.path.dirname(os.path.realpath(self.bctx.pspecfile)) self.spec = self.bctx.spec self.sourceArchive = SourceArchive(self.bctx) @@ -153,7 +151,9 @@ class Builder: self.patch_exists() self.check_build_dependencies() - + + self.fetch_component() + self.fetch_source_archive() self.unpack_source_archive() @@ -190,6 +190,19 @@ class Builder: os.environ["PATH"] = "/usr/lib/ccache/bin/:" + os.environ["PATH"] ctx.ui.info(_("CCache detected...")) + def fetch_component(self): + if not self.spec.source.partOf: + parentdir = os.path.realpath(self.pspecdir + '/../') + url = util.join_path(parentdir, 'component.xml') + from pisi.fetcher import fetch_url + progress = ctx.ui.Progress + fetch_url(url, self.bctx.pkg_work_dir(), progress) + comp = component.Component() + comp.read(util.join_path(self.bctx.pkg_work_dir(), 'component.xml')) + ctx.ui.info(_('Source is part of %s component') % comp.name) + self.spec.source.partOf = comp.name + self.spec.override_tags() + def fetch_source_archive(self): ctx.ui.info(_("Fetching source from: %s") % self.spec.source.archive.uri) self.sourceArchive.fetch() @@ -295,7 +308,7 @@ class Builder: def patch_exists(self): """check existence of patch files declared in PSPEC""" - files_dir = os.path.abspath(util.join_path(self.pspecDir, + files_dir = os.path.abspath(util.join_path(self.pspecdir, ctx.const.files_dir)) for patch in self.spec.source.patches: patchFile = util.join_path(files_dir, patch.filename) @@ -303,7 +316,7 @@ class Builder: raise Error(_("Patch file is missing: %s\n") % patch.filename) def apply_patches(self): - files_dir = os.path.abspath(util.join_path(self.pspecDir, + files_dir = os.path.abspath(util.join_path(self.pspecdir, ctx.const.files_dir)) for patch in self.spec.source.patches: @@ -484,7 +497,7 @@ class Builder: for package in self.spec.packages: # store additional files c = os.getcwd() - os.chdir(self.pspecDir) + os.chdir(self.pspecdir) install_dir = self.bctx.pkg_dir() + ctx.const.install_dir_suffix tmp_aF = [] for afile in package.additionalFiles: @@ -524,7 +537,7 @@ class Builder: package_names.append(name) # add comar files to package - os.chdir(self.pspecDir) + os.chdir(self.pspecdir) for pcomar in package.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) diff --git a/pisi/component.py b/pisi/component.py index df81505a..f3f8bd93 100644 --- a/pisi/component.py +++ b/pisi/component.py @@ -36,19 +36,30 @@ class Distribution: class Component(xmlfile.XmlFile): - "part-of representation for component declarations" + "representation for component declarations" __metaclass__ = autoxml.autoxml tag = "PISI" - t_Name = [autoxml.Text, autoxml.mandatory] # fully qualified name - #t_PartOf = [autoxml.Text, autoxml.mandatory] + t_Name = [autoxml.String, autoxml.mandatory] # fully qualified name + + # component name in other languages, for instance in Turkish + # LocalName for system.base could be sistem.taban or "Taban Sistem", + # this could be useful for GUIs t_LocalName = [autoxml.LocalText, autoxml.mandatory] + + # Information about the component + t_Summary = [autoxml.LocalText, autoxml.mandatory] t_Description = [autoxml.LocalText, autoxml.mandatory] #t_Icon = [autoxml.Binary, autoxml.mandatory] + + # Dependencies to other components t_Dependencies = [ [autoxml.String], autoxml.optional, "Dependencies/Component"] + # TODO: this is probably not necessary since we use fully qualified + # module names (like in Java) + #t_PartOf = [autoxml.Text, autoxml.mandatory] #FIXME: recursive declarations do not work! #class ComponentTree(xmlfile.XmlFile): diff --git a/pisi/metadata.py b/pisi/metadata.py index f672f5b1..9712dcf3 100644 --- a/pisi/metadata.py +++ b/pisi/metadata.py @@ -71,6 +71,7 @@ class MetaData(xmlfile.XmlFile): #t_History = [ [Update], autoxml.mandatory] def from_spec(self, src, pkg): + # this just copies fields, it doesn't fix every necessary field self.source.name = src.name self.source.homepage = src.homepage self.source.packager = src.packager diff --git a/pisi/sourcearchive.py b/pisi/sourcearchive.py index 61ef5409..bf6479a9 100644 --- a/pisi/sourcearchive.py +++ b/pisi/sourcearchive.py @@ -45,7 +45,8 @@ class SourceArchive: if not self.is_cached(interactive): if interactive: progress = ctx.ui.Progress - else: progress = None + else: + progress = None fetch_url(self.url, ctx.config.archives_dir(), progress) def is_cached(self, interactive=True):