Beispiel #1
0
    def __add_to_revdeps(self, package, revdeps):
        metadata_xml = os.path.join(self.package_path(package),
                                    ctx.const.metadata_xml)
        meta_doc = xmlext.parse(metadata_xml)

        try:
            pkg = xmlext.getNode(meta_doc, "Package")
        except:
            pkg = None

        if pkg is None:
            # If package info is broken or not available, skip it.
            ctx.ui.warning(
                _("Installation info for package \"{}\" is broken. "
                  "Reinstall it to fix this problem.").format(package))
            del self.installed_db[package]
            return

        deps = xmlext.getNode(pkg, 'RuntimeDependencies')
        if deps:
            for dep in xmlext.getTagByName(deps, 'Dependency'):
                revdep = revdeps.setdefault(xmlext.getNodeText(dep), {})
                revdep[package] = xmlext.toString(dep)

            for anydep in xmlext.getTagByName(deps, 'AnyDependency'):
                for dep in xmlext.getTagByName(anydep, 'Dependency'):
                    revdep = revdeps.setdefault(xmlext.getNodeText(dep), {})
                    revdep[package] = xmlext.toString(anydep)
Beispiel #2
0
 def _set_i18n(tag, inst):
     try:
         for summary in xmlext.getTagByName(tag, "Summary"):
             inst.summary[xmlext.getNodeAttribute(
                 summary, "xml:lang")] = xmlext.getNodeText(summary)
         for desc in xmlext.getTagByName(tag, "Description"):
             inst.description[xmlext.getNodeAttribute(
                 desc, "xml:lang")] = xmlext.getNodeText(desc)
     except AttributeError as e:
         raise Error(
             _("translations.xml file is badly formed.: {}").format(e))
Beispiel #3
0
    def __generate_revdeps(doc):
        revdeps = {}
        for node in xmlext.getTagByName(doc, "Package"):
            name = xmlext.getNodeText(node, 'Name')
            deps = xmlext.getNode(node, 'RuntimeDependencies')
            if deps:
                for dep in xmlext.getTagByName(deps, "Dependency"):
                    revdeps.setdefault(xmlext.getNodeText(dep), set()).add(
                        (name, xmlext.toString(dep)))

        return revdeps
Beispiel #4
0
    def get_isa_packages(isa):
        repodb = inary.db.repodb.RepoDB()

        packages = set()
        for repo in repodb.list_repos():
            doc = repodb.get_repo_doc(repo)
            for package in xmlext.getTagByName(doc, "Package"):
                if xmlext.getNodeText(package, "IsA"):
                    for node in xmlext.getTagByName(package, "IsA"):
                        if xmlext.getNodeText(node) == isa:
                            packages.add(xmlext.getNodeText(package, "Name"))

        return list(packages)
Beispiel #5
0
    def __generate_revdeps(doc):
        revdeps = {}

        for spec in xmlext.getTagByName(doc, "SpecFile"):
            src = xmlext.getNode(spec, "Source")
            name = xmlext.getNodeText(src, "Name")
            deps = xmlext.getNode(src, "BuildDependencies")
            if deps:
                for dep in xmlext.getTagByName(deps, "Dependency"):
                    revdeps.setdefault(xmlext.getNodeText(dep), set()).add(
                        (name, xmlext.toString(dep)))

        return revdeps
Beispiel #6
0
    def __generate_sources(doc):
        sources = {}
        pkgstosrc = {}
        for spec in xmlext.getTagByName(doc, "SpecFile"):
            src = xmlext.getNode(spec, "Source")
            src_name = xmlext.getNodeText(src, "Name")
            compressed_data = gzip.zlib.compress(
                xmlext.toString(spec).encode('utf-8'))
            sources[src_name] = compressed_data

            for package in xmlext.getTagByName(spec, "Package"):
                pkgstosrc[xmlext.getNodeText(package, "Name")] = src_name

        return sources, pkgstosrc
Beispiel #7
0
 def __generate_replaces(doc):
     replaces = []
     packages = xmlext.getTagByName(doc, "Package")
     for node in packages:
         if xmlext.getNodeText(node, "Replaces"):
             replaces.append(xmlext.getNodeText(node, "Name"))
     return replaces
Beispiel #8
0
    def __generate_components(doc):
        components = {}
        component = xmlext.getTagByName(doc, "Component")
        for comp in component:
            name = xmlext.getNodeText(comp, "Name")
            components[name] = xmlext.toString(comp)

        return components
Beispiel #9
0
    def __generate_groups(doc):
        groups = {}
        group = xmlext.getTagByName(doc, "Group")
        for gr in group:
            name = xmlext.getNodeText(gr, "Name")
            groups[name] = xmlext.toString(gr)

        return groups
Beispiel #10
0
    def __generate_components(doc):
        groups = {}
        components = xmlext.getTagByName(doc, "Component")
        for comp in components:
            group = xmlext.getNodeText(comp, "Group")
            name = xmlext.getNodeText(comp, "Name")
            groups.setdefault(group, []).append(name)

        return groups
Beispiel #11
0
    def __generate_packages(doc):
        components = {}
        packages = xmlext.getTagByName(doc, "Package")
        for pkg in packages:
            name = xmlext.getNodeText(pkg, "Name")
            partof = xmlext.getNodeText(pkg, "PartOf")
            components.setdefault(partof, []).append(name)

        return components
Beispiel #12
0
    def __generate_packages(doc):
        pdict = {}

        for x in xmlext.getTagByName(doc, "Package"):
            name = xmlext.getNodeText(x, "Name")
            compressed_data = gzip.zlib.compress(
                xmlext.toString(x).encode('utf-8'))
            pdict[name] = compressed_data
        return pdict
Beispiel #13
0
    def __generate_sources(doc):
        pdict = {}

        for x in xmlext.getTagByName(doc, "SpecFile"):
            source = xmlext.getNode(x, "Source")
            name = xmlext.getNodeText(source, "Name")
            compressed_data = gzip.zlib.compress(
                xmlext.toString(x).encode('utf-8'))
            pdict[name] = compressed_data
        return pdict
Beispiel #14
0
    def _get_repos(self):
        repo_doc = self._get_doc()
        order = {}

        for r in xmlext.getTagByName(repo_doc, "Repo"):
            media = xmlext.getNodeText(r, "Media")
            name = xmlext.getNodeText(r, "Name")
            order.setdefault(media, []).append(name)

        return order
Beispiel #15
0
    def __generate_sources(doc):
        components = {}
        specfile = xmlext.getTagByName(doc, "SpecFile")
        for spec in specfile:
            source = xmlext.getNode(spec, "Source")
            name = xmlext.getNodeText(source, "Name")
            partof = xmlext.getNodeText(source, "PartOf")
            components.setdefault(partof, []).append(name)

        return components
Beispiel #16
0
    def __generate_obsoletes(doc):
        distribution = xmlext.getNode(doc, "Distribution")
        obsoletes = distribution and xmlext.getNode(distribution, "Obsoletes")
        src_repo = xmlext.getNode(doc, "SpecFile") is not None

        if not obsoletes or src_repo:
            return []
        return [
            xmlext.getNodeText(x)
            for x in xmlext.getTagByName(obsoletes, "Package")
        ]
Beispiel #17
0
    def get_status(self, repo_name):
        repo_doc = self._get_doc()
        for r in xmlext.getTagByName(repo_doc, "Repo"):
            if xmlext.getNodeText(r, "Name") == repo_name:
                status_node = xmlext.getNode(r, "Status")
                if status_node:
                    status = xmlext.getNodeText(status_node)
                    if status in ["active", "inactive"]:
                        return status

        return "inactive"
Beispiel #18
0
    def set_status(self, repo_name, status):
        repo_doc = self._get_doc()
        for r in xmlext.getTagByName(repo_doc, "Repo"):
            if xmlext.getNodeText(r, "Name") == repo_name:
                status_node = xmlext.getNode(r, "Status")
                if status_node:
                    xmlext.removeChild(status_node, r)
                    xmlext.addText(r, "Status", status)
                else:
                    xmlext.addText(r, "Status", status)

        self._update(repo_doc)
Beispiel #19
0
    def get_replaces(self, repo=None):
        pairs = {}

        for pkg_name in self.rpdb.get_list_item():
            xml = self.pdb.get_item(pkg_name, repo)
            package = xmlext.parseString(str(xml))
            replaces_tag = xmlext.getNode(package, "Replaces")
            if replaces_tag:
                for node in xmlext.getTagByName(replaces_tag, "Package"):
                    r = inary.data.relation.Relation()
                    # XXX Is there a better way to do this?
                    r.decode(node, [])
                    if inary.data.replace.installed_package_replaced(r):
                        pairs.setdefault(r.package, []).append(pkg_name)

        return pairs
Beispiel #20
0
    def read_translations(self, path):
        if not os.path.exists(path):
            return

        doc = xmlext.parse(path)

        if xmlext.getNodeText(xmlext.getNode(doc, "Source"),
                              "Name") == self.source.name:
            # Set source package translations
            self._set_i18n(xmlext.getNode(doc, "Source"), self.source)

        for pak in xmlext.getTagByName(doc, "Package"):
            for inst in self.packages:
                if inst.name == xmlext.getNodeText(pak, "Name"):
                    self._set_i18n(pak, inst)
                    break