This commit is contained in:
@@ -1,246 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2005, TUBITAK/UEKAE
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it under
|
||||
# the terms of the GNU General Public License as published by the Free
|
||||
# Software Foundation; either version 2 of the License, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# Please read the COPYING file.
|
||||
#
|
||||
# Authors: Eray Ozkural <eray@uludag.org.tr>
|
||||
# Baris Metin <baris@uludag.org.tr>
|
||||
|
||||
"""
|
||||
Specfile module is our handler for PSPEC files. PSPEC (PISI SPEC)
|
||||
files are specification files for PISI source packages. This module
|
||||
provides read and write routines for PSPEC files.
|
||||
"""
|
||||
|
||||
import gettext
|
||||
__trans = gettext.translation('pisi', fallback=True)
|
||||
_ = __trans.ugettext
|
||||
|
||||
# standard python modules
|
||||
from os.path import basename
|
||||
|
||||
# pisi modules
|
||||
from pisi.xmlext import *
|
||||
import pisi.xmlfile as xmlfile
|
||||
from pisi.xmlfile import XmlFile
|
||||
import pisi.context as ctx
|
||||
from pisi.dependency import DepInfo
|
||||
from pisi.util import Checks
|
||||
|
||||
class Error(pisi.Error):
|
||||
pass
|
||||
|
||||
__metaclass__ = xmlfile.autoxml
|
||||
|
||||
class Packager:
|
||||
|
||||
t_Name = [xmlfile.Text, xmlfile.mandatory]
|
||||
t_Email = [xmlfile.String, xmlfile.mandatory]
|
||||
def __str__(self):
|
||||
s = "%s <%s>" % (self.name, self.email)
|
||||
return s
|
||||
|
||||
|
||||
class AdditionalFile:
|
||||
|
||||
s_Filename = [xmlfile.String, xmlfile.mandatory]
|
||||
a_Target = [xmlfile.String, xmlfile.mandatory]
|
||||
a_Permission = [xmlfile.String, xmlfile.optional]
|
||||
|
||||
def __str__(self):
|
||||
s = "%s -> %s " % (self.filename, self.target)
|
||||
if self.permission:
|
||||
s += '(%s)' % self.permission
|
||||
return s
|
||||
|
||||
|
||||
class Patch:
|
||||
|
||||
s_Filename = [xmlfile.String, xmlfile.mandatory]
|
||||
a_compressionType = [xmlfile.String, xmlfile.optional]
|
||||
a_level = [xmlfile.String, xmlfile.optional]
|
||||
a_target = [xmlfile.String, xmlfile.optional]
|
||||
|
||||
def __str__(self):
|
||||
s = self.filename
|
||||
if self.compressionType:
|
||||
s += ' (' + self.compressionType + ')'
|
||||
if self.level:
|
||||
s += ' level:' + self.level
|
||||
if self.target:
|
||||
s += ' target:' + self.target
|
||||
return s
|
||||
|
||||
|
||||
class Update:
|
||||
|
||||
a_release = [xmlfile.String, xmlfile.mandatory]
|
||||
t_Date = [xmlfile.String, xmlfile.mandatory]
|
||||
t_Version = [xmlfile.String, xmlfile.mandatory]
|
||||
t_Type = [xmlfile.String, xmlfile.optional]
|
||||
|
||||
def __str__(self):
|
||||
s = self.date
|
||||
s += ", ver=" + self.version
|
||||
s += ", rel=" + self.release
|
||||
if self.type:
|
||||
s += ", type=" + self.type
|
||||
return s
|
||||
|
||||
|
||||
class Path:
|
||||
|
||||
s_Path = [xmlfile.String, xmlfile.mandatory]
|
||||
a_fileType = [xmlfile.String, xmlfile.optional]
|
||||
|
||||
def __str__(self):
|
||||
s = self.path
|
||||
s += ", type=" + self.fileType
|
||||
return s
|
||||
|
||||
class Dependency:
|
||||
|
||||
s_Package = [xmlfile.String, xmlfile.mandatory]
|
||||
a_versionFrom = [xmlfile.String, xmlfile.optional]
|
||||
a_versionTo = [xmlfile.String, xmlfile.optional]
|
||||
a_releaseFrom = [xmlfile.String, xmlfile.optional]
|
||||
a_releaseTo = [xmlfile.String, xmlfile.optional]
|
||||
|
||||
def __str__(self):
|
||||
s = self.package
|
||||
if self.versionFrom:
|
||||
s += 'ver >= ' + self.versionFrom
|
||||
if self.versionTo:
|
||||
s += 'ver <= ' + self.versionTo
|
||||
if self.releaseFrom:
|
||||
s += 'rel >= ' + self.releaseFrom
|
||||
if self.releaseTo:
|
||||
s += 'rel <= ' + self.releaseTo
|
||||
return s
|
||||
|
||||
class ComarProvide:
|
||||
|
||||
s_om = [xmlfile.String, xmlfile.mandatory]
|
||||
a_script = [xmlfile.String, xmlfile.mandatory]
|
||||
|
||||
def __str__(self):
|
||||
# FIXME: descriptive enough?
|
||||
s = self.script
|
||||
s += ' (' + self.om + ')'
|
||||
return s
|
||||
|
||||
|
||||
class Archive:
|
||||
|
||||
s_uri = [ xmlfile.String, xmlfile.mandatory ]
|
||||
a_type =[ xmlfile.String, xmlfile.mandatory ]
|
||||
a_sha1sum =[ xmlfile.String, xmlfile.mandatory ]
|
||||
|
||||
def decode_post(self):
|
||||
self.name = basename(self.uri)
|
||||
|
||||
|
||||
class Source:
|
||||
|
||||
t_Name = [xmlfile.String, xmlfile.mandatory]
|
||||
t_Homepage = [xmlfile.String, xmlfile.mandatory]
|
||||
t_Packager = [Packager, xmlfile.mandatory]
|
||||
t_Summary = [xmlfile.String, xmlfile.mandatory]
|
||||
t_Description = [xmlfile.String, xmlfile.mandatory]
|
||||
t_IsA = [ [xmlfile.String], xmlfile.mandatory]
|
||||
t_PartOf = [xmlfile.String, xmlfile.mandatory]
|
||||
t_Icon = [ xmlfile.String, xmlfile.optional]
|
||||
t_License = [ [xmlfile.String], xmlfile.mandatory]
|
||||
t_Archive = [Archive, xmlfile.mandatory ]
|
||||
t_Patches = [ [Patch], xmlfile.optional]
|
||||
t_BuildDependencies = [ [Dependency], xmlfile.optional]
|
||||
t_Version = [ xmlfile.String, xmlfile.optional]
|
||||
t_Release = [ xmlfile.String, xmlfile.optional]
|
||||
|
||||
|
||||
class Package:
|
||||
|
||||
t_Name = [ xmlfile.String, xmlfile.mandatory ]
|
||||
t_Summary = [ xmlfile.String, xmlfile.mandatory ]
|
||||
t_Description = [ xmlfile.String, xmlfile.mandatory ]
|
||||
t_IsA = [ [xmlfile.String], xmlfile.optional]
|
||||
t_PartOf = [xmlfile.String, xmlfile.optional]
|
||||
t_License = [ [xmlfile.String], xmlfile.optional]
|
||||
t_Icon = [ xmlfile.String, xmlfile.optional]
|
||||
t_RuntimeDependencies = [ [Dependency], xmlfile.optional]
|
||||
t_Files = [ [Path], xmlfile.optional]
|
||||
t_Conflicts = [ [xmlfile.String], xmlfile.optional, "Conflicts/Package"]
|
||||
t_ProvidesComar = [ [ComarProvide], xmlfile.optional, "Provides/COMAR"]
|
||||
#t_RequiresComar = [ [xmlfile.String], xmlfile.mandatory, "Requires/COMAR"]
|
||||
t_AdditionalFiles = [ [AdditionalFile], xmlfile.optional]
|
||||
t_History = [ [Update], xmlfile.optional]
|
||||
|
||||
|
||||
class SpecFile(XmlFile):
|
||||
__metaclass__ = xmlfile.autoxml #needed when we specify a superclass
|
||||
|
||||
tag = "PISI"
|
||||
|
||||
t_Source = [ Source, xmlfile.mandatory]
|
||||
t_Packages = [ [Package], xmlfile.mandatory, "Package"]
|
||||
t_History = [ [Update], xmlfile.mandatory]
|
||||
|
||||
#we're not doing this with the init hook right now
|
||||
#def init(self, tag = "PISI"):
|
||||
#ignore tag
|
||||
#XmlFile.__init__(self, tag)
|
||||
|
||||
def read_hook(self, errs):
|
||||
"""Read PSPEC file"""
|
||||
self.merge_tags()
|
||||
self.override_tags()
|
||||
|
||||
def merge_tags(self):
|
||||
"""Merge tags from Source in Packages. Some tags in Packages merged
|
||||
with the tags from Source. There is a more detailed
|
||||
description in documents."""
|
||||
|
||||
# FIXME: copy only needed information
|
||||
# no need to keep full history with comments in metadata.xml
|
||||
self.source.history = self.history
|
||||
|
||||
# To avoid tag duplication in PSPEC we need to get
|
||||
# the last version and release information
|
||||
# from the most recent History/Update.
|
||||
if not self.source.version:
|
||||
self.source.version = self.history[0].version
|
||||
if not self.source.release:
|
||||
self.source.release = self.history[0].release
|
||||
|
||||
tmp = []
|
||||
for pkg in self.packages:
|
||||
pkg.isA.extend(self.source.isA)
|
||||
pkg.history = self.history
|
||||
tmp.append(pkg)
|
||||
self.packages = tmp
|
||||
|
||||
def override_tags(self):
|
||||
"""Override tags from Source in Packages. Some tags in Packages
|
||||
overrides the tags from Source. There is a more detailed
|
||||
description in documents."""
|
||||
|
||||
tmp = []
|
||||
for pkg in self.packages:
|
||||
if not pkg.summary:
|
||||
pkg.summary = self.source.summary
|
||||
if not pkg.description:
|
||||
pkg.description = self.source.description
|
||||
if not pkg.partOf:
|
||||
pkg.partOf = self.source.partOf
|
||||
if not pkg.license:
|
||||
pkg.license = self.source.license
|
||||
if not pkg.icon:
|
||||
pkg.icon = self.source.icon
|
||||
tmp.append(pkg)
|
||||
self.packages = tmp
|
||||
Reference in New Issue
Block a user