diff --git a/pisi/specfile.py b/pisi/specfile.py index 41982fa9..98ae1d64 100644 --- a/pisi/specfile.py +++ b/pisi/specfile.py @@ -89,6 +89,7 @@ class SourceInfo: self.name = getNodeText(node, "Name") self.homepage = getNodeText(node, "HomePage") self.packager = PackagerInfo(getNode(node, "Packager")) + self.summary = getNodeText(node, "Summary") self.description = getNodeText(node, "Description") self.license = map(getNodeText, getAllNodes(node, "License")) self.isa = map(getNodeText, getAllNodes(node, "IsA")) @@ -144,7 +145,7 @@ class PackageInfo(object): self.name = getNodeText(node, "Name") self.summary = getNodeText(node, "Summary") self.description = getNodeText(node, "Description") - self.isa = getNodeText(node, "IsA") + self.isa = map(getNodeText, getAllNodes(node, "IsA")) self.partof = getNodeText(node, "PartOf") self.license = getNodeText(node, "License") iDepElts = getAllNodes(node, "InstallDependencies/Dependency") @@ -160,8 +161,8 @@ class PackageInfo(object): xml.addTextNodeUnder(node, "Name", self.name) xml.addTextNodeUnder(node, "Summary", self.summary) xml.addTextNodeUnder(node, "Description", self.description) - if self.isa: - xml.addTextNodeUnder(node, "IsA", self.isa) + for isa in self.isa: + xml.addTextNodeUnder(node, "IsA", isa) if self.partof: xml.addTextNodeUnder(node, "PartOf", self.partof) for dep in self.installDeps: @@ -204,7 +205,40 @@ class SpecFile(XmlFile): packageElts = self.getAllNodes("Package") self.packages = [PackageInfo(p) for p in packageElts] + self.doMerges() + self.doOverrides() + self.unlink() + + def doOverrides(self): + """Override tags from Source in Packages. Some tags in Packages + overrides the tags from Source. There is a more detailed + description in documents.""" + + for pkg in self.packages: + + if not pkg.partof: + pkg.paftof = self.source.partof + + if not pkg.license: + pkg.licence = self.source.partof + + def doMerges(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.""" + + 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.isa: + pkg.isa = self.source.isa + def verify(self): """Verify PSPEC structures, are they what we want of them?""" diff --git a/tests/specfiletests.py b/tests/specfiletests.py index fc77da83..512cba62 100644 --- a/tests/specfiletests.py +++ b/tests/specfiletests.py @@ -38,6 +38,29 @@ class SpecFileTestCase(unittest.TestCase): if not matched: self.fail("Failed to match pathname: %s" %pn) + def testIsAPartOf(self): + # test existence in Source + if not "library:util:optparser" in self.spec.source.isa: + self.fail("Failed to match isA in Source") + if not isinstance(self.spec.source.isa, list): + self.fail("source.isa is not a list, but it must be...") + + if "rpm:archive" != self.spec.source.partof: + self.fail("Failed to match PartOf in Source") + + # test existence in Package + pkg = self.spec.packages[0] + if not "library:util:optparser" in pkg.isa: + self.fail("Failed to match isA....") + if not isinstance(pkg.isa, list): + self.fail("source.isa is not a list, but it must be...") + + print pkg.partof + if "rpm:archive" != pkg.partof: + self.fail("Failed to match PartOf") + + + def testCopy(self): util.check_dir(config.tmp_dir()) self.spec.read("samples/popt/popt.pspec")