* make use of component.xml's during build
* fix: component.name is string * add a summary field to component * I creep across the land
This commit is contained in:
@@ -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.
|
||||
|
||||
+23
-10
@@ -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)
|
||||
|
||||
+14
-3
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user