From 542779626882faafd4b215ee813efe80c8cf4272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Tue, 25 Oct 2005 16:06:30 +0000 Subject: [PATCH] * uhuhuh --- pisi/specfilenew.py | 121 ++++++++++++++++++++++++++++++++++---- tests/specfilenewtests.py | 1 - 2 files changed, 108 insertions(+), 14 deletions(-) diff --git a/pisi/specfilenew.py b/pisi/specfilenew.py index 58d8b70e..4a61ca0f 100644 --- a/pisi/specfilenew.py +++ b/pisi/specfilenew.py @@ -40,7 +40,7 @@ class Packager: return s -class AdditionalFileInfo: +class AdditionalFile: s_Filename = xmlfile.mandatory a_Target = [xmlfile.String, xmlfile.mandatory] a_Permission = [xmlfile.String, xmlfile.optional] @@ -146,14 +146,9 @@ class Source: t_IsA = [ [xmlfile.String], xmlfile.mandatory] t_PartOf = [xmlfile.String, xmlfile.mandatory] t_Archive = [Archive, xmlfile.mandatory ] - t_Patch = [ [Patch], xmlfile.mandatory, "Patches/Patch"] - t_BuildDep = [ [Dependency], xmlfile.mandatory, "BuildDependencies/Dependency"] - t_History = [ [Update], xmlfile.mandatory, "History/Update"] + t_Patch = [ [Patch], xmlfile.mandatory, "Patch"] + t_BuildDep = [ [Dependency], xmlfile.mandatory, "Dependency"] -class AdditionalFile: - s_filename = [xmlfile.String, xmlfile.mandatory] - a_target = [xmlfile.String, xmlfile.mandatory] - a_permission = [xmlfile.String, xmlfile.mandatory] class Package: @@ -162,9 +157,109 @@ class Package: t_Description = [ xmlfile.String, xmlfile.mandatory ] t_IsA = [ [xmlfile.String], xmlfile.mandatory] t_PartOf = [xmlfile.String, xmlfile.mandatory] - t_History = [ [Update], xmlfile.mandatory, "History/Update"] - t_Conflicts = [ [xmlfile.String], xmlfile.mandatory, "Conflicts/Package"] - t_ProvidesComar = [ [ComarProvide], xmlfile.mandatory, "Provides/COMAR"] - t_RequriesComar = [ [xmlfile.String], xmlfile.mandatory, "Requires/COMAR"] - t_AdditionalFiles = [ [AdditionalFile], xmlfile.mandatory, "AdditionalFiles/AdditionalFile"] + t_Conflicts = [ [xmlfile.String], xmlfile.mandatory, "Package"] + t_ProvidesComar = [ [ComarProvide], xmlfile.mandatory, "COMAR"] + #t_RequriesComar = [ [xmlfile.String], xmlfile.mandatory, "Requires/COMAR"] + t_AdditionalFiles = [ [AdditionalFile], xmlfile.mandatory, "AdditionalFile"] + +class SpecFile(XmlFile): + t_Source = [ [Source], xmlfile.mandatory, "Source"] + t_Packages = [ [Package], xmlfile.mandatory, "Package"] + t_History = [ [Update], xmlfile.mandatory, "Update"] + + def read(self, filename): + """Read PSPEC file""" + + XmlFile.__init__(self,"PISI") + self.readxml(filename) + + errs = [] + self.decode(self.rootNode(), errs) + + self.merge_tags() + self.override_tags() + + #FIXME: copy only needed information + # no need to keep full history with comments in metadata.xml + self.source.history = self.history + for p in self.packages: + p.history = self.history + + self.unlink() + + + errs = self.has_errors() + if errs: + e = "" + for x in errs: + e += x + "\n" + raise XmlError(_("File '%s' has errors:\n%s") % (filename, e)) + + 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 + + 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.""" + + tmp = [] + for pkg in self.packages: + + if pkg.isa and self.source.isa: + pkg.isa.append(self.source.isa) + elif not pkg.isa and self.source.isa: + pkg.isa = self.source.isa + + tmp.append(pkg) + + self.packages = tmp + + def has_errors(self): + """Return errors of the PSPEC file if there are any.""" + #FIXME: has_errors name is misleading for a function that does + #not just return a boolean value. check() would be better - exa + err = Checks() + err.join(self.source.has_errors()) + if len(self.packages) <= 0: + errs.add(_("There should be at least one Package section")) + for p in self.packages: + err.join(p.has_errors()) + if len(self.history) <= 0: + err.add(_("Source needs some education in History :)")) + for update in self.history: + err.join(update.has_errors()) + return err.list + + def write(self, filename): + """Write PSPEC file""" + self.newDOM() + self.addChild(self.source.elt(self)) + for pkg in self.packages: + self.addChild(pkg.elt(self)) + self.writexml(filename) diff --git a/tests/specfilenewtests.py b/tests/specfilenewtests.py index 45339d5f..488d397d 100644 --- a/tests/specfilenewtests.py +++ b/tests/specfilenewtests.py @@ -21,7 +21,6 @@ class SpecFileNewTestCase(unittest.TestCase): self.spec.read("tests/popt/pspec.xml") def testReadSpec(self): - print 'GOTVEREN SENI' self.assertEqual(self.spec.source.name, "popt") self.assertEqual(self.spec.source.version, "1.7")